/* * Copyright (C) 2005-2010 Alfresco Software Limited. * * This file is part of Alfresco * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ package org.alfresco.web.bean.clipboard; import java.util.List; import javax.faces.context.FacesContext; import org.alfresco.model.ApplicationModel; import org.alfresco.model.ContentModel; import org.alfresco.repo.search.QueryParameterDefImpl; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.search.QueryParameterDefinition; import org.alfresco.service.namespace.QName; import org.alfresco.web.bean.repository.Repository; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Base class representing a single item added to the clipboard. * * @author Kevin Roast */ abstract class AbstractClipboardItem implements ClipboardItem { protected static Log logger = LogFactory.getLog(ClipboardBean.class); protected static final String MSG_COPY_OF = "copy_of"; /** Shallow search for nodes with a name pattern */ private static final String XPATH_QUERY_NODE_MATCH = "./*[like(@cm:name, $cm:name, false)]"; transient private ServiceRegistry services = null; protected NodeRef ref; protected NodeRef parent; protected ClipboardStatus mode; // cached values private String name; private QName type; private String icon; // // WCM // transient protected AVMService avmService; // private List customPasteViewIds; /** * Constructor * * @param ref The ref of the item on the clipboard * @param mode The ClipboardStatus enum value */ public AbstractClipboardItem(NodeRef ref, ClipboardStatus mode, List customPasteViewIds) { this.ref = ref; this.mode = mode; this.customPasteViewIds = customPasteViewIds; } /** * Constructor * * @param ref The ref of the item on the clipboard * @param parent The parent of the item on the clipboard * @param mode The ClipboardStatus enum value */ public AbstractClipboardItem(NodeRef ref, NodeRef parent, ClipboardStatus mode, List customPasteViewIds) { this.ref = ref; this.mode = mode; this.parent = parent; this.customPasteViewIds = customPasteViewIds; } // // WCM // public void setAvmService(AVMService avmService) // { // this.avmService = avmService; // } // // protected AVMService getAvmService() // { // if (avmService == null) // { // avmService = getServiceRegistry().getAVMLockingAwareService(); // } // return avmService; // } // public ClipboardStatus getMode() { return this.mode; } public String getName() { if (this.name == null) { this.name = (String)getServiceRegistry().getNodeService().getProperty( this.ref, ContentModel.PROP_NAME); } return this.name; } public QName getType() { if (this.type == null) { this.type = getServiceRegistry().getNodeService().getType(this.ref); } return this.type; } public String getIcon() { if (this.icon == null) { this.icon = (String)getServiceRegistry().getNodeService().getProperty( this.ref, ApplicationModel.PROP_ICON); } return this.icon; } public NodeRef getNodeRef() { return this.ref; } public NodeRef getParent() { return this.parent; } /** * Override equals() to compare NodeRefs */ public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ClipboardItem) { return ((ClipboardItem)obj).getNodeRef().equals(this.ref); } else { return false; } } /** * Override hashCode() to use the internal NodeRef hashcode instead */ public int hashCode() { return ref.hashCode(); } protected ServiceRegistry getServiceRegistry() { if (services == null) { services = Repository.getServiceRegistry(FacesContext.getCurrentInstance()); } return services; } public boolean canCopyToViewId(String viewId) { if (this.customPasteViewIds != null) { return this.customPasteViewIds.contains(viewId); } return false; } public boolean canMoveToViewId(String viewId) { if (this.customPasteViewIds != null) { return this.customPasteViewIds.contains(viewId); } return false; } protected boolean checkExists(String name, NodeRef parent) { QueryParameterDefinition[] params = new QueryParameterDefinition[1]; params[0] = new QueryParameterDefImpl( ContentModel.PROP_NAME, getServiceRegistry().getDictionaryService().getDataType( DataTypeDefinition.TEXT), true, name); // execute the query List nodeRefs = getServiceRegistry().getSearchService().selectNodes( parent, XPATH_QUERY_NODE_MATCH, params, getServiceRegistry().getNamespaceService(), false); return (nodeRefs.size() != 0); } // // // WCM // protected void recursiveFormCheck(AVMNodeDescriptor desc) // { // if (desc.isFile()) // { // String filePath = desc.getPath(); // if (avmService.hasAspect(-1, filePath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA)) // { // avmService.removeAspect(filePath, WCMAppModel.ASPECT_FORM_INSTANCE_DATA); // } // if (avmService.hasAspect(-1, filePath, WCMAppModel.ASPECT_RENDITION)) // { // avmService.removeAspect(filePath, WCMAppModel.ASPECT_RENDITION); // } // } // else // { // Map listing = getAvmService().getDirectoryListing(desc); // for (Map.Entry entry : listing.entrySet()) // { // recursiveFormCheck(entry.getValue()); // } // } // } }