Class Palette<T>
- java.lang.Object
-
- org.apache.wicket.Component
-
- org.apache.wicket.MarkupContainer
-
- org.apache.wicket.markup.html.WebMarkupContainer
-
- org.apache.wicket.markup.html.form.LabeledWebMarkupContainer
-
- org.apache.wicket.markup.html.form.FormComponent<T>
-
- org.apache.wicket.markup.html.form.FormComponentPanel<Collection<T>>
-
- org.apache.wicket.extensions.markup.html.form.palette.Palette<T>
-
- Type Parameters:
T
- Type of model object
- All Implemented Interfaces:
Serializable
,Iterable<Component>
,IEventSink
,IEventSource
,IFeedbackContributor
,IConverterLocator
,IGenericComponent<Collection<T>,FormComponent<Collection<T>>>
,IMetadataContext<Serializable,Component>
,IQueueRegion
,IFormModelUpdateListener
,IFormVisitorParticipant
,ILabelProvider<String>
,IHeaderContributor
,IRequestableComponent
,IHierarchical<Component>
,IClusterable
public class Palette<T> extends FormComponentPanel<Collection<T>>
Palette is a component that allows the user to easily select and order multiple items by moving them from one select box into another.When creating a Palette object make sure your IChoiceRenderer returns a specific ID, not the index.
Ajaxifying the palette: If you want to update a Palette with an
AjaxFormComponentUpdatingBehavior
, you have to attach it to the containedRecorder
by overridingnewRecorderComponent()
and callingFormComponent.processInput()
:
You can add aPalette palette=new Palette(...) { protected Recorder newRecorderComponent() { Recorder recorder=super.newRecorderComponent(); recorder.add(new AjaxFormComponentUpdatingBehavior("change") { protected void onUpdate(AjaxRequestTarget target) { processInput(); // let Palette process input too ... } }); return recorder; } }
DefaultTheme
to style this component in a left to right fashion.- Author:
- Igor Vaynberg ( ivaynberg )
- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class org.apache.wicket.markup.html.form.FormComponent
FLAG_CONVERT_EMPTY_INPUT_STRING_TO_NULL, VALUE_SEPARATOR
-
Fields inherited from class org.apache.wicket.Component
ENABLE, FLAG_INITIALIZED, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER, RFLAG_CONTAINER_DEQUEING, RFLAG_CONTAINER_HAS_REMOVALS
-
-
Constructor Summary
Constructors Constructor Description Palette(String id, IModel<? extends Collection<T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder)
Palette(String id, IModel<? extends Collection<T>> model, IModel<? extends Collection<? extends T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder)
Palette(String id, IModel<? extends Collection<T>> model, IModel<? extends Collection<? extends T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder, boolean allowMoveAll)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected String
buildJSCall(String funcName)
builds javascript handler callvoid
convertInput()
Converts and validates the conversion of the raw input string into the object specified byFormComponent.getType()
and records any thrownConversionException
s.String
getAddAllOnClickJS()
protected Map<String,String>
getAdditionalAttributesForChoices(Object choice)
protected Map<String,String>
getAdditionalAttributesForSelection(Object choice)
String
getAddOnClickJS()
IChoiceRenderer<? super T>
getChoiceRenderer()
Collection<? extends T>
getChoices()
protected Component
getChoicesComponent()
String
getChoicesOnFocusJS()
String
getDownOnClickJS()
Collection<T>
getModelCollection()
Recorder<T>
getRecorderComponent()
Returns recorder component.String
getRemoveAllOnClickJS()
String
getRemoveOnClickJS()
int
getRows()
Iterator<T>
getSelectedChoices()
protected Component
getSelectionComponent()
String
getSelectionOnFocusJS()
Iterator<T>
getUnselectedChoices()
String
getUpOnClickJS()
boolean
isPaletteEnabled()
Return true if the palette is enabled, false otherwiseprotected boolean
localizeDisplayValues()
Override this method if you do not want to localize the display values of the generated options.protected Component
newAddAllComponent()
factory method for the addAll componentprotected Component
newAddComponent()
factory method for the addcomponentprotected Component
newAvailableHeader(String componentId)
factory method for the available items headerprotected Component
newChoicesComponent()
factory method for the available items componentprotected Component
newDownComponent()
factory method for the move down componentprotected Recorder<T>
newRecorderComponent()
factory method to create the tracker componentprotected Component
newRemoveAllComponent()
factory method for the removeAll componentprotected Component
newRemoveComponent()
factory method for the remove componentprotected Component
newSelectedHeader(String componentId)
factory method for the selected items headerprotected Component
newSelectionComponent()
factory method for the selected items componentprotected Component
newUpComponent()
factory method for the move up componentprotected void
onBeforeRender()
Called on all visible components before any component is rendered.protected void
onDetach()
Sets the temporary converted input value to null.void
renderHead(IHeaderResponse response)
Renders header contributionsvoid
updateModel()
The model object is assumed to be a Collection, and it is modified in-place.-
Methods inherited from class org.apache.wicket.markup.html.form.FormComponentPanel
checkRequired, clearInput, newMarkupSourcingStrategy, onComponentTag
-
Methods inherited from class org.apache.wicket.markup.html.form.FormComponent
add, add, convertValue, error, getConvertedInput, getDefaultLabel, getDefaultLabel, getForm, getInput, getInputAsArray, getInputName, getModelValue, getParameterValues, getRawInput, getType, getValidatorKeyPrefix, getValidators, getValue, hasRawInput, inputAsInt, inputAsInt, inputAsIntArray, inputChanged, internalOnModelChanged, invalid, isInputNullable, isMultiPart, isRequired, isValid, newValidatable, newValidationError, onDisabled, onInvalid, onValid, processChildren, processInput, remove, reportRequiredError, setConvertedInput, setLabel, setModelValue, setRequired, setType, shouldTrimInput, trim, updateAutoLabels, updateAutoLabels, updateCollectionModel, valid, validate, validateRequired, validateValidators, visitComponentsPostOrder, visitFormComponentsPostOrder
-
Methods inherited from class org.apache.wicket.markup.html.form.LabeledWebMarkupContainer
getLabel
-
Methods inherited from class org.apache.wicket.markup.html.WebMarkupContainer
getWebApplication, getWebPage, getWebRequest, getWebResponse, getWebSession
-
Methods inherited from class org.apache.wicket.MarkupContainer
add, addDequeuedComponent, addOrReplace, autoAdd, canDequeueTag, contains, dequeue, dequeue, dequeuePreamble, findChildComponent, findComponentToDequeue, get, getAssociatedMarkup, getAssociatedMarkupStream, getMarkup, getMarkupType, getRegionMarkup, internalAdd, internalInitialize, iterator, iterator, newDequeueContext, onComponentTagBody, onInitialize, onRender, queue, remove, remove, removeAll, renderAll, renderAssociatedMarkup, renderAssociatedMarkup, renderNext, replace, setDefaultModel, size, stream, streamChildren, toString, toString, visitChildren, visitChildren
-
Methods inherited from class org.apache.wicket.Component
add, addStateChange, beforeRender, canCallListener, canCallListenerAfterExpiry, checkComponentTag, checkComponentTagAttribute, checkHierarchyChange, clearOriginalDestination, configure, continueToOriginalDestination, createConverter, debug, detach, detachModel, detachModels, determineVisibility, error, exceptionMessage, fatal, findMarkupStream, findPage, findParent, findParentWithAssociatedMarkup, getAjaxRegionMarkupId, getApplication, getBehaviorById, getBehaviorId, getBehaviors, getBehaviors, getClassRelativePath, getConverter, getDefaultModel, getDefaultModelObject, getDefaultModelObjectAsString, getDefaultModelObjectAsString, getEscapeModelStrings, getFeedbackMessages, getFlag, getId, getInnermostModel, getInnermostModel, getLocale, getLocalizer, getMarkup, getMarkupAttributes, getMarkupId, getMarkupId, getMarkupIdFromMarkup, getMarkupIdImpl, getMarkupSourcingStrategy, getMarkupTag, getMetaData, getModelComparator, getOutputMarkupId, getOutputMarkupPlaceholderTag, getPage, getPageRelativePath, getParent, getPath, getRenderBodyOnly, getRequest, getRequestCycle, getRequestFlag, getResponse, getSession, getSizeInBytes, getStatelessHint, getString, getString, getString, getStyle, getVariation, hasBeenRendered, hasErrorMessage, hasFeedbackMessage, info, initModel, internalRenderComponent, internalRenderHead, isActionAuthorized, isAuto, isBehaviorAccepted, isEnableAllowed, isEnabled, isEnabledInHierarchy, isIgnoreAttributeModifier, isInitialized, isRenderAllowed, isRendering, isStateless, isVersioned, isVisibilityAllowed, isVisible, isVisibleInHierarchy, markRendering, modelChanged, modelChanging, onAfterRender, onConfigure, onEvent, onModelChanged, onModelChanging, onReAdd, onRemove, redirectToInterceptPage, remove, remove, render, renderComponentTag, rendered, renderPart, renderPlaceholderTag, replaceComponentTagBody, replaceWith, sameInnermostModel, sameInnermostModel, send, setAuto, setDefaultModelObject, setEnabled, setEscapeModelStrings, setFlag, setIgnoreAttributeModifier, setMarkup, setMarkupId, setMarkupIdImpl, setMetaData, setOutputMarkupId, setOutputMarkupPlaceholderTag, setParent, setRenderBodyOnly, setResponsePage, setResponsePage, setResponsePage, setVersioned, setVisibilityAllowed, setVisible, success, urlFor, urlFor, urlFor, urlForListener, urlForListener, visitParents, visitParents, warn, wrap
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.wicket.IGenericComponent
getDefaultModel, getDefaultModelObject, getModel, getModelObject, setDefaultModel, setDefaultModelObject, setModel, setModelObject
-
Methods inherited from interface org.apache.wicket.IQueueRegion
dequeue, getRegionMarkup, newDequeueContext
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
Palette
public Palette(String id, IModel<? extends Collection<T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder)
- Parameters:
id
- Component idchoicesModel
- Model representing collection of all available choiceschoiceRenderer
- Render used to render choices. This must use unique IDs for the objects, not the index.rows
- Number of choices to be visible on the screen with out scrollingallowOrder
- Allow user to move selections up and down
-
Palette
public Palette(String id, IModel<? extends Collection<T>> model, IModel<? extends Collection<? extends T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder)
- Parameters:
id
- Component idmodel
- Model representing collection of user's selectionschoicesModel
- Model representing collection of all available choiceschoiceRenderer
- Render used to render choices. This must use unique IDs for the objects, not the index.rows
- Number of choices to be visible on the screen with out scrollingallowOrder
- Allow user to move selections up and down
-
Palette
public Palette(String id, IModel<? extends Collection<T>> model, IModel<? extends Collection<? extends T>> choicesModel, IChoiceRenderer<? super T> choiceRenderer, int rows, boolean allowOrder, boolean allowMoveAll)
Constructor.- Parameters:
id
- Component idchoicesModel
- Model representing collection of all available choiceschoiceRenderer
- Render used to render choices. This must use unique IDs for the objects, not the index.rows
- Number of choices to be visible on the screen with out scrollingallowOrder
- Allow user to move selections up and downallowMoveAll
- Allow user to add or remove all items at once
-
-
Method Detail
-
onBeforeRender
protected void onBeforeRender()
Description copied from class:Component
Called on all visible components before any component is rendered.NOTE: If you override this, you *must* call super.onBeforeRender() within your implementation. Because this method is responsible for cascading
Changes to the component tree can be made only before calling super.onBeforeRender().Component.onBeforeRender()
call to its children it is strongly recommended that super call is made at the end of the override.- Overrides:
onBeforeRender
in classFormComponent<Collection<T>>
- See Also:
MarkupContainer.addOrReplace(Component...)
-
isPaletteEnabled
public final boolean isPaletteEnabled()
Return true if the palette is enabled, false otherwise- Returns:
- true if the palette is enabled, false otherwise
-
getSelectedChoices
public Iterator<T> getSelectedChoices()
- Returns:
- iterator over selected choices
-
getUnselectedChoices
public Iterator<T> getUnselectedChoices()
- Returns:
- iterator over unselected choices
-
newRecorderComponent
protected Recorder<T> newRecorderComponent()
factory method to create the tracker component- Returns:
- tracker component
-
newAvailableHeader
protected Component newAvailableHeader(String componentId)
factory method for the available items header- Parameters:
componentId
- component id of the returned header component- Returns:
- available items component
-
newSelectedHeader
protected Component newSelectedHeader(String componentId)
factory method for the selected items header- Parameters:
componentId
- component id of the returned header component- Returns:
- header component
-
newDownComponent
protected Component newDownComponent()
factory method for the move down component- Returns:
- move down component
-
newUpComponent
protected Component newUpComponent()
factory method for the move up component- Returns:
- move up component
-
newRemoveComponent
protected Component newRemoveComponent()
factory method for the remove component- Returns:
- remove component
-
newAddComponent
protected Component newAddComponent()
factory method for the addcomponent- Returns:
- add component
-
newSelectionComponent
protected Component newSelectionComponent()
factory method for the selected items component- Returns:
- selected items component
-
newAddAllComponent
protected Component newAddAllComponent()
factory method for the addAll component- Returns:
- addAll component
-
newRemoveAllComponent
protected Component newRemoveAllComponent()
factory method for the removeAll component- Returns:
- removeAll component
-
getAdditionalAttributesForSelection
protected Map<String,String> getAdditionalAttributesForSelection(Object choice)
- Parameters:
choice
-- Returns:
- null
- See Also:
AbstractOptions.getAdditionalAttributes(Object)
-
newChoicesComponent
protected Component newChoicesComponent()
factory method for the available items component- Returns:
- available items component
-
localizeDisplayValues
protected boolean localizeDisplayValues()
Override this method if you do not want to localize the display values of the generated options. By default true is returned.- Returns:
- true If you want to localize the display values, default == true
-
getAdditionalAttributesForChoices
protected Map<String,String> getAdditionalAttributesForChoices(Object choice)
- Parameters:
choice
-- Returns:
- null
- See Also:
AbstractOptions.getAdditionalAttributes(Object)
-
getChoicesComponent
protected Component getChoicesComponent()
-
getSelectionComponent
protected Component getSelectionComponent()
-
getRecorderComponent
public final Recorder<T> getRecorderComponent()
Returns recorder component. Recorder component is a form component used to track the selection of the palette. It receivesonchange
javascript event whenever a change in selection occurs.- Returns:
- recorder component
-
getChoices
public Collection<? extends T> getChoices()
- Returns:
- collection representing all available items
-
getModelCollection
public Collection<T> getModelCollection()
- Returns:
- collection representing selected items
-
getChoiceRenderer
public IChoiceRenderer<? super T> getChoiceRenderer()
- Returns:
- choice renderer
-
getRows
public int getRows()
- Returns:
- items visible without scrolling
-
convertInput
public void convertInput()
Description copied from class:FormComponent
Converts and validates the conversion of the raw input string into the object specified byFormComponent.getType()
and records any thrownConversionException
s. Converted value is available throughFormComponent.getConvertedInput()
.Usually the user should do custom conversions by specifying an
DO NOT CALL THIS METHOD DIRECTLY UNLESS YOU ARE SURE WHAT YOU ARE DOING. USUALLY UPDATING YOUR MODEL IS HANDLED BY THE FORM, NOT DIRECTLY BY YOU.IConverter
by registering it with the application by overridingApplication.getConverterLocator()
, or at the component level by overridingComponent.getConverter(Class)
.
-
updateModel
public final void updateModel()
The model object is assumed to be a Collection, and it is modified in-place. ThenIModel.setObject(Object)
is called with the same instance: it allows the Model to be notified of changes even whenModel.getObject()
returns a differentCollection
at every invocation.- Specified by:
updateModel
in interfaceIFormModelUpdateListener
- Overrides:
updateModel
in classFormComponent<Collection<T>>
- See Also:
FormComponent.updateModel()
-
buildJSCall
protected String buildJSCall(String funcName)
builds javascript handler call- Parameters:
funcName
- name of javascript function to call- Returns:
- string representing the call tho the function with palette params
-
getChoicesOnFocusJS
public String getChoicesOnFocusJS()
- Returns:
- choices component on focus javascript handler
-
getSelectionOnFocusJS
public String getSelectionOnFocusJS()
- Returns:
- selection component on focus javascript handler
-
getAddOnClickJS
public String getAddOnClickJS()
- Returns:
- add action javascript handler
-
getRemoveOnClickJS
public String getRemoveOnClickJS()
- Returns:
- remove action javascript handler
-
getUpOnClickJS
public String getUpOnClickJS()
- Returns:
- move up action javascript handler
-
getDownOnClickJS
public String getDownOnClickJS()
- Returns:
- move down action javascript handler
-
getAddAllOnClickJS
public String getAddAllOnClickJS()
- Returns:
- addAll action javascript handler
-
getRemoveAllOnClickJS
public String getRemoveAllOnClickJS()
- Returns:
- removeAll action javascript handler
-
onDetach
protected void onDetach()
Description copied from class:FormComponent
Sets the temporary converted input value to null.- Overrides:
onDetach
in classFormComponent<Collection<T>>
- See Also:
Component.onDetach()
-
renderHead
public void renderHead(IHeaderResponse response)
Renders header contributions- Specified by:
renderHead
in interfaceIHeaderContributor
- Overrides:
renderHead
in classComponent
- Parameters:
response
-
-
-