]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java
Move MVC provider.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / jcr / NodeLabelProvider.java
1 package org.argeo.cms.ui.jcr;
2
3 import javax.jcr.NamespaceException;
4 import javax.jcr.Node;
5 import javax.jcr.Property;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.nodetype.NodeType;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.cms.ui.jcr.model.RemoteRepositoryElem;
12 import org.argeo.cms.ui.jcr.model.RepositoriesElem;
13 import org.argeo.cms.ui.jcr.model.RepositoryElem;
14 import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem;
15 import org.argeo.cms.ui.jcr.model.WorkspaceElem;
16 import org.argeo.eclipse.ui.EclipseUiException;
17 import org.eclipse.jface.viewers.ColumnLabelProvider;
18 import org.eclipse.swt.graphics.Image;
19
20 /** Provides reasonable defaults for know JCR types. */
21 public class NodeLabelProvider extends ColumnLabelProvider {
22 private static final long serialVersionUID = -3662051696443321843L;
23
24 private final static Log log = LogFactory.getLog(NodeLabelProvider.class);
25
26 public String getText(Object element) {
27 try {
28 if (element instanceof SingleJcrNodeElem) {
29 SingleJcrNodeElem sjn = (SingleJcrNodeElem) element;
30 return getText(sjn.getNode());
31 } else if (element instanceof Node) {
32 return getText((Node) element);
33 } else
34 return super.getText(element);
35 } catch (RepositoryException e) {
36 throw new EclipseUiException("Unexpected JCR error while getting node name.");
37 }
38 }
39
40 protected String getText(Node node) throws RepositoryException {
41 String label = node.getName();
42 StringBuffer mixins = new StringBuffer("");
43 for (NodeType type : node.getMixinNodeTypes())
44 mixins.append(' ').append(type.getName());
45
46 return label + " [" + node.getPrimaryNodeType().getName() + mixins + "]";
47 }
48
49 @Override
50 public Image getImage(Object element) {
51 if (element instanceof RemoteRepositoryElem) {
52 if (((RemoteRepositoryElem) element).isConnected())
53 return JcrImages.REMOTE_CONNECTED;
54 else
55 return JcrImages.REMOTE_DISCONNECTED;
56 } else if (element instanceof RepositoryElem) {
57 if (((RepositoryElem) element).isConnected())
58 return JcrImages.REPOSITORY_CONNECTED;
59 else
60 return JcrImages.REPOSITORY_DISCONNECTED;
61 } else if (element instanceof WorkspaceElem) {
62 if (((WorkspaceElem) element).isConnected())
63 return JcrImages.WORKSPACE_CONNECTED;
64 else
65 return JcrImages.WORKSPACE_DISCONNECTED;
66 } else if (element instanceof RepositoriesElem) {
67 return JcrImages.REPOSITORIES;
68 } else if (element instanceof SingleJcrNodeElem) {
69 Node nodeElem = ((SingleJcrNodeElem) element).getNode();
70 return getImage(nodeElem);
71
72 // if (element instanceof Node) {
73 // return getImage((Node) element);
74 // } else if (element instanceof WrappedNode) {
75 // return getImage(((WrappedNode) element).getNode());
76 // } else if (element instanceof NodesWrapper) {
77 // return getImage(((NodesWrapper) element).getNode());
78 // }
79 }
80 // try {
81 // return super.getImage();
82 // } catch (RepositoryException e) {
83 // return null;
84 // }
85 return super.getImage(element);
86 }
87
88 protected Image getImage(Node node) {
89 try {
90 if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
91 return JcrImages.FILE;
92 else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
93 return JcrImages.FOLDER;
94 else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_RESOURCE))
95 return JcrImages.BINARY;
96 try {
97 // TODO check workspace type?
98 if (node.getDepth() == 1 && node.hasProperty(Property.JCR_ID))
99 return JcrImages.HOME;
100
101 // optimizes
102 // if (node.hasProperty(LdapAttrs.uid.property()) && node.isNodeType(NodeTypes.NODE_USER_HOME))
103 // return JcrImages.HOME;
104 } catch (NamespaceException e) {
105 // node namespace is not registered in this repo
106 }
107 return JcrImages.NODE;
108 } catch (RepositoryException e) {
109 log.warn("Error while retrieving type for " + node + " in order to display corresponding image");
110 e.printStackTrace();
111 return null;
112 }
113 }
114 }