This project has retired. For details please refer to its Attic page.
ExtensionsPanel xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.workbench.details;
20  
21  import java.awt.Color;
22  import java.util.List;
23  
24  import javax.swing.BorderFactory;
25  import javax.swing.BoxLayout;
26  import javax.swing.JPanel;
27  import javax.swing.JScrollPane;
28  import javax.swing.JTree;
29  import javax.swing.tree.DefaultMutableTreeNode;
30  import javax.swing.tree.DefaultTreeModel;
31  import javax.swing.tree.TreeSelectionModel;
32  
33  import org.apache.chemistry.opencmis.client.api.CmisObject;
34  import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
35  import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
36  import org.apache.chemistry.opencmis.workbench.model.ClientModel;
37  import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
38  import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
39  
40  public class ExtensionsPanel extends JPanel implements ObjectListener {
41  
42      private static final long serialVersionUID = 1L;
43  
44      private final ClientModel model;
45  
46      private JTree extensionsTree;
47  
48      public ExtensionsPanel(ClientModel model) {
49          super();
50  
51          this.model = model;
52          model.addObjectListener(this);
53  
54          createGUI();
55      }
56  
57      @Override
58      public void objectLoaded(ClientModelEvent event) {
59          CmisObject object = model.getCurrentObject();
60  
61          DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
62  
63          if (object != null) {
64              List<CmisExtensionElement> extensions;
65  
66              // object extensions
67              extensions = object.getExtensions(ExtensionLevel.OBJECT);
68              if ((extensions != null) && (!extensions.isEmpty())) {
69                  DefaultMutableTreeNode objectRootNode = new DefaultMutableTreeNode("Object");
70                  addExtension(objectRootNode, extensions);
71                  rootNode.add(objectRootNode);
72              }
73  
74              // property extensions
75              extensions = object.getExtensions(ExtensionLevel.PROPERTIES);
76              if ((extensions != null) && (!extensions.isEmpty())) {
77                  DefaultMutableTreeNode propertiesRootNode = new DefaultMutableTreeNode("Properties");
78                  addExtension(propertiesRootNode, extensions);
79                  rootNode.add(propertiesRootNode);
80              }
81  
82              // allowable actions extensions
83              extensions = object.getExtensions(ExtensionLevel.ALLOWABLE_ACTIONS);
84              if ((extensions != null) && (!extensions.isEmpty())) {
85                  DefaultMutableTreeNode allowableActionsRootNode = new DefaultMutableTreeNode("Allowable Actions");
86                  addExtension(allowableActionsRootNode, extensions);
87                  rootNode.add(allowableActionsRootNode);
88              }
89  
90              // ACL extensions
91              extensions = object.getExtensions(ExtensionLevel.ACL);
92              if ((extensions != null) && (!extensions.isEmpty())) {
93                  DefaultMutableTreeNode aclRootNode = new DefaultMutableTreeNode("ACL");
94                  addExtension(aclRootNode, extensions);
95                  rootNode.add(aclRootNode);
96              }
97  
98              // policies extensions
99              extensions = object.getExtensions(ExtensionLevel.POLICIES);
100             if ((extensions != null) && (!extensions.isEmpty())) {
101                 DefaultMutableTreeNode policiesRootNode = new DefaultMutableTreeNode("Policies");
102                 addExtension(policiesRootNode, extensions);
103                 rootNode.add(policiesRootNode);
104             }
105         }
106 
107         DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
108 
109         extensionsTree.setModel(treeModel);
110     }
111 
112     private void addExtension(DefaultMutableTreeNode parent, List<CmisExtensionElement> extensions) {
113         if ((extensions == null) || (extensions.isEmpty())) {
114             return;
115         }
116 
117         for (CmisExtensionElement ext : extensions) {
118             DefaultMutableTreeNode node = new DefaultMutableTreeNode(new ExtensionNode(ext));
119             parent.add(node);
120 
121             if (ext.getChildren().size() > 0) {
122                 addExtension(node, ext.getChildren());
123             }
124         }
125     }
126 
127     private void createGUI() {
128         setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
129         setBorder(BorderFactory.createEmptyBorder());
130         setBackground(Color.WHITE);
131 
132         extensionsTree = new JTree();
133         extensionsTree.setRootVisible(false);
134         extensionsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
135         extensionsTree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
136 
137         extensionsTree.setModel(new DefaultTreeModel(null));
138 
139         JScrollPane pane = new JScrollPane(extensionsTree);
140         pane.setBorder(BorderFactory.createEmptyBorder());
141 
142         add(pane);
143     }
144 
145     static class ExtensionNode {
146         private final CmisExtensionElement extension;
147 
148         public ExtensionNode(CmisExtensionElement extension) {
149             this.extension = extension;
150         }
151 
152         @Override
153         public String toString() {
154             return (extension.getNamespace() == null ? "" : "{" + extension.getNamespace() + "}") + extension.getName()
155                     + (!extension.getAttributes().isEmpty() ? " " + extension.getAttributes() : "")
156                     + (extension.getChildren().isEmpty() ? ": " + extension.getValue() : "");
157         }
158     }
159 }