{"record":{"id":"35802f464907d7e1","repo":"pentaho/pentaho-kettle","slug":"transsaveprogressdialog-exception-errorsavingtransformation","errorCode":"TransSaveProgressDialog.Exception.ErrorSavingTransformation","errorMessage":"TransSaveProgressDialog.Exception.ErrorSavingTransformation","messagePattern":"TransSaveProgressDialog\\.Exception\\.ErrorSavingTransformation","errorType":"exception","errorClass":"InvocationTargetException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/spoon/dialog/SaveProgressDialog.java","lineNumber":65,"sourceCode":"  /**\n   * Creates a new dialog that will handle the wait while saving a transformation...\n   */\n  public SaveProgressDialog( Shell shell, Repository rep, EngineMetaInterface meta, String versionComment ) {\n    this.shell = shell;\n    this.rep = rep;\n    this.meta = meta;\n    this.versionComment = versionComment;\n  }\n\n  public boolean open() {\n    boolean retval = true;\n\n    IRunnableWithProgress op = new IRunnableWithProgress() {\n      public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException {\n        try {\n          rep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );\n        } catch ( KettleException e ) {\n          throw new InvocationTargetException( e, BaseMessages.getString(\n            PKG, \"TransSaveProgressDialog.Exception.ErrorSavingTransformation\" )\n            + e.toString() );\n        }\n      }\n    };\n\n    try {\n      ProgressMonitorDialog pmd = new ProgressMonitorDialog( shell );\n      pmd.run( true, true, op );\n    } catch ( InvocationTargetException e ) {\n      MessageDialog errorDialog =\n        new MessageDialog( shell, BaseMessages.getString( PKG, \"TransSaveProgressDialog.UnableToSave.DialogTitle\" ), null,\n          BaseMessages.getString( PKG, \"TransSaveProgressDialog.UnableToSave.DialogMessage\" ), MessageDialog.ERROR,\n          new String[] { BaseMessages.getString( PKG, \"TransSaveProgressDialog.UnableToSave.Close\" ) }, 0 );\n      errorDialog.open();\n      retval = false;\n    } catch ( InterruptedException e ) {\n      new ErrorDialog( shell,","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/spoon/dialog/SaveProgressDialog.java#L47-L83","documentation":"SaveProgressDialog.run wraps rep.save(...) failures in an InvocationTargetException whose message is the localized string 'TransSaveProgressDialog.Exception.ErrorSavingTransformation' plus the KettleException's toString. It is the UI progress-dialog surface for any repository-level failure while saving a transformation.","triggerScenarios":"Pressing OK on the save progress dialog when rep.save(meta, versionComment, monitor) throws KettleException — e.g. repository connection lost, repository write permission denied, version comment requirements unmet, or the transformation violates repository constraints.","commonSituations":"Database metadata repository is down or the network dropped mid-save; the user lacks write rights in the target repository directory; an object with the same name/version conflict exists; VFS/IO problems storing the transformation XML.","solutions":["Read the appended KettleException text for the root cause (connection, permissions, or validation) and fix that first.","Test the repository connection (repository connect/test) and re-login if the session expired.","Verify write permissions on the target repository directory, or save to a different directory.","If the repository is unavailable, save the transformation locally as a .ktr file instead."],"exampleFix":"// before\nrep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );\n// after: guard connection before save\nif ( rep != null && rep.isConnected() ) {\n  rep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );\n} else {\n  throw new KettleException( \"Repository is not connected\" );\n}","handlingStrategy":"try-catch","validationCode":"if ( rep == null || !rep.isConnected() ) {\n  throw new KettleException( \"Repository is not connected\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  rep.save( meta, versionComment, monitor );\n} catch ( KettleException e ) {\n  log.logError( \"Error saving transformation\", e );\n  // surface e.toString() to the user to expose the root cause\n}","preventionTips":["Check repository connectivity before starting long save operations.","Ensure the user has write permission in the target repository directory.","Provide a version comment when the repository requires one."],"tags":["repository","save","pentaho-kettle","transformation"],"backgroundTag":"transformation-save-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}