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
106
107
108
109
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 }