T
- the type of wrapped component
public abstract class ComponentWrapper<T extends java.awt.Component>
extends java.lang.Object
ComponentFactory
, ComponentContext
Constructor and Description |
---|
ComponentWrapper(T activeComponent)
Constructs a ComponentWrapper around the given Component.
|
Modifier and Type | Method and Description |
---|---|
void |
addListener(java.beans.PropertyChangeListener listener)
Registers the given PropertyChangeListener with this Component to be notifed when the value in the UI is changed.
|
void |
addVetoListener(java.beans.VetoableChangeListener listener)
Registers the given VetoableChangeListener with this Component to be notifed when the value in the UI is changed.
|
protected boolean |
checkPropertyIsSupported()
Called to determine whether the wrapper property is supported for the object in the current ComponentContext.
|
protected java.awt.Component |
createComponentForLayout()
Creates the Component that will be added to any layout for the given active component.
|
protected void |
fireChangeEvent()
Utility method for implementations to create the event to fire to any registered PropertyChangeListeners.
|
T |
getActiveComponent()
Gets the "active" Component from this wrapper.
|
java.awt.Component |
getCellEditorComponent()
If this ComponentWrapper is used within a JTable to provide edit capabilities for a cell this method is used to get the editor component.
|
java.awt.Component |
getComponent()
Gets the "layout" Component from this wrapper.
|
ComponentContext |
getComponentContext()
Gets the context that this ComponentWrapper was initialised with.
|
protected java.lang.Object |
getExistingPropertyValue()
Gets the existing property value from the underlying DBObject model (the updated object).
|
javax.swing.JLabel |
getLabel()
If the Component has a JLabel associated with it this returns the label.
|
protected java.util.logging.Logger |
getLogger()
Get the Logger to log messages to for this wrapper.
|
protected DBObject |
getOriginalObject()
Gets the original object that is being edited.
|
java.lang.String |
getPropertyDisplayName()
Gets the displayable (translated) name for the property that this wrapper is editing.
|
protected PropertyHelper |
getPropertyHelper()
Gets a PropertyHelper instance that is cached for this editor.
|
java.lang.String |
getPropertyName()
Gets the name of the property that this wrapper is editing.
|
abstract java.lang.Object |
getPropertyValue()
Gets the value of the property as currently set in the UI Component e.g.
|
protected DBObjectProvider |
getProvider()
Gets the DBObjectProvider that the object being edited is from/for.
|
protected DBObject |
getUpdatedObject()
Gets the object that is being edited or created.
|
void |
initialise(ComponentContext ctxt)
Called once on create of each ComponentWrapper to initialise the DBObjectProvider, DBObject etc.
|
protected void |
initialiseComponent()
If any setup of the Component is needed after the provider/object are known override this method and implement there.
|
protected abstract void |
initialiseComponentListener()
Initialises a listener against the underlying Component that will call fireChangeEvent whenever the value in the UI is changed by the user.
|
boolean |
isActive()
Tests whether this ComponentWrapper is active (i.e.
|
boolean |
isSupported()
Is this property supported for the context DB Object
|
void |
processComponent(boolean editable, boolean allowRecreate)
Processes the underlying component by checking whether the property is supported and hiding or disabling the wrapped component accordingly.
|
boolean |
refreshObject(DBObject refreshedObject)
Refreshes this ComponentWrapper with a new updatedObject for its ComponentContext.
|
void |
removeListener(java.beans.PropertyChangeListener listener)
Removes a listener previously registered with
addListener(java.beans.PropertyChangeListener) |
void |
removeVetoListener(java.beans.VetoableChangeListener listener)
Removes a listener previously registered with
addVetoListener(java.beans.VetoableChangeListener) |
void |
resetPropertyValue(java.lang.Object newValue)
Convenience method to set the given value for the property we are wrapping on both the underlying DBObject, and in the underlying Component.
|
void |
setActive(boolean active)
Sets whether this ComponentWrapper is active - i.e.
|
protected void |
setActiveImpl(boolean active)
Called when a ComponentWrapper is activated/deactivated - typically onEntry/onExit of the owning panel.
|
void |
setEnabled(boolean enabled)
Sets the enabled state of the components within the wrapper.
|
abstract void |
setPropertyValue(java.lang.Object val)
Sets the value of the property displayed in the UI.
|
void |
setReadOnly(boolean readOnly)
Sets the component to be read-only, such that any attempt to change its value will be ignored and reset.
|
protected void |
setUIReadOnly(boolean readOnly)
Subclasses may implement this method to make the UI readonly on request.
|
void |
setVisible(boolean visible)
Sets the visible state of the components within the wrapper.
|
public ComponentWrapper(T activeComponent)
activeComponent
- a Component that shows and edits a property value.protected java.util.logging.Logger getLogger()
DBLog
framework.public final void initialise(ComponentContext ctxt)
initialiseComponent()
to customise the init behaviour.
An initialised wrapper is not active. You must call setActive(boolean)
to activate the wrapper and set the initial property value from the underlying DBObject.
ctxt
- the context containing all the information a wrapper should need to initialise.public boolean refreshObject(DBObject refreshedObject)
refreshedObject
- the new updatedObject to refresh the wrapper withpublic final void setActive(boolean active)
active
- whether to active the listenerspublic final boolean isActive()
protected void setActiveImpl(boolean active)
active
-public final T getActiveComponent()
getComponent()
protected java.awt.Component createComponentForLayout()
getComponent()
is made.public final java.awt.Component getComponent()
getActiveComponent()
then it should contain the active component (e.g. in a scroll pane, or resizable component).getActiveComponent()
public abstract java.lang.Object getPropertyValue()
public abstract void setPropertyValue(java.lang.Object val)
This does not update the DBObject model, and should only need to be called outside of this class if the DBObject model has been manually updated.
resetPropertyValue(Object)
public final void resetPropertyValue(java.lang.Object newValue)
newValue
- the new property valuesetPropertyValue(Object)
public void setEnabled(boolean enabled)
public void setVisible(boolean visible)
public final java.lang.String getPropertyName()
public javax.swing.JLabel getLabel()
public java.lang.String getPropertyDisplayName()
getPropertyName()
protected abstract void initialiseComponentListener()
setActiveImpl(boolean)
.protected void initialiseComponent()
public final void addListener(java.beans.PropertyChangeListener listener)
listener
- the listener to addpublic final void addVetoListener(java.beans.VetoableChangeListener listener)
If a change is vetoed, the PropertyVetoException thrown can optionally contain a message. If the exception contains a message it will cause an error dialog to show displaying the reason (so should be translated).
listener
- the listener to addpublic final void removeListener(java.beans.PropertyChangeListener listener)
addListener(java.beans.PropertyChangeListener)
listener
- the listener to removepublic final void removeVetoListener(java.beans.VetoableChangeListener listener)
addVetoListener(java.beans.VetoableChangeListener)
listener
- the listener to removepublic void processComponent(boolean editable, boolean allowRecreate)
PropertyManager
for the underlying DBObjectProvider to determine whether the property is supported at all (if not the Component will be hidden), or just cannot be updated (so we disable the Component instead).editable
- whether the object is editable at allallowRecreate
- whether to enable components for properties that will require a drop/create in order to change them.protected boolean checkPropertyIsSupported()
protected final java.lang.Object getExistingPropertyValue()
getUpdatedObject()
, getPropertyValue()
protected final void fireChangeEvent()
protected final PropertyHelper getPropertyHelper()
protected final DBObjectProvider getProvider()
protected final DBObject getUpdatedObject()
protected final DBObject getOriginalObject()
public final boolean isSupported()
public final ComponentContext getComponentContext()
public java.awt.Component getCellEditorComponent()
getActiveComponent()
, override to provide custom JTable behaviour.public final void setReadOnly(boolean readOnly)
setUIReadOnly(boolean)
.
NB Typically clients will NOT need to call this as the ComponentWrapper framework will hide or disable components that are not supported, but is provided if there are any special cases where this default behaviour is to be overriden.
readOnly
- whether the component should be made read only.protected void setUIReadOnly(boolean readOnly)
readOnly
-setReadOnly(boolean)