/** * OrbisGIS is a java GIS application dedicated to research in GIScience. * OrbisGIS is developed by the GIS group of the DECIDE team of the * Lab-STICC CNRS laboratory, see <http://www.lab-sticc.fr/>. * * The GIS group of the DECIDE team is located at : * * Laboratoire Lab-STICC – CNRS UMR 6285 * Equipe DECIDE * UNIVERSITÉ DE BRETAGNE-SUD * Institut Universitaire de Technologie de Vannes * 8, Rue Montaigne - BP 561 56017 Vannes Cedex * * OrbisGIS is distributed under GPL 3 license. * * Copyright (C) 2007-2014 CNRS (IRSTV FR CNRS 2488) * Copyright (C) 2015-2017 CNRS (Lab-STICC UMR CNRS 6285) * * This file is part of OrbisGIS. * * OrbisGIS is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * OrbisGIS is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * OrbisGIS. If not, see <http://www.gnu.org/licenses/>. * * For more information, please consult: <http://www.orbisgis.org/> * or contact directly: * info_at_ orbisgis.org */ package org.orbisgis.legend.structure.recode; import org.orbisgis.coremap.renderer.se.parameter.Literal; import org.orbisgis.coremap.renderer.se.parameter.Recode; import org.orbisgis.coremap.renderer.se.parameter.SeParameter; import org.orbisgis.coremap.renderer.se.parameter.ValueReference; import org.orbisgis.coremap.renderer.se.parameter.string.StringAttribute; import org.orbisgis.coremap.renderer.se.parameter.string.StringParameter; import org.orbisgis.legend.structure.parameter.ParameterLegend; import org.orbisgis.legend.structure.recode.type.TypeEvent; import org.orbisgis.legend.structure.recode.type.TypeListener; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * This trait intends to provide some useful methods for the representation of parameters included in unique value * classifications. We can retrieve the {@link ValueReference} used to get data from the input source, change the field * on which the analysis is made. Finally, we can add listeners that will be notified when the type of the inner * parameter changes. * * @author Alexis, Sylvain PALOMINOS */ public abstract class RecodedLegend implements ParameterLegend { protected String field = ""; private List<TypeListener> listeners = new ArrayList<>(); /** * Gets the {@code ValueReference} used to retrieve the input values for this * value classification. */ public ValueReference getValueReference() { SeParameter seParameter = getParameter(); if (seParameter instanceof Recode) { StringParameter stringParameter = ((Recode) seParameter).getLookupValue(); if(stringParameter instanceof ValueReference){ return (ValueReference)stringParameter; } else{ throw new ClassCastException("We're not working with an authorized Recode2String"); } } else { return null; } } /** * Sets the field used to make the analysis * * @param s The new field name. */ public void setField(String s){ field = s; SeParameter seParameter = getParameter(); if(getParameter() instanceof Recode){ ((Recode)seParameter).setLookupValue(new StringAttribute(s)); } } /** * Adds a listener that will be notified when fireTypeChanged() is called. * * @param typeListener The listener that will be added. */ public void addListener(TypeListener typeListener) { listeners.add(typeListener); } /** * Notifies that the actual type of the inner {@code SeParameter} has changed. */ public void fireTypeChanged() { TypeEvent typeEvent = new TypeEvent(this); for (TypeListener typeListener : listeners) { typeListener.typeChanged(typeEvent); } } /** * Accepts the given visitor. * * @param visitor A visitor for RecodedLegend instances. */ public void acceptVisitor(RecodedParameterVisitor visitor) { visitor.visit(this); } /** * Gets the keys that define this RecodedLegend. * * @return The string keys in a Set. */ public Set<String> getKeys() { SeParameter seParameter = getParameter(); if (seParameter instanceof Literal) { return new HashSet<>(); } else if (seParameter instanceof Recode) { return ((Recode) seParameter).getKeys(); } else { return new HashSet<>(); } } public String getField(){ return field; } }