mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
. WCM UI
- Added Edit and Delete actions for AVM files and Delete action for AVM folders - Available on the Modified Items list for a user and also in the website sandbox browse screens - Edit is working using the inline editors for plain text and HTML files - XML form content editing to be integrated shortly! - Edit for non-inline editable files is working (i.e. download file), but no "Update" action available at present for saving updates - Delete will delete files/folders structures from the current sandbox, deleted files in a layer are shown in My Modified Files (see below) - User sandbox My Modified Files now shows deleted files as differences (as ghosted out rows) - Refactoring of the modified Create Content Wizard into a new wizard Create Web Content Wizard - responsible for creating content in the AVM store rather than usual SpacesStore - removed XML specific handling from Create Content Wizard (now only present in Create Web Content Wizard) - Create Content action added to sandbox view - NOTE: does not yet create content in the AVM world! - Added "jsp" filetype as plain text format mimetype (to allow inline-edit for JSP files as website content) - Open/closed state of My Modified Files panel is remembered between screen refreshes git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3864 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -813,11 +813,18 @@ modified_items=Modified Items
|
||||
store_created_on=Created On
|
||||
store_created_by=Created By
|
||||
store_working_users=There are {0} user(s) working on this website.
|
||||
avm_node_deleted=Deleted
|
||||
|
||||
# Website actions and dialog messages
|
||||
title_import_content=Import Content into Website
|
||||
import_website_content_title=Import Content into Website
|
||||
import_website_content_desc=Use this dialog to import an archive of content into the root of the website.
|
||||
delete_avm_file_info=To remove this file from the sandbox, click OK.
|
||||
delete_avm_file_confirm=Are you sure you want to remove \"{0}\" from the sandbox?
|
||||
delete_folder=Delete Folder
|
||||
delete_avm_folder_info=To remove this folder and its contents from the sandbox, click OK.
|
||||
delete_avm_folder_confirm=Are you sure you want to remove \"{0}\" and its contents from the sandbox?
|
||||
error_delete_folder=Unable to delete Folder due to system error:
|
||||
|
||||
# New User Wizard messages
|
||||
new_user_title=New User Wizard
|
||||
|
@@ -114,6 +114,17 @@
|
||||
<dialog name="emailSpaceUsers" page="/jsp/users/email-space-users.jsp" managed-bean="EmailSpaceUsersDialog"
|
||||
icon="/images/icons/email_users_large.gif" title-id="email_space_users"
|
||||
description-id="email_space_users_desc" />
|
||||
|
||||
<!-- -->
|
||||
<!-- WCM Dialogs -->
|
||||
|
||||
<dialog name="deleteAvmFile" page="/jsp/dialog/delete.jsp" managed-bean="DeleteFileDialog"
|
||||
icon="/images/icons/delete_large.gif" title-id="delete_file"
|
||||
description-id="delete_avm_file_info" />
|
||||
|
||||
<dialog name="deleteAvmFolder" page="/jsp/dialog/delete.jsp" managed-bean="DeleteFolderDialog"
|
||||
icon="/images/icons/delete_large.gif" title-id="delete_folder"
|
||||
description-id="delete_avm_folder_info" />
|
||||
</dialogs>
|
||||
</config>
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<actions>
|
||||
|
||||
<!-- Edit WCM document -->
|
||||
<action id="edit_doc">
|
||||
<action id="edit_file">
|
||||
<label-id>edit</label-id>
|
||||
<image>/images/icons/edit_icon.gif</image>
|
||||
<action-listener>#{AVMEditBean.setupEditAction}</action-listener>
|
||||
@@ -13,17 +13,53 @@
|
||||
</params>
|
||||
</action>
|
||||
|
||||
<!-- Delete AVM file -->
|
||||
<action id="delete_file">
|
||||
<label-id>delete</label-id>
|
||||
<image>/images/icons/delete.gif</image>
|
||||
<action-listener>#{AVMBrowseBean.setupContentAction}</action-listener>
|
||||
<action>dialog:deleteAvmFile</action>
|
||||
<params>
|
||||
<param name="id">#{actionContext.path}</param>
|
||||
</params>
|
||||
</action>
|
||||
|
||||
<!-- Delete AVM folder -->
|
||||
<action id="delete_folder">
|
||||
<label-id>delete</label-id>
|
||||
<image>/images/icons/delete.gif</image>
|
||||
<action-listener>#{AVMBrowseBean.setupContentAction}</action-listener>
|
||||
<action>dialog:deleteAvmFolder</action>
|
||||
<params>
|
||||
<param name="id">#{actionContext.path}</param>
|
||||
</params>
|
||||
</action>
|
||||
|
||||
|
||||
<!-- Actions for a document in the AVM Browse screen -->
|
||||
<action-group id="avm_file_browse">
|
||||
<show-link>false</show-link>
|
||||
<action idref="edit_doc" />
|
||||
<action idref="edit_file" />
|
||||
<action idref="delete_file" />
|
||||
</action-group>
|
||||
|
||||
<!-- Actions for a folder in the AVM Browse screen -->
|
||||
<action-group id="avm_folder_browse">
|
||||
<show-link>false</show-link>
|
||||
<action idref="delete_folder" />
|
||||
</action-group>
|
||||
|
||||
<!-- Actions for a document in Modified Files list -->
|
||||
<action-group id="avm_file_modified">
|
||||
<show-link>false</show-link>
|
||||
<action idref="edit_doc" />
|
||||
<action idref="edit_file" />
|
||||
<action idref="delete_file" />
|
||||
</action-group>
|
||||
|
||||
<!-- Actions for a folder in Modified Files list -->
|
||||
<action-group id="avm_folder_modified">
|
||||
<show-link>false</show-link>
|
||||
<action idref="delete_folder" />
|
||||
</action-group>
|
||||
|
||||
</actions>
|
||||
|
@@ -145,7 +145,7 @@
|
||||
</step>
|
||||
</wizard>
|
||||
|
||||
<!-- Definition of the add content wizard -->
|
||||
<!-- Definition of the Create Content wizard -->
|
||||
<wizard name="createContent" managed-bean="CreateContentWizard"
|
||||
title-id="create_content_title" description-id="create_content_desc"
|
||||
icon="/images/icons/new_content_large.gif">
|
||||
@@ -162,12 +162,6 @@
|
||||
description-id="create_content_step2_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</condition>
|
||||
<condition if="#{CreateContentWizard.mimeType == 'text/xml'}">
|
||||
<page path="/jsp/content/create-content-wizard/create-xml.jsp"
|
||||
title-id="create_content_step2_title"
|
||||
description-id="create_content_step2_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</condition>
|
||||
<!-- Default to the inline text editor -->
|
||||
<page path="/jsp/content/create-content-wizard/create-text.jsp"
|
||||
title-id="create_content_step2_title"
|
||||
@@ -182,6 +176,44 @@
|
||||
</step>
|
||||
</wizard>
|
||||
|
||||
<!-- Definition of the Create Web Content wizard -->
|
||||
<wizard name="createWebContent" managed-bean="CreateWebContentWizard"
|
||||
title-id="create_content_title" description-id="create_content_desc"
|
||||
icon="/images/icons/new_content_large.gif">
|
||||
<step name="details" title-id="details" description-id="create_content_step1_desc">
|
||||
<page path="/jsp/wcm/create-web-content-wizard/details.jsp"
|
||||
title-id="create_content_step1_title"
|
||||
description-id="create_content_step1_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</step>
|
||||
<step name="content" title-id="enter_content" description-id="create_content_step2_desc">
|
||||
<condition if="#{CreateWebContentWizard.mimeType == 'text/html'}">
|
||||
<page path="/jsp/wcm/create-web-content-wizard/create-html.jsp"
|
||||
title-id="create_content_step2_title"
|
||||
description-id="create_content_step2_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</condition>
|
||||
<condition if="#{CreateWebContentWizard.mimeType == 'text/xml'}">
|
||||
<page path="/jsp/wcm/create-web-content-wizard/create-xml.jsp"
|
||||
title-id="create_content_step2_title"
|
||||
description-id="create_content_step2_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</condition>
|
||||
<!-- Default to the inline text editor -->
|
||||
<page path="/jsp/wcm/create-web-content-wizard/create-text.jsp"
|
||||
title-id="create_content_step2_title"
|
||||
description-id="create_content_step2_desc"
|
||||
instruction-id="default_instruction" />
|
||||
</step>
|
||||
<step name="summary" title-id="summary" description-id="summary_step_description">
|
||||
<page path="/jsp/wizard/summary.jsp"
|
||||
title-id="summary"
|
||||
description-id="summary_desc"
|
||||
instruction-id="content_finish_instruction" />
|
||||
</step>
|
||||
</wizard>
|
||||
|
||||
<!-- Definition of the Create XML Type wizard -->
|
||||
<wizard name="createXMLContentType" managed-bean="CreateXmlContentTypeWizard"
|
||||
title-id="create_xml_content_type_title" description-id="create_xml_content_type_desc"
|
||||
icon="/images/icons/new_content_large.gif">
|
||||
|
@@ -53,8 +53,8 @@
|
||||
<unzip src="${dir.common.lib}/dojo-0.3.1-ajax.zip"
|
||||
dest="${dir.assemble}/scripts/ajax"/>
|
||||
<delete dir="${dir.assemble}/scripts/ajax/dojo"/>
|
||||
<move file="${dir.assemble}/scripts/ajax/dojo-0.3.1-ajax"
|
||||
tofile="${dir.assemble}/scripts/ajax/dojo"/>
|
||||
<rename src="${dir.assemble}/scripts/ajax/dojo-0.3.1-ajax"
|
||||
dest="${dir.assemble}/scripts/ajax/dojo"/>
|
||||
<delete dir="${dir.assemble}/scripts/ajax/dojo/tests"/>
|
||||
<delete dir="${dir.assemble}/scripts/ajax/dojo/demos"/>
|
||||
|
||||
|
@@ -944,10 +944,10 @@ public class CheckinCheckoutBean
|
||||
private static Log logger = LogFactory.getLog(CheckinCheckoutBean.class);
|
||||
|
||||
/** I18N messages */
|
||||
private static final String MSG_ERROR_CHECKIN = "error_checkin";
|
||||
private static final String MSG_ERROR_CANCELCHECKOUT = "error_cancel_checkout";
|
||||
private static final String MSG_ERROR_UPDATE = "error_update";
|
||||
private static final String MSG_ERROR_CHECKOUT = "error_checkout";
|
||||
public static final String MSG_ERROR_CHECKIN = "error_checkin";
|
||||
public static final String MSG_ERROR_CANCELCHECKOUT = "error_cancel_checkout";
|
||||
public static final String MSG_ERROR_UPDATE = "error_update";
|
||||
public static final String MSG_ERROR_CHECKOUT = "error_checkout";
|
||||
|
||||
/** constants for copy location selection */
|
||||
private static final String COPYLOCATION_CURRENT = "current";
|
||||
|
@@ -17,7 +17,6 @@
|
||||
package org.alfresco.web.bean.content;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
@@ -35,17 +34,9 @@ import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.alfresco.web.data.IDataContainer;
|
||||
import org.alfresco.web.data.QuickSort;
|
||||
import org.alfresco.web.templating.*;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.service.cmr.model.FileInfo;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import java.io.OutputStreamWriter;
|
||||
import org.alfresco.web.app.servlet.FacesHelper;
|
||||
|
||||
/**
|
||||
* Bean implementation for the "Create Content Wizard" dialog
|
||||
*
|
||||
@@ -54,11 +45,9 @@ import org.alfresco.web.app.servlet.FacesHelper;
|
||||
public class CreateContentWizard extends BaseContentWizard
|
||||
{
|
||||
protected String content = null;
|
||||
protected String templateTypeName;
|
||||
protected List<SelectItem> createMimeTypes;
|
||||
|
||||
private static final Log LOGGER =
|
||||
LogFactory.getLog(CreateContentWizard.class);
|
||||
private static Log logger = LogFactory.getLog(CreateContentWizard.class);
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
@@ -68,25 +57,7 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
protected String finishImpl(FacesContext context, String outcome)
|
||||
throws Exception
|
||||
{
|
||||
LOGGER.debug("saving file content to " + this.fileName);
|
||||
saveContent(null, this.content);
|
||||
if (this.templateTypeName != null)
|
||||
{
|
||||
LOGGER.debug("generating template output for " + this.templateTypeName);
|
||||
this.nodeService.setProperty(this.createdNode,
|
||||
TemplatingService.TT_QNAME,
|
||||
this.templateTypeName);
|
||||
TemplatingService ts = TemplatingService.getInstance();
|
||||
TemplateType tt = this.getTemplateType();
|
||||
OutputUtil.generate(this.createdNode,
|
||||
ts.parseXML(this.content),
|
||||
tt,
|
||||
this.fileName,
|
||||
this.getContainerNodeRef(),
|
||||
this.fileFolderService,
|
||||
this.contentService,
|
||||
this.nodeService);
|
||||
}
|
||||
|
||||
// return the default outcome
|
||||
return outcome;
|
||||
@@ -99,7 +70,6 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
|
||||
this.content = null;
|
||||
this.inlineEdit = true;
|
||||
this.templateTypeName = null;
|
||||
this.mimeType = MimetypeMap.MIMETYPE_HTML;
|
||||
}
|
||||
|
||||
@@ -163,20 +133,6 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public List<SelectItem> getCreateTemplateTypes()
|
||||
{
|
||||
Collection<TemplateType> ttl = TemplatingService.getInstance().getTemplateTypes();
|
||||
List<SelectItem> sil = new ArrayList<SelectItem>(ttl.size());
|
||||
for (TemplateType tt : ttl)
|
||||
{
|
||||
sil.add(new SelectItem(tt.getName(), tt.getName()));
|
||||
}
|
||||
|
||||
QuickSort sorter = new QuickSort(sil, "label", true, IDataContainer.SORT_CASEINSENSITIVE);
|
||||
sorter.sort();
|
||||
return sil;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns a list of mime types to allow the user to select from
|
||||
*/
|
||||
@@ -213,12 +169,12 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warn("Could not find 'create-mime-types' configuration element");
|
||||
logger.warn("Could not find 'create-mime-types' configuration element");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warn("Could not find 'Content Wizards' configuration section");
|
||||
logger.warn("Could not find 'Content Wizards' configuration section");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -226,25 +182,6 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
return this.createMimeTypes;
|
||||
}
|
||||
|
||||
public String getTemplateTypeName()
|
||||
{
|
||||
return this.templateTypeName;
|
||||
}
|
||||
|
||||
public TemplateType getTemplateType()
|
||||
{
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
return ts.getTemplateType(this.getTemplateTypeName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param templateType Sets the currently selected template type
|
||||
*/
|
||||
public void setTemplateTypeName(final String templateTypeName)
|
||||
{
|
||||
this.templateTypeName = templateTypeName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the summary data for the wizard.
|
||||
*/
|
||||
@@ -261,6 +198,7 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
getSummaryMimeType(this.mimeType)});
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Action event handlers
|
||||
|
||||
@@ -272,12 +210,4 @@ public class CreateContentWizard extends BaseContentWizard
|
||||
// clear the content as HTML is not compatible with the plain text box etc.
|
||||
this.content = null;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Service Injection
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Helper methods
|
||||
|
||||
}
|
||||
|
@@ -51,6 +51,7 @@ import org.alfresco.web.ui.common.component.UIActionLink;
|
||||
import org.alfresco.web.ui.common.component.UIBreadcrumb;
|
||||
import org.alfresco.web.ui.common.component.data.UIRichList;
|
||||
import org.alfresco.web.ui.wcm.WebResources;
|
||||
import org.alfresco.web.ui.wcm.component.UIUserSandboxes;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
@@ -74,12 +75,19 @@ public class AVMBrowseBean implements IContextListener
|
||||
private String sandboxTitle = null;
|
||||
private String currentPath = null;
|
||||
|
||||
/* component references */
|
||||
private UIRichList foldersRichList;
|
||||
private UIRichList filesRichList;
|
||||
private UIUserSandboxes userSandboxes;
|
||||
|
||||
/* transient lists of files/folders for a directory */
|
||||
private List<Map> files = null;
|
||||
private List<Map> folders = null;
|
||||
|
||||
/** Current AVM Node context*/
|
||||
private AVMNode avmNode = null;
|
||||
|
||||
/** breadcrumb location */
|
||||
private List<IBreadcrumbHandler> location = null;
|
||||
|
||||
/** The NodeService to be used by the bean */
|
||||
@@ -132,6 +140,11 @@ public class AVMBrowseBean implements IContextListener
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
public NodeService getNodeService()
|
||||
{
|
||||
return this.nodeService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dictionaryService The DictionaryService to set.
|
||||
*/
|
||||
@@ -240,6 +253,22 @@ public class AVMBrowseBean implements IContextListener
|
||||
this.filesRichList = filesRichList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the userSandboxes.
|
||||
*/
|
||||
public UIUserSandboxes getUserSandboxes()
|
||||
{
|
||||
return this.userSandboxes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param userSandboxes The userSandboxes to set.
|
||||
*/
|
||||
public void setUserSandboxes(UIUserSandboxes userSandboxes)
|
||||
{
|
||||
this.userSandboxes = userSandboxes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the sandbox.
|
||||
*/
|
||||
@@ -316,6 +345,53 @@ public class AVMBrowseBean implements IContextListener
|
||||
return this.navigator.getCurrentNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the current AVM node context.
|
||||
*/
|
||||
public AVMNode getAvmNode()
|
||||
{
|
||||
return this.avmNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmNode The AVM node context to set.
|
||||
*/
|
||||
public void setAvmNode(AVMNode avmNode)
|
||||
{
|
||||
this.avmNode = avmNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmRef The AVMNodeDescriptor context to set.
|
||||
*/
|
||||
public void setAVMNodeDescriptor(AVMNodeDescriptor avmRef)
|
||||
{
|
||||
this.avmNode = new AVMNode(avmRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Breadcrumb location list
|
||||
*/
|
||||
public List<IBreadcrumbHandler> getLocation()
|
||||
{
|
||||
if (this.location == null)
|
||||
{
|
||||
List<IBreadcrumbHandler> loc = new ArrayList<IBreadcrumbHandler>(8);
|
||||
loc.add(new AVMBreadcrumbHandler(getCurrentPath()));
|
||||
|
||||
this.location = loc;
|
||||
}
|
||||
return this.location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param location Breadcrumb location list
|
||||
*/
|
||||
public void setLocation(List<IBreadcrumbHandler> location)
|
||||
{
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Map of avm node objects representing the folders with the current website space
|
||||
*/
|
||||
@@ -390,6 +466,10 @@ public class AVMBrowseBean implements IContextListener
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Action event handlers
|
||||
|
||||
/**
|
||||
* Update the UI after a folder click action in the website browsing screens
|
||||
*/
|
||||
@@ -434,28 +514,34 @@ public class AVMBrowseBean implements IContextListener
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Breadcrumb location list
|
||||
* Action event called by all actions that need to setup a Content node context on the
|
||||
* before an action page/wizard is called. The context will be an AVMNodeDescriptor in
|
||||
* setAVMNode() which can be retrieved on action pages via getAVMNode().
|
||||
*
|
||||
* @param event ActionEvent
|
||||
*/
|
||||
public List<IBreadcrumbHandler> getLocation()
|
||||
public void setupContentAction(ActionEvent event)
|
||||
{
|
||||
if (this.location == null)
|
||||
UIActionLink link = (UIActionLink)event.getComponent();
|
||||
Map<String, String> params = link.getParameterMap();
|
||||
String path = params.get("id");
|
||||
if (path != null && path.length() != 0)
|
||||
{
|
||||
List<IBreadcrumbHandler> loc = new ArrayList<IBreadcrumbHandler>(8);
|
||||
loc.add(new AVMBreadcrumbHandler(getCurrentPath()));
|
||||
|
||||
this.location = loc;
|
||||
setAVMNodeDescriptor(avmService.lookup(-1, path));
|
||||
}
|
||||
return this.location;
|
||||
else
|
||||
{
|
||||
setAVMNodeDescriptor(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param location Breadcrumb location list
|
||||
*/
|
||||
public void setLocation(List<IBreadcrumbHandler> location)
|
||||
{
|
||||
this.location = location;
|
||||
// update UI state ready for return after dialog close
|
||||
UIContextService.getInstance(FacesContext.getCurrentInstance()).notifyBeans();
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Private helpers
|
||||
|
||||
/**
|
||||
* @return the internal AVM path to the current folder for browsing
|
||||
*/
|
||||
|
@@ -16,21 +16,24 @@
|
||||
*/
|
||||
package org.alfresco.web.bean.wcm;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.event.ActionEvent;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentService;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.alfresco.web.ui.common.component.UIActionLink;
|
||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.app.servlet.DownloadContentServlet;
|
||||
import org.alfresco.web.bean.CheckinCheckoutBean;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
|
||||
/**
|
||||
* Bean backing the edit pages for a AVM node content.
|
||||
@@ -39,9 +42,6 @@ import org.alfresco.web.ui.common.component.UIActionLink;
|
||||
*/
|
||||
public class AVMEditBean
|
||||
{
|
||||
/** Current AVM Node context*/
|
||||
private AVMNodeDescriptor avmNode = null;
|
||||
|
||||
private String documentContent = null;
|
||||
|
||||
private String editorOutput = null;
|
||||
@@ -49,6 +49,9 @@ public class AVMEditBean
|
||||
/** AVM service bean reference */
|
||||
protected AVMService avmService;
|
||||
|
||||
/** AVM Browse Bean reference */
|
||||
protected AVMBrowseBean avmBrowseBean;
|
||||
|
||||
/** The ContentService bean reference */
|
||||
protected ContentService contentService;
|
||||
|
||||
@@ -64,6 +67,14 @@ public class AVMEditBean
|
||||
this.avmService = avmService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmBrowseBean The AVMBrowseBean to set.
|
||||
*/
|
||||
public void setAvmBrowseBean(AVMBrowseBean avmBrowseBean)
|
||||
{
|
||||
this.avmBrowseBean = avmBrowseBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param contentService The ContentService to set.
|
||||
*/
|
||||
@@ -75,17 +86,33 @@ public class AVMEditBean
|
||||
/**
|
||||
* @return Returns the current AVM node context.
|
||||
*/
|
||||
public AVMNodeDescriptor getAVMNode()
|
||||
public AVMNode getAvmNode()
|
||||
{
|
||||
return this.avmNode;
|
||||
return this.avmBrowseBean.getAvmNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmNode The AVM node context to set.
|
||||
* @return Large file icon for current AVM node
|
||||
*/
|
||||
public void setAVMNode(AVMNodeDescriptor avmNode)
|
||||
public String getFileType32()
|
||||
{
|
||||
this.avmNode = avmNode;
|
||||
return Utils.getFileTypeImage(getAvmNode().getName(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Small file icon for current AVM node
|
||||
*/
|
||||
public String getFileType16()
|
||||
{
|
||||
return Utils.getFileTypeImage(getAvmNode().getName(), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Content URL for current AVM node
|
||||
*/
|
||||
public String getUrl()
|
||||
{
|
||||
return DownloadContentServlet.generateDownloadURL(AVMNodeConverter.ToNodeRef(-1, getAvmNode().getPath()), getAvmNode().getName());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,38 +151,16 @@ public class AVMEditBean
|
||||
// ------------------------------------------------------------------------------
|
||||
// Action event handlers
|
||||
|
||||
/**
|
||||
* Action event called by all actions that need to setup a Content node context on the
|
||||
* before an action page/wizard is called. The context will be an AVMNodeDescriptor in
|
||||
* setAVMNode() which can be retrieved on action pages via getAVMNode().
|
||||
*
|
||||
* @param event ActionEvent
|
||||
*/
|
||||
public void setupContentAction(ActionEvent event)
|
||||
{
|
||||
UIActionLink link = (UIActionLink)event.getComponent();
|
||||
Map<String, String> params = link.getParameterMap();
|
||||
String path = params.get("id");
|
||||
if (path != null && path.length() != 0)
|
||||
{
|
||||
setAVMNode(avmService.lookup(-1, path));
|
||||
}
|
||||
else
|
||||
{
|
||||
setAVMNode(null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Action handler called to calculate which editing screen to display based on the mimetype
|
||||
* of a document. If appropriate, the in-line editing screen will be shown.
|
||||
*/
|
||||
public void setupEditAction(ActionEvent event)
|
||||
{
|
||||
setupContentAction(event);
|
||||
this.avmBrowseBean.setupContentAction(event);
|
||||
|
||||
// retrieve the content reader for this node
|
||||
NodeRef avmRef = AVMNodeConverter.ToNodeRef(-1, getAVMNode().getPath());
|
||||
NodeRef avmRef = AVMNodeConverter.ToNodeRef(-1, getAvmNode().getPath());
|
||||
ContentReader reader = contentService.getReader(avmRef, ContentModel.PROP_CONTENT);
|
||||
if (reader != null)
|
||||
{
|
||||
@@ -201,4 +206,81 @@ public class AVMEditBean
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Action called upon completion of the Edit File download page
|
||||
*/
|
||||
public String editFileOK()
|
||||
{
|
||||
String outcome = null;
|
||||
|
||||
AVMNode node = getAvmNode();
|
||||
if (node != null)
|
||||
{
|
||||
resetState();
|
||||
|
||||
outcome = AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Action handler called to set the content of a node from an inline editing page.
|
||||
*/
|
||||
public String editInlineOK()
|
||||
{
|
||||
String outcome = null;
|
||||
|
||||
UserTransaction tx = null;
|
||||
|
||||
AVMNode avmNode = getAvmNode();
|
||||
if (avmNode != null)
|
||||
{
|
||||
NodeRef avmRef = AVMNodeConverter.ToNodeRef(-1, getAvmNode().getPath());
|
||||
try
|
||||
{
|
||||
tx = Repository.getUserTransaction(FacesContext.getCurrentInstance());
|
||||
tx.begin();
|
||||
|
||||
// get an updating writer that we can use to modify the content on the current node
|
||||
ContentWriter writer = this.contentService.getWriter(avmRef, ContentModel.PROP_CONTENT, true);
|
||||
writer.putContent(this.editorOutput);
|
||||
|
||||
// commit the transaction
|
||||
tx.commit();
|
||||
|
||||
// TODO: generate template content
|
||||
/*if (nodeService.getProperty(node.getNodeRef(),
|
||||
TemplatingService.TT_QNAME) != null)
|
||||
{
|
||||
OutputUtil.regenerate(node.getNodeRef(),
|
||||
this.contentService,
|
||||
this.nodeService);
|
||||
}*/
|
||||
|
||||
resetState();
|
||||
|
||||
outcome = AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
catch (Throwable err)
|
||||
{
|
||||
// rollback the transaction
|
||||
try { if (tx != null) {tx.rollback();} } catch (Exception tex) {}
|
||||
Utils.addErrorMessage(Application.getMessage(
|
||||
FacesContext.getCurrentInstance(), CheckinCheckoutBean.MSG_ERROR_UPDATE) + err.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
|
||||
private void resetState()
|
||||
{
|
||||
// clean up and clear action context
|
||||
//clearUpload();
|
||||
this.avmBrowseBean.setAvmNode(null);
|
||||
setDocumentContent(null);
|
||||
setEditorOutput(null);
|
||||
}
|
||||
}
|
||||
|
@@ -16,21 +16,19 @@
|
||||
*/
|
||||
package org.alfresco.web.bean.wcm;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.repo.domain.PropertyValue;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.namespace.QNameMap;
|
||||
import org.alfresco.web.bean.repository.NodePropertyResolver;
|
||||
import org.alfresco.web.bean.repository.QNameNodeMap;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
|
||||
/**
|
||||
@@ -67,6 +65,16 @@ public class AVMNode implements Map<String, Object>
|
||||
return this.version;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.avmRef.getName();
|
||||
}
|
||||
|
||||
public NodeRef getNodeRef()
|
||||
{
|
||||
return AVMNodeConverter.ToNodeRef(this.version, this.path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return All the properties known about this node.
|
||||
*/
|
||||
@@ -156,22 +164,7 @@ public class AVMNode implements Map<String, Object>
|
||||
*/
|
||||
public Object get(Object key)
|
||||
{
|
||||
Object obj = null;
|
||||
|
||||
// there are some things that aren't available as properties
|
||||
// but from method calls, so for these handle them individually
|
||||
Map<String, Object> props = getProperties();
|
||||
/*if (propsInitialised == false)
|
||||
{
|
||||
// well known properties required as publically accessable map attributes
|
||||
props.put("id", this.getId());
|
||||
props.put("name", this.getName()); // TODO: perf test pulling back single prop here instead of all!
|
||||
props.put("nodeRef", this.getNodeRef());
|
||||
|
||||
propsInitialised = true;
|
||||
}*/
|
||||
|
||||
return props.get(key);
|
||||
return getProperties().get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -0,0 +1,269 @@
|
||||
/*
|
||||
* 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.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.event.ValueChangeEvent;
|
||||
import javax.faces.model.SelectItem;
|
||||
|
||||
import org.alfresco.config.Config;
|
||||
import org.alfresco.config.ConfigElement;
|
||||
import org.alfresco.config.ConfigService;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.content.BaseContentWizard;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.alfresco.web.data.IDataContainer;
|
||||
import org.alfresco.web.data.QuickSort;
|
||||
import org.alfresco.web.templating.OutputUtil;
|
||||
import org.alfresco.web.templating.TemplateType;
|
||||
import org.alfresco.web.templating.TemplatingService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Bean implementation for the "Create Web Content Wizard" dialog
|
||||
*/
|
||||
public class CreateWebContentWizard extends BaseContentWizard
|
||||
{
|
||||
protected String content = null;
|
||||
protected String templateTypeName;
|
||||
protected List<SelectItem> createMimeTypes;
|
||||
|
||||
private static final Log logger = LogFactory.getLog(CreateWebContentWizard.class);
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Wizard implementation
|
||||
|
||||
@Override
|
||||
protected String finishImpl(FacesContext context, String outcome)
|
||||
throws Exception
|
||||
{
|
||||
logger.debug("saving file content to " + this.fileName);
|
||||
saveContent(null, this.content);
|
||||
if (this.templateTypeName != null)
|
||||
{
|
||||
logger.debug("generating template output for " + this.templateTypeName);
|
||||
this.nodeService.setProperty(this.createdNode,
|
||||
TemplatingService.TT_QNAME,
|
||||
this.templateTypeName);
|
||||
TemplatingService ts = TemplatingService.getInstance();
|
||||
TemplateType tt = this.getTemplateType();
|
||||
OutputUtil.generate(this.createdNode,
|
||||
ts.parseXML(this.content),
|
||||
tt,
|
||||
this.fileName,
|
||||
this.getContainerNodeRef(),
|
||||
this.fileFolderService,
|
||||
this.contentService,
|
||||
this.nodeService);
|
||||
}
|
||||
|
||||
// return the default outcome
|
||||
return outcome;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Map<String, String> parameters)
|
||||
{
|
||||
super.init(parameters);
|
||||
|
||||
this.content = null;
|
||||
this.inlineEdit = true;
|
||||
this.templateTypeName = null;
|
||||
this.mimeType = MimetypeMap.MIMETYPE_XML;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getNextButtonDisabled()
|
||||
{
|
||||
// TODO: Allow the next button state to be configured so that
|
||||
// wizard implementations don't have to worry about
|
||||
// checking step numbers
|
||||
|
||||
boolean disabled = false;
|
||||
int step = Application.getWizardManager().getCurrentStep();
|
||||
switch(step)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
disabled = (this.fileName == null || this.fileName.length() == 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return disabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doPostCommitProcessing(FacesContext context, String outcome)
|
||||
{
|
||||
// as we were successful, go to the set properties dialog if asked
|
||||
// to otherwise just return
|
||||
if (this.showOtherProperties)
|
||||
{
|
||||
// we are going to immediately edit the properties so we need
|
||||
// to setup the BrowseBean context appropriately
|
||||
this.browseBean.setDocument(new Node(this.createdNode));
|
||||
|
||||
return getDefaultFinishOutcome() + AlfrescoNavigationHandler.OUTCOME_SEPARATOR +
|
||||
"dialog:setContentProperties";
|
||||
}
|
||||
else
|
||||
{
|
||||
return outcome;
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Bean Getters and Setters
|
||||
|
||||
/**
|
||||
* @return Returns the content from the edited form.
|
||||
*/
|
||||
public String getContent()
|
||||
{
|
||||
return this.content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param content The content to edit (should be clear initially)
|
||||
*/
|
||||
public void setContent(String content)
|
||||
{
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public List<SelectItem> getCreateTemplateTypes()
|
||||
{
|
||||
Collection<TemplateType> ttl = TemplatingService.getInstance().getTemplateTypes();
|
||||
List<SelectItem> sil = new ArrayList<SelectItem>(ttl.size());
|
||||
for (TemplateType tt : ttl)
|
||||
{
|
||||
sil.add(new SelectItem(tt.getName(), tt.getName()));
|
||||
}
|
||||
|
||||
QuickSort sorter = new QuickSort(sil, "label", true, IDataContainer.SORT_CASEINSENSITIVE);
|
||||
sorter.sort();
|
||||
return sil;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns a list of mime types to allow the user to select from
|
||||
*/
|
||||
public List<SelectItem> getCreateMimeTypes()
|
||||
{
|
||||
if (this.createMimeTypes == null)
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
|
||||
// add the well known object type to start with
|
||||
this.createMimeTypes = new ArrayList<SelectItem>(5);
|
||||
|
||||
// add the configured create mime types to the list
|
||||
ConfigService svc = Application.getConfigService(context);
|
||||
Config wizardCfg = svc.getConfig("Content Wizards");
|
||||
if (wizardCfg != null)
|
||||
{
|
||||
ConfigElement typesCfg = wizardCfg.getConfigElement("create-mime-types");
|
||||
if (typesCfg != null)
|
||||
{
|
||||
for (ConfigElement child : typesCfg.getChildren())
|
||||
{
|
||||
String currentMimeType = child.getAttribute("name");
|
||||
if (currentMimeType != null)
|
||||
{
|
||||
String label = getSummaryMimeType(currentMimeType);
|
||||
this.createMimeTypes.add(new SelectItem(currentMimeType, label));
|
||||
}
|
||||
}
|
||||
|
||||
// make sure the list is sorted by the label
|
||||
QuickSort sorter = new QuickSort(this.objectTypes, "label", true, IDataContainer.SORT_CASEINSENSITIVE);
|
||||
sorter.sort();
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("Could not find 'create-mime-types' configuration element");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("Could not find 'Content Wizards' configuration section");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return this.createMimeTypes;
|
||||
}
|
||||
|
||||
public String getTemplateTypeName()
|
||||
{
|
||||
return this.templateTypeName;
|
||||
}
|
||||
|
||||
public TemplateType getTemplateType()
|
||||
{
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
return ts.getTemplateType(this.getTemplateTypeName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param templateType Sets the currently selected template type
|
||||
*/
|
||||
public void setTemplateTypeName(final String templateTypeName)
|
||||
{
|
||||
this.templateTypeName = templateTypeName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the summary data for the wizard.
|
||||
*/
|
||||
public String getSummary()
|
||||
{
|
||||
ResourceBundle bundle = Application.getBundle(FacesContext.getCurrentInstance());
|
||||
|
||||
// TODO: show first few lines of content here?
|
||||
return buildSummary(
|
||||
new String[] {bundle.getString("file_name"),
|
||||
bundle.getString("type"),
|
||||
bundle.getString("content_type")},
|
||||
new String[] {this.fileName, getSummaryObjectType(),
|
||||
getSummaryMimeType(this.mimeType)});
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Action event handlers
|
||||
|
||||
/**
|
||||
* Create content type value changed by the user
|
||||
*/
|
||||
public void createContentChanged(ValueChangeEvent event)
|
||||
{
|
||||
// clear the content as HTML is not compatible with the plain text box etc.
|
||||
this.content = null;
|
||||
}
|
||||
}
|
@@ -102,7 +102,7 @@ public class CreateWebsiteWizard extends BaseWizardBean
|
||||
// create the AVM stores (layers) to represent the newly created location website
|
||||
createStagingSandbox(this.name);
|
||||
|
||||
// create a sandbox for each user (TODO: based on role?)
|
||||
// create a sandbox for each user - TODO: based on role?
|
||||
List<String> invitedUsers = getInvitedUsernames();
|
||||
invitedUsers.add(Application.getCurrentUser(context).getUserName());
|
||||
for (String username : invitedUsers)
|
||||
@@ -113,8 +113,6 @@ public class CreateWebsiteWizard extends BaseWizardBean
|
||||
// save the list of invited users against the store
|
||||
this.nodeService.setProperty(nodeRef, ContentModel.PROP_USERSANDBOXES, (Serializable)invitedUsers);
|
||||
|
||||
// TODO: import the ZIP structure into the AVM staging store
|
||||
|
||||
// set the property on the node to reference the AVM store
|
||||
this.nodeService.setProperty(nodeRef, ContentModel.PROP_AVMSTORE, this.name);
|
||||
|
||||
|
110
source/java/org/alfresco/web/bean/wcm/DeleteFileDialog.java
Normal file
110
source/java/org/alfresco/web/bean/wcm/DeleteFileDialog.java
Normal file
@@ -0,0 +1,110 @@
|
||||
package org.alfresco.web.bean.wcm;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.dialog.BaseDialogBean;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Bean implementation for the AVM "Delete File" dialog
|
||||
*
|
||||
* @author kevinr
|
||||
*/
|
||||
public class DeleteFileDialog extends BaseDialogBean
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(DeleteFileDialog.class);
|
||||
|
||||
protected AVMService avmService;
|
||||
protected AVMBrowseBean avmBrowseBean;
|
||||
|
||||
|
||||
/**
|
||||
* @param avmBrowseBean The avmBrowseBean to set.
|
||||
*/
|
||||
public void setAvmBrowseBean(AVMBrowseBean avmBrowseBean)
|
||||
{
|
||||
this.avmBrowseBean = avmBrowseBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmService The avmService to set.
|
||||
*/
|
||||
public void setAvmService(AVMService avmService)
|
||||
{
|
||||
this.avmService = avmService;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Dialog implementation
|
||||
|
||||
@Override
|
||||
protected String finishImpl(FacesContext context, String outcome)
|
||||
throws Exception
|
||||
{
|
||||
// get the content to delete
|
||||
AVMNode node = this.avmBrowseBean.getAvmNode();
|
||||
if (node != null)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Trying to delete AVM node: " + node.getPath());
|
||||
|
||||
// delete the node
|
||||
this.avmService.removeNode(
|
||||
node.getPath().substring(0, node.getPath().lastIndexOf('/')),
|
||||
node.getPath().substring(node.getPath().lastIndexOf('/') + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("WARNING: delete called without a current AVM Node!");
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doPostCommitProcessing(FacesContext context, String outcome)
|
||||
{
|
||||
// clear action context
|
||||
this.avmBrowseBean.setAvmNode(null);
|
||||
|
||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getErrorMessageId()
|
||||
{
|
||||
return "error_delete_file";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getFinishButtonDisabled()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Bean Getters and Setters
|
||||
|
||||
/**
|
||||
* Returns the confirmation to display to the user before deleting the content.
|
||||
*
|
||||
* @return The formatted message to display
|
||||
*/
|
||||
public String getConfirmMessage()
|
||||
{
|
||||
String fileConfirmMsg = Application.getMessage(FacesContext.getCurrentInstance(),
|
||||
"delete_avm_file_confirm");
|
||||
|
||||
return MessageFormat.format(fileConfirmMsg,
|
||||
new Object[] {this.avmBrowseBean.getAvmNode().getName()});
|
||||
}
|
||||
}
|
110
source/java/org/alfresco/web/bean/wcm/DeleteFolderDialog.java
Normal file
110
source/java/org/alfresco/web/bean/wcm/DeleteFolderDialog.java
Normal file
@@ -0,0 +1,110 @@
|
||||
package org.alfresco.web.bean.wcm;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.dialog.BaseDialogBean;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Bean implementation for the AVM "Delete Folder" dialog
|
||||
*
|
||||
* @author kevinr
|
||||
*/
|
||||
public class DeleteFolderDialog extends BaseDialogBean
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(DeleteFolderDialog.class);
|
||||
|
||||
protected AVMService avmService;
|
||||
protected AVMBrowseBean avmBrowseBean;
|
||||
|
||||
|
||||
/**
|
||||
* @param avmBrowseBean The avmBrowseBean to set.
|
||||
*/
|
||||
public void setAvmBrowseBean(AVMBrowseBean avmBrowseBean)
|
||||
{
|
||||
this.avmBrowseBean = avmBrowseBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param avmService The avmService to set.
|
||||
*/
|
||||
public void setAvmService(AVMService avmService)
|
||||
{
|
||||
this.avmService = avmService;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Dialog implementation
|
||||
|
||||
@Override
|
||||
protected String finishImpl(FacesContext context, String outcome)
|
||||
throws Exception
|
||||
{
|
||||
// get the content to delete
|
||||
AVMNode node = this.avmBrowseBean.getAvmNode();
|
||||
if (node != null)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Trying to delete AVM node: " + node.getPath());
|
||||
|
||||
// delete the node
|
||||
this.avmService.removeNode(
|
||||
node.getPath().substring(0, node.getPath().lastIndexOf('/')),
|
||||
node.getPath().substring(node.getPath().lastIndexOf('/') + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("WARNING: delete called without a current AVM Node!");
|
||||
}
|
||||
|
||||
return outcome;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doPostCommitProcessing(FacesContext context, String outcome)
|
||||
{
|
||||
// clear action context
|
||||
this.avmBrowseBean.setAvmNode(null);
|
||||
|
||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getErrorMessageId()
|
||||
{
|
||||
return "error_delete_folder";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getFinishButtonDisabled()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Bean Getters and Setters
|
||||
|
||||
/**
|
||||
* Returns the confirmation to display to the user before deleting the content.
|
||||
*
|
||||
* @return The formatted message to display
|
||||
*/
|
||||
public String getConfirmMessage()
|
||||
{
|
||||
String fileConfirmMsg = Application.getMessage(FacesContext.getCurrentInstance(),
|
||||
"delete_avm_folder_confirm");
|
||||
|
||||
return MessageFormat.format(fileConfirmMsg,
|
||||
new Object[] {this.avmBrowseBean.getAvmNode().getName()});
|
||||
}
|
||||
}
|
@@ -63,6 +63,7 @@ import org.springframework.web.jsf.FacesContextUtils;
|
||||
public class UIUserSandboxes extends SelfRenderingComponent
|
||||
{
|
||||
private static final String ACTIONS_FILE = "avm_file_modified";
|
||||
private static final String ACTIONS_FOLDER = "avm_folder_modified";
|
||||
|
||||
private static final String COMPONENT_ACTIONS = "org.alfresco.faces.Actions";
|
||||
|
||||
@@ -74,6 +75,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
private static final String MSG_DESCRIPTION = "description";
|
||||
private static final String MSG_MODIFIED = "modified_date";
|
||||
private static final String MSG_ACTIONS = "actions";
|
||||
private static final String MSG_DELETED_ITEM = "avm_node_deleted";
|
||||
|
||||
private static final String SPACE_ICON = "/images/icons/" + BrowseBean.SPACE_SMALL_DEFAULT + ".gif";
|
||||
|
||||
@@ -207,10 +209,10 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
// components for the current username, preview, browse and modified items inner list
|
||||
out.write("<table cellspacing=2 cellpadding=2 border=0 width=100%><tr><td>");
|
||||
// show the icon for the sandbox as a clickable browse link image
|
||||
// this is currently identical to the sandbox_browse action as below
|
||||
Utils.encodeRecursive(context, aquireAction(
|
||||
context, mainStore, username, "sandbox_icon", WebResources.IMAGE_USERSANDBOX_32,
|
||||
"#{AVMBrowseBean.setupSandboxAction}", "browseSandbox"));
|
||||
//out.write(Utils.buildImageTag(context, WebResources.IMAGE_USERSANDBOX_32, 32, 32, ""));
|
||||
out.write("</td><td width=100%>");
|
||||
out.write("<b>");
|
||||
out.write(bundle.getString(MSG_USERNAME));
|
||||
@@ -222,12 +224,12 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
Utils.encodeRecursive(context, aquireAction(
|
||||
context, mainStore, username, "sandbox_preview", "/images/icons/preview_website.gif",
|
||||
null, null));
|
||||
out.write(" ");
|
||||
out.write(" ");
|
||||
|
||||
Utils.encodeRecursive(context, aquireAction(
|
||||
context, mainStore, username, "sandbox_create", "/images/icons/new_content.gif",
|
||||
null, null));
|
||||
out.write(" ");
|
||||
"#{AVMBrowseBean.setupSandboxAction}", "wizard:createWebContent"));
|
||||
out.write(" ");
|
||||
|
||||
Utils.encodeRecursive(context, aquireAction(
|
||||
context, mainStore, username, "sandbox_browse", "/images/icons/space_small.gif",
|
||||
@@ -249,26 +251,9 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
if (this.expandedPanels.contains(username))
|
||||
{
|
||||
out.write("<div style='padding:2px'></div>");
|
||||
out.write("<table class='modifiedItemsList' cellspacing=2 cellpadding=2 border=0 width=100%>");
|
||||
|
||||
// header row
|
||||
out.write("<tr align=left><th width=16></th><th>");
|
||||
out.write(bundle.getString(MSG_NAME));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_CREATED));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_MODIFIED));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_SIZE));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_ACTIONS));
|
||||
out.write("</th></tr>");
|
||||
|
||||
// row per modified doc item for this sandbox user
|
||||
// list the modified docs for this sandbox user
|
||||
renderUserFiles(context, out, username, storeRoot);
|
||||
|
||||
// end table
|
||||
out.write("</table>");
|
||||
}
|
||||
out.write("</td></tr></table>");
|
||||
|
||||
@@ -309,7 +294,9 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
{
|
||||
AVMSyncService avmSyncService = getAVMSyncService(fc);
|
||||
AVMService avmService = getAVMService(fc);
|
||||
|
||||
DateFormat df = Utils.getDateTimeFormat(fc);
|
||||
ResourceBundle bundle = Application.getBundle(fc);
|
||||
|
||||
// build the paths to the stores to compare
|
||||
String userStore = AVMConstants.buildAVMUserMainStoreName(storeRoot, username) + ":/";
|
||||
@@ -317,13 +304,32 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
|
||||
// get the UIActions component responsible for rendering context related user actions
|
||||
UIActions uiFileActions = aquireUIActions(ACTIONS_FILE);
|
||||
UIActions uiFolderActions = aquireUIActions(ACTIONS_FOLDER);
|
||||
|
||||
// use the sync service to get the list of diffs between the stores
|
||||
List<AVMDifference> diffs = avmSyncService.compare(-1, userStore, -1, stagingStore);
|
||||
if (diffs.size() != 0)
|
||||
{
|
||||
// output the table of modified items
|
||||
out.write("<table class='modifiedItemsList' cellspacing=2 cellpadding=2 border=0 width=100%>");
|
||||
|
||||
// header row
|
||||
out.write("<tr align=left><th width=16></th><th>");
|
||||
out.write(bundle.getString(MSG_NAME));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_CREATED));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_MODIFIED));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_SIZE));
|
||||
out.write("</th><th>");
|
||||
out.write(bundle.getString(MSG_ACTIONS));
|
||||
out.write("</th></tr>");
|
||||
|
||||
// output each of the modified files as a row in the table
|
||||
for (AVMDifference diff : diffs)
|
||||
{
|
||||
//if (diff.getDifferenceCode() == AVMDifference.NEWER)
|
||||
//{
|
||||
// TODO: display cases for diff.getDifferenceCode()?
|
||||
String sourcePath = diff.getSourcePath();
|
||||
AVMNodeDescriptor node = avmService.lookup(-1, sourcePath);
|
||||
if (node != null)
|
||||
@@ -352,24 +358,87 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
out.write(name);
|
||||
}
|
||||
out.write("</td><td>");
|
||||
|
||||
// created date
|
||||
out.write(df.format(new Date(node.getCreateDate())));
|
||||
out.write("</td><td>");
|
||||
|
||||
// modified date
|
||||
out.write(df.format(new Date(node.getModDate())));
|
||||
out.write("</td><td>");
|
||||
|
||||
// size of files
|
||||
if (node.isFile())
|
||||
{
|
||||
// size of files
|
||||
out.write(getSizeConverter().getAsString(fc, this, node.getLength()));
|
||||
}
|
||||
out.write("</td><td>");
|
||||
|
||||
// add UI actions for this item
|
||||
uiFileActions.setContext(new AVMNode(node));
|
||||
Utils.encodeRecursive(fc, uiFileActions);
|
||||
}
|
||||
else
|
||||
{
|
||||
out.write("</td><td>");
|
||||
|
||||
// add UI actions for this item
|
||||
uiFolderActions.setContext(new AVMNode(node));
|
||||
Utils.encodeRecursive(fc, uiFolderActions);
|
||||
}
|
||||
out.write("</td></tr>");
|
||||
}
|
||||
//}
|
||||
else
|
||||
{
|
||||
// must have been deleted from this sandbox - show ghosted
|
||||
AVMNodeDescriptor ghost = avmService.lookup(-1, diff.getDestinationPath());
|
||||
if (ghost != null)
|
||||
{
|
||||
// icon and name of the file/folder - files are clickable to see the content
|
||||
String name = ghost.getName();
|
||||
out.write("<tr><td width=16>");
|
||||
if (ghost.isFile())
|
||||
{
|
||||
out.write(Utils.buildImageTag(fc, Utils.getFileTypeImage(fc, name, true), ""));
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
out.write(name);
|
||||
out.write("</a>");
|
||||
}
|
||||
else
|
||||
{
|
||||
out.write(Utils.buildImageTag(fc, SPACE_ICON, 16, 16, ""));
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
out.write(name);
|
||||
}
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
|
||||
// created date
|
||||
out.write(df.format(new Date(ghost.getCreateDate())));
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
|
||||
// modified date
|
||||
out.write(df.format(new Date(ghost.getModDate())));
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
|
||||
// size of files
|
||||
if (ghost.isFile())
|
||||
{
|
||||
out.write(getSizeConverter().getAsString(fc, this, ghost.getLength()));
|
||||
}
|
||||
out.write("</td><td style='color:#aaaaaa'>");
|
||||
|
||||
// no UI actions for this item
|
||||
out.write('[' + bundle.getString(MSG_DELETED_ITEM) + ']');
|
||||
out.write("</td></tr>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// end table
|
||||
out.write("</table>");
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: output "no modified files found" message
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,6 +454,14 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
return this.sizeConverter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Aquire the UIActions component for the specified action group ID.
|
||||
* Search for the component in the child list or create as needed.
|
||||
*
|
||||
* @param id ActionGroup id of the UIActions component
|
||||
*
|
||||
* @return UIActions component
|
||||
*/
|
||||
private UIActions aquireUIActions(String id)
|
||||
{
|
||||
UIActions uiActions = null;
|
||||
@@ -401,6 +478,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
|
||||
javax.faces.application.Application facesApp = FacesContext.getCurrentInstance().getApplication();
|
||||
uiActions = (UIActions)facesApp.createComponent(COMPONENT_ACTIONS);
|
||||
uiActions.setShowLink(false);
|
||||
uiActions.getAttributes().put("styleClass", "inlineAction");
|
||||
uiActions.setId(id);
|
||||
uiActions.setParent(this);
|
||||
uiActions.setValue(id);
|
||||
|
@@ -534,6 +534,43 @@
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
The bean that backs up the Create Web Content Wizard
|
||||
</description>
|
||||
<managed-bean-name>CreateWebContentWizard</managed-bean-name>
|
||||
<managed-bean-class>org.alfresco.web.bean.wcm.CreateWebContentWizard</managed-bean-class>
|
||||
<managed-bean-scope>session</managed-bean-scope>
|
||||
<managed-property>
|
||||
<property-name>nodeService</property-name>
|
||||
<value>#{NodeService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>fileFolderService</property-name>
|
||||
<value>#{FileFolderService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>searchService</property-name>
|
||||
<value>#{SearchService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>navigator</property-name>
|
||||
<value>#{NavigationBean}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>browseBean</property-name>
|
||||
<value>#{BrowseBean}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>contentService</property-name>
|
||||
<value>#{ContentService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>dictionaryService</property-name>
|
||||
<value>#{DictionaryService}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
The bean that backs up the Create Website Wizard
|
||||
@@ -620,6 +657,44 @@
|
||||
<property-name>contentService</property-name>
|
||||
<value>#{ContentService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>avmBrowseBean</property-name>
|
||||
<value>#{AVMBrowseBean}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
The bean that backs up the Delete AVM File Dialog
|
||||
</description>
|
||||
<managed-bean-name>DeleteFileDialog</managed-bean-name>
|
||||
<managed-bean-class>org.alfresco.web.bean.wcm.DeleteFileDialog</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>avmBrowseBean</property-name>
|
||||
<value>#{AVMBrowseBean}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
The bean that backs up the Delete AVM Folder Dialog
|
||||
</description>
|
||||
<managed-bean-name>DeleteFolderDialog</managed-bean-name>
|
||||
<managed-bean-class>org.alfresco.web.bean.wcm.DeleteFolderDialog</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>avmBrowseBean</property-name>
|
||||
<value>#{AVMBrowseBean}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
|
@@ -1,83 +0,0 @@
|
||||
<%--
|
||||
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.app.Application" %>
|
||||
<%@ page import="org.alfresco.web.templating.*" %>
|
||||
<%@ page import="org.alfresco.web.bean.content.CreateContentWizard" %>
|
||||
<%@ page import="org.w3c.dom.Document" %>
|
||||
|
||||
<%
|
||||
final CreateContentWizard wiz = (CreateContentWizard)
|
||||
Application.getWizardManager().getBean();
|
||||
TemplateType tt = wiz.getTemplateType();
|
||||
TemplateInputMethod tim = tt.getInputMethods().get(0);
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final InstanceData instanceData = new InstanceData() {
|
||||
|
||||
public Document getContent()
|
||||
{
|
||||
try
|
||||
{
|
||||
return (wiz.getContent() != null
|
||||
? ts.parseXML(wiz.getContent())
|
||||
: null);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setContent(final Document d)
|
||||
{
|
||||
wiz.setContent(ts.writeXMLToString(d));
|
||||
}
|
||||
};
|
||||
tim.generate(instanceData, tt, out);
|
||||
%>
|
||||
<script type="text/javascript">
|
||||
dojo.addOnLoad(function()
|
||||
{
|
||||
addSubmitHandlerToButton(document.getElementById("wizard:next-button"));
|
||||
addSubmitHandlerToButton(document.getElementById("wizard:finish-button"));
|
||||
});
|
||||
//
|
||||
//var baseOnClick = b.onclick;
|
||||
//b.onclick = function()
|
||||
//{
|
||||
// if (!document.submitTrigger.done)
|
||||
// {
|
||||
// document.submitTrigger.buttonClick();
|
||||
// return false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return baseOnClick();
|
||||
// }
|
||||
//}
|
||||
//});
|
||||
//function doSubmit()
|
||||
//{
|
||||
//var b = document.getElementById("wizard:next-button");
|
||||
//b.click();
|
||||
//}
|
||||
|
||||
</script>
|
@@ -91,12 +91,6 @@
|
||||
valueChangeListener="#{WizardManager.bean.createContentChanged}">
|
||||
<f:selectItems value="#{WizardManager.bean.createMimeTypes}" />
|
||||
</h:selectOneMenu>
|
||||
|
||||
<h:outputText value=""/>
|
||||
<h:outputText value="#{msg.template_type}:"/>
|
||||
<h:selectOneMenu value="#{WizardManager.bean.templateTypeName}">
|
||||
<f:selectItems value="#{WizardManager.bean.createTemplateTypes}" />
|
||||
</h:selectOneMenu>
|
||||
</h:panelGrid>
|
||||
|
||||
<h:panelGrid columns="1" cellpadding="3" cellspacing="3" border="0" style="padding-top: 4px;"
|
||||
|
@@ -166,8 +166,8 @@
|
||||
<h:outputText id="col9-txt" value="#{msg.actions}"/>
|
||||
</f:facet>
|
||||
|
||||
<%-- actions are configured in web-client-config-actions.xml --%>
|
||||
<%--<r:actions id="col9-acts1" value="space_browse" context="#{r}" showLink="false" styleClass="inlineAction" />--%>
|
||||
<%-- actions are configured in web-client-config-wcm-actions.xml --%>
|
||||
<r:actions id="col9-acts1" value="avm_folder_browse" context="#{r}" showLink="false" styleClass="inlineAction" />
|
||||
</a:column>
|
||||
|
||||
<a:dataPager id="pager1" styleClass="pager" />
|
||||
@@ -255,7 +255,7 @@
|
||||
<h:outputText id="col18-txt" value="#{msg.actions}"/>
|
||||
</f:facet>
|
||||
|
||||
<%-- actions are configured in web-client-config-actions.xml --%>
|
||||
<%-- actions are configured in web-client-config-wcm-actions.xml --%>
|
||||
<r:actions id="col18-acts1" value="avm_file_browse" context="#{r}" showLink="false" styleClass="inlineAction" />
|
||||
</a:column>
|
||||
|
||||
|
@@ -105,7 +105,8 @@
|
||||
<td align=left width=32><a:actionLink image="/images/icons/sandbox_large.gif" showLink="false" value="#{msg.staging_sandbox}" actionListener="#{AVMBrowseBean.setupSandboxAction}" action="browseSandbox" /></td>
|
||||
<td align=left><h:outputText value="#{msg.staging_sandbox}" styleClass="mainSubTitle" /></td>
|
||||
<td align=right>
|
||||
(P) (E) (T) (D)
|
||||
<a:actionLink value="#{msg.sandbox_preview}" image="/images/icons/preview_website.gif" showLink="false" actionListener="#{AVMBrowseBean.setupSandboxAction}" />
|
||||
<a:actionLink value="#{msg.sandbox_create}" image="/images/icons/new_content.gif" showLink="false" actionListener="#{AVMBrowseBean.setupSandboxAction}" action="wizard:createWebContent" />
|
||||
<a:actionLink value="#{msg.sandbox_browse}" image="/images/icons/space_small.gif" showLink="false" actionListener="#{AVMBrowseBean.setupSandboxAction}" action="browseSandbox" />
|
||||
</td>
|
||||
</tr>
|
||||
@@ -132,7 +133,7 @@
|
||||
<a:panel id="sandboxes-panel" border="white" bgcolor="white" titleBorder="blue" titleBgcolor="#D3E6FE" styleClass="mainSubTitle" label="#{msg.user_sandboxes}">
|
||||
|
||||
<%-- User Sandboxes List --%>
|
||||
<w:userSandboxes value="#{NavigationBean.currentNode.nodeRef}" />
|
||||
<w:userSandboxes binding="#{AVMBrowseBean.userSandboxes}" value="#{NavigationBean.currentNode.nodeRef}" />
|
||||
|
||||
</a:panel>
|
||||
|
||||
|
164
source/web/jsp/wcm/edit-file.jsp
Normal file
164
source/web/jsp/wcm/edit-file.jsp
Normal file
@@ -0,0 +1,164 @@
|
||||
<%--
|
||||
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="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
|
||||
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
|
||||
|
||||
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
|
||||
<%@ page isELIgnored="false" %>
|
||||
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
|
||||
|
||||
<r:page titleId="title_edit_file">
|
||||
|
||||
<f:view>
|
||||
|
||||
<%-- load a bundle of properties with I18N strings --%>
|
||||
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
|
||||
|
||||
<%-- set the form name here --%>
|
||||
<h:form acceptCharset="UTF-8" id="edit-file">
|
||||
|
||||
<%-- Main outer table --%>
|
||||
<table cellspacing="0" cellpadding="2">
|
||||
|
||||
<%-- Title bar --%>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<%@ include file="../parts/titlebar.jsp" %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%-- Main area --%>
|
||||
<tr valign="top">
|
||||
<%-- Shelf --%>
|
||||
<td>
|
||||
<%@ include file="../parts/shelf.jsp" %>
|
||||
</td>
|
||||
|
||||
<%-- Work Area --%>
|
||||
<td width="100%">
|
||||
<table cellspacing="0" cellpadding="0" width="100%">
|
||||
<%-- Breadcrumb --%>
|
||||
<%@ include file="../parts/breadcrumb.jsp" %>
|
||||
|
||||
<%-- Status and Actions --%>
|
||||
<tr>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
|
||||
<td bgcolor="#EEEEEE">
|
||||
|
||||
<%-- Status and Actions inner contents table --%>
|
||||
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
|
||||
<table cellspacing="4" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td width="26">
|
||||
<h:graphicImage id="wizard-logo" url="/images/icons/edit_large.gif" />
|
||||
</td>
|
||||
<td>
|
||||
<div class="mainTitle">'<h:outputText value="#{AVMEditBean.avmNode.name}" />'</div>
|
||||
<div class="mainSubText"><h:outputText value="#{msg.editfile_description}" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with gradient shadow --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Details --%>
|
||||
<tr valign=top>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td>
|
||||
<table cellspacing="0" cellpadding="3" border="0" width="100%">
|
||||
<tr>
|
||||
<td width="100%" valign="top">
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
|
||||
<table cellpadding="2" cellspacing="2" border="0" width="100%">
|
||||
<tr>
|
||||
<td class="mainSubText">
|
||||
<h:outputFormat value="#{msg.edit_file_prompt}">
|
||||
<f:param value="#{AVMEditBean.avmNode.name}" />
|
||||
</h:outputFormat>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:10px" valign="middle">
|
||||
<%-- downloadable file link --%>
|
||||
<a:actionLink styleClass="title" image="#{AVMEditBean.fileType32}" value="#{AVMEditBean.avmNode.name}" href="#{AVMEditBean.url}" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<h:outputText value="#{msg.edit_download_complete}" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
|
||||
</td>
|
||||
|
||||
<td valign="top">
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
|
||||
<table cellpadding="1" cellspacing="1" border="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.close}" action="#{AVMEditBean.editFileOK}" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Error Messages --%>
|
||||
<tr valign="top">
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td>
|
||||
<%-- messages tag to show messages not handled by other specific message tags --%>
|
||||
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with bottom panel graphics --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
|
||||
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</h:form>
|
||||
|
||||
</f:view>
|
||||
|
||||
</r:page>
|
179
source/web/jsp/wcm/edit-html-inline.jsp
Normal file
179
source/web/jsp/wcm/edit-html-inline.jsp
Normal file
@@ -0,0 +1,179 @@
|
||||
<%--
|
||||
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="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
|
||||
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
|
||||
|
||||
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
|
||||
<%@ page isELIgnored="false" %>
|
||||
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
|
||||
|
||||
<r:page titleId="title_edit_html_inline">
|
||||
|
||||
<script language="javascript" type="text/javascript" src="<%=request.getContextPath()%>/scripts/tiny_mce/tiny_mce.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
<%-- Init the Tiny MCE in-line HTML editor --%>
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "exact",
|
||||
elements : "editor",
|
||||
save_callback : "saveContent",
|
||||
plugins : "table",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "left",
|
||||
theme_advanced_buttons1_add : "fontselect,fontsizeselect",
|
||||
theme_advanced_buttons2_add : "separator,forecolor,backcolor",
|
||||
theme_advanced_buttons3_add_before : "tablecontrols,separator",
|
||||
theme_advanced_disable: "styleselect",
|
||||
extended_valid_elements : "a[href|target|name],font[face|size|color|style],span[class|align|style]"
|
||||
});
|
||||
|
||||
function saveContent(id, content)
|
||||
{
|
||||
document.forms['edit-file']['edit-file:editorOutput'].value = content;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<f:view>
|
||||
|
||||
<%-- load a bundle of properties with I18N strings --%>
|
||||
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
|
||||
|
||||
<h:form acceptCharset="UTF-8" id="edit-file">
|
||||
|
||||
<%-- Main outer table --%>
|
||||
<table cellspacing="0" cellpadding="2">
|
||||
|
||||
<%-- Title bar --%>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<%@ include file="../parts/titlebar.jsp" %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%-- Main area --%>
|
||||
<tr valign="top">
|
||||
<%-- Shelf --%>
|
||||
<td>
|
||||
<%@ include file="../parts/shelf.jsp" %>
|
||||
</td>
|
||||
|
||||
<%-- Work Area --%>
|
||||
<td width="100%">
|
||||
<table cellspacing="0" cellpadding="0" width="100%">
|
||||
<%-- Breadcrumb --%>
|
||||
<%@ include file="../parts/breadcrumb.jsp" %>
|
||||
|
||||
<%-- Status and Actions --%>
|
||||
<tr>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
|
||||
<td bgcolor="#EEEEEE">
|
||||
|
||||
<%-- Status and Actions inner contents table --%>
|
||||
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
|
||||
<table cellspacing="4" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td width="32">
|
||||
<h:graphicImage id="wizard-logo" url="/images/icons/edit_large.gif" />
|
||||
</td>
|
||||
<td>
|
||||
<div class="mainTitle">'<h:outputText value="#{AVMEditBean.avmNode.name}" />'</div>
|
||||
<div class="mainSubText"><h:outputText value="#{msg.editfileinline_description}" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with gradient shadow --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Details --%>
|
||||
<tr valign=top>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td height="100%">
|
||||
<table cellspacing="0" cellpadding="3" border="0" width="100%">
|
||||
<tr>
|
||||
<%-- Inline editor --%>
|
||||
<td width="100%" valign="top" height="100%">
|
||||
<div id='editor' style='width:100%; height:360px'>
|
||||
<h:outputText value="#{AVMEditBean.documentContent}" escape="false" />
|
||||
</div>
|
||||
<h:inputHidden id="editorOutput" value="#{AVMEditBean.editorOutput}" />
|
||||
</td>
|
||||
|
||||
<td valign="top" rowspan=2>
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
|
||||
<table cellpadding="1" cellspacing="1" border="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.save}" action="#{AVMEditBean.editInlineOK}" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td class="dialogButtonSpacing"></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.cancel}" action="dialog:close" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Error Messages --%>
|
||||
<tr valign="top">
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td>
|
||||
<%-- messages tag to show messages not handled by other specific message tags --%>
|
||||
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with bottom panel graphics --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
|
||||
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</h:form>
|
||||
|
||||
</f:view>
|
||||
|
||||
</r:page>
|
150
source/web/jsp/wcm/edit-text-inline.jsp
Normal file
150
source/web/jsp/wcm/edit-text-inline.jsp
Normal file
@@ -0,0 +1,150 @@
|
||||
<%--
|
||||
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="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
|
||||
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
|
||||
|
||||
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
|
||||
<%@ page isELIgnored="false" %>
|
||||
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
|
||||
|
||||
<r:page titleId="title_edit_text_inline">
|
||||
|
||||
<f:view>
|
||||
|
||||
<%-- load a bundle of properties with I18N strings --%>
|
||||
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
|
||||
|
||||
<h:form acceptCharset="UTF-8" id="edit-file">
|
||||
|
||||
<%-- Main outer table --%>
|
||||
<table cellspacing="0" cellpadding="2">
|
||||
|
||||
<%-- Title bar --%>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<%@ include file="../parts/titlebar.jsp" %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%-- Main area --%>
|
||||
<tr valign="top">
|
||||
<%-- Shelf --%>
|
||||
<td>
|
||||
<%@ include file="../parts/shelf.jsp" %>
|
||||
</td>
|
||||
|
||||
<%-- Work Area --%>
|
||||
<td width="100%">
|
||||
<table cellspacing="0" cellpadding="0" width="100%">
|
||||
<%-- Breadcrumb --%>
|
||||
<%@ include file="../parts/breadcrumb.jsp" %>
|
||||
|
||||
<%-- Status and Actions --%>
|
||||
<tr>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
|
||||
<td bgcolor="#EEEEEE">
|
||||
|
||||
<%-- Status and Actions inner contents table --%>
|
||||
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
|
||||
<table cellspacing="4" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td width="32">
|
||||
<h:graphicImage id="wizard-logo" url="/images/icons/edit_large.gif" />
|
||||
</td>
|
||||
<td>
|
||||
<div class="mainTitle">'<h:outputText value="#{AVMEditBean.avmNode.name}" />'</div>
|
||||
<div class="mainSubText"><h:outputText value="#{msg.editfileinline_description}" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with gradient shadow --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Details --%>
|
||||
<tr valign=top>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td height="100%">
|
||||
<table cellspacing="0" cellpadding="3" border="0" width="100%">
|
||||
<tr>
|
||||
<%-- Inline editor --%>
|
||||
<td width="100%" valign="top" height="100%">
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
|
||||
<h:inputTextarea id="textArea" rows="24" cols="120" value="#{AVMEditBean.editorOutput}" />
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
|
||||
</td>
|
||||
<td valign="top" rowspan=2>
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
|
||||
<table cellpadding="1" cellspacing="1" border="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.save}" action="#{AVMEditBean.editInlineOK}" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td class="dialogButtonSpacing"></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.cancel}" action="dialog:close" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Error Messages --%>
|
||||
<tr valign="top">
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td>
|
||||
<%-- messages tag to show messages not handled by other specific message tags --%>
|
||||
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with bottom panel graphics --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
|
||||
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</h:form>
|
||||
|
||||
</f:view>
|
||||
|
||||
</r:page>
|
200
source/web/jsp/wcm/edit-xml-inline.jsp
Normal file
200
source/web/jsp/wcm/edit-xml-inline.jsp
Normal file
@@ -0,0 +1,200 @@
|
||||
<%--
|
||||
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="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
|
||||
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
|
||||
|
||||
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
|
||||
<%@ page isELIgnored="false" %>
|
||||
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
|
||||
<%@ page import="org.alfresco.web.bean.wcm.*,
|
||||
org.alfresco.service.cmr.repository.*,
|
||||
org.alfresco.web.bean.content.*,
|
||||
org.alfresco.web.templating.*" %>
|
||||
<%@ page import="java.io.*" %>
|
||||
<%@ page import="org.alfresco.web.app.Application" %>
|
||||
<%@ page import="org.alfresco.web.bean.content.CreateXmlContentTypeWizard" %>
|
||||
<%@ page import="org.alfresco.web.templating.*" %>
|
||||
<%@ page import="org.w3c.dom.Document" %>
|
||||
<%
|
||||
final AVMBrowseBean ccb = (AVMBrowseBean)session.getAttribute("AVMBrowseBean");
|
||||
NodeRef nr = ccb.getAvmNode().getNodeRef();
|
||||
final AVMEditBean aeb = (AVMEditBean)session.getAttribute("AVMEditBean");
|
||||
String ttName = (String)ccb.getNodeService().getProperty(nr, TemplatingService.TT_QNAME);
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final TemplateType tt = ts.getTemplateType(ttName);
|
||||
TemplateInputMethod tim = tt.getInputMethods().get(0);
|
||||
final InstanceData instanceData = new InstanceData()
|
||||
{
|
||||
public Document getContent()
|
||||
{
|
||||
try
|
||||
{
|
||||
return aeb.getEditorOutput() != null ? ts.parseXML(aeb.getEditorOutput()) : null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setContent(final Document d)
|
||||
{
|
||||
aeb.setEditorOutput(ts.writeXMLToString(d));
|
||||
}
|
||||
};
|
||||
%>
|
||||
|
||||
<r:page titleId="title_edit_text_inline">
|
||||
|
||||
<f:view>
|
||||
|
||||
<%-- load a bundle of properties with I18N strings --%>
|
||||
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
|
||||
|
||||
<h:form acceptCharset="UTF-8" id="edit-file">
|
||||
|
||||
<%-- Main outer table --%>
|
||||
<table cellspacing="0" cellpadding="2">
|
||||
|
||||
<%-- Title bar --%>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<%@ include file="../parts/titlebar.jsp" %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%-- Main area --%>
|
||||
<tr valign="top">
|
||||
<%-- Shelf --%>
|
||||
<td>
|
||||
<%@ include file="../parts/shelf.jsp" %>
|
||||
</td>
|
||||
|
||||
<%-- Work Area --%>
|
||||
<td width="100%" height="100%">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" height="100%">
|
||||
<%-- Breadcrumb --%>
|
||||
<%@ include file="../parts/breadcrumb.jsp" %>
|
||||
|
||||
<%-- Status and Actions --%>
|
||||
<tr>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
|
||||
<td bgcolor="#EEEEEE">
|
||||
|
||||
<%-- Status and Actions inner contents table --%>
|
||||
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
|
||||
<table cellspacing="4" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td width="32">
|
||||
<h:graphicImage id="wizard-logo" url="/images/icons/edit_large.gif" />
|
||||
</td>
|
||||
<td>
|
||||
<div class="mainTitle">'<h:outputText value="#{AVMEditBean.avmNode.name}" />'</div>
|
||||
<div class="mainSubText"><h:outputText value="#{msg.editfileinline_description}" /></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with gradient shadow --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Details --%>
|
||||
<tr valign=top>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td height="100%">
|
||||
<table cellspacing="0" cellpadding="3" border="0" width="100%" height="100%">
|
||||
<tr>
|
||||
<td valign="top" rowspan=2>
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
|
||||
<table cellpadding="1" cellspacing="1" border="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton id="save-button" value="#{msg.save}" action="#{CheckinCheckoutBean.editInlineOK}" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td class="dialogButtonSpacing"></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<h:commandButton value="#{msg.cancel}" action="browse" styleClass="dialogControls" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%-- Inline editor --%>
|
||||
<tr>
|
||||
<td width="100%" valign="top" height="100%">
|
||||
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
|
||||
|
||||
<% tim.generate(instanceData, tt, out); %>
|
||||
|
||||
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- Error Messages --%>
|
||||
<tr valign="top">
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
|
||||
<td>
|
||||
<%-- messages tag to show messages not handled by other specific message tags --%>
|
||||
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
|
||||
</td>
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
<%-- separator row with bottom panel graphics --%>
|
||||
<tr>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
|
||||
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
|
||||
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</h:form>
|
||||
|
||||
</f:view>
|
||||
<script type="text/javascript">
|
||||
dojo.addOnLoad(function()
|
||||
{
|
||||
addSubmitHandlerToButton(document.getElementById("edit-file:save-button"));
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</r:page>
|
Reference in New Issue
Block a user