mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Initial version of a "copy to web project" action
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5387 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -111,7 +111,12 @@ public class RunActionWizard extends BaseActionWizard
|
||||
this.actions = new ArrayList<SelectItem>();
|
||||
for (ActionDefinition ruleActionDef : ruleActions)
|
||||
{
|
||||
this.actions.add(new SelectItem(ruleActionDef.getName(), ruleActionDef.getTitle()));
|
||||
String title = ruleActionDef.getTitle();
|
||||
if (title == null || title.length() == 0)
|
||||
{
|
||||
title = ruleActionDef.getName();
|
||||
}
|
||||
this.actions.add(new SelectItem(ruleActionDef.getName(), title));
|
||||
}
|
||||
|
||||
// make sure the list is sorted by the label
|
||||
|
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
* As a special exception to the terms and conditions of version 2.0 of
|
||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||
* FLOSS exception. You should have recieved a copy of the text describing
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
package org.alfresco.web.bean.actions.handlers;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.repo.action.executer.CopyToWebProjectActionExecuter;
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.bean.wcm.AVMConstants;
|
||||
import org.alfresco.web.bean.wcm.WebProject;
|
||||
import org.alfresco.web.bean.wizard.IWizardBean;
|
||||
|
||||
/**
|
||||
* Action handler implementation for the "copy-to-web-project" action.
|
||||
*
|
||||
* @author gavinc
|
||||
*/
|
||||
public class CopyToWebProjectHandler extends BaseActionHandler
|
||||
{
|
||||
public String getJSPPath()
|
||||
{
|
||||
return getJSPPath(CopyToWebProjectActionExecuter.NAME);
|
||||
}
|
||||
|
||||
public void prepareForSave(Map<String, Serializable> actionProps,
|
||||
Map<String, Serializable> repoProps)
|
||||
{
|
||||
// get the destination selected by the user
|
||||
NodeRef destNodeRef = (NodeRef)actionProps.get(PROP_DESTINATION);
|
||||
|
||||
// if the destination is a workspace node the use the root of the
|
||||
// webapp for the web project
|
||||
if (destNodeRef.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_WORKSPACE))
|
||||
{
|
||||
WebProject webProject = new WebProject(destNodeRef);
|
||||
String storeName = AVMConstants.buildUserMainStoreName(webProject.getStoreId(),
|
||||
Application.getCurrentUser(FacesContext.getCurrentInstance()).getUserName());
|
||||
|
||||
String rootPath = AVMConstants.buildStoreWebappPath(storeName, AVMConstants.DIR_ROOT);
|
||||
destNodeRef = AVMNodeConverter.ToNodeRef(-1, rootPath);
|
||||
}
|
||||
|
||||
// setup the destination parameter
|
||||
repoProps.put(CopyToWebProjectActionExecuter.PARAM_DESTINATION_FOLDER, destNodeRef);
|
||||
}
|
||||
|
||||
public void prepareForEdit(Map<String, Serializable> actionProps,
|
||||
Map<String, Serializable> repoProps)
|
||||
{
|
||||
NodeRef destNodeRef = (NodeRef)repoProps.get(CopyToWebProjectActionExecuter.PARAM_DESTINATION_FOLDER);
|
||||
actionProps.put(PROP_DESTINATION, destNodeRef);
|
||||
}
|
||||
|
||||
public String generateSummary(FacesContext context, IWizardBean wizard,
|
||||
Map<String, Serializable> actionProps)
|
||||
{
|
||||
NodeRef dest = (NodeRef)actionProps.get(PROP_DESTINATION);
|
||||
|
||||
String folder = "/";
|
||||
String webProject = "?";
|
||||
|
||||
if (dest.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
||||
{
|
||||
// get the destination path
|
||||
Pair<Integer, String> avmNode = AVMNodeConverter.ToAVMVersionPath(dest);
|
||||
String avmPath = avmNode.getSecond();
|
||||
folder = avmPath.substring(avmPath.indexOf(AVMConstants.DIR_ROOT)+4);
|
||||
|
||||
// get the destination web project name
|
||||
NodeRef webProjectNode = AVMConstants.getWebProjectNode(avmPath);
|
||||
webProject = Repository.getNameForNode(
|
||||
Repository.getServiceRegistry(context).getNodeService(), webProjectNode);
|
||||
}
|
||||
else if (dest.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
||||
{
|
||||
// get the destination web project name
|
||||
webProject = Repository.getNameForNode(
|
||||
Repository.getServiceRegistry(context).getNodeService(), dest);
|
||||
}
|
||||
|
||||
return MessageFormat.format(Application.getMessage(context, "action_copy_to_web_project_folder"),
|
||||
new Object[] {folder, webProject});
|
||||
}
|
||||
|
||||
}
|
@@ -25,6 +25,7 @@
|
||||
package org.alfresco.web.bean.wcm;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
import java.util.regex.Matcher;
|
||||
@@ -38,6 +39,11 @@ import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.repo.domain.PropertyValue;
|
||||
import org.alfresco.service.cmr.avm.AVMNotFoundException;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.search.ResultSet;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.util.VirtServerUtils;
|
||||
@@ -224,8 +230,8 @@ public final class AVMConstants
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the corresponding path in the preview store name if this is a path in
|
||||
* a main store.
|
||||
* Returns the corresponding path in the main store name if this is a path in
|
||||
* a preview store.
|
||||
*
|
||||
* @param avmPath an avm path within the main store.
|
||||
*
|
||||
@@ -625,6 +631,51 @@ public final class AVMConstants
|
||||
final Matcher m = SANDBOX_RELATIVE_PATH_PATTERN.matcher(absoluteAVMPath);
|
||||
return m.matches() && m.group(1).length() != 0 ? m.group(1) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the NodeRef that represents the given avm path
|
||||
*
|
||||
* @param absoluteAVMPath The path from which to determine the Web Project
|
||||
* @return The NodeRef representing the Web Project the path is from or null
|
||||
* if it could not be determined
|
||||
*/
|
||||
public static NodeRef getWebProjectNode(final String absoluteAVMPath)
|
||||
{
|
||||
// get services
|
||||
FacesContext fc = FacesContext.getCurrentInstance();
|
||||
SearchService searchService = Repository.getServiceRegistry(fc).getSearchService();
|
||||
|
||||
// get the store name
|
||||
String storeName = AVMConstants.getStoreName(absoluteAVMPath);
|
||||
String storeId = AVMConstants.getStoreId(storeName);
|
||||
|
||||
// construct the query
|
||||
String path = Application.getRootPath(fc) + "/" + Application.getWebsitesFolderName(fc) + "/*";
|
||||
String query = "PATH:\"/" + path + "\" AND @wca\\:avmstore:\"" + storeId + "\"";
|
||||
|
||||
NodeRef webProjectNode = null;
|
||||
ResultSet results = null;
|
||||
try
|
||||
{
|
||||
// execute the query
|
||||
results = searchService.query(Repository.getStoreRef(),
|
||||
SearchService.LANGUAGE_LUCENE, query);
|
||||
|
||||
if (results.length() == 1)
|
||||
{
|
||||
webProjectNode = results.getNodeRef(0);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (results != null)
|
||||
{
|
||||
results.close();
|
||||
}
|
||||
}
|
||||
|
||||
return webProjectNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates all directories for a path if they do not already exist.
|
||||
|
@@ -108,6 +108,13 @@ public class ErrorsRenderer extends BaseRenderer
|
||||
renderMessageAttrs(fm, out, errorClass, infoClass);
|
||||
out.write(">");
|
||||
out.write(Utils.encode(fm.getSummary()));
|
||||
String detail = fm.getDetail();
|
||||
if (detail != null && detail.length() > 0)
|
||||
{
|
||||
out.write(" (");
|
||||
out.write(Utils.encode(detail));
|
||||
out.write(")");
|
||||
}
|
||||
out.write("</li>\n");
|
||||
}
|
||||
|
||||
@@ -129,6 +136,13 @@ public class ErrorsRenderer extends BaseRenderer
|
||||
renderMessageAttrs(fm, out, errorClass, infoClass);
|
||||
out.write(">");
|
||||
out.write(Utils.encode(fm.getSummary()));
|
||||
String detail = fm.getDetail();
|
||||
if (detail != null && detail.length() > 0)
|
||||
{
|
||||
out.write(" (");
|
||||
out.write(Utils.encode(detail));
|
||||
out.write(")");
|
||||
}
|
||||
out.write("</div>\n");
|
||||
}
|
||||
|
||||
|
@@ -41,11 +41,15 @@ import javax.faces.event.ActionEvent;
|
||||
import javax.faces.event.FacesEvent;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.bean.wcm.AVMConstants;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
import org.alfresco.web.ui.common.WebResources;
|
||||
|
||||
@@ -81,6 +85,9 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
/** currently browsing node id */
|
||||
protected String navigationId = null;
|
||||
|
||||
/** current AVM store being browsed */
|
||||
protected String avmStore = null;
|
||||
|
||||
/** id of the initially selected item, if value is not set */
|
||||
protected String initialSelectionId = null;
|
||||
|
||||
@@ -157,6 +164,7 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
this.navigationId = (String)values[4];
|
||||
this.initialSelectionId = (String)values[5];
|
||||
this.disabled = (Boolean)values[6];
|
||||
this.avmStore = (String)values[7];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,7 +172,7 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
*/
|
||||
public Object saveState(FacesContext context)
|
||||
{
|
||||
Object values[] = new Object[7];
|
||||
Object values[] = new Object[8];
|
||||
// standard component attributes are saved by the super class
|
||||
values[0] = super.saveState(context);
|
||||
values[1] = this.label;
|
||||
@@ -173,6 +181,7 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
values[4] = this.navigationId;
|
||||
values[5] = this.initialSelectionId;
|
||||
values[6] = this.disabled;
|
||||
values[7] = this.avmStore;
|
||||
return (values);
|
||||
}
|
||||
|
||||
@@ -219,7 +228,17 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
String selection = (String)requestMap.get(getClientId(context) + OPTION);
|
||||
if (selection != null && selection.length() != 0)
|
||||
{
|
||||
((EditableValueHolder)this).setSubmittedValue(new NodeRef(Repository.getStoreRef(), selection));
|
||||
if (selection.startsWith("-1;"))
|
||||
{
|
||||
String translatedPath = selection.substring(3);
|
||||
String path = translatedPath.replace(';', '/');
|
||||
String avmPath = this.avmStore + ":/" + path;
|
||||
((EditableValueHolder)this).setSubmittedValue(AVMNodeConverter.ToNodeRef(-1, avmPath));
|
||||
}
|
||||
else
|
||||
{
|
||||
((EditableValueHolder)this).setSubmittedValue(new NodeRef(Repository.getStoreRef(), selection));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -358,7 +377,16 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
}
|
||||
else
|
||||
{
|
||||
label = Repository.getNameForNode(service, value);
|
||||
if (value.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
||||
{
|
||||
Pair<Integer, String> avmNode = AVMNodeConverter.ToAVMVersionPath(value);
|
||||
String avmPath = avmNode.getSecond();
|
||||
label = avmPath.substring(avmPath.indexOf(AVMConstants.DIR_ROOT)+4);
|
||||
}
|
||||
else
|
||||
{
|
||||
label = Repository.getNameForNode(service, value);
|
||||
}
|
||||
showValueInHiddenField = true;
|
||||
}
|
||||
|
||||
@@ -392,6 +420,12 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
if (value != null)
|
||||
{
|
||||
fieldValue = encodeFieldValues(theMode, value.getId());
|
||||
|
||||
// setup the avmStore if the value represents an avm path
|
||||
if (value.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
||||
{
|
||||
this.avmStore = value.getStoreRef().getIdentifier();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -514,10 +548,9 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
buf.append("/></td><td>");
|
||||
|
||||
// get the name for the child and output as link
|
||||
NodeRef childNodeRef = new NodeRef(Repository.getStoreRef(), childId);
|
||||
String name = Repository.getNameForNode(service, childNodeRef);
|
||||
String name = Repository.getNameForNode(service, childRef);
|
||||
String prefixHtml = null;
|
||||
String icon = getItemIcon(context, childNodeRef);
|
||||
String icon = getItemIcon(context, childRef);
|
||||
if (icon != null)
|
||||
{
|
||||
prefixHtml = "<span style='padding-right:4px'>" +
|
||||
@@ -801,6 +834,7 @@ public abstract class AbstractItemSelector extends UIInput
|
||||
/**
|
||||
* Class representing the clicking of a breadcrumb element.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public static class ItemSelectorEvent extends ActionEvent
|
||||
{
|
||||
public ItemSelectorEvent(UIComponent component, int mode, String id)
|
||||
|
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
* As a special exception to the terms and conditions of version 2.0 of
|
||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||
* FLOSS exception. You should have recieved a copy of the text describing
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
package org.alfresco.web.ui.repo.component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.config.JNDIConstants;
|
||||
import org.alfresco.model.ApplicationModel;
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.cmr.security.AccessStatus;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.bean.wcm.AVMConstants;
|
||||
import org.alfresco.web.bean.wcm.WebProject;
|
||||
import org.alfresco.web.ui.repo.WebResources;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Selector component for folders within a Web Project.
|
||||
*
|
||||
* @author gavinc
|
||||
*/
|
||||
public class UIWebProjectFolderSelector extends AbstractItemSelector
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(UIWebProjectFolderSelector.class);
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Component Impl
|
||||
|
||||
public String getFamily()
|
||||
{
|
||||
return "org.alfresco.faces.WebProjectFolderSelector";
|
||||
}
|
||||
|
||||
public String getDefaultLabel()
|
||||
{
|
||||
return Application.getMessage(FacesContext.getCurrentInstance(), "select_web_project_folder");
|
||||
}
|
||||
|
||||
public String getParentNodeId(FacesContext context)
|
||||
{
|
||||
String id = null;
|
||||
|
||||
if (this.navigationId != null && this.navigationId.startsWith("-1;"))
|
||||
{
|
||||
String rootPath = "-1;" + JNDIConstants.DIR_DEFAULT_WWW + ";" + JNDIConstants.DIR_DEFAULT_APPBASE +
|
||||
";" + AVMConstants.DIR_ROOT;
|
||||
|
||||
if (this.navigationId.equals(rootPath) == false)
|
||||
{
|
||||
// remove the last part of the path
|
||||
String parentPath = this.navigationId.substring(0,
|
||||
this.navigationId.lastIndexOf(';'));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Parent of " + this.navigationId + " is: " + parentPath);
|
||||
|
||||
id = parentPath;
|
||||
}
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public Collection<NodeRef> getChildrenForNode(FacesContext context)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Getting children for: " + this.navigationId);
|
||||
|
||||
List<NodeRef> folders = new ArrayList<NodeRef>();
|
||||
|
||||
if (this.navigationId.startsWith("-1;"))
|
||||
{
|
||||
// if we are within the web project folder structure calculate the
|
||||
// current path and get the children
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Getting children for path: " + this.navigationId +
|
||||
" in store: " + this.avmStore);
|
||||
|
||||
// remove the -1; from the beginning of the path and change ; for /
|
||||
String translatedPath = this.navigationId.substring(3);
|
||||
String path = translatedPath.replace(';', '/');
|
||||
|
||||
String avmPath = this.avmStore + ":/" + path;
|
||||
addChildrenForPath(context, avmPath, folders);
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the root children for the sandbox of the current user
|
||||
WebProject webProject = new WebProject(new NodeRef(Repository.getStoreRef(), this.navigationId));
|
||||
this.avmStore = AVMConstants.buildUserMainStoreName(webProject.getStoreId(),
|
||||
Application.getCurrentUser(context).getUserName());
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Getting children for store: " + this.avmStore);
|
||||
|
||||
String rootPath = AVMConstants.buildStoreWebappPath(this.avmStore, AVMConstants.DIR_ROOT);
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Root path for store: "+ rootPath);
|
||||
|
||||
addChildrenForPath(context, rootPath, folders);
|
||||
}
|
||||
|
||||
return folders;
|
||||
}
|
||||
|
||||
public Collection<NodeRef> getRootChildren(FacesContext context)
|
||||
{
|
||||
// query for all nodes under the "Web Projects" foler in company home.
|
||||
FacesContext fc = FacesContext.getCurrentInstance();
|
||||
String xpath = Application.getRootPath(fc) + "/" + Application.getWebsitesFolderName(fc) + "/*";
|
||||
NodeRef rootNodeRef = getNodeService(fc).getRootNode(Repository.getStoreRef());
|
||||
NamespaceService resolver = Repository.getServiceRegistry(fc).getNamespaceService();
|
||||
SearchService searchService = Repository.getServiceRegistry(fc).getSearchService();
|
||||
List<NodeRef> nodes = searchService.selectNodes(rootNodeRef, xpath, null, resolver, false);
|
||||
|
||||
// filter the web projects i.e. only show those available to the current user
|
||||
AVMService avmService = Repository.getServiceRegistry(context).getAVMService();
|
||||
PermissionService permissionService = Repository.getServiceRegistry(context).getPermissionService();
|
||||
String currentUserName = Application.getCurrentUser(context).getUserName();
|
||||
List<NodeRef> webProjects = new ArrayList<NodeRef>(nodes.size());
|
||||
for (NodeRef node : nodes)
|
||||
{
|
||||
// see if the user has AddChildren permission on the Web Project node
|
||||
if (permissionService.hasPermission(node, PermissionService.ADD_CHILDREN) == AccessStatus.ALLOWED)
|
||||
{
|
||||
// if they have AddChildren there is probably a sandbox but check to make
|
||||
// sure as it could have been deleted
|
||||
WebProject webProject = new WebProject(node);
|
||||
String storeName = AVMConstants.buildUserMainStoreName(webProject.getStoreId(),
|
||||
currentUserName);
|
||||
AVMStoreDescriptor storeDesc = avmService.getStore(storeName);
|
||||
if (storeDesc != null)
|
||||
{
|
||||
// if we found a store (sandbox) for the user add to the list
|
||||
webProjects.add(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return webProjects;
|
||||
}
|
||||
|
||||
public String getItemIcon(FacesContext context, NodeRef ref)
|
||||
{
|
||||
String icon = (String)getNodeService(context).getProperty(ref, ApplicationModel.PROP_ICON);
|
||||
if (icon != null)
|
||||
{
|
||||
icon = "/images/icons/" + icon + "-16.gif";
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = WebResources.IMAGE_SPACE;
|
||||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds any child folders of the given path to the given list of children
|
||||
*
|
||||
* @param context Faces context
|
||||
* @param path The path to get children of
|
||||
* @param children The list of child folders
|
||||
*/
|
||||
protected void addChildrenForPath(FacesContext context, String path, List<NodeRef> children)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Retrieving children for path: " + path);
|
||||
|
||||
// get directory listing for the given path and convert to NodeRef's
|
||||
AVMService avmService = Repository.getServiceRegistry(context).getAVMService();
|
||||
Map<String, AVMNodeDescriptor> nodes = avmService.getDirectoryListing(-1, path);
|
||||
for (String name : nodes.keySet())
|
||||
{
|
||||
AVMNodeDescriptor avmRef = nodes.get(name);
|
||||
NodeRef node = AVMNodeConverter.ToNodeRef(-1, avmRef.getPath());
|
||||
|
||||
// only add folders
|
||||
if (avmRef.isDirectory())
|
||||
{
|
||||
children.add(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
* As a special exception to the terms and conditions of version 2.0 of
|
||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||
* FLOSS exception. You should have recieved a copy of the text describing
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
|
||||
package org.alfresco.web.ui.repo.tag;
|
||||
|
||||
/**
|
||||
* Tag class to allow the web project folder selector to be used on a JSP
|
||||
*
|
||||
* @author gavinc
|
||||
*/
|
||||
public class WebProjectFolderSelectorTag extends ItemSelectorTag
|
||||
{
|
||||
/**
|
||||
* @see javax.faces.webapp.UIComponentTag#getComponentType()
|
||||
*/
|
||||
public String getComponentType()
|
||||
{
|
||||
return "org.alfresco.faces.WebProjectFolderSelector";
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user