com.togethersoft.openapi.rwi
Interface RwiDiagram


public interface RwiDiagram
extends RwiContainer

RwiDiagram
is a set of RwiReference derivatives referencing the model's elements.
Diagrams are kept in packages. Examples of diagrams are class diagrams, use case diagrams, sequence diagrams,
collaboration diagrams etc.


It is recommended to read description of the
RwiPackage interface first.


The RwiReferences containing in this diagram are used as shortcuts in Windows - they are
only pointers to the real RwiElements.
If you have read the RwiPackage description you know that
each RwiDiagram has one or two (for physical package diagrams) associated RwiPackages.
If the RwiReference points an element belonging to this diagram's associated
RwiPackage this RwiReference is called
a primary reference. Otherwise it is called an imported reference.
RwiReference can be examined on whether it is an imported or a primary reference
using the method RwiReference.isImported -
for imported references it will return true.


When this RwiDiagram is displayed, elements referenced by imported references are shown
as shortcuts.



To add to this diagram a reference to an existing model's element, addReference method
can be used (the same happens when the user adds a shortcut to an element using the "Add shortcut" dialog).
In this case only a reference to an element will be added to this diagram's reference set, but the
referenced element will not be moved or copied.


This interface provides methods for creating new RwiElements. Basically they are similar
to the creational methods in the RwiPackage interface. The difference is that methods in this
interface automatically add a reference (primary or imported) to this diagram's reference set.
This is convenient when you would like to create a new element in the model and to add a
shortcut to this element to this diagram.


The methods in this interface for creating new elements
are useful only for non-physical package diagrams (see RwiPackage), because
if you create something in a package, its physical package diagram automatically reflects such a change.
For example, if this RwiDiagram is a use case diagram and you would like to
create a new class in the package containing this diagram and to add a reference (a shortcut) to
that class to this diagram, you would use method createNodeByPattern for this diagram.


The RwiReference has a useful method
setVisible(boolean) controlling the visibility
of the referenced element in the diagram (when the user invokes "Hide" command from the popup menu
Together uses this method for the corresponding RwiReference).


Only imported references can be deleted from this diagram (because if
it would be possible to delete primary references as well, the element could be "lost").
It can be done using
the RwiReference.delete method. (Note that this doesn't delete a referenced element -
only a reference to it from this diagram)


If you have a reference to some RwiElement, the method
findDiagramFor can be used to find a diagram
containing a primary reference to this element (the diagram in whose associated package the element
is stored).


RwiDiagrams are not directly displayed by Together on the screen. Together uses
IdeDiagrams to visualize RwiDiagrams
in order to
be able to work with the selection, to switch between active diagrams etc.
It is possible to get IdeDiagram corresponding to the
RwiDiagram using methods of
IdeDiagramManager. For example,
let's find and display a diagram containing someRwiElement:



import com.togethersoft.openapi.rwi.RwiModel;
import com.togethersoft.openapi.rwi.RwiModelAccess;
import com.togethersoft.openapi.rwi.RwiDiagram;
import com.togethersoft.openapi.ide.diagram.IdeDiagramManager;
import com.togethersoft.openapi.ide.diagram.IdeDiagramManagerAccess;
import com.togethersoft.openapi.ide.diagram.IdeDiagram;
...
public void showDiagram(RwiElement someRwiElement){
RwiModel model = RwiModelAccess.getModel();
RwiDiagram rwiDiagram = model.findDiagramFor(someRwiElement);
if (rwiDiagram==null) return;
IdeDiagramManager diagramManager= IdeDiagramManagerAccess.getDiagramManager();
IdeDiagram ideDiagram = diagramManager.openDiagram(rwiDiagram,true);
diagramManager.setActiveDiagram(ideDiagram);
}

Important thing to know about RwiDiagrams is that Together uses RwiDiagrams
to represent packages in a class diagram. For example, when you select a package icon in a class diagram,
the selected element is RwiDiagram representing the physical package diagram for that
package (not RwiPackage as you might expect).
To get the RwiPackage corresponding to the selected package icon, use the
getContainingPackage method for the selected
RwiDiagram.

Author:
TogetherSoft
Since: Together 3.0
See Also: RwiReference, addReference(com.togethersoft.openapi.rwi.RwiElement), RwiModel.findDiagramFor(com.togethersoft.openapi.rwi.RwiElement), findReference(com.togethersoft.openapi.rwi.RwiElement)

