/* * Copyright (C) 2003-2010 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * 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, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.ecm.webui.component.explorer.rightclick.viewinfor; import java.util.LinkedHashMap; import java.util.Map; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import org.exoplatform.ecm.utils.text.Text; import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer; import org.exoplatform.ecm.webui.utils.Utils; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIContainer; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SAS * Author : eXoPlatform * exo@exoplatform.com * Nov 3, 2010 */ @ComponentConfig ( template = "classpath:templates/viewinfo/UIViewInfoContainer.gtmpl", events = { @EventConfig(listeners = UIViewInfoContainer.CloseActionListener.class) } ) public class UIViewInfoContainer extends UIContainer { /** * the hash map which contains information of node */ private Map<String, String> inforMap; //constains private static final String NAME = "name"; private static final String TITLE = "title"; private static final String TYPE = "type"; private static final String SIZE = "size"; private static final String OWNER = "owner"; private static final String LAST_MODIFIER = "lastModifier"; private static final String CREATED = "created"; private static final String LAST_MODIFIED = "lastModified"; private static final String PUBLICATION_STATE = "publicationState"; private static final String DC_TITLE = "dc:title"; private static final String PUBLICATION_CURRENT_STATE = "publication:currentState"; private static final String EXO_LAST_MODIFIED_DATE = "exo:lastModifiedDate"; /** * checking selected node is a folder or not */ private boolean isFolder = false; /** * constructor * @throws RepositoryException */ public UIViewInfoContainer() throws RepositoryException { inforMap = new LinkedHashMap<String, String>(); } /** * get inforMap value * @return inforMap value */ public Map<String, String> getInforMap() { return inforMap; } /** * set value for inforMap * @param inforMap */ public void setInforMap(Map<String, String> inforMap) { this.inforMap = inforMap; } /** * checking selected node is a folder or not * @return */ public boolean isFolder() { return isFolder; } /** * read node properties, put value in to inforMap * @throws Exception */ public void readNodeInformation() throws Exception { Node selectedNode = getSelectedNode(); //get name inforMap.put(NAME, selectedNode.getName()); //get title inforMap.put(TITLE, getTitle(selectedNode)); //get Type inforMap.put(TYPE, getType(selectedNode)); //get file size if (selectedNode.hasNode(Utils.JCR_CONTENT)) { Node contentNode = selectedNode.getNode(Utils.JCR_CONTENT); if (contentNode.hasProperty(Utils.JCR_DATA)) { double size = contentNode.getProperty(Utils.JCR_DATA).getLength(); String fileSize = Utils.calculateFileSize(size); inforMap.put(SIZE, fileSize); } } //get owner if (selectedNode.hasProperty(Utils.EXO_OWNER)) { inforMap.put(OWNER, selectedNode.getProperty(Utils.EXO_OWNER).getString()); } //get last modifier if (selectedNode.hasProperty(Utils.EXO_LASTMODIFIER)) { inforMap.put(LAST_MODIFIER, selectedNode.getProperty(Utils.EXO_LASTMODIFIER).getString()); } //get created date if (selectedNode.hasProperty(Utils.EXO_CREATED_DATE)) { inforMap.put(CREATED, selectedNode.getProperty(Utils.EXO_CREATED_DATE).getString()); } //get last modified date if (selectedNode.hasProperty(EXO_LAST_MODIFIED_DATE)) { inforMap.put(LAST_MODIFIED, selectedNode.getProperty(EXO_LAST_MODIFIED_DATE).getString()); } //get publication state if (selectedNode.hasProperty(PUBLICATION_CURRENT_STATE)) { inforMap.put(PUBLICATION_STATE, selectedNode.getProperty(PUBLICATION_CURRENT_STATE).getString()); } } /** * get type of node * @param node * @return type of node * @throws Exception */ private String getType(Node node) throws Exception { TemplateService templateService = getApplicationComponent(TemplateService.class); NodeType nodeType = node.getPrimaryNodeType(); String strNodeTypeName = nodeType.getName(); String strType = ""; isFolder = false; if (nodeType.isNodeType(Utils.NT_FILE)) { // is file that is uploaded by // user if (!node.isCheckedOut()) node.checkout(); Node contentNode = node.getNode(Utils.JCR_CONTENT); strType = contentNode.getProperty(Utils.JCR_MIMETYPE).getString(); } else if (templateService.isManagedNodeType(strNodeTypeName)) { // is Document which is created by user on web strType = templateService.getTemplateLabel(strNodeTypeName); } else if (nodeType.isNodeType(Utils.NT_UNSTRUCTURED) || nodeType.isNodeType(Utils.NT_FOLDER)) { // is a folder isFolder = true; } else { // other strType = strNodeTypeName; } return strType; } /** * get title of node * @param node * @return * @throws Exception */ private String getTitle(Node node) throws Exception { String title = null; if (node.hasNode(Utils.JCR_CONTENT)) { Node content = node.getNode(Utils.JCR_CONTENT); if (content.hasProperty(DC_TITLE)) { try { title = content.getProperty(DC_TITLE).getValues()[0].getString(); } catch(Exception ex) { title = null; } } } else if (node.hasProperty(Utils.EXO_TITLE)) { title = node.getProperty(Utils.EXO_TITLE).getValue().getString(); } if ((title==null) || ((title!=null) && (title.trim().length()==0))) { title = node.getName(); } return Text.unescapeIllegalJcrChars(title); } /** * get name of action * @return */ public String getCloseAction() { return "Close"; } /** * get selected node * @return */ private Node getSelectedNode() { UIViewInfoManager uiManager = getParent(); return uiManager.getSelectedNode(); } /** * @author hai_lethanh * class used for handling Close event */ static public class CloseActionListener extends EventListener<UIViewInfoContainer> { @Override public void execute(Event<UIViewInfoContainer> event) throws Exception { event.getSource().getAncestorOfType(UIJCRExplorer.class).cancelAction() ; } } }