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: IDiagram.java
13   * Created: 2007-00-00
14   * Author: fox, tmilos
15   * $Id: IDiagram.java 2817 2009-05-05 13:17:57Z tmilos $
16   */
17  
18  package pl.edu.agh.cast.model.visual.backward;
19  
20  import java.io.Serializable;
21  import java.util.Collection;
22  import java.util.Date;
23  import java.util.List;
24  import java.util.Map;
25  
26  import org.eclipse.core.resources.IFile;
27  import org.eclipse.core.runtime.IProgressMonitor;
28  
29  import pl.edu.agh.cast.data.model.property.IPropertyChangeProvider;
30  import pl.edu.agh.cast.model.attributes.AttributeMergePolicy;
31  import pl.edu.agh.cast.model.attributes.NodeAttributeManager;
32  import pl.edu.agh.cast.model.base.IDataProvider;
33  import pl.edu.agh.cast.model.base.IDataSet;
34  import pl.edu.agh.cast.model.base.IEntity;
35  import pl.edu.agh.cast.model.base.IRelation;
36  
37  /**
38   * Interface of a diagram which consists of {@link Node}s and {@link Connection}s.
39   *
40   * @author AGH CAST Team
41   */
42  public interface IDiagram extends Serializable, IPropertyChangeProvider, AttributeValueContainer, IDataProvider {
43  
44  	/**
45  	 * Returns a collection of all diagram {@link Node}s.
46  	 *
47  	 * @return collection of {@link Node}s
48  	 */
49  	public Collection<Node> getNodes();
50  
51  	/**
52  	 * Returns a collection of {@link Connection}s.
53  	 *
54  	 * This can throw {@link UnsupportedOperationException} if diagram does not have information about single
55  	 * connections.
56  	 *
57  	 * @return collection of {@link Connection}s
58  	 */
59  	public Collection<Connection> getConnections();
60  
61  	/**
62  	 * Returns diagram settings.
63  	 *
64  	 * @return diagram settings
65  	 */
66  	public IDiagramSettings getSettings();
67  
68  	/**
69  	 * Sets diagram settings.
70  	 *
71  	 * @param settings
72  	 *            diagram settings
73  	 */
74  	public void setSettings(IDiagramSettings settings);
75  
76  	/**
77  	 * Return file in which this diagram is stored.
78  	 *
79  	 * @return the file containing this diagram
80  	 */
81  	public IFile getFile();
82  
83  	/**
84  	 * Set the file in which this diagram is stored.
85  	 *
86  	 * @param file
87  	 *            the file to store the diagram in
88  	 */
89  	public void setFile(IFile file);
90  
91  	/**
92  	 * Returns the display name of the diagram.
93  	 *
94  	 * @return the name of the diagram
95  	 */
96  	public String getDisplayName();
97  
98  	/**
99  	 * Sets the display name of the diagram.
100 	 *
101 	 * @param name
102 	 *            the name of the diagram
103 	 */
104 	public void setDisplayName(String name);
105 
106 	/**
107 	 * Returns statistics for current diagram.
108 	 *
109 	 * @return statistics for current diagram
110 	 * @deprecated Use the {@link #getStatistics(IProgressMonitor)} version with progress reporting
111 	 */
112 	@Deprecated
113 	public List<Statistic> getStatistics();
114 
115 	/**
116 	 * Returns statistics for current diagram. Uses {@link IProgressMonitor}.
117 	 *
118 	 * @param monitor
119 	 *            non-null progress monitor
120 	 * @return statistics for current diagram
121 	 */
122 	public List<Statistic> getStatistics(IProgressMonitor monitor);
123 
124 	/**
125 	 * Returns the {@link NodeAttributeManager} of this diagram.
126 	 *
127 	 * @return {@link NodeAttributeManager} of this diagram
128 	 */
129 	public NodeAttributeManager getNodeAttributeManager();
130 
131 	/**
132 	 * Returns the {@link Node} with given id.
133 	 *
134 	 * @param nodeId
135 	 *            id of the node to find
136 	 * @return node with given id
137 	 */
138 	public Node findNode(String nodeId);
139 
140 	/**
141 	 * Returns the {@link Connection} matching given criteria.
142 	 *
143 	 * @param sourceNodeId
144 	 *            id of the connection source node
145 	 * @param targetNodeId
146 	 *            id of the connection target node
147 	 * @param date
148 	 *            date of the connection
149 	 * @return connection matching given criteria
150 	 */
151 	public Connection findConnection(String sourceNodeId, String targetNodeId, Date date);
152 
153 	/**
154 	 * Adds a {@link Node} to the model.
155 	 *
156 	 * @param node
157 	 *            the node to add
158 	 * @return the node that was actually added to the diagram (useful for undo)
159 	 */
160 	public Node addNode(Node node);
161 
162 	/**
163 	 * Adds {@link Node}s to the model.
164 	 *
165 	 * @param nodes
166 	 *            collection of nodes to add
167 	 * @return collection of nodes that were actually added to the diagram (doesn't include nodes already present in the
168 	 *         diagram); this information can be used to undo the adding operation
169 	 */
170 	public Collection<Node> addNodes(Collection<Node> nodes);
171 
172 	/**
173 	 * Adds a {@link Connection} to the diagram.
174 	 *
175 	 * @param c
176 	 *            connection to add
177 	 * @return non-null, added connection
178 	 */
179 	public Connection addConnection(Connection c);
180 
181 	/**
182 	 * Adds multiple {@link Connection}s. Calls {@link #addConnection}.
183 	 *
184 	 * @param connections
185 	 *            collection of connections to add
186 	 */
187 	public void addConnections(Collection<Connection> connections);
188 
189 	/**
190 	 * Removes a {@link Node} from the diagram. Node must have been created by this diagram's factory (i.e. must be a
191 	 * diagram's node).
192 	 *
193 	 * @param node
194 	 *            the node to remove
195 	 * @throws IllegalArgumentException
196 	 *             if node is not a child of the diagram
197 	 */
198 	public void removeNode(Node node);
199 
200 	/**
201 	 * Removes {@link Node}s from the model. Nodes must have been created by this diagram's factory (i.e. must be
202 	 * diagram's nodes).
203 	 *
204 	 * @param nodes
205 	 *            collection of nodes to remove
206 	 * @throws IllegalArgumentException
207 	 *             if any of the nodes is not a child of the diagram
208 	 */
209 	public void removeNodes(Collection<Node> nodes);
210 
211 	/**
212 	 * Removes a {@link Connection} from the model. Connection must have been created by this diagram's factory (i.e.
213 	 * must be a diagram's connection).
214 	 *
215 	 * @param connection
216 	 *            connection to add
217 	 * @throws IllegalArgumentException
218 	 *             if connection is not a child of the diagram
219 	 */
220 	public void removeConnection(Connection connection);
221 
222 	/**
223 	 * Removes selection in diagram edit part.
224 	 */
225 	public void deselect();
226 
227 	/**
228 	 * Returns all model data (packaged as one {@link IDataSet}) kept in the diagram.
229 	 *
230 	 * @return {@link IDataSet} containing diagram model data
231 	 */
232 	public IDataSet getDomainModel();
233 
234 	/**
235 	 * Finds {@link IRelation} for given connection.
236 	 *
237 	 * @param connection
238 	 *            the connection which was made of the relation
239 	 * @return the relation which was the base for given connection
240 	 */
241 	public IRelation findRelation(Connection connection);
242 
243 	/**
244 	 * Adds attributes from a collection of entities to the diagram with join on entity and node IDs. For details see
245 	 * {@link #addAttributesFromEntities(Collection, Map, String, String, String)}
246 	 *
247 	 * @param entities
248 	 *            collection of entities to add attributes from
249 	 * @param attributes
250 	 *            collection of attributes from <code>entities</code> that should be added to nodes
251 	 * @param mergePolicies
252 	 *            map of {@link AttributeMergePolicy} policies
253 	 * @param nodeType
254 	 *            type of nodes that the attributes should be added to, if <code>null</code> then all types are taken
255 	 *            into account
256 	 * @param monitor
257 	 *            progress monitor for this task, if <code>null</code> then
258 	 *            {@link org.eclipse.core.runtime.NullProgressMonitor} is used
259 	 */
260 	public void addAttributesFromEntities(Collection<IEntity> entities, Collection<String> attributes,
261 	        Map<String, AttributeMergePolicy> mergePolicies, String nodeType, IProgressMonitor monitor);
262 
263 	/**
264 	 * Adds attributes from a collection of entities to the diagram. The join between the entities and nodes is
265 	 * performed on the <code>sourceJoinAttribute</code> of <code>entities</code> and <code>targetJoinAttribute</code>
266 	 * of diagram nodes.
267 	 *
268 	 * For each {@link Node} <code>node</code> of type <code>nodeType</code> from the current {@link Diagram}, if there
269 	 * is an <code>entity</code> (of type {@link IEntity}) such that:
270 	 *
271 	 * <pre>
272 	 * node.getAttributeValue(targetJoinAttribute).equals(entity.getAttribute(sourceJoinAttribute));
273 	 * </pre>
274 	 *
275 	 * then the attributes from the <code>entity</code> are added to the <code>node</code>.
276 	 *
277 	 * The <code>sourceJoinAttribute</code> entity attribute should be unique across the <code>entities</code>
278 	 * collection, in order for the results to be deterministic.
279 	 *
280 	 * In order to resolve conflicts where the same attribute is present in both <code>entity</code> and
281 	 * <code>node</code>, instances {@link AttributeMergePolicy} can be used. These policies should be supplied in a map
282 	 * with entity attribute IDs as keys. A <code>null</code> key defines the default policy, otherwise
283 	 * {@link AttributeMergePolicy#MERGE_POLICY_ALWAYS_SECOND} is used.
284 	 *
285 	 * @param entities
286 	 *            collection of entities to add attributes from
287 	 * @param attributes
288 	 *            collection of attributes from <code>entities</code> that should be added to nodes
289 	 * @param mergePolicies
290 	 *            map of {@link AttributeMergePolicy} policies
291 	 * @param nodeType
292 	 *            type of nodes that the attributes should be added to, if <code>null</code> then all types are taken
293 	 *            into account
294 	 * @param sourceJoinAttribute
295 	 *            id of the entity attribute to join on
296 	 * @param targetJoinAttribute
297 	 *            id of the node attribute to join on
298 	 * @param monitor
299 	 *            progress monitor for this task, if <code>null</code> then
300 	 *            {@link org.eclipse.core.runtime.NullProgressMonitor} is used
301 	 */
302 	public void addAttributesFromEntities(Collection<IEntity> entities, Collection<String> attributes,
303 	        Map<String, AttributeMergePolicy> mergePolicies, String nodeType, String sourceJoinAttribute,
304 	        String targetJoinAttribute, IProgressMonitor monitor);
305 
306 	/**
307 	 * Checks if the nodes of this diagram may be enhanced with attributes of entities from another {@link IDataSet}.
308 	 * For details see {@link #addAttributesFromEntities(Collection, Collection, Map, String, String, String)} .
309 	 *
310 	 * @return whether this diagram may be enhanced
311 	 */
312 	public boolean isEnhancable();
313 
314 	/**
315 	 * Suppresses all events fired by this diagram.
316 	 *
317 	 * @param newSuppressEvents
318 	 *            new value of suppression flag
319 	 */
320 	public void setSuppressEvents(boolean newSuppressEvents);
321 
322 }