SWAG >> LSEdit >> Download

The architectural structure of lsedit

[^] -- Base class for class above
[c] -- Strong dependencies between thing above
[h] -- Conforms to LandscapeModeHandler.java interface

Basic architecture


LandscapeViewer.java            // Applet mainline, startup and shutdown

LandscapeEditorFrame.java       // Mainline, startup and shutdown logic
  LandscapeEditorCore.java      // Driving logic for all within the frame
                                // Central switch for relaying commands
  [^] Do.java                   // Menu's and accelerator key values
                                // Separated out so all in one place
      MyWindowsMenuItem.java
      [^] MyHistoryMenuItem.java
      MyMenuItem.java
    Diagram.java                // Driving logic for the visualisation graph
    [^] TemporalTa.java         // Encapsulates undo/redo layer of TA
        [^] UndoableTa.java     // Encapsulates undo/redo manager for TA
        [c] MyPaintableUndoableEdit.java
            [^] MyUndoableEdit.java
        [c] MyCompoundEdit.java
	[^] EditableTa.java     // Extends TA with various edit capabilities
            [^] Ta.java         // Encapsulates loading/saving of TA
                [c] TaListener.java
                [c] TaFeedback.java
            [c] LandscapeTokenStream.java
                [^]  TA_StreamTokenizer.java
        ClientSet.java          // Client part of the diagram
        SupplierSet.java        // Supplier part of the diagram
        [^] ClientSupplierSet.java

    RightTabbedPane.java        // The scrollable right tabbed pane
    [c] LegendBox.java          // Legend Tab
         EntityChkBox.java
         RelnChkBox.java
         ClosureConstraints
         EditConstraints
    [c] QueryBox.java           // Query Tab
    [c] TextTree.java           // TOC Tab
    [c] MapBox.java             // Map Tab
    [c] ClipboardBox.java       // Clipboard Tab
    [c] UndoBox.java            // Undo Tab
    [c] ResultBox.java          // Result Tab
    [c] HistoryBox.java         // History of entities visited Tab
    [c] AttributeBox.java       // Attribute value Tab
    Feedback.java               // Feedback box at top of lsedit window
    TextBox.java                // Textbox opposite feedback box

[h] EditModeHandler.java        // Top handler handling mouse clicks etc
                                // Defers to the following switchable
                                // subhandlers depending on input.
[h]   FrameModeHandler.java     // Draw a green frame for selecting
[h]   GroupModeHandler.java     // Moves groups of things around
[h]   MoveModeHandler.java      // Moves IO points on entity
[h]   NewEdgeModeHandler.java   // Creates a new edge
[h]   ResizeModeHandler.java    // Resizes an entity

The system uses these classes for representing the TA read

EntityClass.java                // An entity class
RelationClass.java              // A relation class
  EntityClassPair.java          // Valid pairing of entities for relationship
EntityInstance.java             // An instance of an entity
[c] EntityComponent.java        // The SWING part of entityInstance
    EdgePoint.java              // IO point on an entity
RelationInstance.java           // An instance of a relation
[c] RelationComponent.java      // The SWING part of a relationInstance
    [c] RelationLabel.java      // The SWING relation label

Attribute.java                  // An attribute of some instance or class
[c] AttributeValueItem.java     // A value or chain of attribute values

The above classes inherit from the appropriate

LandscapeClassObject.java	// State info suitable for classes
[^] LandscapeObject3D.java	// State info suitable for 3d things
    [^] LandscapeObject.java	// Minimal state info


These classes encapsulate Dialogs and other high level actions

ArrowDimensions.java           // Dialog to establish arrow properties etc.
ClassInherits.java             // Dialog to show/change inheritance rules
ColorChooser.java              // Dialog to choose a color
ExecuteAction.java             // External command interface specification
FontChooser.java               // Dialog to establish fonts
ImageChooser.java              // Choose an image for an entity
EditAttribute.java             // Dialog to edit attributes of something
BrowserLauncher.java           // Logic to launch browser
Version.java                   // Version and change history
Vista.java                     // Printing support
FindBox.java                   // Search for entities
[c] Find.java                  // Walk through entities found
ReallyDelete.java              // Check that user really wants to delete

These classes support graph layouts

SimplexLayout.java     
  HiArc.java
  HiChildren.java
  HiGraph.java
  HiGraphCoordinates.java
  HiGraphException.java
  HiGroup.java
  HiRank.java
  HiRow.java
  HiSimplex.java

SugiyamaLayout.java
  Graph.java
  Vertex.java

MatrixLayout.java

SpringLayout.java
SpringLayout2.java
  [c] SpringNode.java

ExpandLayout.java
FlipLayoutHorizontally.java
FlipLayoutVertically.java

These classes support clustering

AAClusterLayout.java           // AA Cluster Tool
ACDCClusterLayout.java         // ACDC Cluster Tool
BunchClusterLayout.java        // Bunch Cluster Tool
[c] Clue.java                  // Wrapper for bunch.jar API
                               // (A separate standalone program)
ClusterLayout.java             // Internal Cluster Tool
[c] Distance.java              // Euclidian distance calculator
ClusterInterface.java          // Generic Cluster Tool
[c] LsClusterer.java           // Mainline to test ClusterInterface
                               // (Not part of LSEdit)

Clustering tools

Recluster.java		
ClusterMetrics.java

{^} LandscapeLayouter.java

These classes represent toolbar buttons

Elision_CS_Button.java
Elision_CU_Button.java
Elision_I_Button.java
Elision_c_Button.java
Elision_s_Button.java
Elision_u_Button.java
FindNext_Button.java
FindPrev_Button.java
Query_C_Button.java
Query_Clear_Button.java
Query_b_Button.java
Query_f_Button.java
Find_Button.java
FontSmallerButton.java
FontBiggerButton.java
HistoryNext_Button.java
HistoryPrev_Button.java

ToolBarButton.java       // Common ToolBarButton interface
ToolBarEventHandler.java // Common methods that buttons speak

These classes perform low level caching for efficiency

ColorCache.java          // Caches known colours
EntityCache.java         // Caches all entities in a diagram
FontCache.java           // Caches known fonts
StringCache.java         // Caches strings

The rest is low level utility type stuff

Arrow.java               // Draws an arrow
SrcCardinal.java         // Represents a source cardinal in diagram
[^] Cardinal.java        // Represents a cardinal in the diagram
Clipboard.java           // Clipboard logic
[c] ClipboardEnumerator.java

SortVector.java          // Sorts a vector using a given compare function
  CompareFn.java         // Common comparison interface for sorting
DiagramCoordinates.java  // Interface
LineWalker.java          // Draw dotted lines etc.
MsgOut.java              // System.out.print if flags set
MySplitPane.java         // Fixes a bug in JSplitPane
OrderedHashTableEnumeration.java
RealPoint.java           // A double precision point
StringLinizer.java       // Break a string into lines of text
Trace.java               // Rudimentary trace capability
Util.java                // Shared stuff

Flotsam and jetsum

LsLink.java
Sizeable.java
ScreenPoint.java