Method Summary
 RwiReferenceaddReference(RwiElement element)
          Creates a reference to model's element in this diagram.
 booleancanAddReference(RwiElement element)
          Checks whether it is possible to create a reference to model's element in this diagram.
 booleancanCreateDiagram(String shapeType)
          Checks whether it is possible to create a new diagram with the specified value of
RwiProperty.SHAPE_TYPE property.
 booleancanCreateNode(String shapeType)
          Checks whether it is possible to create a new node with the specified value of
RwiProperty.SHAPE_TYPE property.
 booleancanCreateNodeByPattern(String language, String patternName)
          Checks whether it is possible to create a new node using the specified pattern.
 booleancanCreatePackage()
          Checks whether it is possible to create a new package.
 RwiDiagramReferencecreateDiagram(String shapeType)
          Creates a new diagram with the specified value of
RwiProperty.SHAPE_TYPE property and returns an imported reference to that diagram.
 RwiNodeReferencecreateNode(String shapeType)
          Creates a new node with the specified value of
RwiProperty.SHAPE_TYPE property and returns a primary reference to this node.
 RwiNodeReferencecreateNodeByPattern(String language, String patternName)
          Creates a new node using the specified pattern and returns a reference to this node.
 RwiDiagramReferencecreatePackage()
          Creates a new package and returns a reference to its physical package diagram.
 RwiDiagramReferenceEnumerationdiagramReferences()
          Returns an enumeration of references to other diagrams this diagram has.
 RwiReferencefindReference(RwiElement element)
          Given the RwiElement returns a reference to it in this diagram.
 RwiReferencefindReference(String uniqueName)
          Given the unique name of the RwiElement returns a reference to it in this diagram.
 RwiPackagegetDesignPackage()
          Returns the RwiPackage containing design elements for this diagram.
 StringgetOption(String name)
          For this diagram, returns a string with the value of the specified string option.
 booleanhasOption(String name)
          For this diagram, returns a boolean value of the specified bolean option.
 RwiNodeReferenceEnumerationnodeReferences()
          Returns an enumeration of references to nodes this diagram has.
 RwiReferenceEnumerationreferences()
          Returns an enumeration of all the references this diagram has.
 RwiPackageEnumerationsynchronizedPackages()
          Deprecated.  

Methods inherited from interface com.togethersoft.openapi.rwi.RwiContainer
canPaste, elements, getContainingPackage, paste

Methods inherited from interface com.togethersoft.openapi.rwi.RwiElement
accept, canCreateIncomingLink, canCreateOutgoingLink, canCreateOutgoingLink, canCreateOutgoingLinkByPattern, canCut, canDelete, codeElements, copy, createOutgoingLink, createOutgoingLinkByPattern, cut, delete, getCodeElement, getTimeStamp, getUniqueName, isDeleted, outgoingLinks

Methods inherited from interface com.togethersoft.openapi.rwi.RwiPropertyMap
addProperty, canAddProperty, canSetProperty, canSetProperty, getProperty, hasProperty, isPropertyReadable, isPropertyWritable, properties, properties, setProperty, setProperty

Method Detail

addReference

public RwiReference addReference(RwiElement element)
Creates a reference to model's element in this diagram. This method
also automatically adds this reference to this diagram's reference set.


