package org.jgrasstools.gears.utils.style;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Rule;
/**
* A wrapper for the {@link FeatureTypeStyle} object to ease gui use.
*
* @author Andrea Antonello (www.hydrologis.com)
*/
public class FeatureTypeStyleWrapper {
private FeatureTypeStyle featureTypeStyle;
private String name;
private List<RuleWrapper> rulesWrapperList = new ArrayList<RuleWrapper>();
private final StyleWrapper parent;
public FeatureTypeStyleWrapper(FeatureTypeStyle featureTypeStyle, StyleWrapper parent) {
this.featureTypeStyle = featureTypeStyle;
this.parent = parent;
name = featureTypeStyle.getName();
List<Rule> rules = featureTypeStyle.rules();
for (Rule rule : rules) {
RuleWrapper ruleWrapper = new RuleWrapper(rule, this);
rulesWrapperList.add(ruleWrapper);
}
}
public StyleWrapper getParent() {
return parent;
}
public FeatureTypeStyle getFeatureTypeStyle() {
return featureTypeStyle;
}
public String getName() {
int indexOf = parent.getStyle().featureTypeStyles().indexOf(featureTypeStyle);
name = "featureStyle_" + indexOf;
featureTypeStyle.setName(name);
return name;
}
public void setName(String name) {
this.name = name;
featureTypeStyle.setName(name);
}
/**
* Getter for the list of {@link RuleWrapper}s.
*
* @return an unmodifiable list of {@link RuleWrapper}.
* To add or remove items use {@link #addRule(Rule, Class)}
* and {@link #removeRule(RuleWrapper)}.
*/
public List<RuleWrapper> getRulesWrapperList() {
return Collections.unmodifiableList(rulesWrapperList);
}
// /**
// * Add a supplied or new {@link Rule} to the {@link FeatureTypeStyle}.
// *
// * @param tmpRule the new {@link Rule} or null to create a new one.
// * @param symbolizerWrapperClass the class for which to create the symbolizer wrapper.
// * Needed only in the case of new creation of rule.
// * @return the {@link RuleWrapper} for the new {@link Rule}.
// */
// public RuleWrapper addRule(Rule tmpRule, Class<?> symbolizerWrapperClass) {
// if (tmpRule == null) {
// if (symbolizerWrapperClass.isAssignableFrom(PointSymbolizerWrapper.class)) {
// tmpRule = createDefaultPointRule();
// } else if (symbolizerWrapperClass.isAssignableFrom(LineSymbolizerWrapper.class)) {
// tmpRule = createDefaultLineRule();
// } else if (symbolizerWrapperClass.isAssignableFrom(PolygonSymbolizerWrapper.class)) {
// tmpRule = createDefaultPolygonRule();
// } else {
// throw new IllegalArgumentException("Unsupported symbolizer."); //$NON-NLS-1$
// }
// }
//
// featureTypeStyle.rules().add(0, tmpRule);
//
// RuleWrapper wrapper = new RuleWrapper(tmpRule, this);
// rulesWrapperList.add(0, wrapper);
// return wrapper;
// }
/**
* Remove a {@link RuleWrapper} from the list.
*
* @param remRule the {@link Rule} to remove.
* @return the {@link FeatureTypeStyleWrapper} for the new {@link FeatureTypeStyle}.
*/
public void removeRule(RuleWrapper remRule) {
Rule rule = remRule.getRule();
featureTypeStyle.rules().remove(rule);
rulesWrapperList.remove(remRule);
}
/**
* Clear all the {@link Rule}s and {@link RuleWrapper}s.
*/
public void clear() {
featureTypeStyle.rules().clear();
rulesWrapperList.clear();
}
/**
* Swap two elements of the list.
*
* @param src the position first element.
* @param dest the position second element.
*/
public void swap(int src, int dest) {
List<Rule> rules = featureTypeStyle.rules();
if (src >= 0 && src < rules.size() && dest >= 0 && dest < rules.size()) {
Collections.swap(rules, src, dest);
Collections.swap(rulesWrapperList, src, dest);
}
}
}