]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/WorkspaceNode.java
Slightly modify the class to enable easy introduction of sorter on column headers...
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / browser / WorkspaceNode.java
1 package org.argeo.eclipse.ui.jcr.browser;
2
3 import javax.jcr.Repository;
4 import javax.jcr.RepositoryException;
5 import javax.jcr.Session;
6 import javax.jcr.observation.EventIterator;
7 import javax.jcr.observation.EventListener;
8
9 import org.argeo.ArgeoException;
10 import org.argeo.eclipse.ui.TreeParent;
11 import org.argeo.eclipse.ui.jcr.JcrUiPlugin;
12 import org.eclipse.swt.graphics.Image;
13
14 public class WorkspaceNode extends TreeParent implements EventListener {
15 private final String name;
16 private final Repository repository;
17 private Session session = null;
18 public final static Image WORKSPACE_DISCONNECTED = JcrUiPlugin
19 .getImageDescriptor("icons/workspace_disconnected.png")
20 .createImage();
21 public final static Image WORKSPACE_CONNECTED = JcrUiPlugin
22 .getImageDescriptor("icons/workspace_connected.png").createImage();
23
24 public WorkspaceNode(Repository repository, String name) {
25 this(repository, name, null);
26 }
27
28 public WorkspaceNode(Repository repository, String name, Session session) {
29 super(name);
30 this.name = name;
31 this.repository = repository;
32 this.session = session;
33 if (session != null)
34 processNewSession(session);
35 }
36
37 public Session getSession() {
38 return session;
39 }
40
41 public void login() {
42 try {
43 logout();
44 session = repository.login(name);
45 processNewSession(session);
46 } catch (RepositoryException e) {
47 throw new ArgeoException("Cannot connect to repository " + name, e);
48 }
49 }
50
51 public void logout() {
52 try {
53 if (session != null && session.isLive()) {
54 session.getWorkspace().getObservationManager()
55 .removeEventListener(this);
56 session.logout();
57 }
58 } catch (RepositoryException e) {
59 throw new ArgeoException("Cannot connect to repository " + name, e);
60 }
61 }
62
63 public void onEvent(final EventIterator events) {
64 // if (session == null)
65 // return;
66 // Display.getDefault().syncExec(new Runnable() {
67 // public void run() {
68 // while (events.hasNext()) {
69 // Event event = events.nextEvent();
70 // try {
71 // String path = event.getPath();
72 // String parentPath = path.substring(0,
73 // path.lastIndexOf('/'));
74 // final Object parent;
75 // if (parentPath.equals("/") || parentPath.equals(""))
76 // parent = this;
77 // else if (session.itemExists(parentPath)){
78 // parent = session.getItem(parentPath);
79 // ((Item)parent).refresh(false);
80 // }
81 // else
82 // parent = null;
83 // if (parent != null) {
84 // nodesViewer.refresh(parent);
85 // }
86 //
87 // } catch (RepositoryException e) {
88 // log.warn("Error processing event " + event, e);
89 // }
90 // }
91 // }
92 // });
93 }
94
95 protected void processNewSession(Session session) {
96 // try {
97 // ObservationManager observationManager = session.getWorkspace()
98 // .getObservationManager();
99 // observationManager.addEventListener(this, Event.NODE_ADDED
100 // | Event.NODE_REMOVED, "/", true, null, null, false);
101 // } catch (RepositoryException e) {
102 // throw new ArgeoException("Cannot process new session "
103 // + session, e);
104 // }
105 }
106
107 }