diff --git a/.classpath b/.classpath index eb41298081..416de11e4f 100644 --- a/.classpath +++ b/.classpath @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/web-client-config-actions.xml b/config/alfresco/web-client-config-actions.xml index 0d0c66eb7b..7d2fe3763d 100644 --- a/config/alfresco/web-client-config-actions.xml +++ b/config/alfresco/web-client-config-actions.xml @@ -208,6 +208,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.ApproveDocEvaluator /images/icons/approve.gif @@ -220,6 +223,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.RejectDocEvaluator /images/icons/reject.gif @@ -232,6 +238,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.ApproveDocEvaluator /images/icons/approve.gif @@ -244,6 +253,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.RejectDocEvaluator /images/icons/reject.gif @@ -256,6 +268,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.ApproveDocEvaluator /images/icons/approve.gif @@ -268,6 +283,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.RejectDocEvaluator /images/icons/reject.gif @@ -280,6 +298,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.ApproveDocEvaluator /images/icons/approve.gif @@ -292,6 +313,9 @@ + + WriteProperties + org.alfresco.web.action.evaluator.RejectDocEvaluator /images/icons/reject.gif diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java index 8d7982d1b9..d7a2c39d1c 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java @@ -94,7 +94,6 @@ public class CreateWebsiteWizard extends BaseWizardBean // wizard step names (that are referenced) private static final String STEP_DETAILS = "details"; - private static final String STEP_FORMS = "forms"; private static final String STEP_DEPLOYMENT = "deployment"; private static final String MATCH_DEFAULT = ".*"; @@ -439,7 +438,14 @@ public class CreateWebsiteWizard extends BaseWizardBean repoProps); if (logger.isDebugEnabled()) - logger.debug("Saved deploymentserver node using repo props: " + repoProps); + { + // overwrite the password property before logging + Map tempProps = new HashMap(repoProps.size()); + tempProps.putAll(repoProps); + tempProps.put(WCMAppModel.PROP_DEPLOYSERVERPASSWORD, "*****"); + + logger.debug("Saved deploymentserver node using repo props: " + tempProps); + } } } diff --git a/source/java/org/alfresco/web/bean/wcm/DeleteSandboxDialog.java b/source/java/org/alfresco/web/bean/wcm/DeleteSandboxDialog.java index 1ad76c4385..b8ea6da842 100644 --- a/source/java/org/alfresco/web/bean/wcm/DeleteSandboxDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/DeleteSandboxDialog.java @@ -117,6 +117,8 @@ public class DeleteSandboxDialog extends BaseDialogBean if (username != null) { Node website = this.avmBrowseBean.getWebsite(); + String storeRoot = (String)website.getProperties().get(WCMAppModel.PROP_AVMSTORE); + String mainStore = AVMUtil.buildUserMainStoreName(storeRoot, username); // remove the store reference from the website folder meta-data List userInfoRefs = this.getNodeService().getChildAssocs( @@ -126,14 +128,11 @@ public class DeleteSandboxDialog extends BaseDialogBean { NodeRef userInfoRef = ref.getChildRef(); String user = (String)getNodeService().getProperty(userInfoRef, WCMAppModel.PROP_WEBUSERNAME); - String role = (String)getNodeService().getProperty(userInfoRef, WCMAppModel.PROP_WEBUSERROLE); if (username.equals(user)) { // found the sandbox to remove - String storeRoot = (String)website.getProperties().get(WCMAppModel.PROP_AVMSTORE); - String sandbox = AVMUtil.buildUserMainStoreName(storeRoot, username); - String path = AVMUtil.buildStoreWebappPath(sandbox, this.avmBrowseBean.getWebapp()); + String path = AVMUtil.buildStoreWebappPath(mainStore, this.avmBrowseBean.getWebapp()); // Notify virtualisation server about removing this sandbox. // @@ -158,15 +157,15 @@ public class DeleteSandboxDialog extends BaseDialogBean // layer attached. // purge the user main sandbox store from the system - this.getAvmService().purgeStore(sandbox); + this.getAvmService().purgeStore(mainStore); // remove any locks this user may have - this.getAvmLockingService().removeStoreLocks(sandbox); + this.getAvmLockingService().removeStoreLocks(mainStore); // purge the user preview sandbox store from the system - sandbox = AVMUtil.buildUserPreviewStoreName(storeRoot, username); - this.getAvmService().purgeStore(sandbox); + String previewStore = AVMUtil.buildUserPreviewStoreName(storeRoot, username); + this.getAvmService().purgeStore(previewStore); // remove any locks this user may have - this.getAvmLockingService().removeStoreLocks(sandbox); + this.getAvmLockingService().removeStoreLocks(previewStore); // remove the association to this web project user meta-data this.getNodeService().removeChild(website.getNodeRef(), ref.getChildRef()); @@ -174,6 +173,16 @@ public class DeleteSandboxDialog extends BaseDialogBean break; } } + + // if the sandbox is allocated to a test server release it + NodeRef testServer = DeploymentUtil.findAllocatedTestServer(mainStore); + if (testServer != null) + { + getNodeService().setProperty(testServer, WCMAppModel.PROP_DEPLOYSERVERALLOCATEDTO, null); + + if (logger.isDebugEnabled()) + logger.debug("Released test server from user sandbox: " + mainStore); + } } return outcome; diff --git a/source/java/org/alfresco/web/bean/wcm/DeploymentMonitor.java b/source/java/org/alfresco/web/bean/wcm/DeploymentMonitor.java index a8cc54f4d9..cd2b317c19 100644 --- a/source/java/org/alfresco/web/bean/wcm/DeploymentMonitor.java +++ b/source/java/org/alfresco/web/bean/wcm/DeploymentMonitor.java @@ -30,6 +30,7 @@ import org.alfresco.service.cmr.avm.deploy.DeploymentCallback; import org.alfresco.service.cmr.avm.deploy.DeploymentEvent; import org.alfresco.service.cmr.avm.deploy.DeploymentEvent.Type; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.web.ui.common.Utils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -134,7 +135,7 @@ public class DeploymentMonitor implements DeploymentCallback, Serializable StringBuilder buffer = new StringBuilder(" tempProps = new HashMap(this.props.size()); + tempProps.putAll(this.props); + if (tempProps.containsKey(PROP_PASSWORD)) + { + tempProps.put(PROP_PASSWORD, "*****"); + } + + buffer.append(" props=").append(tempProps).append(")"); + return buffer.toString(); } diff --git a/source/java/org/alfresco/web/ui/wcm/component/UIDeployWebsite.java b/source/java/org/alfresco/web/ui/wcm/component/UIDeployWebsite.java index 19b2123b19..4480201274 100644 --- a/source/java/org/alfresco/web/ui/wcm/component/UIDeployWebsite.java +++ b/source/java/org/alfresco/web/ui/wcm/component/UIDeployWebsite.java @@ -45,6 +45,7 @@ import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.wcm.AVMUtil; import org.alfresco.web.bean.wcm.DeploymentMonitor; import org.alfresco.web.bean.wcm.DeploymentUtil; +import org.alfresco.web.ui.common.Utils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -505,8 +506,6 @@ public class UIDeployWebsite extends UIInput renderPanelStart(out, contextPath); - //out.write("
"); - renderPanelMiddle(out, contextPath, nodeService, server, false); String url = (String)nodeService.getProperty(server, WCMAppModel.PROP_DEPLOYSERVERURL); @@ -515,7 +514,7 @@ public class UIDeployWebsite extends UIInput out.write(""); } @@ -603,7 +602,7 @@ public class UIDeployWebsite extends UIInput out.write(contextPath); out.write("/images/parts/deploy_panel_bg.gif); background-repeat: repeat-x; width: 100%;'>"); out.write("
"); - out.write(serverName); + out.write(Utils.encode(serverName)); out.write("
"); } diff --git a/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentReports.java b/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentReports.java index 575a5fd604..5d7a2e09f3 100644 --- a/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentReports.java +++ b/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentReports.java @@ -26,6 +26,7 @@ package org.alfresco.web.ui.wcm.component; import java.io.IOException; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -54,6 +55,8 @@ import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.wcm.DeploymentUtil; +import org.alfresco.web.data.IDataContainer; +import org.alfresco.web.data.QuickSort; import org.alfresco.web.ui.common.ComponentConstants; import org.alfresco.web.ui.common.PanelGenerator; import org.alfresco.web.ui.common.Utils; @@ -328,6 +331,8 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write(bundle.getString(MSG_SNAPSHOT)); out.write(""); + // create a list of DeploymentAttempt objects to be ordered + List orderedAttempts = new ArrayList(deployAttempts.size()); for (NodeRef attempt : deployAttempts) { Map props = nodeService.getProperties(attempt); @@ -345,22 +350,30 @@ public class UIDeploymentReports extends SelfRenderingComponent buffer.append(", "); } - buffer.append(server); + buffer.append(Utils.encode(server)); } } - // format the date using the default pattern - String attemptDate = Utils.getDateTimeFormat(context).format(attemptTime); - + orderedAttempts.add(new DeploymentAttempt(attempt, attemptId, + attemptTime, buffer.toString(), version)); + } + + // sort the list of deployment attempts + QuickSort sorter = new QuickSort(orderedAttempts, "date", false, + IDataContainer.SORT_CASEINSENSITIVE); + sorter.sort(); + + for (DeploymentAttempt attempt : orderedAttempts) + { out.write(""); Utils.encodeRecursive(context, - aquireViewAttemptAction(context, attemptId, attempt, attemptDate)); + aquireViewAttemptAction(context, attempt)); out.write(""); - out.write(buffer.toString()); + out.write(attempt.getServers()); out.write(""); - if (version != null) + if (attempt.getVersion() != null) { - out.write(version.toString()); + out.write(attempt.getVersion().toString()); } out.write(""); } @@ -463,6 +476,7 @@ public class UIDeploymentReports extends SelfRenderingComponent // extract the information we need to display Map serverProps = nodeService.getProperties(deploymentReport); + Long serverId = (Long)serverProps.get(ContentModel.PROP_NODE_DBID); String server = (String)serverProps.get(WCMAppModel.PROP_DEPLOYSERVER); boolean showServerAddress = true; String serverName = (String)serverProps.get(WCMAppModel.PROP_DEPLOYSERVERNAMEUSED); @@ -535,7 +549,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write(deployType); out.write(".gif' />"); out.write("
"); - out.write(serverName); + out.write(Utils.encode(serverName)); out.write("
"); out.write(Application.getMessage(context, "reason")); out.write(": "); - out.write(failReason); + out.write(Utils.encode(failReason)); out.write("
"); } @@ -572,7 +586,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deploy_server")); out.write(": "); - out.write(server); + out.write(Utils.encode(server)); out.write("
"); } @@ -597,7 +611,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deployed_by")); out.write(": "); - out.write(creator); + out.write(Utils.encode(creator)); out.write("
"); if (username != null) @@ -605,7 +619,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deploy_server_username")); out.write(": "); - out.write(username); + out.write(Utils.encode(username)); out.write("
"); } @@ -614,7 +628,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deploy_server_source_path")); out.write(": "); - out.write(source); + out.write(Utils.encode(source)); out.write("
"); } @@ -623,7 +637,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deploy_server_excludes")); out.write(": "); - out.write(excludes); + out.write(Utils.encode(excludes)); out.write("
"); } @@ -632,7 +646,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
"); out.write(Application.getMessage(context, "deploy_server_target_name")); out.write(": "); - out.write(target); + out.write(Utils.encode(target)); out.write("
"); } @@ -643,7 +657,7 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write(": "); - out.write(url); + out.write(Utils.encode(url)); out.write(""); } @@ -652,14 +666,14 @@ public class UIDeploymentReports extends SelfRenderingComponent out.write("
 "); out.write(Application.getMessage(context, "details")); out.write("
\n"); out.write(""); } out.write("\n
\n"); @@ -671,11 +685,10 @@ public class UIDeploymentReports extends SelfRenderingComponent } @SuppressWarnings("unchecked") - protected UIActionLink aquireViewAttemptAction(FacesContext context, - String attemptId, NodeRef attemptRef, String attemptDate) + protected UIActionLink aquireViewAttemptAction(FacesContext context, DeploymentAttempt attempt) { UIActionLink action = null; - String actionId = "va_" + attemptId; + String actionId = "va_" + attempt.getId(); // try find the action as a child of this component for (UIComponent component : (List)getChildren()) @@ -693,7 +706,7 @@ public class UIDeploymentReports extends SelfRenderingComponent javax.faces.application.Application facesApp = context.getApplication(); action = (UIActionLink)facesApp.createComponent(UIActions.COMPONENT_ACTIONLINK); action.setId(actionId); - action.setValue(attemptDate); + action.setValue(attempt.getDateAsString()); action.setTooltip(Application.getMessage(context, MSG_SELECT_ATTEMPT)); action.setShowLink(true); action.setActionListener(facesApp.createMethodBinding( @@ -703,14 +716,14 @@ public class UIDeploymentReports extends SelfRenderingComponent UIParameter param1 = (UIParameter)facesApp.createComponent(ComponentConstants.JAVAX_FACES_PARAMETER); param1.setId(actionId + "_1"); param1.setName("attemptRef"); - param1.setValue(attemptRef.toString()); + param1.setValue(attempt.getNodeRef().toString()); action.getChildren().add(param1); // add attemptDate param UIParameter param2 = (UIParameter)facesApp.createComponent(ComponentConstants.JAVAX_FACES_PARAMETER); param2.setId(actionId + "_2"); param2.setName("attemptDate"); - param2.setValue(attemptDate); + param2.setValue(attempt.getDateAsString()); action.getChildren().add(param2); this.getChildren().add(action); @@ -718,4 +731,54 @@ public class UIDeploymentReports extends SelfRenderingComponent return action; } + + private class DeploymentAttempt + { + private NodeRef nodeRef; + private String id; + private Date date; + private String servers; + private Integer version; + + public DeploymentAttempt(NodeRef nodeRef, String id, Date date, + String servers, Integer version) + { + this.nodeRef = nodeRef; + this.id = id; + this.date = date; + this.servers = servers; + this.version = version; + } + + public NodeRef getNodeRef() + { + return this.nodeRef; + } + + public String getId() + { + return this.id; + } + + public String getServers() + { + return this.servers; + } + + public Integer getVersion() + { + return this.version; + } + + public Date getDate() + { + return this.date; + } + + public String getDateAsString() + { + // format the date using the default pattern + return Utils.getDateTimeFormat(FacesContext.getCurrentInstance()).format(this.date); + } + } } diff --git a/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentServers.java b/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentServers.java index 952aa67e45..fb98ba6dd8 100644 --- a/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentServers.java +++ b/source/java/org/alfresco/web/ui/wcm/component/UIDeploymentServers.java @@ -193,9 +193,9 @@ public class UIDeploymentServers extends UIInput out.write("YAHOO.util.Event.on(window, \"load\", Alfresco.checkDeployConfigPage);"); if (currentServer != null) { - out.write("Alfresco.scrollToEditServer('"); + out.write("var SCROLL_TO_SERVER_CONFIG_ID = '"); out.write(currentServer.getId()); - out.write("');\n"); + out.write("';\n"); } out.write("\n"); @@ -334,7 +334,7 @@ public class UIDeploymentServers extends UIInput out.write(server.getDeployType()); out.write(".gif"); out.write("' />"); - out.write(serverName); + out.write(Utils.encode(serverName)); out.write("
"); Utils.encodeRecursive(context, aquireEditServerAction(context, server.getId())); Utils.encodeRecursive(context, aquireDeleteServerAction(context, server.getId())); @@ -347,7 +347,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); if (server.getProperties().get(DeploymentServerConfig.PROP_HOST) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_HOST)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_HOST))); } out.write(""); @@ -382,7 +382,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); if (server.getProperties().get(DeploymentServerConfig.PROP_URL) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_URL)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_URL))); } out.write(""); @@ -391,7 +391,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); if (server.getProperties().get(DeploymentServerConfig.PROP_USER) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_USER)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_USER))); } out.write(""); out.write(""); @@ -401,7 +401,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); @@ -410,7 +410,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); @@ -421,7 +421,7 @@ public class UIDeploymentServers extends UIInput out.write(":"); } diff --git a/source/web/scripts/ajax/deployment.js b/source/web/scripts/ajax/deployment.js index 6dc5f68632..106f278396 100644 --- a/source/web/scripts/ajax/deployment.js +++ b/source/web/scripts/ajax/deployment.js @@ -106,6 +106,12 @@ Alfresco.checkDeployConfigPage = function() button.onclick = function() {deployActionButtonPressed = true; clear_wizard();} document.getElementById('wizard:wizard-body:deployServerHost').focus(); } + + // if a scroll to id has been set, scroll there + if (window.SCROLL_TO_SERVER_CONFIG_ID) + { + Alfresco.scrollToEditServer(SCROLL_TO_SERVER_CONFIG_ID); + } } Alfresco.checkDeployConfigButtonState = function()
"); if (server.getProperties().get(DeploymentServerConfig.PROP_SOURCE_PATH) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_SOURCE_PATH)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_SOURCE_PATH))); } out.write("
"); if (server.getProperties().get(DeploymentServerConfig.PROP_EXCLUDES) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_EXCLUDES)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_EXCLUDES))); } out.write("
"); if (server.getProperties().get(DeploymentServerConfig.PROP_TARGET_NAME) != null) { - out.write((String)server.getProperties().get(DeploymentServerConfig.PROP_TARGET_NAME)); + out.write(Utils.encode((String)server.getProperties().get(DeploymentServerConfig.PROP_TARGET_NAME))); } out.write("