bibliothek.gui.dock.frontend
Class RegisteringDockFactory<D extends Dockable,L>

java.lang.Object
  extended by bibliothek.gui.dock.frontend.RegisteringDockFactory<D,L>
Type Parameters:
D - the kind of elements read by this factory
L - the kind of data the wrapped factory needs
All Implemented Interfaces:
DockFactory<D,BackupFactoryData<L>>, DockConverter<D,BackupFactoryData<L>>

public class RegisteringDockFactory<D extends Dockable,L>
extends Object
implements DockFactory<D,BackupFactoryData<L>>

A DockFactory that wrapps around another factory and adds all elements that are read through layout(BackupFactoryData) or layout(BackupFactoryData, Map) to a DockFrontend.

Author:
Benjamin Sigg

Constructor Summary
RegisteringDockFactory(DockFrontend frontend, DockFactory<D,L> factory)
          Creates a new factory
 
Method Summary
 void estimateLocations(BackupFactoryData<L> layout, LocationEstimationMap children)
          Tries to estimate the DockablePropertys of the children of the station which is represented by layout.
 String getID()
          Gets the unique name of this converter.
 BackupFactoryData<L> getLayout(D element, Map<Dockable,Integer> children)
          Gets the layout of element.
 D layout(BackupFactoryData<L> layout)
          Creates a new DockElement and changes the layout of the new element such that is matches layout.
 D layout(BackupFactoryData<L> layout, Map<Integer,Dockable> children)
          Creates a new DockElement and changes the layout of the new element such that is matches layout.
 BackupFactoryData<L> read(DataInputStream in, PlaceholderStrategy placeholders)
          Reads a layout from a stream.
 BackupFactoryData<L> read(XElement element, PlaceholderStrategy placeholders)
          Reads a layout from an xml-element.
 void setLayout(D element, BackupFactoryData<L> layout)
          Reads the contents of layout and changes the layout of element accordingly.
 void setLayout(D element, BackupFactoryData<L> layout, Map<Integer,Dockable> children)
          Reads the contents of layout and changes the layout of element accordingly.
 void write(BackupFactoryData<L> layout, DataOutputStream out)
          Writes the contents of layout into out.
 void write(BackupFactoryData<L> layout, XElement element)
          Writes the contents of layout into element.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RegisteringDockFactory

public RegisteringDockFactory(DockFrontend frontend,
                              DockFactory<D,L> factory)
Creates a new factory

Parameters:
frontend - the frontend to which this factory will add new elements
factory - delegated used to read and create new elements
Method Detail

getID

public String getID()
Description copied from interface: DockConverter
Gets the unique name of this converter. Please note that unique identifiers starting with "dock." should not be used by clients.

Specified by:
getID in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Returns:
the id

estimateLocations

public void estimateLocations(BackupFactoryData<L> layout,
                              LocationEstimationMap children)
Description copied from interface: DockFactory
Tries to estimate the DockablePropertys of the children of the station which is represented by layout.
The children of this station accessible through children.getChild( ... ), this factory may also access the leafs in the tree of Dockables through children.getSubChild(...).
Note: this method must not set the successor of any DockableProperty, it is the callers responsibility to handle chains of stations.

Specified by:
estimateLocations in interface DockFactory<D extends Dockable,BackupFactoryData<L>>
Parameters:
layout - this station
children - the children of the station, this method should call DockLayoutInfo.setLocation(DockableProperty) or LocationEstimationMap.setLocation(int, DockableProperty) and LocationEstimationMap.setLocation(int, int, DockableProperty) for as many children as possible

getLayout

public BackupFactoryData<L> getLayout(D element,
                                      Map<Dockable,Integer> children)
Description copied from interface: DockConverter
Gets the layout of element. This method should create a new instance of the layout object, that new object should not be tied to element in any way. A layout can be living for a long period of time and might be used on another dockable object.

Specified by:
getLayout in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
element - the element for which a new layout should be created
children - a map containing unique identifiers for the children of the element. Children which are not in this map should not be stored in the layout.
The identifiers are in the range 0 (incl.) to children.size() (excl.). The same identifiers will be used as indices by a LocationEstimationMap. See also DockFactory.estimateLocations(Object, LocationEstimationMap).
Returns:
the newly created, independent layout object.

layout

public D layout(BackupFactoryData<L> layout,
                Map<Integer,Dockable> children)
Description copied from interface: DockFactory
Creates a new DockElement and changes the layout of the new element such that is matches layout.

Specified by:
layout in interface DockFactory<D extends Dockable,BackupFactoryData<L>>
Parameters:
layout - the new layout
children - some children, note that the map may not contain all elements which were present when the layout was created.
Returns:
a new element or null if layout can't be used

layout

public D layout(BackupFactoryData<L> layout)
Description copied from interface: DockFactory
Creates a new DockElement and changes the layout of the new element such that is matches layout. This method should not add any children to the element.

Specified by:
layout in interface DockFactory<D extends Dockable,BackupFactoryData<L>>
Parameters:
layout - the new layout
Returns:
a new element or null if layout can't be used

read

public BackupFactoryData<L> read(DataInputStream in,
                                 PlaceholderStrategy placeholders)
                          throws IOException
Description copied from interface: DockConverter
Reads a layout from a stream.

Specified by:
read in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
in - the stream to read from
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.
Returns:
the new layout, can be null if the layout should be discarded
Throws:
IOException - if an I/O-error occurs

read

public BackupFactoryData<L> read(XElement element,
                                 PlaceholderStrategy placeholders)
Description copied from interface: DockConverter
Reads a layout from an xml-element.

Specified by:
read in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
element - the element to read, should not be changed by this method.
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.
Returns:
the new layout, can be null if the layout should be discarded

setLayout

public void setLayout(D element,
                      BackupFactoryData<L> layout,
                      Map<Integer,Dockable> children)
Description copied from interface: DockConverter
Reads the contents of layout and changes the layout of element accordingly. This method should remove all children from element and add new children.

Specified by:
setLayout in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
element - the element whose content and children will be rearranged.
layout - the new layout of element
children - some children, note that the map may not contain all elements which were present when the layout was created.

setLayout

public void setLayout(D element,
                      BackupFactoryData<L> layout)
Description copied from interface: DockConverter
Reads the contents of layout and changes the layout of element accordingly. This method should not add or remove children to or from element.

Specified by:
setLayout in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
element - the element whose properties will be changed
layout - the new set of properties

write

public void write(BackupFactoryData<L> layout,
                  DataOutputStream out)
           throws IOException
Description copied from interface: DockConverter
Writes the contents of layout into out.

Specified by:
write in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
layout - the layout to store
out - the stream to write into
Throws:
IOException - if an I/O-error occurs

write

public void write(BackupFactoryData<L> layout,
                  XElement element)
Description copied from interface: DockConverter
Writes the contents of layout into element.

Specified by:
write in interface DockConverter<D extends Dockable,BackupFactoryData<L>>
Parameters:
layout - the layout to store
element - an xml-element into which this method should write, the attributes of element should not be changed.