The returned reference is an imported reference (but if the element
belongs to this diagram (located in this diagram's associated package) this method
will return an existing primary reference to that element).

Parameters:
element the element to which a reference is being created
Returns: just created reference to an element

canAddReference

public boolean canAddReference(RwiElement element)
Checks whether it is possible to create a reference to model's element in this diagram.
Parameters:
element the element to which a reference is being created
Returns: true if it is possible to create a reference, false otherwise.

canCreateDiagram

public boolean canCreateDiagram(String shapeType)
Checks whether it is possible to create a new diagram with the specified value of
RwiProperty.SHAPE_TYPE property.
Parameters:
shapeType the string value which needs to be assigned to the diagram's
SHAPE_TYPE property. Cannot be null.
Returns: true if it is possible to create a new diagram, false otherwise
See Also:
RwiProperty.SHAPE_TYPE

canCreateNode

public boolean canCreateNode(String shapeType)
Checks whether it is possible to create a new node with the specified value of
RwiProperty.SHAPE_TYPE property.
Parameters:
shapeType the string value which needs to be assigned to the node's SHAPE_TYPE property. Cannot
be null.
Returns: true if it is possible to create a new node, false otherwise
See Also:
RwiProperty.SHAPE_TYPE

canCreateNodeByPattern

public boolean canCreateNodeByPattern(String language, String patternName)
Checks whether it is possible to create a new node using the specified pattern.
Parameters:
language string with the name of the language for source code generation
patternName string with the name of the pattern being used.
Some pattern names are defined in the RwiPattern interface.
Returns: true if it is possible to create a new node
See Also:
RwiLanguage, RwiPattern

canCreatePackage

public boolean canCreatePackage()
Checks whether it is possible to create a new package.
Returns: true if it is possible to create a new package.
See Also:
RwiPackage

createDiagram

public RwiDiagramReference createDiagram(String shapeType)
Creates a new diagram with the specified value of
RwiProperty.SHAPE_TYPE property and returns an imported reference to that diagram.
This method
also automatically adds that reference to this diagram's reference set (when this diagram is displayed the referenced diagram will be shown as a shortcut).


Note that the created reference is not a primary reference.


The created diagram will be placed in the package containing this diagram. This method
works just like the method RwiPackage.createDiagram
but it automatically creates a shortcut to the newly created diagram in this diagram.


For example, here is a script which creates a new use case diagram named "MyUseCase"
in the package containing the selected diagram:


public void run(IdeContext context){
RwiElement[] selectedRwiElements = context.getRwiElements();
RwiElement element = selectedRwiElements[0];
if ( ! (element instanceof RwiDiagram) ) {
return;
}
RwiDiagram diagram = (RwiDiagram)element;
RwiDiagramReference newDiagramReference = diagram.createDiagram(RwiShapeType.USE_CASE_DIAGRAM);
RwiDiagram newDiagram = newDiagramReference.getDiagram();
newDiagram.setProperty(RwiProperty.NAME, "MyUseCase");
... //here you can add actors etc.
}

Note that if you select a package icon and run this script it will create a use case diagram
in that package, not in the package the
currently visible diagram belongs to (remember, package icons are RwiDiagrams - see RwiDiagram).
Parameters:
shapeType the string value which needs to be assigned to the diagram's
SHAPE_TYPE property. Cannot be null.
Returns: reference to the new just created diagram
See Also:
RwiPackage.createDiagram(java.lang.String), RwiProperty.SHAPE_TYPE

createNode

public RwiNodeReference createNode(String shapeType)
Creates a new node with the specified value of
RwiProperty.SHAPE_TYPE property and returns a primary reference to this node.
This method
also automatically adds that reference to this diagram's reference set (when this diagram is displayed the referenced element will not be shown as a shortcut).


Note that this method should not be used for creation of source code-based elements (classes, interfaces).
For that purposes the method createNodeByPattern is used.


The created node will be kept in the package containing design elements for this diagram
(returned by the getDesignPackage method).


For example, this script creates a new actor named "CEO" in the selected diagram:


public void run(IdeContext context){
RwiElement[] selectedRwiElements = context.getRwiElements();
RwiElement element = selectedRwiElements[0];
if ( ! (element instanceof RwiDiagram) ) {
return;
}
RwiDiagram diagram = (RwiDiagram)element;
RwiNodeReference actorReference = diagram.createNode(RwiShapeType.ACTOR);
RwiNode actor = actorReference.getNode();
actor.setProperty(RwiProperty.NAME, "CEO");
}
Parameters:
shapeType the string value which needs to be assigned to the node's SHAPE_TYPE property. Cannot
be null.
Returns: a reference to the new just created node
See Also:
RwiProperty.SHAPE_TYPE, createNodeByPattern(java.lang.String,java.lang.String)

createNodeByPattern

public RwiNodeReference createNodeByPattern(String language, String patternName)
Creates a new node using the specified pattern and returns a reference to this node.
This method
also automatically adds that reference to this diagram's reference set.


Node is created in the same
package where this diagram is stored. This package can be obtained using the
getContainingPackage method.


If this diagram is a physical package diagram then the returned reference will be
a primary reference (the class/interface icon will not be shown as a shortcut), imported otherwise
(the class/interface icon will be shown as a shortcut).


For example, this script creates a new class named "MyNewClass" and a new interface named
"MyNewInterface" in the package containing the selected diagram:


public void run(IdeContext context){
RwiElement[] selectedRwiElements = context.getRwiElements();
RwiElement element = selectedRwiElements[0];
if ( ! (element instanceof RwiDiagram) ) {
return;
}
RwiDiagram diagram = (RwiDiagram)element;
RwiNodeReference newClassReference = diagram.createNodeByPattern(RwiLanguage.JAVA, RwiPattern.DEFAULT_CLASS); //creates a public class
RwiNode newClass = newClassReference.getNode();
newClass.setProperty(RwiProperty.NAME, "MyNewClass");
RwiNodeReference newInterfaceReference = diagram.createNodeByPattern(RwiLanguage.JAVA, RwiPattern.DEFAULT_INTERFACE); //creates a public interface
RwiNode newInterface = newInterfaceReference.getNode();
newInterface.setProperty(RwiProperty.NAME, "MyNewInterface");
}

Note that if you select a package icon and run this script it will create a class and interface
in that package, not in the package the
currently visible diagram belongs to (remember, package icons are RwiDiagrams - see RwiDiagram).
Parameters:
language string with the name of the language for source code generation
patternName string with the name of the pattern being used.
Some pattern names are defined in the RwiPattern interface.
Returns: reference to the new just created node
See Also:
RwiPackage.createNodeByPattern(java.lang.String,java.lang.String), RwiLanguage, RwiPattern, createNode(java.lang.String)

createPackage

public RwiDiagramReference createPackage()
Creates a new package and returns a reference to its physical package diagram.
This method
also automatically adds that reference to this diagram's reference set.
The created subpackage
will be a subpackage of this diagram's package (this diagram's package can be obtained using the
getContainingPackage method).


