    001    package org.maltparser.core.feature.spec;
    002    import java.util.Iterator;
    003    import java.util.LinkedHashMap;
    004
    005    import org.maltparser.core.exception.MaltChainedException;
    006
    007    /**
    008    *
    009    *
    010    * @author Johan Hall
    011    */
    012    public class SpecificationModel implements Iterable<SpecificationSubModel> {
    013            private String specModelName;
    014            private LinkedHashMap<String, SpecificationSubModel> subModelMap;
    015
    016            public SpecificationModel() throws MaltChainedException {
    017                    this(null);
    018            }
    019
    020            public SpecificationModel(String specModelName) throws MaltChainedException {
    021                    setSpecModelName(specModelName);
    022                    subModelMap = new LinkedHashMap<String, SpecificationSubModel>();
    023            }
    024
    025            public void add(String featureSpec) throws MaltChainedException {
    026                    this.add("MAIN", featureSpec);
    027            }
    028
    029            public void add(String subModelName, String featureSpec) throws MaltChainedException {
    030                    if (subModelName == null || subModelName.length() < 1  || subModelName.toUpperCase().equals("MAIN")) {
    031                            if (!subModelMap.containsKey("MAIN")) {
    032                                    subModelMap.put("MAIN", new SpecificationSubModel("MAIN"));
    033                            }
    034                            subModelMap.get("MAIN").add(featureSpec);
    035                    } else {
    036                            if (!subModelMap.containsKey(subModelName.toUpperCase())) {
    037                                    subModelMap.put(subModelName.toUpperCase(), new SpecificationSubModel(subModelName.toUpperCase()));
    038                            }
    039                            subModelMap.get(subModelName.toUpperCase()).add(featureSpec);
    040                    }
    041            }
    042
    043            public String getSpecModelName() {
    044                    return specModelName;
    045            }
    046
    047            public void setSpecModelName(String specModelName) {
    048                    this.specModelName = specModelName;
    049            }
    050
    051            public Iterator<SpecificationSubModel> iterator() {
    052                    return subModelMap.values().iterator();
    053            }
    054
    055            public int size() {
    056                    return subModelMap.size();
    057            }
    058
    059            public SpecificationSubModel getSpecSubModel(String subModelName) {
    060                    return subModelMap.get(subModelName);
    061            }
    062
    063            public String toString() {
    064                    StringBuilder sb = new StringBuilder();
    065
    066                    for (SpecificationSubModel subModel : this) {
    067                            if (subModel.size() > 0) {
    068                                    if (subModelMap.size() != 1 || subModel.getSubModelName().equalsIgnoreCase("MAIN")) {
    069                                            sb.append(subModel.getSubModelName());
    070                                            sb.append('\n');
    071                                    }
    072                                    sb.append(subModel.toString());
    073                            }
    074                    }
    075                    return sb.toString();
    076            }
    077    }