Skip to content

Commit

Permalink
[BACKLOG-10562] Fix calls to extension points (#2897)
Browse files Browse the repository at this point in the history
* [BACKLOG-10562] Call *BeforeSave/*AfterSave extension points on save

* [BACKLOG-10562] Call *BeforeClose/*AfterClose extension points on tab close
  • Loading branch information
nantunes authored and mdamour1976 committed Aug 31, 2016
1 parent d7bc730 commit 0ddde3d
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 42 deletions.
18 changes: 17 additions & 1 deletion ui/src/org/pentaho/di/ui/spoon/JobFileListener.java
Expand Up @@ -151,7 +151,23 @@ public boolean save( EngineMetaInterface meta, String fname, boolean export ) {
lmeta = meta;
}

return spoon.saveMeta( lmeta, fname );
try {
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.JobBeforeSave.id, lmeta );
} catch ( KettleException e ) {
// fails gracefully
}

boolean saveStatus = spoon.saveMeta( lmeta, fname );

if ( saveStatus ) {
try {
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.JobAfterSave.id, lmeta );
} catch ( KettleException e ) {
// fails gracefully
}
}

return saveStatus;
}

public void syncMetaName( EngineMetaInterface meta, String name ) {
Expand Down
28 changes: 0 additions & 28 deletions ui/src/org/pentaho/di/ui/spoon/Spoon.java
Expand Up @@ -1031,36 +1031,8 @@ public boolean closeFile( boolean force ) {
boolean closed = true;
EngineMetaInterface meta = getActiveMeta();
if ( meta != null ) {

String beforeCloseId = null;
String afterCloseId = null;

if ( meta instanceof TransMeta ) {
beforeCloseId = KettleExtensionPoint.TransBeforeClose.id;
afterCloseId = KettleExtensionPoint.TransAfterClose.id;
} else if ( meta instanceof JobMeta ) {
beforeCloseId = KettleExtensionPoint.JobBeforeClose.id;
afterCloseId = KettleExtensionPoint.JobAfterClose.id;
}

if ( beforeCloseId != null ) {
try {
ExtensionPointHandler.callExtensionPoint( log, beforeCloseId, meta );
} catch ( KettleException e ) {
// fails gracefully but perhaps should return false?
}
}

// If a transformation or job is the current active tab, close it
closed = tabCloseSelected( force );

if ( closed && ( afterCloseId != null ) ) {
try {
ExtensionPointHandler.callExtensionPoint( log, afterCloseId, meta );
} catch ( KettleException e ) {
// fails gracefully but perhaps should return false?
}
}
}

return closed;
Expand Down
4 changes: 2 additions & 2 deletions ui/src/org/pentaho/di/ui/spoon/TransFileListener.java
Expand Up @@ -184,7 +184,7 @@ public boolean save( EngineMetaInterface meta, String fname, boolean export ) {
}

try {
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.TransBeforeClose.id, lmeta );
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.TransBeforeSave.id, lmeta );
} catch ( KettleException e ) {
// fails gracefully
}
Expand All @@ -193,7 +193,7 @@ public boolean save( EngineMetaInterface meta, String fname, boolean export ) {

if ( saveStatus ) {
try {
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.TransAfterClose.id, lmeta );
ExtensionPointHandler.callExtensionPoint( spoon.getLog(), KettleExtensionPoint.TransAfterSave.id, lmeta );
} catch ( KettleException e ) {
// fails gracefully
}
Expand Down
55 changes: 44 additions & 11 deletions ui/src/org/pentaho/di/ui/spoon/delegates/SpoonTabsDelegate.java
Expand Up @@ -38,6 +38,8 @@
import org.pentaho.di.core.EngineMetaInterface;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleFileException;
import org.pentaho.di.core.extension.ExtensionPointHandler;
import org.pentaho.di.core.extension.KettleExtensionPoint;
import org.pentaho.di.core.gui.SpoonInterface;
import org.pentaho.di.core.vfs.KettleVFS;
import org.pentaho.di.i18n.BaseMessages;
Expand Down Expand Up @@ -90,12 +92,15 @@ public boolean tabClose( TabItem item, boolean force ) throws KettleException {
boolean canSave = true;
for ( TabMapEntry entry : collection ) {
if ( item.equals( entry.getTabItem() ) ) {
final TabItemInterface itemInterface = entry.getObject();
final Object managedObject = itemInterface.getManagedObject();

if ( !force ) {
TabItemInterface itemInterface = entry.getObject();
if ( itemInterface.getManagedObject() != null
&& AbstractMeta.class.isAssignableFrom( itemInterface.getManagedObject().getClass() ) ) {
canSave = !( (AbstractMeta) itemInterface.getManagedObject() ).hasMissingPlugins();
if ( managedObject != null
&& AbstractMeta.class.isAssignableFrom( managedObject.getClass() ) ) {
canSave = !( (AbstractMeta) managedObject ).hasMissingPlugins();
}

if ( canSave ) {
// Can we close this tab? Only allow users with create content perms to save
if ( !itemInterface.canBeClosed() && createPerms ) {
Expand All @@ -113,29 +118,57 @@ public boolean tabClose( TabItem item, boolean force ) throws KettleException {
}
}

String beforeCloseId = null;
String afterCloseId = null;

if ( itemInterface instanceof TransGraph ) {
beforeCloseId = KettleExtensionPoint.TransBeforeClose.id;
afterCloseId = KettleExtensionPoint.TransAfterClose.id;
} else if ( itemInterface instanceof JobGraph ) {
beforeCloseId = KettleExtensionPoint.JobBeforeClose.id;
afterCloseId = KettleExtensionPoint.JobAfterClose.id;
}

if ( beforeCloseId != null ) {
try {
ExtensionPointHandler.callExtensionPoint( log, beforeCloseId, managedObject );
} catch ( KettleException e ) {
// prevent tab close
close = false;
}
}

// Also clean up the log/history associated with this
// transformation/job
//
if ( close ) {
if ( entry.getObject() instanceof TransGraph ) {
TransMeta transMeta = (TransMeta) entry.getObject().getManagedObject();
if ( itemInterface instanceof TransGraph ) {
TransMeta transMeta = (TransMeta) managedObject;
spoon.delegates.trans.closeTransformation( transMeta );
spoon.refreshTree();
// spoon.refreshCoreObjects();
} else if ( entry.getObject() instanceof JobGraph ) {
JobMeta jobMeta = (JobMeta) entry.getObject().getManagedObject();
} else if ( itemInterface instanceof JobGraph ) {
JobMeta jobMeta = (JobMeta) managedObject;
spoon.delegates.jobs.closeJob( jobMeta );
spoon.refreshTree();
// spoon.refreshCoreObjects();
} else if ( entry.getObject() instanceof SpoonBrowser ) {
} else if ( itemInterface instanceof SpoonBrowser ) {
this.removeTab( entry );
spoon.refreshTree();
} else if ( entry.getObject() instanceof Composite ) {
Composite comp = (Composite) entry.getObject();
} else if ( itemInterface instanceof Composite ) {
Composite comp = (Composite) itemInterface;
if ( comp != null && !comp.isDisposed() ) {
comp.dispose();
}
}

if ( afterCloseId != null ) {
try {
ExtensionPointHandler.callExtensionPoint( log, afterCloseId, managedObject );
} catch ( KettleException e ) {
// fails gracefully... what else could we do?
}
}
}

break;
Expand Down

0 comments on commit 0ddde3d

Please sign in to comment.