. Checkpoint of the Submit dialog for user sandbox assets

- first pass of JSP layout
 - multiple items or all items available for selection
 - calculation of available workflows, from those assigned to form assets and assigned to the website
 - creation of AVM workflow package
 - starting of workflow containing AVM package (appears in users task todo dashlet!)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4524 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2006-12-05 17:19:23 +00:00
parent 5c312a7ece
commit ae4d6a0fd2
15 changed files with 753 additions and 7 deletions

View File

@@ -953,6 +953,14 @@ websitedetails_description=View the details of the web project.
delete_sandbox=Delete Sandbox delete_sandbox=Delete Sandbox
delete_sandbox_info=To remove this sandbox and the user from the Web Project, click OK. delete_sandbox_info=To remove this sandbox and the user from the Web Project, click OK.
delete_sandbox_confirm=Are you sure you want to remove the user sandbox \"{0}\" from the Web Project? delete_sandbox_confirm=Are you sure you want to remove the user sandbox \"{0}\" from the Web Project?
submit_submission_info=Submission Info
submit_comment=Comment
submit_snapshotlabel=Snapshot Label
submit_workflow_selection=Use the following workflow to submit all modified items
submit_not_submit_warning=The following items will not be submitted
submit_submit_info=The following items will be submitted
submit_items_title=Submit Items
submit_items_desc=This page helps you to submit modified items for publishing on the website.
# New User Wizard messages # New User Wizard messages
new_user_title=New User Wizard new_user_title=New User Wizard

View File

@@ -177,6 +177,10 @@
<dialog name="editFormTemplateWorkflow" page="/jsp/wcm/create-website-wizard/form-workflow.jsp" managed-bean="EditFormWorkflowDialog" <dialog name="editFormTemplateWorkflow" page="/jsp/wcm/create-website-wizard/form-workflow.jsp" managed-bean="EditFormWorkflowDialog"
icon="/images/icons/manage_workflow_task_large.gif" title-id="form_template_workflow" icon="/images/icons/manage_workflow_task_large.gif" title-id="form_template_workflow"
description-id="form_template_workflow_desc" /> description-id="form_template_workflow_desc" />
<dialog name="submitSandboxItems" page="/jsp/wcm/submit-dialog.jsp" managed-bean="SubmitDialog"
icon="/images/icons/submit_large.gif" title-id="submit_items_title"
description-id="submit_items_desc" />
</dialogs> </dialogs>
</config> </config>

View File

