]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java
Move RCP support to Argeo SLC
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / jcr / NodeLabelProvider.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.argeo.cms.ui.jcr;
17
18 import javax.jcr.NamespaceException;
19 import javax.jcr.Node;
20 import javax.jcr.RepositoryException;
21 import javax.jcr.nodetype.NodeType;
22
23 import org.apache.commons.logging.Log;
24 import org.apache.commons.logging.LogFactory;
25 import org.argeo.cms.ui.jcr.model.RemoteRepositoryElem;
26 import org.argeo.cms.ui.jcr.model.RepositoriesElem;
27 import org.argeo.cms.ui.jcr.model.RepositoryElem;
28 import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem;
29 import org.argeo.cms.ui.jcr.model.WorkspaceElem;
30 import org.argeo.eclipse.ui.EclipseUiException;
31 import org.argeo.naming.LdapAttrs;
32 import org.argeo.node.NodeTypes;
33 import org.eclipse.jface.viewers.ColumnLabelProvider;
34 import org.eclipse.swt.graphics.Image;
35
36 /** Provides reasonable defaults for know JCR types. */
37 public class NodeLabelProvider extends ColumnLabelProvider {
38 private static final long serialVersionUID = -3662051696443321843L;
39
40 private final static Log log = LogFactory.getLog(NodeLabelProvider.class);
41
42 public String getText(Object element) {
43 try {
44 if (element instanceof SingleJcrNodeElem) {
45 SingleJcrNodeElem sjn = (SingleJcrNodeElem) element;
46 return getText(sjn.getNode());
47 } else if (element instanceof Node) {
48 return getText((Node) element);
49 } else
50 return super.getText(element);
51 } catch (RepositoryException e) {
52 throw new EclipseUiException("Unexpected JCR error while getting node name.");
53 }
54 }
55
56 protected String getText(Node node) throws RepositoryException {
57 String label = node.getName();
58 StringBuffer mixins = new StringBuffer("");
59 for (NodeType type : node.getMixinNodeTypes())
60 mixins.append(' ').append(type.getName());
61
62 return label + " [" + node.getPrimaryNodeType().getName() + mixins + "]";
63 }
64
65 @Override
66 public Image getImage(Object element) {
67 if (element instanceof RemoteRepositoryElem) {
68 if (((RemoteRepositoryElem) element).isConnected())
69 return JcrImages.REMOTE_CONNECTED;
70 else
71 return JcrImages.REMOTE_DISCONNECTED;
72 } else if (element instanceof RepositoryElem) {
73 if (((RepositoryElem) element).isConnected())
74 return JcrImages.REPOSITORY_CONNECTED;
75 else
76 return JcrImages.REPOSITORY_DISCONNECTED;
77 } else if (element instanceof WorkspaceElem) {
78 if (((WorkspaceElem) element).isConnected())
79 return JcrImages.WORKSPACE_CONNECTED;
80 else
81 return JcrImages.WORKSPACE_DISCONNECTED;
82 } else if (element instanceof RepositoriesElem) {
83 return JcrImages.REPOSITORIES;
84 } else if (element instanceof SingleJcrNodeElem) {
85 Node nodeElem = ((SingleJcrNodeElem) element).getNode();
86 return getImage(nodeElem);
87
88 // if (element instanceof Node) {
89 // return getImage((Node) element);
90 // } else if (element instanceof WrappedNode) {
91 // return getImage(((WrappedNode) element).getNode());
92 // } else if (element instanceof NodesWrapper) {
93 // return getImage(((NodesWrapper) element).getNode());
94 // }
95 }
96 // try {
97 // return super.getImage();
98 // } catch (RepositoryException e) {
99 // return null;
100 // }
101 return super.getImage(element);
102 }
103
104 protected Image getImage(Node node) {
105 try {
106 if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
107 return JcrImages.FILE;
108 else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
109 return JcrImages.FOLDER;
110 else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_RESOURCE))
111 return JcrImages.BINARY;
112 try {
113 // optimizes
114 if (node.hasProperty(LdapAttrs.uid.property()) && node.isNodeType(NodeTypes.NODE_USER_HOME))
115 return JcrImages.HOME;
116 } catch (NamespaceException e) {
117 // node namespace is not registered in this repo
118 }
119 return JcrImages.NODE;
120 } catch (RepositoryException e) {
121 log.warn("Error while retrieving type for " + node + " in order to display corresponding image");
122 e.printStackTrace();
123 return null;
124 }
125 }
126 }