/* Copyright (c) 2001 - 2013 OpenPlans - www.openplans.org. 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.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Set; import org.geoserver.web.wicket.GeoServerDataProvider; import org.geoserver.wps.ProcessGroupInfo; import org.geoserver.wps.process.GeoServerProcessors; import org.geotools.process.ProcessFactory; import org.opengis.feature.type.Name; /** * Provides entries for the process filtering table in the {@link ProcessSelectionPage} * * @author Andrea Aime - GeoSolutions */ @SuppressWarnings("serial") public class FilteredProcessesProvider extends GeoServerDataProvider<FilteredProcessesProvider.FilteredProcess> { /** * Represents a selectable process in the GUI * * @author Andrea Aime - GeoSolutions */ static class FilteredProcess implements Serializable, Comparable<FilteredProcess>{ private Name name; private String description; public FilteredProcess(Name name, String description) { this.name = name; this.description = description; } public Name getName() { return name; } public String getDescription() { return description; } @Override public int compareTo(FilteredProcess other) { if(name == null) { return other.getName() == null ? 0 : -1; } else if(other.getName() == null) { return 1; } else { return name.getURI().compareTo(other.getName().getURI()); } } } private ProcessGroupInfo pfi; private Locale locale; private List<FilteredProcess> selectableProcesses; public FilteredProcessesProvider(ProcessGroupInfo pfi, Locale locale) { this.pfi = pfi; this.locale = locale; ProcessFactory pf = GeoServerProcessors.getProcessFactory(pfi.getFactoryClass(), false); Set<Name> names = pf.getNames(); selectableProcesses = new ArrayList<FilteredProcess>(); for (Name name : names) { String description = GeoServerProcessors .getProcessFactory(pfi.getFactoryClass(), false).getDescription(name) .toString(locale); FilteredProcess sp = new FilteredProcess(name, description); selectableProcesses.add(sp); } Collections.sort(selectableProcesses); } @Override protected List<Property<FilteredProcess>> getProperties() { List<Property<FilteredProcess>> props = new ArrayList<GeoServerDataProvider.Property<FilteredProcess>>(); props.add(new BeanProperty<FilteredProcess>("name", "name")); props.add(new BeanProperty<FilteredProcess>("description", "description")); return props; } @Override protected List<FilteredProcess> getItems() { return selectableProcesses; } }