org.openstreetmap.josm.gui.dialogs.relation
Class RelationEditor

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Dialog
                  extended by javax.swing.JDialog
                      extended by org.openstreetmap.josm.gui.ExtendedDialog
                          extended by org.openstreetmap.josm.gui.dialogs.relation.RelationEditor
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants
Direct Known Subclasses:
GenericRelationEditor

public abstract class RelationEditor
extends ExtendedDialog

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JDialog
javax.swing.JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
java.awt.Dialog.AccessibleAWTDialog, java.awt.Dialog.ModalExclusionType, java.awt.Dialog.ModalityType
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
private static java.util.ArrayList<java.lang.Class<RelationEditor>> editors
          the list of registered relation editor classes
private  OsmDataLayer layer
          the data layer the relation belongs to
private  Relation relation
          The relation that this editor is working on.
static java.lang.String RELATION_PROP
          the property name for the current relation.
static java.lang.String RELATION_SNAPSHOT_PROP
          the property name for the current relation snapshot
private  Relation relationSnapshot
          The version of the relation when editing is started.
private  java.beans.PropertyChangeSupport support
           
 
Fields inherited from class org.openstreetmap.josm.gui.ExtendedDialog
buttons, contentInsets, defaultButton, DialogClosedOtherwise
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Dialog
DEFAULT_MODALITY_TYPE
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
protected RelationEditor(OsmDataLayer layer, Relation relation, java.util.Collection<RelationMember> selectedMembers)
          Creates a new relation editor
 
Method Summary
 void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
           
static RelationEditor getEditor(OsmDataLayer layer, Relation r, java.util.Collection<RelationMember> selectedMembers)
          This is a factory method that creates an appropriate RelationEditor instance suitable for editing the relation that was passed in as an argument.
protected  OsmDataLayer getLayer()
          Replies the OsmDataLayer in whose context this relation editor is open
protected  Relation getRelation()
          Replies the currently edited relation
protected  Relation getRelationSnapshot()
          Replies the state of the edited relation when the editor has been launched
protected  boolean isDirtyRelation()
          Replies true if the currently edited relation has been changed elsewhere.
 void registerRelationEditor(java.lang.Class<RelationEditor> clazz)
          Registers a relation editor class.
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
           
protected  void setRelation(Relation relation)
          Sets the currently edited relation.
protected  void setRelationSnapshot(Relation snapshot)
           
protected  void updateTitle()
          updates the title of the relation editor
 
Methods inherited from class org.openstreetmap.josm.gui.ExtendedDialog
buttonAction, configureContextsensitiveHelp, findMaxDialogSize, fixFocus, getValue, setButtonIcons, setButtonIcons, setCancelButton, setContent, setContent, setContent, setDefaultButton, setIcon, setIcon, setRememberWindowGeometry, setToggleCheckboxText, setToolTipTexts, setupDialog, setVisible, showDialog, toggleDisable, toggleEnable
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Dialog
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, show, toBack
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

RELATION_PROP

public static final java.lang.String RELATION_PROP
the property name for the current relation.

See Also:
setRelation(Relation), getRelation()

RELATION_SNAPSHOT_PROP

public static final java.lang.String RELATION_SNAPSHOT_PROP
the property name for the current relation snapshot

See Also:
getRelationSnapshot()

editors

private static java.util.ArrayList<java.lang.Class<RelationEditor>> editors
the list of registered relation editor classes


relation

private Relation relation
The relation that this editor is working on.


relationSnapshot

private Relation relationSnapshot
The version of the relation when editing is started. This is null if a new relation is created.


layer

private OsmDataLayer layer
the data layer the relation belongs to


support

private final java.beans.PropertyChangeSupport support
Constructor Detail

RelationEditor

protected RelationEditor(OsmDataLayer layer,
                         Relation relation,
                         java.util.Collection<RelationMember> selectedMembers)
                  throws java.lang.IllegalArgumentException
Creates a new relation editor

Parameters:
layer - the OsmDataLayer in whose context a relation is edited. Must not be null.
relation - the relation. Can be null if a new relation is to be edited.
selectedMembers - a collection of members in relation which the editor should display selected when the editor is first displayed on screen
Throws:
java.lang.IllegalArgumentException - thrown if layer is null
Method Detail

registerRelationEditor

public void registerRelationEditor(java.lang.Class<RelationEditor> clazz)
Registers a relation editor class. Depending on the type of relation to be edited getEditor(OsmDataLayer, Relation, Collection) will create an instance of this class.

Parameters:
clazz - the class

getEditor

public static RelationEditor getEditor(OsmDataLayer layer,
                                       Relation r,
                                       java.util.Collection<RelationMember> selectedMembers)
This is a factory method that creates an appropriate RelationEditor instance suitable for editing the relation that was passed in as an argument. This method is guaranteed to return a working RelationEditor. If no specific editor has been registered for the type of relation, then a generic editor will be returned. Editors can be registered by adding their class to the static list "editors" in the RelationEditor class. When it comes to editing a relation, all registered editors are queried via their static "canEdit" method whether they feel responsible for that kind of relation, and if they return true then an instance of that class will be used.

Parameters:
layer - the data layer the relation is a member of
r - the relation to be edited
selectedMembers - a collection of relation members which shall be selected when the editor is first launched
Returns:
an instance of RelationEditor suitable for editing that kind of relation

updateTitle

protected void updateTitle()
updates the title of the relation editor


getRelation

protected Relation getRelation()
Replies the currently edited relation

Returns:
the currently edited relation

setRelation

protected void setRelation(Relation relation)
Sets the currently edited relation. Creates a snapshot of the current state of the relation. See getRelationSnapshot()

Parameters:
relation - the relation

getLayer

protected OsmDataLayer getLayer()
Replies the OsmDataLayer in whose context this relation editor is open

Returns:
the OsmDataLayer in whose context this relation editor is open

getRelationSnapshot

protected Relation getRelationSnapshot()
Replies the state of the edited relation when the editor has been launched

Returns:
the state of the edited relation when the editor has been launched

setRelationSnapshot

protected void setRelationSnapshot(Relation snapshot)

isDirtyRelation

protected boolean isDirtyRelation()
Replies true if the currently edited relation has been changed elsewhere. In this case a relation editor can't apply updates to the relation directly. Rather, it has to create a conflict.

Returns:
true if the currently edited relation has been changed elsewhere.

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Overrides:
addPropertyChangeListener in class java.awt.Window

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Overrides:
removePropertyChangeListener in class java.awt.Component


JOSM