package org.maltparser.core.feature.spec; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import java.util.regex.Pattern; /** * * * @author Johan Hall */ public class SpecificationSubModel implements Iterable<String> { private Set<String> featureSpecSet; private String name; private final Pattern blanks = Pattern.compile("\\s+"); public SpecificationSubModel() { this("MAIN"); } public SpecificationSubModel(String name) { setSubModelName(name); featureSpecSet = new TreeSet<String>(); } public void add(String featureSpec) { if (featureSpec != null && featureSpec.trim().length() > 0) { String strippedFeatureSpec = blanks.matcher(featureSpec).replaceAll(""); featureSpecSet.add(strippedFeatureSpec); } } public String getSubModelName() { return name; } public void setSubModelName(String name) { this.name = name; } public int size() { return featureSpecSet.size(); } public Iterator<String> iterator() { return featureSpecSet.iterator(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); for (String str : featureSpecSet) { sb.append(str); sb.append('\n'); } return sb.toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((featureSpecSet == null) ? 0 : featureSpecSet.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } SpecificationSubModel other = (SpecificationSubModel) obj; if (featureSpecSet == null) { if (other.featureSpecSet != null) { return false; } } else if (!featureSpecSet.equals(other.featureSpecSet)) { return false; } if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } return true; } }