bibliothek.gui.dock.common.intern
Class CommonSingleDockableFactory

java.lang.Object
  extended by bibliothek.gui.dock.common.intern.CommonSingleDockableFactory
All Implemented Interfaces:
DockFactory<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>, DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>

public class CommonSingleDockableFactory
extends Object
implements DockFactory<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>

This factory is used to create new SingleCDockables using various SingleCDockableFactorys. This factory is accessed when a single dockable is missing in the cache of its owning CControl.

Author:
Benjamin Sigg

Field Summary
static String BACKUP_FACTORY_ID
           
 
Constructor Summary
CommonSingleDockableFactory(CControl control)
          Creates a new factory.
CommonSingleDockableFactory(CControl control, CPerspective perspective)
          Creates a new factory.
 
Method Summary
 void add(Filter<String> ids, SingleCDockableFactory factory)
          Registers a new factory that will load SingleCDockable with unique identifiers that are included by ids.
 void add(String id, SingleCDockableFactory factory)
          Registers a new factory that will load SingleCDockables with the unique id id.
 void estimateLocations(CommonSingleDockableLayout layout, LocationEstimationMap children)
          Tries to estimate the DockablePropertys of the children of the station which is represented by layout.
The children of this station are accessible through children.getChild( ...
 SingleCDockableFactory getFactory(String id)
          Searches the factory which handles id.
 Set<String> getFactoryIds()
          Gets the set of keys for all factories known to this.
 String getID()
          Gets the unique name of this converter.
 CommonSingleDockableLayout getLayout(CommonDockable element, Map<Dockable,Integer> children)
          Gets the layout of element.
 CommonSingleDockableLayout getPerspectiveLayout(CommonElementPerspective element, Map<PerspectiveDockable,Integer> children)
          Gets the layout information that is associated with element.
 CommonDockable layout(CommonSingleDockableLayout layout, Map<Integer,Dockable> children, PlaceholderStrategy placeholders)
          Creates a new DockElement and changes the layout of the new element such that is matches layout.
 CommonDockable layout(CommonSingleDockableLayout layout, PlaceholderStrategy placeholders)
          Creates a new DockElement and changes the layout of the new element such that is matches layout.
 void layoutPerspective(CommonElementPerspective perspective, CommonSingleDockableLayout layout, Map<Integer,PerspectiveDockable> children)
          Updates the contents of perspective such that it reflects the contents of layout.
 CommonElementPerspective layoutPerspective(CommonSingleDockableLayout layout, Map<Integer,PerspectiveDockable> children)
          Creates an element that can be used by a Perspective to create a layout without creating any DockElements.
 String[] listFactories()
          Gets a list of keys for all factories known to this.
 CommonSingleDockableLayout read(DataInputStream in, PlaceholderStrategy placeholders)
          Reads a layout from a stream.
 CommonSingleDockableLayout read(XElement element, PlaceholderStrategy placeholders)
          Reads a layout from an xml-element.
 void remove(SingleCDockableFactory factory)
          Removes any occurrence of factory.
 void remove(String id)
          Removes a factory from this.
 void setLayout(CommonDockable element, CommonSingleDockableLayout layout, Map<Integer,Dockable> children, PlaceholderStrategy placeholders)
          Reads the contents of layout and changes the layout of element accordingly.
 void setLayout(CommonDockable element, CommonSingleDockableLayout layout, PlaceholderStrategy placeholders)
          Reads the contents of layout and changes the layout of element accordingly.
 void write(CommonSingleDockableLayout layout, DataOutputStream out)
          Writes the contents of layout into out.
 void write(CommonSingleDockableLayout 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
 

Field Detail

BACKUP_FACTORY_ID

public static final String BACKUP_FACTORY_ID
See Also:
Constant Field Values
Constructor Detail

CommonSingleDockableFactory

public CommonSingleDockableFactory(CControl control)
Creates a new factory.

Parameters:
control - the owner of the factory, the factory will add SingleCDockable to this control

CommonSingleDockableFactory

public CommonSingleDockableFactory(CControl control,
                                   CPerspective perspective)
Creates a new factory.

Parameters:
control - the owner of the factory, the factory will add SingleCDockable to this control
perspective - the perspective which is used to load perspective related content
Method Detail

add

public void add(String id,
                SingleCDockableFactory factory)
Registers a new factory that will load SingleCDockables with the unique id id.

Parameters:
id - the unique id of the dockables which factory will create
factory - the new factory

add

public void add(Filter<String> ids,
                SingleCDockableFactory factory)
Registers a new factory that will load SingleCDockable with unique identifiers that are included by ids.

Parameters:
ids - the identifiers that are included
factory - the new factory

remove

public void remove(String id)
Removes a factory from this.

Parameters:
id - the name of the factory to remove

remove

public void remove(SingleCDockableFactory factory)
Removes any occurrence of factory.

Parameters:
factory - the factory to remove

getFactory

public SingleCDockableFactory getFactory(String id)
Searches the factory which handles id.

Parameters:
id - the name of a factory
Returns:
the factory or null

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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Returns:
the id

listFactories

public String[] listFactories()
Gets a list of keys for all factories known to this.

Returns:
the list of keys

getFactoryIds

public Set<String> getFactoryIds()
Gets the set of keys for all factories known to this.

Returns:
the set of keys

estimateLocations

public void estimateLocations(CommonSingleDockableLayout 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 are 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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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 CommonSingleDockableLayout getLayout(CommonDockable 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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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 from 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 CommonDockable layout(CommonSingleDockableLayout layout,
                             Map<Integer,Dockable> children,
                             PlaceholderStrategy placeholders)
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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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.
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.
Returns:
a new element or null if layout can't be used

layout

public CommonDockable layout(CommonSingleDockableLayout layout,
                             PlaceholderStrategy placeholders)
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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
layout - the new layout
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.
Returns:
a new element or null if layout can't be used

layoutPerspective

public CommonElementPerspective layoutPerspective(CommonSingleDockableLayout layout,
                                                  Map<Integer,PerspectiveDockable> children)
Description copied from interface: DockFactory
Creates an element that can be used by a Perspective to create a layout without creating any DockElements. This method may return null only if the client is guaranteed not to use a Perspective.

Specified by:
layoutPerspective in interface DockFactory<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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. Is null if the children of this station are going to be ignored.
Returns:
the new element, can be null, the return value of PerspectiveElement.getFactoryID() should be equal to DockConverter.getID()

layoutPerspective

public void layoutPerspective(CommonElementPerspective perspective,
                              CommonSingleDockableLayout layout,
                              Map<Integer,PerspectiveDockable> children)
Description copied from interface: DockFactory
Updates the contents of perspective such that it reflects the contents of layout.

Specified by:
layoutPerspective in interface DockFactory<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
perspective - the perspective that is to be updated
layout - the layout to apply
children - the new children of perspective, is null if the children of this station are going to be ignored.

getPerspectiveLayout

public CommonSingleDockableLayout getPerspectiveLayout(CommonElementPerspective element,
                                                       Map<PerspectiveDockable,Integer> children)
Description copied from interface: DockConverter
Gets the layout information that is associated with element. The layout information can be any Object. The only restriction of the object is, that the associated DockFactory understands how to read that object.

Specified by:
getPerspectiveLayout in interface DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
element - the element whose layout information is asked.
children - a map providing identifiers for the children of this element. The identifiers are in the range from 0 (incl.) to children.size() (excl.), the exact same identifiers would be given to DockConverter.getLayout(bibliothek.gui.dock.DockElement, Map). Is null if the children of this station should be ignored.
Returns:
the layout information, may be null if this converter does not support perspectives

read

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

Specified by:
read in interface DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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 CommonSingleDockableLayout read(XElement element,
                                       PlaceholderStrategy placeholders)
Description copied from interface: DockConverter
Reads a layout from an xml-element.

Specified by:
read in interface DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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(CommonDockable element,
                      CommonSingleDockableLayout layout,
                      Map<Integer,Dockable> children,
                      PlaceholderStrategy placeholders)
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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
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.
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.

setLayout

public void setLayout(CommonDockable element,
                      CommonSingleDockableLayout layout,
                      PlaceholderStrategy placeholders)
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<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
element - the element whose properties will be changed
layout - the new set of properties
placeholders - a strategy to detect invalid placeholders, can be null. Factories loading only Dockables but no DockStations can safely ignore this argument.

write

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

Specified by:
write in interface DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
layout - the layout to store
out - the stream to write into
Throws:
IOException - if an I/O-error occurs

write

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

Specified by:
write in interface DockConverter<CommonDockable,CommonElementPerspective,CommonSingleDockableLayout>
Parameters:
layout - the layout to store
element - an xml-element into which this method should write, the attributes of element should not be changed.