/* (c) 2014-2015 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.admin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.validation.validator.RangeValidator;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerInfo;
import org.geoserver.config.JAIEXTInfo;
import org.geoserver.config.JAIInfo;
import org.geoserver.config.JAIInfo.PngEncoderType;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geoserver.web.wicket.PercentageTextField;
import org.geotools.image.ImageWorker;
import com.sun.media.imageioimpl.common.PackageUtil;
/**
* Edits the JAI configuration parameters
*/
public class JAIPage extends ServerAdminPage {
private static final long serialVersionUID = -1184717232184497578L;
public JAIPage(){
final IModel<GeoServer> geoServerModel = getGeoServerModel();
// this invokation will trigger a clone of the JAIInfo
// which will allow the modification proxy seeing changes on the
// Jai page with respect to the original JAIInfo object
final IModel<JAIInfo> jaiModel = getJAIModel();
// form and submit
Form<JAIInfo> form = new Form<JAIInfo>("form", new CompoundPropertyModel<JAIInfo>(jaiModel));
add( form );
// All the fields
// ... memory capacity and threshold are percentages
RangeValidator<Double> percentageValidator = RangeValidator.range(0.0, 1.0);
TextField<Double> memoryCapacity = new PercentageTextField("memoryCapacity");
memoryCapacity.add(percentageValidator);
form.add(memoryCapacity);
TextField<Double> memoryThreshold = new PercentageTextField("memoryThreshold");
memoryThreshold.add(percentageValidator);
form.add(memoryThreshold);
TextField<Integer> tileThreads = new TextField<Integer>("tileThreads");
tileThreads.add(RangeValidator.minimum(0));
form.add(tileThreads);
TextField<Integer> tilePriority = new TextField<Integer>("tilePriority");
tilePriority.add(RangeValidator.minimum(0));
form.add(tilePriority);
form.add(new CheckBox("recycling"));
form.add(new CheckBox("jpegAcceleration"));
addPngEncoderEditor(form);
CheckBox checkBoxMosaic = new CheckBox("allowNativeMosaic");
CheckBox checkBoxWarp = new CheckBox("allowNativeWarp");
JAIInfo info = (JAIInfo)jaiModel.getObject();
JAIEXTInfo je = null;
boolean isJAIExtEnabled = ImageWorker.isJaiExtEnabled();
if (isJAIExtEnabled) {
je = info.getJAIEXTInfo();
}
boolean mosaicEnabled = je != null && !je.getJAIEXTOperations().contains("Mosaic");
boolean warpEnabled = je != null && !je.getJAIEXTOperations().contains("Warp");
checkBoxMosaic.setEnabled(mosaicEnabled);
checkBoxWarp.setEnabled(warpEnabled);
form.add(checkBoxMosaic);
form.add(checkBoxWarp);
JAIEXTPanel jaiExtPanel = new JAIEXTPanel("jaiext", jaiModel);
if (!isJAIExtEnabled) {
jaiExtPanel.setVisible(false);
}
form.add(jaiExtPanel);
Button submit = new Button("submit") {
private static final long serialVersionUID = -2842881187264147131L;
@Override
public void onSubmit() {
GeoServer gs = (GeoServer) geoServerModel.getObject();
GeoServerInfo global = gs.getGlobal();
global.setJAI( (JAIInfo)jaiModel.getObject());
gs.save( global );
doReturn();
}
};
form.add(submit);
Button cancel = new Button("cancel") {
private static final long serialVersionUID = 7917847596581898225L;
@Override
public void onSubmit() {
doReturn();
}
};
form.add(cancel);
}
private void addPngEncoderEditor(Form<JAIInfo> form) {
// get the list of available encoders
List<PngEncoderType> encoders = new ArrayList<PngEncoderType>(Arrays.asList(JAIInfo.PngEncoderType.values()));
if(!PackageUtil.isCodecLibAvailable()) {
encoders.remove(PngEncoderType.NATIVE);
}
// create the editor, eventually set a default value
DropDownChoice<JAIInfo.PngEncoderType> editor = new DropDownChoice<JAIInfo.PngEncoderType>(
"pngEncoderType", encoders, new ChoiceRenderer<JAIInfo.PngEncoderType>() {
private static final long serialVersionUID = 1L;
@Override
public Object getDisplayValue(PngEncoderType type) {
return new ParamResourceModel("pngEncoder." + type.name(), JAIPage.this)
.getString();
}
@Override
public String getIdValue(PngEncoderType type, int index) {
return type.name();
}
}
);
form.add(editor);
if(!encoders.contains(editor.getModelObject())) {
editor.setModelObject(PngEncoderType.PNGJ);
}
}
}