Wicket extension Palette ヘッダタイトル、ボタン画像、スタイルシート、そんなに Override が多いなら
継承クラス、CSS ,HTML ,ボタン画像、これら1つのパッケージに用意した方が良さそうである。
import java.util.Collection;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
/**
* Wicket extension Palette の継承、ボタン、スタイルシート、タイトルの編集
*/
public class UPalette<T> extends Palette<T>{
private String availableHeader;
private String selectedHeader;
public UPalette(String id,IModel<? extends Collection<? extends T>> choicesModel
,IChoiceRenderer<T> choiceRenderer,int rows,boolean arrowOrder){
super(id,choicesModel,choiceRenderer,rows,arrowOrder);
add(getHeadTitleLabelComponent());
}
public UPalette(String id,IModel<List<T>> model
,IModel<? extends Collection<? extends T>> choicesModel
,IChoiceRenderer<T> choiceRenderer,int rows,boolean arrowOrder){
super(id,model,choicesModel,choiceRenderer,rows,arrowOrder);
add(getHeadTitleLabelComponent());
}
public UPalette(String id,IModel<List<T>> model
,IModel<? extends Collection<? extends T>> choicesModel
,IChoiceRenderer<T> choiceRenderer,int rows,boolean arrowOrder
,String availableHeader,String selectedHeader){
super(id,model,choicesModel,choiceRenderer,rows,arrowOrder);
add(getHeadTitleLabelComponent());
this.availableHeader = availableHeader;
this.selectedHeader = selectedHeader;
}
@Override
protected Component newAvailableHeader(String componentId){
return new Label(componentId
,new ResourceModel("palette.available",getAvailableHeader())){
@Override
public boolean isVisible(){
return getAvailableHeader()==null ? false : true;
}
};
}
@Override
protected Component newSelectedHeader(String componentId){
return new Label(componentId,new ResourceModel("palette.selected"
,getSelectedHeader())){
@Override
public boolean isVisible(){
return getSelectedHeader()==null ? false : true;
}
};
}
@Override
protected Component newAddComponent(){
return (new WebMarkupContainer("addButton"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.getAttributes().put("onclick", getAddOnClickJS());
}
}).add(new Component{new Image("image"
,new ResourceReference(UPalette.class,"add.gif"))});
}
@Override
protected Component newRemoveComponent(){
return (new WebMarkupContainer("removeButton"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.getAttributes().put("onclick", getRemoveOnClickJS());
}
}).add(new Component{new Image("image"
,new ResourceReference(UPalette.class,"remove.gif"))});
}
@Override
protected Component newUpComponent(){
return (new WebMarkupContainer("moveUpButton"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.getAttributes().put("onclick", getUpOnClickJS());
}
}).add(new Component{new Image("image"
,new ResourceReference(UPalette.class,"up.gif"))});
}
@Override
protected Component newDownComponent(){
return (new WebMarkupContainer("moveDownButton"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.getAttributes().put("onclick", getDownOnClickJS());
}
}).add(new Component{new Image("image"
,new ResourceReference(UPalette.class,"down.gif"))});
}
@Override
protected ResourceReference getCSS(){
return new ResourceReference(UPalette.class,"upalette.css");
}
protected Component getHeadTitleLabelComponent(){
return new Label(getHeadTitleId()," ").setEscapeModelStrings(false);
}
protected String getHeadTitleId(){
return "title";
}
protected String getAvailableHeader(){
return this.availableHeader;
}
protected String getSelectedHeader(){
return this.selectedHeader;
}
}
------------ UPalette.html の wicket:panel -------------
<wicket:panel>
<input type="hidden" wicket:id="recorder"/>
<table cellspacing="0" cellpadding="2" class="palette">
<thead>
<tr class="palette_head">
<th wicket:id="title" colspan="3" class="palette_head">[Palette]</th>
</tr>
</thead>
<tr>
<td wicket:id="availableHeader"
class="header headerAvailable">[available header]</td>
<td> </td>
<td wicket:id="selectedHeader"
class="header headerSelected">[selected header]</td>
</tr>
<tr>
<td class="pane choices">
<select wicket:id="choices" class="choicesSelect" size="10"></select>
</td>
<td class="buttons">
<button type="button" wicket:id="addButton"
class="button add"><img wicket:id="image" src="add.gif"/></button><br/>
<button type="button" wicket:id="removeButton"
class="button remove"><img wicket:id="image" src="remove.gif"/></button><br/>
<button type="button" wicket:id="moveUpButton"
class="button up"><img wicket:id="image" src="up.gif"/></button><br/>
<button type="button" wicket:id="moveDownButton"
class="button down"><img wicket:id="image" src="down.gif"/></button><br/>
</td>
<td class="pane selection">
<select class="selectionSelect" wicket:id="selection" size="10"></select>
</td>
</tr>
</table>
</wicket:panel>