diff --git a/config/alfresco/web-client-config-workflow-actions.xml b/config/alfresco/web-client-config-workflow-actions.xml
index fba4dd9352..7f67e016bd 100644
--- a/config/alfresco/web-client-config-workflow-actions.xml
+++ b/config/alfresco/web-client-config-workflow-actions.xml
@@ -179,9 +179,11 @@
-
+
+
+
@@ -211,9 +213,11 @@
-
+
+
+
diff --git a/source/java/org/alfresco/web/bean/wcm/AVMConstants.java b/source/java/org/alfresco/web/bean/wcm/AVMConstants.java
index 3f669924e7..93e05f48b2 100644
--- a/source/java/org/alfresco/web/bean/wcm/AVMConstants.java
+++ b/source/java/org/alfresco/web/bean/wcm/AVMConstants.java
@@ -740,6 +740,7 @@ public final class AVMConstants
public final static String PROP_SANDBOXID = ".sandbox-id.";
public final static String PROP_DNS = ".dns.";
public final static String PROP_SANDBOX_STORE_PREFIX = ".sandbox.store.";
+ public final static QName PROP_WEB_PROJECT_NODE_REF = QName.createQName(null, ".web_project.noderef");
public final static QName PROP_SANDBOX_STAGING_MAIN = QName.createQName(null, ".sandbox.staging.main");
public final static QName PROP_SANDBOX_STAGING_PREVIEW = QName.createQName(null, ".sandbox.staging.preview");
public final static QName PROP_SANDBOX_AUTHOR_MAIN = QName.createQName(null, ".sandbox.author.main");
diff --git a/source/java/org/alfresco/web/bean/wcm/AVMEditBean.java b/source/java/org/alfresco/web/bean/wcm/AVMEditBean.java
index 8b5e62e9d2..efff6f9c35 100644
--- a/source/java/org/alfresco/web/bean/wcm/AVMEditBean.java
+++ b/source/java/org/alfresco/web/bean/wcm/AVMEditBean.java
@@ -17,6 +17,7 @@
package org.alfresco.web.bean.wcm;
import java.io.File;
+import java.io.FileNotFoundException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
@@ -29,9 +30,11 @@ import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.content.MimetypeMap;
+import org.alfresco.repo.domain.PropertyValue;
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.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
@@ -75,7 +78,8 @@ public class AVMEditBean
private File file = null;
private String fileName = null;
protected FormProcessor.Session formProcessorSession = null;
-
+ private Form form = null;
+
/** AVM service bean reference */
protected AVMService avmService;
@@ -233,10 +237,15 @@ public class AVMEditBean
*/
public Form getForm()
{
- final String formName = (String)
- this.nodeService.getProperty(this.getAvmNode().getNodeRef(),
- WCMAppModel.PROP_PARENT_FORM_NAME);
- return this.avmBrowseBean.getWebProject().getForm(formName);
+ if (this.form == null)
+ {
+ final String formName = (String)
+ this.nodeService.getProperty(this.getAvmNode().getNodeRef(),
+ WCMAppModel.PROP_PARENT_FORM_NAME);
+ final WebProject wp = new WebProject(this.getAvmNode().getPath());
+ this.form = wp.getForm(formName);
+ }
+ return this.form;
}
/**
@@ -296,17 +305,27 @@ public class AVMEditBean
{
if (LOGGER.isDebugEnabled())
LOGGER.debug(avmPath + " is a rendition, editing primary rendition instead");
- avmPath = new RenditionImpl(AVMNodeConverter.ToNodeRef(-1, avmPath)).getPrimaryFormInstanceData().getPath();
-
- if (LOGGER.isDebugEnabled())
- LOGGER.debug("Editing primary form instance data " + avmPath);
- this.avmBrowseBean.setAvmActionNode(new AVMNode(this.avmService.lookup(-1, avmPath)));
+ try
+ {
+ final FormInstanceData fid =
+ new RenditionImpl(AVMNodeConverter.ToNodeRef(-1, avmPath)).getPrimaryFormInstanceData();
+ avmPath = fid.getPath();
+ if (LOGGER.isDebugEnabled())
+ LOGGER.debug("Editing primary form instance data " + avmPath);
+ this.avmBrowseBean.setAvmActionNode(new AVMNode(this.avmService.lookup(-1, avmPath)));
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ this.avmService.removeAspect(avmPath, WCMAppModel.ASPECT_RENDITION);
+ this.avmService.removeAspect(avmPath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA);
+ Utils.addErrorMessage(fnfe.getMessage(), fnfe);
+ }
}
if (this.avmService.hasAspect(-1, avmPath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
{
// reset the preview layer
- String storeName = AVMConstants.getStoreName(this.avmBrowseBean.getCurrentPath());
+ String storeName = AVMConstants.getStoreName(avmPath);
storeName = AVMConstants.getCorrespondingPreviewStoreName(storeName);
final String path = AVMConstants.buildStoreRootPath(storeName);
if (LOGGER.isDebugEnabled())
diff --git a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java
index 61b2de966d..a8d322ce05 100644
--- a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java
+++ b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java
@@ -588,7 +588,8 @@ public class CreateFormWizard
{
if (LOGGER.isDebugEnabled())
{
- LOGGER.debug("schemaFileValueChanged(" + this.getSchemaFile() + ")");
+ LOGGER.debug("schemaFileValueChanged(" + this.getFileName(FILE_SCHEMA) + "[" +
+ this.getSchemaFile() + "])");
}
if (this.getSchemaFile() != null)
{
@@ -599,9 +600,9 @@ public class CreateFormWizard
}
catch (Exception e)
{
- final String msg = "unable to parse " + this.getSchemaFileName();
+ final String msg = "unable to parse " + this.getFileName(FILE_SCHEMA);
this.removeUploadedSchemaFile();
- Utils.addErrorMessage(msg, e);
+ Utils.addErrorMessage(msg + ": " + e.getMessage(), e);
}
}
return null;
@@ -822,8 +823,7 @@ public class CreateFormWizard
}
if (LOGGER.isDebugEnabled())
{
- LOGGER.debug("getSchemaRootElementNameChoices(" + this.schema +
- ") = " + result.size());
+ LOGGER.debug("getSchemaRootElementNameChoices(" + this.schema + ") = " + result.size());
}
return result;
}
diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java
index caff23f41a..3a66a79c94 100644
--- a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java
+++ b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java
@@ -317,6 +317,12 @@ public class CreateWebContentWizard extends BaseContentWizard
if (LOGGER.isDebugEnabled())
LOGGER.debug("starting workflow " + wd + " with parameters " + parameters);
+
+ if (parameters == null)
+ {
+ Utils.addErrorMessage(Application.getMessage(context, "submit_workflow_config_error"));
+ return null;
+ }
// start the workflow to get access to the start task
WorkflowPath path = this.workflowService.startWorkflow(wd.id, null);
diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java
index b6c467edeb..d004b8dc4e 100644
--- a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java
+++ b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java
@@ -184,7 +184,7 @@ public class CreateWebsiteWizard extends BaseWizardBean
if (outcome != null)
{
// create the AVM staging store to represent the newly created location website
- SandboxFactory.createStagingSandbox(avmStore, wiz.getManagers());
+ SandboxFactory.createStagingSandbox(avmStore, nodeRef, wiz.getManagers());
// create the default webapp folder under the hidden system folders
final String stagingStore = AVMConstants.buildStagingStoreName(avmStore);
diff --git a/source/java/org/alfresco/web/bean/wcm/SandboxFactory.java b/source/java/org/alfresco/web/bean/wcm/SandboxFactory.java
index 38961629c0..165ade73db 100644
--- a/source/java/org/alfresco/web/bean/wcm/SandboxFactory.java
+++ b/source/java/org/alfresco/web/bean/wcm/SandboxFactory.java
@@ -65,9 +65,12 @@ public final class SandboxFactory
* Website Name: .website.name = website name
*
* @param storeId The store name to create the sandbox for
+ * @param webProjectNodeRef The noderef for the webproject.
* @param managers The list of authorities who have ContentManager role in the website
*/
- public static SandboxInfo createStagingSandbox(final String storeId, final List managers)
+ public static SandboxInfo createStagingSandbox(final String storeId,
+ final NodeRef webProjectNodeRef,
+ final List managers)
{
final ServiceRegistry services = Repository.getServiceRegistry(FacesContext.getCurrentInstance());
final AVMService avmService = services.getAVMService();
@@ -93,6 +96,9 @@ public final class SandboxFactory
avmService.setStoreProperty(stagingStoreName,
AVMConstants.PROP_SANDBOX_STAGING_MAIN,
new PropertyValue(DataTypeDefinition.TEXT, null));
+ avmService.setStoreProperty(stagingStoreName,
+ AVMConstants.PROP_WEB_PROJECT_NODE_REF,
+ new PropertyValue(DataTypeDefinition.NODE_REF, webProjectNodeRef));
// tag the store with the DNS name property
tagStoreDNSPath(avmService, stagingStoreName, storeId);
diff --git a/source/java/org/alfresco/web/bean/wcm/WebProject.java b/source/java/org/alfresco/web/bean/wcm/WebProject.java
index 9462e23da7..d4e1251450 100644
--- a/source/java/org/alfresco/web/bean/wcm/WebProject.java
+++ b/source/java/org/alfresco/web/bean/wcm/WebProject.java
@@ -16,38 +16,40 @@
*/
package org.alfresco.web.bean.wcm;
-import org.alfresco.web.bean.repository.User;
-import java.io.Serializable;
-import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.workflow.WorkflowDefinition;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.Serializable;
-import java.util.List;
+import java.io.Serializable;
import java.util.*;
+import java.util.List;
import javax.faces.context.FacesContext;
import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.avm.AVMService;
+import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.TemplateService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
+import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
+import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.alfresco.web.bean.repository.Repository;
+import org.alfresco.web.bean.repository.User;
import org.alfresco.web.bean.wcm.AVMConstants;
import org.alfresco.web.forms.*;
import org.alfresco.web.forms.xforms.XFormsProcessor;
-import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.*;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
/**
* Provides configured data for a web project.
@@ -165,13 +167,21 @@ public class WebProject
private static final String ROLE_CONTENT_MANAGER = "ContentManager";
private final NodeRef nodeRef;
- private Map forms;
public WebProject(final NodeRef nodeRef)
{
this.nodeRef = nodeRef;
}
+ public WebProject(final String avmPath)
+ {
+ String stagingStore = AVMConstants.buildStagingStoreName(AVMConstants.getStoreId(AVMConstants.getStoreName(avmPath)));
+ final AVMService avmService = this.getServiceRegistry().getAVMService();
+ this.nodeRef = (NodeRef)
+ avmService.getStoreProperty(stagingStore,
+ AVMConstants.PROP_WEB_PROJECT_NODE_REF).getValue(DataTypeDefinition.NODE_REF);
+ }
+
/**
* Returns the name of the web project.
*
@@ -281,24 +291,21 @@ public class WebProject
private Map getFormsImpl()
{
- if (this.forms == null)
+ final ServiceRegistry serviceRegistry = this.getServiceRegistry();
+ final NodeService nodeService = serviceRegistry.getNodeService();
+ final List formRefs =
+ nodeService.getChildAssocs(this.nodeRef,
+ WCMAppModel.ASSOC_WEBFORM,
+ RegexQNamePattern.MATCH_ALL);
+ Map result = new HashMap(formRefs.size(), 1.0f);
+ for (final ChildAssociationRef ref : formRefs)
{
- final ServiceRegistry serviceRegistry = this.getServiceRegistry();
- final NodeService nodeService = serviceRegistry.getNodeService();
- final List formRefs =
- nodeService.getChildAssocs(this.nodeRef,
- WCMAppModel.ASSOC_WEBFORM,
- RegexQNamePattern.MATCH_ALL);
- this.forms = new HashMap(formRefs.size(), 1.0f);
- for (final ChildAssociationRef ref : formRefs)
- {
- final String formName = (String)
- nodeService.getProperty(ref.getChildRef(), WCMAppModel.PROP_FORMNAME);
- final Form baseForm = FormsService.getInstance().getForm(formName);
- this.forms.put(formName, new FormWrapper(baseForm, ref.getChildRef()));
- }
+ final String formName = (String)
+ nodeService.getProperty(ref.getChildRef(), WCMAppModel.PROP_FORMNAME);
+ final Form baseForm = FormsService.getInstance().getForm(formName);
+ result.put(formName, new FormWrapper(baseForm, ref.getChildRef()));
}
- return this.forms;
+ return result;
}
private ServiceRegistry getServiceRegistry()
diff --git a/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java b/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
index 892d4ab010..9e5cffe08b 100644
--- a/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
+++ b/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
@@ -36,6 +36,7 @@ import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.bean.repository.TransientNode;
import org.alfresco.web.bean.wcm.AVMConstants;
import org.alfresco.web.bean.wcm.AVMNode;
+import org.alfresco.web.config.ClientConfigElement;
import org.alfresco.web.config.DialogsConfigElement.DialogButtonConfig;
import org.alfresco.web.ui.common.Utils;
import org.alfresco.web.ui.common.component.UIActionLink;
@@ -544,8 +545,7 @@ public class ManageTaskDialog extends BaseDialogBean
WCMModel.PROP_AVM_DIR_INDIRECTION);
final String stagingAvmPath = AVMNodeConverter.ToAVMVersionPath(stagingNodeRef).getSecond();
final String packageAvmPath = AVMNodeConverter.ToAVMVersionPath(this.workflowPackage).getSecond();
- LOGGER.debug("comparing " + packageAvmPath +
- " with " + stagingAvmPath);
+ LOGGER.debug("comparing " + packageAvmPath + " with " + stagingAvmPath);
for (AVMDifference d : this.avmSyncService.compare(-1, packageAvmPath,
-1, stagingAvmPath,
null))
@@ -685,10 +685,18 @@ public class ManageTaskDialog extends BaseDialogBean
// ------------------------------------------------------------------------------
// Helper methods
- protected void addAVMNode(AVMNode node)
+ protected void addAVMNode(final AVMNode node)
{
LOGGER.debug("adding node " + node);
node.getProperties().put("taskId", this.task.id);
+ final ClientConfigElement config = Application.getClientConfig(FacesContext.getCurrentInstance());
+ final String dns = AVMConstants.lookupStoreDNS(AVMConstants.getStoreName(node.getPath()));
+ node.getProperties().put("previewUrl",
+ AVMConstants.buildAssetUrl(AVMConstants.getSandboxRelativePath(node.getPath()),
+ config.getWCMDomain(),
+ config.getWCMPort(),
+ dns));
+
this.browseBean.setupCommonBindingProperties(node);
final String packagePath = AVMNodeConverter.ToAVMVersionPath(this.workflowPackage).getSecond();
NodePropertyResolver resolverPath = new NodePropertyResolver()
@@ -714,9 +722,6 @@ public class ManageTaskDialog extends BaseDialogBean
// node.remove("path");
// node.addPropertyResolver("path", resolverPath);
// node.addPropertyResolver("displayPath", resolverPath);
-
- LOGGER.debug("created mapnode " + node);
-
this.resources.add(node);
}
diff --git a/source/java/org/alfresco/web/forms/FormImpl.java b/source/java/org/alfresco/web/forms/FormImpl.java
index d251c50992..124e91f7c4 100644
--- a/source/java/org/alfresco/web/forms/FormImpl.java
+++ b/source/java/org/alfresco/web/forms/FormImpl.java
@@ -108,9 +108,6 @@ public class FormImpl
? (String)nodeService.getProperty(workflowRef, WCMAppModel.PROP_WORKFLOW_NAME)
: null);
- if (LOGGER.isDebugEnabled())
- LOGGER.debug("using workflow " + workflowName + " for form " + this.getName());
-
return workflowName != null ? workflowService.getDefinitionByName(workflowName) : null;
}
diff --git a/source/java/org/alfresco/web/forms/Rendition.java b/source/java/org/alfresco/web/forms/Rendition.java
index 1cee03617a..296c69c485 100644
--- a/source/java/org/alfresco/web/forms/Rendition.java
+++ b/source/java/org/alfresco/web/forms/Rendition.java
@@ -16,10 +16,10 @@
*/
package org.alfresco.web.forms;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
-import org.alfresco.service.cmr.repository.NodeRef;
import org.xml.sax.SAXException;
/**
@@ -43,7 +43,8 @@ public interface Rendition
public String getSandboxRelativePath();
/** the primary form instance data used to generate this rendition */
- public FormInstanceData getPrimaryFormInstanceData();
+ public FormInstanceData getPrimaryFormInstanceData()
+ throws FileNotFoundException;
/** the rendering engine template that generated this rendition */
public RenderingEngineTemplate getRenderingEngineTemplate();
diff --git a/source/java/org/alfresco/web/forms/RenditionImpl.java b/source/java/org/alfresco/web/forms/RenditionImpl.java
index 1d64bb2773..aafe4c4208 100644
--- a/source/java/org/alfresco/web/forms/RenditionImpl.java
+++ b/source/java/org/alfresco/web/forms/RenditionImpl.java
@@ -16,6 +16,7 @@
*/
package org.alfresco.web.forms;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.context.FacesContext;
@@ -23,7 +24,10 @@ import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.repo.avm.AVMNodeConverter;
+import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.avm.AVMService;
+import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.MimetypeService;
@@ -89,17 +93,21 @@ public class RenditionImpl
}
public FormInstanceData getPrimaryFormInstanceData()
+ throws FileNotFoundException
{
+ final AVMService avmService = this.getServiceRegistry().getAVMService();
final NodeService nodeService = this.getServiceRegistry().getNodeService();
final String fidAVMStoreRelativePath = (String)
nodeService.getProperty(this.nodeRef,
WCMAppModel.PROP_PRIMARY_FORM_INSTANCE_DATA);
String avmStore = AVMNodeConverter.ToAVMVersionPath(this.nodeRef).getSecond();
avmStore = avmStore.substring(0, avmStore.indexOf(':'));
-
- final NodeRef fidNodeRef =
- AVMNodeConverter.ToNodeRef(-1, avmStore + ':' + fidAVMStoreRelativePath);
- return new FormInstanceDataImpl(fidNodeRef);
+ final String path = avmStore + ':' + fidAVMStoreRelativePath;
+ if (avmService.lookup(-1, path) == null)
+ {
+ throw new FileNotFoundException("unable to find primary form instance data " + path);
+ }
+ return new FormInstanceDataImpl(AVMNodeConverter.ToNodeRef(-1, path));
}
/** the rendering engine template that generated this rendition */
diff --git a/source/test-resources/xforms/customer-tests/eyestreet-ist-topic.xsd b/source/test-resources/xforms/customer-tests/eyestreet-ist-topic.xsd
new file mode 100644
index 0000000000..48e1f48454
--- /dev/null
+++ b/source/test-resources/xforms/customer-tests/eyestreet-ist-topic.xsd
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/test-resources/xforms/customer-tests/forums-shiporder.xsd b/source/test-resources/xforms/customer-tests/forums-shiporder.xsd
new file mode 100644
index 0000000000..e92073a925
--- /dev/null
+++ b/source/test-resources/xforms/customer-tests/forums-shiporder.xsd
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+