View Javadoc
1   package org.exoplatform.wcm.connector.handler;
2   
3   import org.exoplatform.container.PortalContainer;
4   import org.exoplatform.ecm.connector.fckeditor.FCKUtils;
5   import org.exoplatform.services.cms.documents.AutoVersionService;
6   import org.exoplatform.services.cms.impl.Utils;
7   import org.exoplatform.services.cms.link.LinkManager;
8   import org.exoplatform.services.jcr.access.AccessControlEntry;
9   import org.exoplatform.services.jcr.access.AccessControlList;
10  import org.exoplatform.services.jcr.access.PermissionType;
11  import org.exoplatform.services.jcr.core.ExtendedNode;
12  import org.exoplatform.services.jcr.core.ManageableRepository;
13  import org.exoplatform.services.security.IdentityConstants;
14  import org.exoplatform.services.wcm.core.NodetypeConstant;
15  import org.exoplatform.services.wcm.core.WCMConfigurationService;
16  import org.exoplatform.services.wcm.utils.WCMCoreUtils;
17  import org.w3c.dom.Document;
18  import org.w3c.dom.Element;
19  
20  import javax.jcr.Node;
21  import java.text.SimpleDateFormat;
22  
23  public class FCKFileHandler {
24  
25    public static Element createFileElement(Document document,
26        String fileType,
27        Node sourceNode,
28        Node displayNode,
29        String currentPortal) throws Exception {
30      return createFileElement(document, fileType, sourceNode, displayNode, currentPortal, null, null);
31    }
32  
33    public static Element createFileElement(Document document,
34                                            String fileType,
35                                            Node sourceNode,
36                                            Node displayNode,
37                                            String currentPortal,
38                                            String childRelativePath,
39                                            LinkManager linkManager) throws Exception {
40      Element file = document.createElement("File");
41      AutoVersionService autoVersionService=WCMCoreUtils.getService(AutoVersionService.class);
42      file.setAttribute("name", Utils.getTitle(displayNode));
43      if (childRelativePath != null) {
44        file.setAttribute("currentFolder", childRelativePath);
45      }
46      SimpleDateFormat formatter = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT,
47                                                                                           SimpleDateFormat.SHORT);
48      if(sourceNode.hasProperty("exo:dateCreated")){
49        file.setAttribute("dateCreated", formatter.format(sourceNode.getProperty("exo:dateCreated").getDate().getTime()));
50      }else if(sourceNode.hasProperty("jcr:created")){
51        file.setAttribute("dateCreated", formatter.format(sourceNode.getProperty("jcr:created").getDate().getTime()));
52      }    
53      
54      if(sourceNode.hasProperty("exo:dateModified")) {
55        file.setAttribute("dateModified", formatter.format(sourceNode.getProperty("exo:dateModified")
56                                                                     .getDate()
57                                                                     .getTime()));
58      } else {
59        file.setAttribute("dateModified", null);
60      }
61      file.setAttribute("creator", sourceNode.getProperty("exo:owner").getString());
62      file.setAttribute("path", displayNode.getPath());
63      if (linkManager==null) {
64       linkManager = WCMCoreUtils.getService(LinkManager.class) ;
65      }
66      if (linkManager.isLink(sourceNode)) {
67       Node targetNode = linkManager.getTarget(sourceNode);
68       if (targetNode!=null) {
69         file.setAttribute("linkTarget", targetNode.getPath());
70       }else {
71         file.setAttribute("linkTarget", sourceNode.getPath());
72       }
73      }else {
74       file.setAttribute("linkTarget", sourceNode.getPath());
75      }
76      if (sourceNode.isNodeType("nt:file")) {
77        Node content = sourceNode.getNode("jcr:content");
78        file.setAttribute("nodeType", content.getProperty("jcr:mimeType").getString());
79      } else {
80        file.setAttribute("nodeType", sourceNode.getPrimaryNodeType().getName());
81      }
82      if (sourceNode.isNodeType(NodetypeConstant.EXO_WEBCONTENT)) {
83        file.setAttribute("url",getDocURL(displayNode, currentPortal));
84      } else {
85        file.setAttribute("url",getFileURL(displayNode));
86      }
87      if(sourceNode.isNodeType(FCKUtils.NT_FILE)) {
88        long size = sourceNode.getNode("jcr:content").getProperty("jcr:data").getLength();
89        file.setAttribute("size", "" + size / 1000);
90      }else {
91        file.setAttribute("size", "");
92      }
93      if(sourceNode.isNodeType(NodetypeConstant.MIX_VERSIONABLE)){
94        file.setAttribute("isVersioned", String.valueOf(true));
95      }else{
96        file.setAttribute("isVersioned", String.valueOf(false));
97      }
98      file.setAttribute("title", Utils.getTitle(sourceNode).replaceAll("%", "%25"));
99      file.setAttribute("nodeTypeCssClass", Utils.getNodeTypeIcon(sourceNode, "uiBgd64x64"));
100     file.setAttribute("isVersionSupport", String.valueOf(autoVersionService.isVersionSupport(sourceNode.getPath(), sourceNode.getSession().getWorkspace().getName())));
101     return file;
102   }
103 
104   /**
105    * Gets the file url.
106    *
107    * @param file the file
108    * @return the file url
109    * @throws Exception the exception
110    */
111   protected static String getFileURL(final Node file) throws Exception {
112     return FCKUtils.createWebdavURL(file);
113   }
114 
115   private static String getDocURL(final Node node, String currentPortal) throws Exception {
116     String baseURI = "/" + PortalContainer.getCurrentPortalContainerName();
117     String accessMode = "private";
118     AccessControlList acl = ((ExtendedNode) node).getACL();
119     for (AccessControlEntry entry : acl.getPermissionEntries()) {
120       if (entry.getIdentity().equalsIgnoreCase(IdentityConstants.ANY)
121           && entry.getPermission().equalsIgnoreCase(PermissionType.READ)) {
122         accessMode = "public";
123         break;
124       }
125     }
126     String repository = ((ManageableRepository) node.getSession().getRepository())
127     .getConfiguration().getName();
128     String workspace = node.getSession().getWorkspace().getName();
129     String nodePath = node.getPath();
130     StringBuilder builder = new StringBuilder();
131     if(node.isNodeType(NodetypeConstant.NT_FILE)) {
132       if("public".equals(accessMode)) {
133         return builder.append(baseURI).append("/jcr/").append(repository).append("/")
134         .append(workspace).append(nodePath).toString();
135       }
136       return builder.append(baseURI).append("/private/jcr/").append(repository).append("/")
137       .append(workspace).append(nodePath).toString();
138     }
139     WCMConfigurationService configurationService = WCMCoreUtils.getService(WCMConfigurationService.class);
140     String parameterizedPageViewerURI = configurationService.
141         getRuntimeContextParam(WCMConfigurationService.PARAMETERIZED_PAGE_URI);
142     return baseURI.replace("/rest", "") + "/" + currentPortal
143         + parameterizedPageViewerURI + "/" + repository + "/" + workspace + nodePath;
144   }
145 }