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 }