/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2014 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.web;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.extensions.markup.html.form.palette.component.Recorder;
import org.apache.wicket.extensions.markup.html.form.palette.theme.DefaultTheme;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.geoserver.web.wicket.SimpleChoiceRenderer;
public class MimeTypesFormComponent extends FormComponentPanel {
/**
* the palette
*/
protected Palette<String> palette;
protected AjaxCheckBox allMimeTypesCheckBox;
/**
* list of behaviors to add, staged before the palette recorder component is created
*/
List<Behavior> toAdd = new ArrayList<Behavior>();
public MimeTypesFormComponent(String id, IModel<List<String>> model,
IModel<Collection<String>> choicesModel,final boolean isMimeTypeCheckingEnabled) {
super(id, new Model<String>());
add(new AjaxCheckBox("mimeTypeCheckingEnabled", new Model(isMimeTypeCheckingEnabled)) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
//palette.setEnabled(getModelObject());
toggleVisibility(getModelObject());
target.add(palette);
}
});
add(palette = new Palette<String>("palette", model, choicesModel,
new SimpleChoiceRenderer(), 10, false) {
private static final long serialVersionUID = 1L;
@Override
protected Recorder<String> newRecorderComponent() {
Recorder<String> rec = super.newRecorderComponent();
// add any behaviors that need to be added
rec.add(toAdd.toArray(new Behavior[toAdd.size()]));
toAdd.clear();
return rec;
}
// Override otherwise the header is not i18n'ized
@Override
public Component newSelectedHeader(final String componentId) {
return new Label(componentId, new ResourceModel(getSelectedHeaderPropertyKey()));
}
// Override otherwise the header is not i18n'ized
@Override
public Component newAvailableHeader(final String componentId) {
return new Label(componentId, new ResourceModel(getAvaliableHeaderPropertyKey()));
}
});
palette.add(new DefaultTheme());
palette.setOutputMarkupPlaceholderTag(true);
//palette.setEnabled(isMimeTypeCheckingEnabled);
toggleVisibility(isMimeTypeCheckingEnabled);
}
void toggleVisibility(boolean visible) {
palette.setVisible(visible);
if (visible==false)
palette.getModelCollection().clear();
}
public void setMimeTypeCheckingEnabled(boolean enabled) {
get("mimeTypeCheckingEnabled").setDefaultModelObject(enabled);
//palette.setEnabled(enabled);
toggleVisibility(enabled);
}
public boolean isMimeTypeCheckingEnabled() {
return (Boolean) get("mimeTypeCheckingEnabled").getDefaultModelObject();
}
/**
* @return the default key, subclasses may override, if "Selected" is not illustrative enough
*/
protected String getSelectedHeaderPropertyKey() {
return "MimeTypesFormComponent.selectedHeader";
}
/**
* @return the default key, subclasses may override, if "Available" is not illustrative enough
*/
protected String getAvaliableHeaderPropertyKey() {
return "MimeTypesFormComponent.availableHeader";
}
@Override
public Component add(Behavior... behaviors) {
if (palette.getRecorderComponent() == null) {
// stage for them for later
toAdd.addAll(Arrays.asList(behaviors));
} else {
// add them now
palette.getRecorderComponent().add(behaviors);
}
return this;
}
public Palette<String> getPalette() {
return palette;
}
public IModel<List<String>> getPaletteModel() {
return (IModel<List<String>>) palette.getDefaultModel();
}
@Override
public void updateModel() {
super.updateModel();
if (palette.getRecorderComponent()!=null)
palette.getRecorderComponent().updateModel();
}
}