If this diagram is a physical package diagram itself then the returned reference will be
a primary reference (the package icon will not be shown as a shortcut), imported otherwise
(the package icon will be shown as a shortcut).


For example, this script creates a new package "myNewPackage" in the package containing the selected diagram:


public void run(IdeContext context){
RwiElement[] selectedRwiElements = context.getRwiElements();
RwiElement element = selectedRwiElements[0];
if ( ! (element instanceof RwiDiagram) ) {
return;
}
RwiDiagram diagram = (RwiDiagram)element;
RwiDiagramReference newPackagePhysicalDiagramReference = diagram.createPackage();
RwiPackage newPackage = newPackagePhysicalDiagramReference.getDiagram().getContainingPackage();
newPackage.setProperty(RwiProperty.NAME, "myNewPackage");
}

Note that if you select a package icon and run this script it will create a subpackage
in that package, not in the package the
currently visible diagram belongs to (remember, package icons are RwiDiagrams - see RwiDiagram).


It is better to use RwiPackage.createSubpackage method for
creation of packages.

Returns: reference to the physical package diagram of just created package
See Also:
RwiPackage

diagramReferences

public RwiDiagramReferenceEnumeration diagramReferences()
Returns an enumeration of references to other diagrams this diagram has.
Returns: an enumeration of references to other diagrams this diagram has
See Also:
references(), nodeReferences()

findReference

public RwiReference findReference(RwiElement element)
Given the RwiElement returns a reference to it in this diagram.
Parameters:
element the element the reference to which is being searched for.
Returns: a reference to element, null
if this diagram doesn't have a reference to this element
See Also:
findReference(java.lang.String)

findReference

public RwiReference findReference(String uniqueName)
Given the unique name of the RwiElement returns a reference to it in this diagram.
Parameters:
uniqueName unique name string for the element
Returns: a reference to the element by its unique name, null
if this diagram doesn't have a reference to this element
See Also:
RwiElement.getUniqueName(), findReference(com.togethersoft.openapi.rwi.RwiElement)

getDesignPackage

public RwiPackage getDesignPackage()
Returns the RwiPackage containing design elements for this diagram. See
the RwiPackage interface description.
See Also:
RwiPackage

getOption

public String getOption(String name)
For this diagram, returns a string with the value of the specified string option. If there is no
such an option, this method returns null.
Parameters:
name The string with the name of a string option. Some options are available for
editing via "Diagram options" popup menu for a diagram. For example,


getOption("option.detail")

will return the value of the option.detail option (defined
in a config file).
Returns: a string with the value of the specified string option

hasOption

public boolean hasOption(String name)
For this diagram, returns a boolean value of the specified bolean option. If there is no
such an option, this method returns false.
Parameters:
name The string with the name of a string option. Some options are available for
editing via "Diagram options" popup menu for a diagram. For example,


getOption("option.associationLinks.directed")

will return the value of the option.associationLinks.directed option (defined
in a config file).
Returns: a boolean value of the specified boolean option

nodeReferences

public RwiNodeReferenceEnumeration nodeReferences()
Returns an enumeration of references to nodes this diagram has.
Returns: an enumeration of references to nodes this diagram has
See Also:
references(), diagramReferences()

references

public RwiReferenceEnumeration references()
Returns an enumeration of all the references this diagram has.
Returns: an enumeration of all the references this diagram has
See Also:
diagramReferences(), nodeReferences()

synchronizedPackages

public RwiPackageEnumeration synchronizedPackages()
Deprecated.