]> git.argeo.org Git - lgpl/argeo-commons.git/blob - WorkspaceElem.java
bb9b69caf4f85354ad2a9fdba4e3ad25e1aa7ed1
[lgpl/argeo-commons.git] / WorkspaceElem.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.jcr.ui.explorer.model;
17
18 import javax.jcr.Node;
19 import javax.jcr.NodeIterator;
20 import javax.jcr.RepositoryException;
21 import javax.jcr.Session;
22 import javax.jcr.Workspace;
23
24 import org.argeo.ArgeoException;
25 import org.argeo.eclipse.ui.TreeParent;
26 import org.argeo.jcr.JcrUtils;
27
28 /**
29 * UI Tree component. Wraps the root node of a JCR {@link Workspace}. It also
30 * keeps a reference to its parent {@link RepositoryElem}, to be able to
31 * retrieve alias of the current used repository
32 */
33 public class WorkspaceElem extends TreeParent {
34 private Session session = null;
35
36 public WorkspaceElem(RepositoryElem parent, String name) {
37 this(parent, name, null);
38 }
39
40 public WorkspaceElem(RepositoryElem parent, String name, Session session) {
41 super(name);
42 this.session = session;
43 setParent(parent);
44 }
45
46 public Session getSession() {
47 return session;
48 }
49
50 public Node getRootNode() {
51 try {
52 if (session != null)
53 return session.getRootNode();
54 else
55 return null;
56 } catch (RepositoryException e) {
57 throw new ArgeoException("Cannot get root node of workspace "
58 + getName(), e);
59 }
60 }
61
62 public void login() {
63 try {
64 session = ((RepositoryElem) getParent()).repositoryLogin(getName());
65 } catch (RepositoryException e) {
66 throw new ArgeoException("Cannot connect to repository "
67 + getName(), e);
68 }
69 }
70
71 public Boolean isConnected() {
72 if (session != null && session.isLive())
73 return true;
74 else
75 return false;
76 }
77
78 @Override
79 public synchronized void dispose() {
80 logout();
81 super.dispose();
82 }
83
84 /** Logouts the session, does not nothing if there is no live session. */
85 public void logout() {
86 clearChildren();
87 JcrUtils.logoutQuietly(session);
88 }
89
90 @Override
91 public boolean hasChildren() {
92 try {
93 if (isConnected())
94 return session.getRootNode().hasNodes();
95 else
96 return false;
97 } catch (RepositoryException re) {
98 throw new ArgeoException(
99 "Unexpected error while checking children node existence",
100 re);
101 }
102 }
103
104 /** Override normal behaviour to initialize display of the workspace */
105 @Override
106 public synchronized Object[] getChildren() {
107 if (isLoaded()) {
108 return super.getChildren();
109 } else {
110 // initialize current object
111 try {
112 Node rootNode;
113 if (session == null)
114 return null;
115 else
116 rootNode = session.getRootNode();
117 NodeIterator ni = rootNode.getNodes();
118 while (ni.hasNext()) {
119 Node node = ni.nextNode();
120 addChild(new SingleJcrNodeElem(this, node, node.getName()));
121 }
122 return super.getChildren();
123 } catch (RepositoryException e) {
124 throw new ArgeoException(
125 "Cannot initialize WorkspaceNode UI object."
126 + getName(), e);
127 }
128 }
129 }
130 }