package org.maltparser.core.feature.spec; import java.util.Iterator; import java.util.LinkedHashMap; import org.maltparser.core.exception.MaltChainedException; /** * * * @author Johan Hall */ public class SpecificationModel implements Iterable<SpecificationSubModel> { private String specModelName; private LinkedHashMap<String, SpecificationSubModel> subModelMap; public SpecificationModel() throws MaltChainedException { this(null); } public SpecificationModel(String specModelName) throws MaltChainedException { setSpecModelName(specModelName); subModelMap = new LinkedHashMap<String, SpecificationSubModel>(); } public void add(String featureSpec) throws MaltChainedException { this.add("MAIN", featureSpec); } public void add(String subModelName, String featureSpec) throws MaltChainedException { if (subModelName == null || subModelName.length() < 1 || subModelName.toUpperCase().equals("MAIN")) { if (!subModelMap.containsKey("MAIN")) { subModelMap.put("MAIN", new SpecificationSubModel("MAIN")); } subModelMap.get("MAIN").add(featureSpec); } else { if (!subModelMap.containsKey(subModelName.toUpperCase())) { subModelMap.put(subModelName.toUpperCase(), new SpecificationSubModel(subModelName.toUpperCase())); } subModelMap.get(subModelName.toUpperCase()).add(featureSpec); } } public String getSpecModelName() { return specModelName; } public void setSpecModelName(String specModelName) { this.specModelName = specModelName; } public Iterator<SpecificationSubModel> iterator() { return subModelMap.values().iterator(); } public int size() { return subModelMap.size(); } public SpecificationSubModel getSpecSubModel(String subModelName) { return subModelMap.get(subModelName); } @Override public String toString() { StringBuilder sb = new StringBuilder(); for (SpecificationSubModel subModel : this) { if (subModel.size() > 0) { if (subModelMap.size() != 1 || subModel.getSubModelName().equalsIgnoreCase("MAIN")) { sb.append(subModel.getSubModelName()); sb.append('\n'); } sb.append(subModel.toString()); } } return sb.toString(); } }