@@ -116,6 +116,7 @@ public class AVMBrowseBean implements IContextListener
private String sandboxTitle = null; private String sandboxTitle = null;
private String currentPath = null; private String currentPath = null;
private AVMNode currentPathNode = null; private AVMNode currentPathNode = null;
private boolean submitAll = false;
/* component references */ /* component references */
private UIRichList foldersRichList; private UIRichList foldersRichList;
@@ -686,6 +687,21 @@ public class AVMBrowseBean implements IContextListener
} }
} }
/**
* Return the list of selected items for the current user sandbox view
*
* @return List of AVMNodeDescriptor objects representing selected items
*/
public List<AVMNodeDescriptor> getSelectedSandboxItems()
{
return this.userSandboxes.getSelectedNodes(this.username);
}
public boolean getSubmitAll()
{
return this.submitAll;
}
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
// Action event handlers // Action event handlers
@@ -740,6 +756,14 @@ public class AVMBrowseBean implements IContextListener
// update UI state ready for return to the previous screen // update UI state ready for return to the previous screen
this.location = null; this.location = null;
setCurrentPath(null); setCurrentPath(null);
this.submitAll = false;
}
public void setupSubmitAllAction(ActionEvent event)
{
setupSandboxAction(event);
this.submitAll = true;
} }
/** /**

View File

@@ -313,7 +313,7 @@ public class CreateWebsiteWizard extends BaseWizardBean
* @param params Serializable workflow params * @param params Serializable workflow params
* @param workflowRef The noderef to write the property too * @param workflowRef The noderef to write the property too
*/ */
private void serializeWorkflowParams(Serializable params, NodeRef workflowRef) public static void serializeWorkflowParams(Serializable params, NodeRef workflowRef)
{ {
try try
{ {

View File

@@ -215,13 +215,13 @@ public class EditWebsiteWizard extends CreateWebsiteWizard
} }
/** /**
* Deserialize the workflow params from a content stream * Deserialize the default workflow params from a content stream
* *
* @param workflowRef The noderef to write the property too * @param workflowRef The noderef to write the property too
* *
* @return Serializable workflow params * @return Serializable workflow params
*/ */
private Serializable deserializeWorkflowParams(NodeRef workflowRef) public static Serializable deserializeWorkflowParams(NodeRef workflowRef)
{ {
try try
{ {

View File

@@ -0,0 +1,519 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.web.bean.wcm;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.workflow.WorkflowModel;
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.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.service.cmr.workflow.WorkflowTaskState;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.alfresco.util.GUID;
import org.alfresco.util.ISO8601DateFormat;
import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.alfresco.web.bean.dialog.BaseDialogBean;
import org.alfresco.web.ui.common.Utils;
import org.alfresco.web.ui.common.component.UIListItem;
import org.alfresco.web.ui.wcm.WebResources;
/**
* @author Kevin Roast
*/
public class SubmitDialog extends BaseDialogBean
{
private String comment;
private String label;
private String[] workflowSelectedValue;
private List<ItemWrapper> submitItems;
private List<ItemWrapper> warningItems;
private HashSet<FormWorkflowWrapper> workflows;
private Map<String, FormWorkflowWrapper> formWorkflowMap;
private List<UIListItem> workflowItems;
protected AVMService avmService;
protected AVMBrowseBean avmBrowseBean;
protected WorkflowService workflowService;
protected AVMSyncService avmSyncService;
/**
* @param avmService The AVM Service to set.
*/
public void setAvmService(AVMService avmService)
{
this.avmService = avmService;
}
/**
* @param avmSyncService The AVMSyncService to set.
*/
public void setAvmSyncService(AVMSyncService avmSyncService)
{
this.avmSyncService = avmSyncService;
}
/**
* @param avmBrowseBean The AVM BrowseBean to set
*/
public void setAvmBrowseBean(AVMBrowseBean avmBrowseBean)
{
this.avmBrowseBean = avmBrowseBean;
}
/**
* @param workflowService The WorkflowService to set.
*/
public void setWorkflowService(WorkflowService workflowService)
{
this.workflowService = workflowService;
}
/**
* @see org.alfresco.web.bean.dialog.BaseDialogBean#init(java.util.Map)
*/
@Override
public void init(Map<String, String> parameters)
{
super.init(parameters);
this.comment = null;
this.label = null;
this.submitItems = null;
this.warningItems = null;
this.workflowItems = null;
this.workflows = new HashSet<FormWorkflowWrapper>(4);
// walk all the web forms attached the website, and lookup the workflow defaults for each
NodeRef websiteRef = this.avmBrowseBean.getWebsite().getNodeRef();
List<ChildAssociationRef> webFormRefs = this.nodeService.getChildAssocs(
websiteRef, WCMAppModel.ASSOC_WEBFORM, RegexQNamePattern.MATCH_ALL);
this.formWorkflowMap = new HashMap<String, FormWorkflowWrapper>(webFormRefs.size(), 1.0f);
for (ChildAssociationRef ref : webFormRefs)
{
NodeRef webFormRef = ref.getChildRef();
String form = (String)this.nodeService.getProperty(webFormRef, WCMAppModel.PROP_FORMNAME);
List<ChildAssociationRef> wfRefs = this.nodeService.getChildAssocs(
webFormRef, WCMAppModel.TYPE_WORKFLOWDEFAULTS, RegexQNamePattern.MATCH_ALL);
if (wfRefs.size() == 1)
{
NodeRef wfDefaultsRef = wfRefs.get(0).getChildRef();
String wfName = (String)this.nodeService.getProperty(wfDefaultsRef, WCMAppModel.PROP_WORKFLOW_NAME);
Map<QName, Serializable> params = (Map<QName, Serializable>)EditWebsiteWizard.deserializeWorkflowParams(
wfDefaultsRef);
this.formWorkflowMap.put(form, new FormWorkflowWrapper(wfName, params));
}
}
}
/**
* @see org.alfresco.web.bean.dialog.BaseDialogBean#finishImpl(javax.faces.context.FacesContext, java.lang.String)
*/
@Override
protected String finishImpl(FacesContext context, String outcome) throws Exception
{
// get the defaults from the workflow configuration attached to the selected workflow
Map<QName, Serializable> params = null;
String workflowName = this.workflowSelectedValue[0];
for (FormWorkflowWrapper wrapper : this.workflows)
{
if (wrapper.Name.equals(workflowName))
{
params = wrapper.Params;
}
}
if (params != null)
{
// create container for our avm workflow package
NodeRef workflowPackage = createWorkflowPackage();
params.put(WorkflowModel.ASSOC_PACKAGE, workflowPackage);
// start the workflow to get access to the start task
WorkflowDefinition wfDef = workflowService.getDefinitionByName("jbpm$" + workflowName);
WorkflowPath path = this.workflowService.startWorkflow(wfDef.id, params);
if (path != null)
{
// extract the start task
List<WorkflowTask> tasks = this.workflowService.getTasksForWorkflowPath(path.id);
if (tasks.size() == 1)
{
WorkflowTask startTask = tasks.get(0);
if (startTask.state == WorkflowTaskState.IN_PROGRESS)
{
// end the start task to trigger the first 'proper' task in the workflow
this.workflowService.endTask(startTask.id, null);
}
}
}
}
else
{
// TODO: jump to dialog and allow user to finish wf properties config!
throw new AlfrescoRuntimeException("Workflow has not been configured correctly, cannot submit items.");
}
return outcome;
}
/**
* @see org.alfresco.web.bean.dialog.BaseDialogBean#getFinishButtonDisabled()
*/
@Override
public boolean getFinishButtonDisabled()
{
return (getWorkflowSelectedValue() == null || getSubmitItemsSize() == 0);
}
/**
* @return Returns the workflow comment.
*/
public String getComment()
{
return this.comment;
}
/**
* @param comment The workflow comment to set.
*/
public void setComment(String comment)
{
this.comment = comment;
}
/**
* @return Returns the snapshot label.
*/
public String getLabel()
{
return this.label;
}
/**
* @param label The snapshot label to set.
*/
public void setLabel(String label)
{
this.label = label;
}
/**
* @return Returns the workflow Selected Value.
*/
public String[] getWorkflowSelectedValue()
{
// TODO: select default!
return this.workflowSelectedValue;
}
/**
* @param workflowSelectedValue The workflow Selected Value to set.
*/
public void setWorkflowSelectedValue(String[] workflowSelectedValue)
{
this.workflowSelectedValue = workflowSelectedValue;
}
/**
* @return List of UIListItem object representing the available workflows for the website
*/
public List<UIListItem> getWorkflowList()
{
if (this.workflowItems == null)
{
// ensure all workflows have been collected from any form generated assets
calculateSubmitItems();
// add the list of workflows for the website itself to the set
NodeRef websiteRef = this.avmBrowseBean.getWebsite().getNodeRef();
List<ChildAssociationRef> webWorkflowRefs = this.nodeService.getChildAssocs(
websiteRef, WCMAppModel.ASSOC_WEBWORKFLOWDEFAULTS, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : webWorkflowRefs)
{
NodeRef wfDefaultsRef = ref.getChildRef();
String wfName = (String)this.nodeService.getProperty(wfDefaultsRef, WCMAppModel.PROP_WORKFLOW_NAME);
Map<QName, Serializable> params = (Map<QName, Serializable>)EditWebsiteWizard.deserializeWorkflowParams(
wfDefaultsRef);
this.workflows.add(new FormWorkflowWrapper(wfName, params));
}
// build a UI item for each available workflow
List<UIListItem> items = new ArrayList<UIListItem>(this.workflows.size());
for (FormWorkflowWrapper wrapper : this.workflows)
{
WorkflowDefinition workflowDef = this.workflowService.getDefinitionByName("jbpm$" + wrapper.Name);
UIListItem item = new UIListItem();
item.setValue(workflowDef.getName());
item.setLabel(workflowDef.getTitle());
item.setDescription(workflowDef.getDescription());
item.setImage(WebResources.IMAGE_WORKFLOW_32);
items.add(item);
// add first as default TODO: what is correct here?
if (workflowSelectedValue == null)
{
workflowSelectedValue = new String[]{workflowDef.getName()};
}
}
this.workflowItems = items;
}
return this.workflowItems;
}
public List<ItemWrapper> getSubmitItems()
{
if (this.submitItems == null)
{
// this method builds all submit and warning item data structures
calculateSubmitItems();
}
return this.submitItems;
}
public int getSubmitItemsSize()
{
return getSubmitItems().size();
}
public List<ItemWrapper> getWarningItems()
{
if (this.warningItems == null)
{
// this method builds all submit and warning item data structures
calculateSubmitItems();
}
return this.warningItems;
}
public int getWarningItemsSize()
{
return this.getWarningItems().size();
}
private void calculateSubmitItems()
{
// TODO: start txn here?
List<AVMNodeDescriptor> selected;
if (this.avmBrowseBean.getSubmitAll())
{
String userStore = this.avmBrowseBean.getSandbox() + ":/";
String stagingStore = this.avmBrowseBean.getStagingStore() + ":/";
List<AVMDifference> diffs = avmSyncService.compare(-1, userStore, -1, stagingStore);
selected = new ArrayList<AVMNodeDescriptor>(diffs.size());
for (AVMDifference diff : diffs)
{
AVMNodeDescriptor node = this.avmService.lookup(-1, diff.getSourcePath());
selected.add(node);
}
}
else
{
selected = this.avmBrowseBean.getSelectedSandboxItems();
}
if (selected != null)
{
this.submitItems = new ArrayList<ItemWrapper>(selected.size());
this.warningItems = new ArrayList<ItemWrapper>(selected.size() >> 1);
for (AVMNodeDescriptor node : selected)
{
if (hasAssociatedWorkflow(AVMNodeConverter.ToNodeRef(-1, node.getPath())) == false)
{
// TODO: lookup if this item was created via a FORM - then need to lookup the workflow defaults
// for that form (and associated artifacts!) and then save that in list of workflows
NodeRef ref = AVMNodeConverter.ToNodeRef(-1, node.getPath());
if (this.nodeService.hasAspect(ref, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
{
// found an XML form instance data file
String formName = (String)this.nodeService.getProperty(ref, WCMAppModel.PROP_PARENT_FORM_NAME);
FormWorkflowWrapper wrapper = this.formWorkflowMap.get(formName);
if (wrapper.Params != null)
{
// found a workflow with params attached to the form
this.workflows.add(wrapper);
}
}
this.submitItems.add(new ItemWrapper(node));
}
else
{
this.warningItems.add(new ItemWrapper(node));
}
}
}
else
{
this.submitItems = Collections.<ItemWrapper>emptyList();
this.warningItems = Collections.<ItemWrapper>emptyList();
}
}
private boolean hasAssociatedWorkflow(NodeRef ref)
{
// TODO: does not appear to work for AVM - need a specific impl instead
return (this.workflowService.getWorkflowsForContent(ref, true).size() != 0);
}
/**
* Construct a workflow package as a layered directory over the users sandbox. The items for
* submission are pushed into the layer and the package constructed around it.
*
* @return Reference to the package
*/
private NodeRef createWorkflowPackage()
{
// TODO: add to common util class for all AVM workflows
String packagesRoot = "workflow-system:/packages";
AVMNodeDescriptor packagesDesc = avmService.lookup(-1, packagesRoot);
if (packagesDesc == null)
{
avmService.createAVMStore("workflow-system");
avmService.createDirectory("workflow-system:/", "packages");
}
List<ItemWrapper> items = getSubmitItems();
// create package paths (layered to user sandbox area as target)
String sandboxPath = AVMConstants.buildAVMStoreRootPath(avmBrowseBean.getSandbox());
String packageName = GUID.generate();
String packagesPath = packagesRoot + "/" + packageName;
avmService.createLayeredDirectory(sandboxPath, packagesRoot, packageName);
// construct diffs for selected items
List<AVMDifference> diffs = new ArrayList<AVMDifference>(this.submitItems.size());
for (ItemWrapper wrapper : this.submitItems)
{
String srcPath = sandboxPath + wrapper.getPath();
String destPath = packagesPath + wrapper.getPath();
AVMDifference diff = new AVMDifference(-1, srcPath, -1, destPath, AVMDifference.NEWER);
diffs.add(diff);
}
// write changes to layer so files are marked as modified
avmSyncService.update(diffs, true, true, false, false, null, null);
// convert package to workflow package
AVMNodeDescriptor packageDesc = avmService.lookup(-1, packagesPath);
NodeRef packageNodeRef = workflowService.createPackage(AVMNodeConverter.ToNodeRef(-1, packageDesc.getPath()));
nodeService.setProperty(packageNodeRef, WorkflowModel.PROP_IS_SYSTEM_PACKAGE, true);
return packageNodeRef;
}
/**
* Simple structure class to wrap form workflow name and default parameter values
*/
private static class FormWorkflowWrapper
{
public String Name;
public Map<QName, Serializable> Params;
FormWorkflowWrapper(String name, Map<QName, Serializable> params)
{
this.Name = name;
this.Params = params;
}
@Override
public int hashCode()
{
return this.Name.hashCode();
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof FormWorkflowWrapper)
{
return this.Name.equals( ((FormWorkflowWrapper)obj).Name );
}
else
{
return false;
}
}
}
/**
* Wrapper class to provide UI RichList component getters for an AVM node descriptor
*/
public class ItemWrapper
{
private static final String rootPath = '/' + AVMConstants.DIR_WEBAPPS;
private AVMNodeDescriptor descriptor;
public ItemWrapper(AVMNodeDescriptor descriptor)
{
this.descriptor = descriptor;
}
public String getName()
{
return descriptor.getName();
}
public String getModifiedDate()
{
return ISO8601DateFormat.format(new Date(descriptor.getModDate()));
}
public String getDescription()
{
return (String)nodeService.getProperty(
AVMNodeConverter.ToNodeRef(-1, descriptor.getPath()), ContentModel.PROP_DESCRIPTION);
}
public String getPath()
{
return descriptor.getPath().substring(descriptor.getPath().indexOf(rootPath) + rootPath.length());
}
public String getUrl()
{
return DownloadContentServlet.generateBrowserURL(
AVMNodeConverter.ToNodeRef(-1, descriptor.getPath()), descriptor.getName());
}
public String getIcon()
{
return Utils.getFileTypeImage(descriptor.getName(), true);
}
}
}

View File

@@ -337,7 +337,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
Utils.encodeRecursive(context, aquireAction( Utils.encodeRecursive(context, aquireAction(
context, mainStore, username, ACT_SANDBOX_SUBMITALL, "/images/icons/submit_all.gif", context, mainStore, username, ACT_SANDBOX_SUBMITALL, "/images/icons/submit_all.gif",
"#{AVMBrowseBean.submitAll}", null)); "#{AVMBrowseBean.setupSubmitAllAction}", "dialog:submitSandboxItems"));
out.write("&nbsp;"); out.write("&nbsp;");
Utils.encodeRecursive(context, aquireAction( Utils.encodeRecursive(context, aquireAction(
@@ -663,7 +663,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
out.write(":&nbsp;"); out.write(":&nbsp;");
Utils.encodeRecursive(fc, aquireAction( Utils.encodeRecursive(fc, aquireAction(
fc, userStorePrefix, username, ACT_SANDBOX_SUBMITSELECTED, "/images/icons/submit_all.gif", fc, userStorePrefix, username, ACT_SANDBOX_SUBMITSELECTED, "/images/icons/submit_all.gif",
"#{AVMBrowseBean.submitSelected}", null)); "#{AVMBrowseBean.setupSandboxAction}", "dialog:submitSandboxItems"));
out.write("&nbsp;"); out.write("&nbsp;");
Utils.encodeRecursive(fc, aquireAction( Utils.encodeRecursive(fc, aquireAction(
fc, userStorePrefix, username, ACT_SANDBOX_REVERTSELECTED, "/images/icons/revert_all.gif", fc, userStorePrefix, username, ACT_SANDBOX_REVERTSELECTED, "/images/icons/revert_all.gif",
@@ -1048,7 +1048,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
{ {
List<AVMNodeDescriptor> nodes = null; List<AVMNodeDescriptor> nodes = null;
if (username != null) if (username != null && this.checkedItems != null)
{ {
List<AVMNodeDescriptor> paths = this.userNodes.get(username); List<AVMNodeDescriptor> paths = this.userNodes.get(username);
if (paths != null) if (paths != null)

View File

@@ -2726,6 +2726,35 @@
</managed-property> </managed-property>
</managed-bean> </managed-bean>
<managed-bean>
<description>
The bean that backs up the Submit dialog
</description>
<managed-bean-name>SubmitDialog</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.wcm.SubmitDialog</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>avmService</property-name>
<value>#{AVMService}</value>
</managed-property>
<managed-property>
<property-name>avmSyncService</property-name>
<value>#{AVMSyncService}</value>
</managed-property>
<managed-property>
<property-name>avmBrowseBean</property-name>
<value>#{AVMBrowseBean}</value>
</managed-property>
<managed-property>
<property-name>workflowService</property-name>
<value>#{WorkflowService}</value>
</managed-property>
<managed-property>
<property-name>nodeService</property-name>
<value>#{NodeService}</value>
</managed-property>
</managed-bean>
<!-- ==================== COMPONENT GENERATOR BEANS ==================== --> <!-- ==================== COMPONENT GENERATOR BEANS ==================== -->
<managed-bean> <managed-bean>
<description> <description>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -217,7 +217,6 @@
<a:actionLink id="col10-act1" value="#{r.name}" href="#{r.url}" target="new" image="#{r.fileType16}" showLink="false" styleClass="inlineAction" /> <a:actionLink id="col10-act1" value="#{r.name}" href="#{r.url}" target="new" image="#{r.fileType16}" showLink="false" styleClass="inlineAction" />
</f:facet> </f:facet>
<a:actionLink id="col10-act2" value="#{r.name}" href="#{r.url}" target="new" /> <a:actionLink id="col10-act2" value="#{r.name}" href="#{r.url}" target="new" />
<r:lockIcon id="col10-lock" value="#{r.nodeRef}" align="absmiddle" />
</a:column> </a:column>
<%-- Description column --%> <%-- Description column --%>

View File

@@ -0,0 +1,163 @@
<%--
Copyright (C) 2005 Alfresco, Inc.
Licensed under the Mozilla Public License version 1.1
with a permitted attribution clause. You may obtain a
copy of the License at
http://www.alfresco.org/legal/license.txt
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific
language governing permissions and limitations under the
License.
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
<%@ page isELIgnored="false" %>
<h:panelGrid columns="1" cellpadding="2" style="padding-top:4px;padding-bottom:4px;"
width="100%" rowClasses="wizardSectionHeading">
<h:outputText value="&nbsp;#{msg.submit_submission_info}" escape="false" />
</h:panelGrid>
<h:panelGrid columns="2" cellpadding="2" cellpadding="2" width="100%" style="margin-left:8px">
<h:outputText value="#{msg.submit_comment}"/>
<h:inputText id="comment" value="#{DialogManager.bean.comment}" maxlength="1024" size="35" />
<h:outputText value="#{msg.submit_snapshotlabel}"/>
<h:inputText id="label" value="#{DialogManager.bean.label}" maxlength="1024" size="35" />
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="2" style="padding-top:16px;padding-bottom:4px;"
width="100%" rowClasses="wizardSectionHeading">
<h:outputText value="&nbsp;#{msg.workflow}" escape="false" />
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="2" cellpadding="2" width="100%" style="margin-left:8px">
<h:outputText value="#{msg.submit_workflow_selection}"/>
<a:selectList id="workflow-list" multiSelect="false" styleClass="selectListTable" itemStyleClass="selectListItem"
value="#{DialogManager.bean.workflowSelectedValue}">
<a:listItems value="#{DialogManager.bean.workflowList}" />
</a:selectList>
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="2" style="padding-top:16px;padding-bottom:4px;"
width="100%" rowClasses="wizardSectionHeading">
<h:outputText value="&nbsp;#{msg.modified_items}" escape="false" />
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="2" cellpadding="2" width="100%" style="margin-left:8px">
<h:panelGroup rendered="#{DialogManager.bean.warningItemsSize != 0}">
<f:verbatim><% PanelGenerator.generatePanelStart(out, request.getContextPath(), "yellowInner", "#ffffcc"); %></f:verbatim>
<h:panelGrid columns="2" cellpadding="0" cellpadding="0">
<h:graphicImage url="/images/icons/warning.gif" style="padding-top:2px;padding-right:4px" width="16" height="16"/>
<h:outputText styleClass="mainSubText" value="#{msg.submit_not_submit_warning}" />
</h:panelGrid>
<f:verbatim><% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "yellowInner"); %></f:verbatim>
<a:richList id="warning-list" viewMode="details" value="#{DialogManager.bean.warningItems}"
var="r" styleClass="recordSet" headerStyleClass="recordSetHeader" rowStyleClass="recordSetRow"
altRowStyleClass="recordSetRowAlt" width="100%" pageSize="10" initialSortColumn="name">
<%-- Primary column for details view mode --%>
<a:column id="col1" primary="true" width="100" style="padding:2px;text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.name}" value="name" mode="case-insensitive" styleClass="header"/>
</f:facet>
<f:facet name="small-icon">
<a:actionLink id="col1-icon" value="#{r.name}" href="#{r.url}" target="new" image="#{r.icon}" showLink="false" styleClass="inlineAction" />
</f:facet>
<a:actionLink id="col1-name" value="#{r.name}" href="#{r.url}" target="new" />
</a:column>
<%-- Description columns --%>
<a:column id="col2" width="200" style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.description}" value="description" styleClass="header"/>
</f:facet>
<h:outputText id="col2-desc" value="#{r.description}" />
</a:column>
<%-- Description columns --%>
<a:column id="col3" style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.path}" value="path" styleClass="header"/>
</f:facet>
<h:outputText id="col3-path" value="#{r.path}" />
</a:column>
<%-- Modified Date column --%>
<a:column id="col4" style="text-align:left; white-space:nowrap">
<f:facet name="header">
<a:sortLink label="#{msg.modified_date}" value="modifiedDate" styleClass="header"/>
</f:facet>
<h:outputText id="col4-date" value="#{r.modifiedDate}">
<a:convertXMLDate type="both" pattern="#{msg.date_time_pattern}" />
</h:outputText>
</a:column>
<a:dataPager styleClass="pager" />
</a:richList>
</h:panelGroup>
<h:panelGroup rendered="#{DialogManager.bean.submitItemsSize != 0}">
<f:verbatim><% PanelGenerator.generatePanelStart(out, request.getContextPath(), "yellowInner", "#ffffcc"); %></f:verbatim>
<h:panelGrid columns="2" cellpadding="0" cellpadding="0">
<h:graphicImage url="/images/icons/info_icon.gif" style="padding-top:2px;padding-right:4px" width="16" height="16"/>
<h:outputText styleClass="mainSubText" value="#{msg.submit_submit_info}" />
</h:panelGrid>
<f:verbatim><% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "yellowInner"); %></f:verbatim>
<a:richList id="submit-list" viewMode="details" value="#{DialogManager.bean.submitItems}"
var="r" styleClass="recordSet" headerStyleClass="recordSetHeader" rowStyleClass="recordSetRow"
altRowStyleClass="recordSetRowAlt" width="100%" pageSize="10" initialSortColumn="name">
<%-- Primary column for details view mode --%>
<a:column id="col10" primary="true" width="100" style="padding:2px;text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.name}" value="name" mode="case-insensitive" styleClass="header"/>
</f:facet>
<f:facet name="small-icon">
<a:actionLink id="col10-icon" value="#{r.name}" href="#{r.url}" target="new" image="#{r.icon}" showLink="false" styleClass="inlineAction" />
</f:facet>
<a:actionLink id="col10-name" value="#{r.name}" href="#{r.url}" target="new" />
</a:column>
<%-- Description columns --%>
<a:column id="col11" width="200" style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.description}" value="description" styleClass="header"/>
</f:facet>
<h:outputText id="col11-desc" value="#{r.description}" />
</a:column>
<%-- Description columns --%>
<a:column id="col12" style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.path}" value="path" styleClass="header"/>
</f:facet>
<h:outputText id="col12-path" value="#{r.path}" />
</a:column>
<%-- Modified Date column --%>
<a:column id="col13" style="text-align:left; white-space:nowrap">
<f:facet name="header">
<a:sortLink label="#{msg.modified_date}" value="modifiedDate" styleClass="header"/>
</f:facet>
<h:outputText id="col13-date" value="#{r.modifiedDate}">
<a:convertXMLDate type="both" pattern="#{msg.date_time_pattern}" />
</h:outputText>
</a:column>
<a:dataPager styleClass="pager" />
</a:richList>
</h:panelGroup>
</h:panelGrid>