/* (c) 2014 - 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.gwc.web.diskquota; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AbstractAutoCompleteTextRenderer; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteBehavior; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.validator.RangeValidator; import org.geowebcache.diskquota.jdbc.JDBCConfiguration.ConnectionPoolConfiguration; public class JDBCConnectionPoolPanel extends Panel { private static final long serialVersionUID = -1579697287836672528L; public JDBCConnectionPoolPanel(String id, IModel<ConnectionPoolConfiguration> model) { super(id, model); TextField<String> driver = new TextField<String>("jdbcDriver", new PropertyModel<String>(model, "driver")); driver.setRequired(true); AutoCompleteSettings as = new AutoCompleteSettings(); as.setPreselect(true).setShowListOnEmptyInput(true).setShowCompleteListOnFocusGain(true); driver.add(new ContainsAutoCompleteBehavior("org.postgresql.Driver", "oracle.jdbc.driver.OracleDriver", "org.h2.Driver")); add(driver); TextField<String> url = new TextField<String>("jdbcUrl", new PropertyModel<String>(model, "url")); url.setRequired(true); url.add(new ContainsAutoCompleteBehavior("jdbc:h2://{server}:{9092}/{db-name}", "jdbc:postgresql:[{//host}[:{5432}/]]{database}", "jdbc:oracle:thin:@{server}[:{1521}]:{database_name}")); add(url); TextField<String> user = new TextField<String>("jdbcUser", new PropertyModel<String>(model, "username")); add(user); PasswordTextField password = new PasswordTextField("jdbcPassword", new PropertyModel<String>(model, "password")); password.setResetPassword(false); add(password); TextField<Integer> minConnections = new TextField<Integer>("jdbcMinConnections", new PropertyModel<Integer>(model, "minConnections")); minConnections.setRequired(true); minConnections.add(RangeValidator.minimum(0)); add(minConnections); TextField<Integer> maxConnections = new TextField<Integer>("jdbcMaxConnections", new PropertyModel<Integer>(model, "maxConnections")); maxConnections.setRequired(true); maxConnections.add(RangeValidator.minimum(1)); add(maxConnections); TextField<Integer> connectionTimeout = new TextField<Integer>("jdbcConnectionTimeout", new PropertyModel<Integer>(model, "connectionTimeout")); connectionTimeout.setRequired(true); connectionTimeout.add(RangeValidator.minimum(1)); add(connectionTimeout); TextField<String> validationQuery = new TextField<String>("jdbcValidationQuery", new PropertyModel<String>(model, "validationQuery")); add(validationQuery); TextField<Integer> maxOpenPreparedStatements = new TextField<Integer>("jdbcMaxOpenPreparedStatements", new PropertyModel<Integer>(model, "maxOpenPreparedStatements")); maxOpenPreparedStatements.setRequired(true); maxOpenPreparedStatements.add(RangeValidator.minimum(0)); add(maxOpenPreparedStatements); } /** * Matches any of the specified choices provided they contain the text typed by the user * (in a case insensitive way) * * @author Andrea Aime - GeoSolutions * */ private static class ContainsAutoCompleteBehavior extends AutoCompleteBehavior<String> { private static final long serialVersionUID = 993566054116148859L; private List<String> choices; public ContainsAutoCompleteBehavior(List<String> choices) { super(new AbstractAutoCompleteTextRenderer<String>() { private static final long serialVersionUID = 3192368880726583011L; @Override protected String getTextValue(String object) { return object; } }); settings.setPreselect(true).setShowListOnEmptyInput(true).setShowCompleteListOnFocusGain(true); this.choices = new ArrayList<String>(choices); } public ContainsAutoCompleteBehavior(String... choices) { this(Arrays.asList(choices)); } @Override protected Iterator<String> getChoices(String input) { String ucInput = input.toUpperCase(); List<String> result = new ArrayList<String>(); for (String choice : choices) { if(choice.toUpperCase().contains(ucInput)) { result.add(choice); } } return result.iterator(); } } }