From 1654335d80f1fa432e7034f7bb2ae40ae120e19d Mon Sep 17 00:00:00 2001 From: Jon Cox Date: Sat, 3 Feb 2007 04:33:03 +0000 Subject: [PATCH] Point checkin. Support for notification to virt server on dialog-driven revert operations. No support yet for workflow-diriven revert notification (coming soon). Details ------- root/projects/catalina-virtual/source/java/org/alfresco/catalina/host/AVMHostConfig.java Minor logging cleanup root/projects/core/source/java/org/alfresco/util/VirtServerUtils.java Trigger notification on submits of entire dirs: WEB-INF, WEB-INF/classes, WEB-INF/lib (not just files within them) root/projects/web-client/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java notify virt server on revert root/projects/web-client/source/java/org/alfresco/web/bean/wcm/RevertAllDialog.java notify virt server on revert all root/projects/web-client/source/java/org/alfresco/web/bean/wcm/RevertSelectedDialog.java notify virt server on revert selected root/projects/web-client/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java minor cleanup root/projects/web-client/source/web/WEB-INF/faces-config-beans.xml Injecting AVMSyncService into AVMBrowseBean to allow virt server notification to occur only when a comparison between reverted versions shows it's absolutely necessary git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5030 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/web/bean/wcm/AVMBrowseBean.java | 41 +++++++++++++++++++ .../web/bean/wcm/RevertAllDialog.java | 39 +++++++++++++++++- .../web/bean/wcm/RevertSelectedDialog.java | 40 +++++++++++++++++- .../alfresco/web/bean/wcm/SubmitDialog.java | 18 +++----- source/web/WEB-INF/faces-config-beans.xml | 4 ++ 5 files changed, 126 insertions(+), 16 deletions(-) diff --git a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java index 8cae2efddb..3fa96196c7 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java @@ -41,6 +41,8 @@ import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMService; +import org.alfresco.service.cmr.avmsync.AVMDifference; +import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.service.cmr.avm.AVMStoreDescriptor; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.workflow.WorkflowService; @@ -70,6 +72,8 @@ import org.alfresco.web.ui.wcm.component.UIUserSandboxes; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.alfresco.util.VirtServerUtils; + /** * Bean backing up the AVM specific browse screens * @@ -155,6 +159,9 @@ public class AVMBrowseBean implements IContextListener /** AVM service bean reference */ protected AVMService avmService; + + /** AVM sync service bean reference */ + protected AVMSyncService avmSyncService; /** Action service bean reference */ protected ActionService actionService; @@ -178,6 +185,14 @@ public class AVMBrowseBean implements IContextListener { this.avmService = avmService; } + + /** + * @param avmSyncService The AVMSyncService to set. + */ + public void setAvmSyncService(AVMSyncService avmSyncService) + { + this.avmSyncService = avmSyncService; + } /** * @param nodeService The NodeService to set. @@ -873,6 +888,14 @@ public class AVMBrowseBean implements IContextListener // commit the transaction tx.commit(); + + // possibly update webapp after commit + + if ( VirtServerUtils.requiresUpdateNotification( path ) ) + { + AVMConstants.updateVServerWebapp(path, true); + } + // if we get here, all was well - output friendly status message to the user String msg = MessageFormat.format(Application.getMessage( @@ -905,6 +928,12 @@ public class AVMBrowseBean implements IContextListener FacesContext context = FacesContext.getCurrentInstance(); tx = Repository.getUserTransaction(context, false); tx.begin(); + + String sandboxPath = AVMConstants.buildSandboxRootPath( sandbox ); + + List diffs = + this.avmSyncService.compare( + -1,sandboxPath,Integer.valueOf(strVersion),sandboxPath,null); Map args = new HashMap(1, 1.0f); args.put(AVMRevertStoreAction.PARAM_VERSION, Integer.valueOf(strVersion)); @@ -913,6 +942,18 @@ public class AVMBrowseBean implements IContextListener // commit the transaction tx.commit(); + + // See if any of the files being reverted require + // notification of the virt server. + + for (AVMDifference diff : diffs) + { + if ( VirtServerUtils.requiresUpdateNotification( diff.getSourcePath()) ) + { + AVMConstants.updateVServerWebapp(diff.getSourcePath() , true); + break; + } + } // if we get here, all was well - output friendly status message to the user String msg = MessageFormat.format(Application.getMessage( diff --git a/source/java/org/alfresco/web/bean/wcm/RevertAllDialog.java b/source/java/org/alfresco/web/bean/wcm/RevertAllDialog.java index bffa4b6f4d..b02281fbb1 100644 --- a/source/java/org/alfresco/web/bean/wcm/RevertAllDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/RevertAllDialog.java @@ -26,8 +26,8 @@ import java.util.Map; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; -import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.repo.avm.actions.AVMUndoSandboxListAction; +import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; @@ -36,6 +36,7 @@ import org.alfresco.service.cmr.avmsync.AVMDifference; import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.util.NameMatcher; import org.alfresco.util.Pair; +import org.alfresco.util.VirtServerUtils; import org.alfresco.web.app.Application; import org.alfresco.web.bean.dialog.BaseDialogBean; @@ -52,6 +53,13 @@ public class RevertAllDialog extends BaseDialogBean protected AVMSyncService avmSyncService; protected ActionService actionService; protected NameMatcher nameMatcher; + + // The virtualization server might need to be notified + // because one or more of the files reverted could alter + // the behavior the virtual webapp in the target of the submit. + + private String virtUpdatePath; + /** * @param avmBrowseBean The AVM BrowseBean to set @@ -99,11 +107,22 @@ public class RevertAllDialog extends BaseDialogBean // calcluate the list of differences between the user store and the staging area List diffs = this.avmSyncService.compare( -1, userStore, -1, stagingStore, this.nameMatcher); + List> versionPaths = new ArrayList>(); + for (AVMDifference diff : diffs) { - versionPaths.add(new Pair(-1, diff.getSourcePath())); + String revertPath = diff.getSourcePath(); + versionPaths.add(new Pair(-1, revertPath) ); + + if ( (this.virtUpdatePath == null) && + VirtServerUtils.requiresUpdateNotification(revertPath) + ) + { + this.virtUpdatePath = revertPath; + } } + Map args = new HashMap(1, 1.0f); args.put(AVMUndoSandboxListAction.PARAM_NODE_LIST, (Serializable)versionPaths); Action action = this.actionService.createAction(AVMUndoSandboxListAction.NAME, args); @@ -116,6 +135,22 @@ public class RevertAllDialog extends BaseDialogBean return outcome; } + + /** + * Handle notification to the virtualization server + * (this needs to occur after the sandbox is updated). + */ + @Override + protected String doPostCommitProcessing(FacesContext context, String outcome) + { + // Force the update because we've already determined + // that update_path requires virt server notification. + if (this.virtUpdatePath != null) + { + AVMConstants.updateVServerWebapp(this.virtUpdatePath, true); + } + return outcome; + } /** * @return the confirmation to display to the user diff --git a/source/java/org/alfresco/web/bean/wcm/RevertSelectedDialog.java b/source/java/org/alfresco/web/bean/wcm/RevertSelectedDialog.java index 95f479fef1..326fd918ac 100644 --- a/source/java/org/alfresco/web/bean/wcm/RevertSelectedDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/RevertSelectedDialog.java @@ -35,6 +35,7 @@ import org.alfresco.service.cmr.avm.AVMService; import org.alfresco.util.Pair; import org.alfresco.web.app.Application; import org.alfresco.web.bean.dialog.BaseDialogBean; +import org.alfresco.util.VirtServerUtils; /** * Revert (undo) the selected files in the current user sandbox. @@ -47,6 +48,14 @@ public class RevertSelectedDialog extends BaseDialogBean protected AVMBrowseBean avmBrowseBean; protected ActionService actionService; + + // The virtualization server might need to be notified + // because one or more of the files reverted could alter + // the behavior the virtual webapp in the target of the submit. + + private String virtUpdatePath; + + /** * @param avmBrowseBean The AVM BrowseBean to set @@ -73,10 +82,21 @@ public class RevertSelectedDialog extends BaseDialogBean { List selected = this.avmBrowseBean.getSelectedSandboxItems(); List> versionPaths = new ArrayList>(); + + for (AVMNodeDescriptor node : selected) { - versionPaths.add(new Pair(-1, node.getPath())); + String revertPath = node.getPath(); + versionPaths.add(new Pair(-1, revertPath )); + + if ( (this.virtUpdatePath == null) && + VirtServerUtils.requiresUpdateNotification(revertPath) + ) + { + this.virtUpdatePath = revertPath; + } } + Map args = new HashMap(1, 1.0f); args.put(AVMUndoSandboxListAction.PARAM_NODE_LIST, (Serializable)versionPaths); for (AVMNodeDescriptor node : selected) @@ -92,6 +112,24 @@ public class RevertSelectedDialog extends BaseDialogBean return outcome; } + + /** + * Handle notification to the virtualization server + * (this needs to occur after the sandbox is updated). + */ + @Override + protected String doPostCommitProcessing(FacesContext context, String outcome) + { + // Force the update because we've already determined + // that update_path requires virt server notification. + if (this.virtUpdatePath != null) + { + AVMConstants.updateVServerWebapp(this.virtUpdatePath, true); + } + return outcome; + } + + /** * @return the confirmation to display to the user diff --git a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java index 42df3dada2..6723272ed9 100644 --- a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java @@ -326,9 +326,6 @@ public class SubmitDialog extends BaseDialogBean String stagingPath = AVMConstants.buildSandboxRootPath(this.avmBrowseBean.getStagingStore()); List diffs = new ArrayList(items.size()); - // flag indicating if virt server update is already implied - boolean updateVserver = false; - for (ItemWrapper wrapper : items) { String srcPath = sandboxPath + wrapper.getPath(); @@ -339,17 +336,12 @@ public class SubmitDialog extends BaseDialogBean // If nothing has required notifying the virtualization server // so far, check to see if destPath forces a notification // (e.g.: it might be a path to a jar file within WEB-INF/lib). - if (!updateVserver) + + if ( (this.virtUpdatePath == null) && + VirtServerUtils.requiresUpdateNotification( destPath ) + ) { - // Examples of destPath that require virt server notification: - // - // mysite:/www/avm_webapps/ROOT/WEB-INF/web.xml - // mysite:/www/avm_webapps/ROOT/WEB-INF/lib/moo.jar - updateVserver = VirtServerUtils.requiresUpdateNotification( destPath ); - if (updateVserver) - { - this.virtUpdatePath = destPath; - } + this.virtUpdatePath = destPath; } } diff --git a/source/web/WEB-INF/faces-config-beans.xml b/source/web/WEB-INF/faces-config-beans.xml index c618d2f012..40310ff8e8 100644 --- a/source/web/WEB-INF/faces-config-beans.xml +++ b/source/web/WEB-INF/faces-config-beans.xml @@ -2350,6 +2350,10 @@ avmService #{AVMService} + + avmSyncService + #{AVMSyncService} + navigationBean #{NavigationBean}