1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.debug.ui;
14 import org.eclipse.core.runtime.Assert;
15 import org.eclipse.jface.viewers.ITreeContentProvider;
16 import org.eclipse.jface.viewers.TreeViewer;
17 import org.eclipse.jface.viewers.Viewer;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.events.DisposeEvent;
20 import org.eclipse.swt.events.DisposeListener;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Composite;
24 import org.simantics.db.Session;
25 import org.simantics.db.ReadGraph;
26 import org.simantics.db.common.processor.MergingGraphRequestProcessor;
27 import org.simantics.db.common.request.ReadRequest;
28 import org.simantics.db.event.ChangeEvent;
29 import org.simantics.db.event.ChangeListener;
30 import org.simantics.db.exception.DatabaseException;
31 import org.simantics.db.service.GraphChangeListenerSupport;
34 public class SessionDebugger extends Composite {
37 * The Session used to access the graph. Received from outside of this
38 * class and therefore it is not disposed here, just used.
40 private Session session;
42 private MergingGraphRequestProcessor updater;
44 private TreeViewer clusters;
46 private ChangeListener changeListener = new ChangeListener() {
47 public void graphChanged(ChangeEvent e) {
48 // This makes sure that the transaction for updating this
49 // GraphDebugger get executed in a serialized fashion.
50 updater.asyncRequest(new ReadRequest() {
52 public void run(ReadGraph g) throws DatabaseException {
63 * @param resource the initial resource to debug or <code>null</code> for
66 public SessionDebugger(Composite parent, int style, final Session session) {
68 Assert.isNotNull(session, "session is null");
69 this.session = session;
70 updater = new MergingGraphRequestProcessor(session, 100);
72 addDisposeListener(new DisposeListener() {
74 public void widgetDisposed(DisposeEvent e) {
75 GraphChangeListenerSupport support = session.getService(GraphChangeListenerSupport.class);
76 support.removeListener(changeListener);
82 public void initializeUI() {
84 setLayout(new GridLayout(1, false));
85 setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
91 public TreeViewer createViewer(Composite parent) {
93 clusters = new TreeViewer(parent, SWT.NONE);
94 clusters.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
96 clusters.setContentProvider(new ITreeContentProvider() {
99 public Object[] getChildren(Object parentElement) {
100 return new Object[0];
104 public Object getParent(Object element) {
109 public boolean hasChildren(Object element) {
114 public Object[] getElements(Object inputElement) {
115 // return session.getDebug().getActiveClusters();
116 return new Object[0];
120 public void dispose() {
124 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
129 // Schedule a request that updates the browser content.
131 GraphChangeListenerSupport support = session.getService(GraphChangeListenerSupport.class);
132 support.addListener(changeListener);
138 public void refreshClusters() {
140 // Schedule a request that updates the browser content.
141 updater.asyncRequest(new ReadRequest() {
143 public void run(ReadGraph g) throws DatabaseException {
150 public void updateContent() {
152 clusters.getTree().getDisplay().asyncExec(new Runnable() {
157 if(clusters.getTree().isDisposed()) return;
158 clusters.setInput(new Object());