View Javadoc

1   /*
2    * This file is a part of CAST project.
3    * (c) Copyright 2007, AGH University of Science & Technology
4    * https://caribou.iisg.agh.edu.pl/trac/cast
5    *
6    * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7    * You may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    * http://www.eclipse.org/legal/epl-v10.html
10   */
11  /*
12   * File: OutlineContentProvider.java
13   * Created: 2007-00-00
14   * Author: awos
15   * $Id: OutlineContentProvider.java 2770 2009-04-21 19:17:34Z kpietak $
16   */
17  
18  package pl.edu.agh.cast.ui.outline;
19  
20  import java.beans.PropertyChangeEvent;
21  import java.beans.PropertyChangeListener;
22  import java.util.LinkedList;
23  import java.util.List;
24  
25  import org.eclipse.jface.viewers.ITreeContentProvider;
26  import org.eclipse.jface.viewers.Viewer;
27  
28  import pl.edu.agh.cast.model.visual.backward.ConnectionGroup;
29  import pl.edu.agh.cast.model.visual.backward.IDiagram;
30  import pl.edu.agh.cast.model.visual.backward.Node;
31  import pl.edu.agh.cast.ui.AbstractConfigurableView;
32  import pl.edu.agh.cast.ui.AbstractContentProvider;
33  
34  /**
35   * Provides content to the {@link OutlineTreeView}.
36   *
37   * @author AGH CAST Team
38   */
39  public class OutlineContentProvider extends AbstractContentProvider implements ITreeContentProvider,
40          PropertyChangeListener {
41  
42  	/**
43  	 * Creates new outline content provider.
44  	 *
45  	 * @param viewer
46  	 *            the viewer which is the master of this content provider
47  	 * @param view
48  	 *            the view, where this content provider is used
49  	 */
50  	public OutlineContentProvider(Viewer viewer, AbstractConfigurableView view) {
51  		super(viewer, view);
52  	}
53  
54  	/**
55  	 * {@inheritDoc}
56  	 *
57  	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object,
58  	 *      java.lang.Object)
59  	 */
60  	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
61  		if (oldInput != null && oldInput instanceof IDiagram) {
62  			((IDiagram)oldInput).removePropertyChangeListener(this);
63  		}
64  		if (newInput != null && newInput instanceof IDiagram) {
65  			((IDiagram)newInput).addPropertyChangeListener(this);
66  		}
67  	}
68  
69  	/**
70  	 * {@inheritDoc}
71  	 *
72  	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
73  	 */
74  	public Object[] getChildren(Object parentElement) {
75  		if (parentElement instanceof IDiagram) {
76  			IDiagram diagram = (IDiagram)parentElement;
77  			// return array with collection to have root node
78  			return diagram.getNodes().toArray();
79  		}
80  		if (parentElement instanceof Node) {
81  			List<ConnectionGroupWrapper> wrappers = new LinkedList<ConnectionGroupWrapper>();
82  			Node node = (Node)parentElement;
83  			for (ConnectionGroup connectionGroup : node.getConnectionGroups()) {
84  				if (connectionGroup.getSourceConnectionCountFor(node) > 0) {
85  					wrappers.add(new ConnectionGroupWrapper(connectionGroup, node));
86  				}
87  			}
88  			return wrappers.toArray();
89  		}
90  		return new Object[0];
91  	}
92  
93  	/**
94  	 * {@inheritDoc}
95  	 *
96  	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
97  	 */
98  	public Object getParent(Object element) {
99  		return null;
100 	}
101 
102 	/**
103 	 * {@inheritDoc}
104 	 *
105 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
106 	 */
107 	public boolean hasChildren(Object element) {
108 		return getChildren(element).length > 0;
109 	}
110 
111 	/**
112 	 * {@inheritDoc}
113 	 *
114 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
115 	 */
116 	public Object[] getElements(Object inputElement) {
117 		return getChildren(inputElement);
118 	}
119 
120 	/**
121 	 * {@inheritDoc}
122 	 *
123 	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
124 	 */
125 	public void propertyChange(PropertyChangeEvent arg0) {
126 		viewer.refresh();
127 	}
128 
129 }