ObservableFolder is a complete, default implementation of the Folder and Subject interfaces. This is a convenient starting point for the implementation of data classes which can be integrated with the IDE framework.

ObservableFolder

copyTo

Copies the internal state of this object to the specified copy. If copy is null, then this method should create a new instance of this class and proceed to copy the internal state to the newly created object. Generally, only the persistent state of the object should be copied, but whether or not it is appropriate to copy transient properties is at the discretion of the individual implementor.

Regardless of whether the copy occurs to an existing object or to a newly created object, the return value is object to which this object's state was copied.

There is a standard implementation pattern for the copyTo method that helps avoid problems that arise when a Copyable object is subclassed. The pattern is:

The parameter passed into the copyToImpl method is the same type of this class. The responsibility of copyToImpl is to copy the state of this class through direct access of the fields. The copyToImpl method should not use getters and setters since these may be overridden, causing the state of this class to be incompletely copied.

object - The target object to which the state of this object should be copied. If target is null, then the copyTo method will return a new instance of this class.

Returns:

The object to which the state of this object was copied. If the target was non-null, then the return value is the same as the target object that was passed in; otherwise, the return value is a new instance of this class.

markDirty

Marks the data with the specified dirty state. This method is called markDirty(...) instead of setDirty(...) so that the JavaBeans Introspector will not mistakenly identify "dirty" as a JavaBean property.

attach

Registers an observer interested in being notified when the internal state of the class implementing the Subject interface changes. Implementors should do nothing when the same observer is added more than once.

detach

Unregisters an observer that is not interested anymore in being notified when the internal state of the class implementing the Subject interface changes. Implementors should do nothing when the same observer is removed more than once.

add

Part of the Folder interface. The specified Element is added to the end of the child list. However, if the Element is null, this method does nothing.

In order for the UI to get updated correctly, an appropriate UpdateMessage will need to be sent to Observers of the DefaultFolder. The policy in the IDE is that the class that changes the state of an object is responsible for firing the UpdateMessages for those changes. UpdageMessages are not fired by the changed object itself.

remove

Part of the Folder interface. The specified Element is removed from the child list. However, if the Element is null, this method does nothing. If the Element occurs more than once in the child list, then only the first instance is removed.

In order for the UI to get updated correctly, an appropriate UpdateMessage will need to be sent to Observers of the DefaultFolder. The policy in the IDE is that the class that changes the state of an object is responsible for firing the UpdateMessages for those changes. UpdateMessages are not fired by the changed object itself.

getListOfChildren

a List view of the child @{link Element}s contained by this ObservableFolder.

setListOfChildren

public void setListOfChildren(java.util.List list)

Fulfills the public accessor part of the Folder contract. Sets the child list of the ObservableFolder instance to match the specified List. Only objects in the List that can be cast to Element are added. The implementation uses the DefaultFolder.add(Element) method to add the child to the list, so that subclass implementations can override DefaultFolder.add(Element) without having to also override this method.