/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.web; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteBehavior; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.IAutoCompleteRenderer; /** * Implements auto complete behavior to manage the roles choice as a list of string separated by ";" */ public class RolesAutoCompleteBehavior extends AutoCompleteBehavior<String>{ private static final long serialVersionUID = -6743826046815447371L; private StringBuilder selectedRoles; private List<String> availableRoles; public RolesAutoCompleteBehavior(IAutoCompleteRenderer<String> renderer, AutoCompleteSettings settings, StringBuilder selectedRoles, List<String> availableRoles) { super(renderer,settings); this.selectedRoles = selectedRoles; this.availableRoles = availableRoles; } @Override protected Iterator<String> getChoices(String input) { int lastCommaIndex = input.lastIndexOf(';'); String realInput = ""; if (lastCommaIndex == -1) { selectedRoles.setLength(0); realInput = input; } else { selectedRoles.setLength(0); selectedRoles.append(input.substring(0, lastCommaIndex) + ";"); realInput = input.substring(lastCommaIndex + 1); } List<String> completions = new ArrayList<String>(); for (int i = 0; i < availableRoles.size(); i++) { String role = availableRoles.get(i); if (realInput.isEmpty() || role.startsWith(realInput.toUpperCase()) || role.startsWith(realInput.toLowerCase())) { List<String> sr = Arrays.asList(selectedRoles.toString().split(";")); if(!sr.contains(role)){ completions.add(role + ";"); } } } Collections.sort(completions); return completions.iterator(); } }