001    package org.maltparser.core.feature.spec;
002    
003    import java.util.Iterator;
004    import java.util.Set;
005    import java.util.TreeSet;
006    import java.util.regex.Pattern;
007    
008    /**
009    *
010    *
011    * @author Johan Hall
012    */
013    public class SpecificationSubModel  implements Iterable<String> {
014            private Set<String> featureSpecSet;
015            private String name;
016            private final Pattern blanks = Pattern.compile("\\s+");
017            
018            public SpecificationSubModel() {
019                    this("MAIN");
020            }
021            
022            public SpecificationSubModel(String name) {
023                    setSubModelName(name);
024                    featureSpecSet = new TreeSet<String>();
025            }
026            
027            public void add(String featureSpec) {
028                    if (featureSpec != null && featureSpec.trim().length() > 0) {
029                            String strippedFeatureSpec = blanks.matcher(featureSpec).replaceAll("");
030                            featureSpecSet.add(strippedFeatureSpec);
031                    }
032            }
033    
034            public String getSubModelName() {
035                    return name;
036            }
037    
038            public void setSubModelName(String name) {
039                    this.name = name;
040            }
041    
042            public int size() {
043                    return featureSpecSet.size();
044            }
045            
046            public Iterator<String> iterator() {
047                    return featureSpecSet.iterator();
048            }
049            
050            public String toString() {
051                    StringBuilder sb = new StringBuilder();
052                    for (String str : featureSpecSet) {
053                            sb.append(str);
054                            sb.append('\n');
055                    }
056                    return sb.toString();
057            }
058    
059            @Override
060            public int hashCode() {
061                    final int prime = 31;
062                    int result = 1;
063                    result = prime * result
064                                    + ((featureSpecSet == null) ? 0 : featureSpecSet.hashCode());
065                    result = prime * result + ((name == null) ? 0 : name.hashCode());
066                    return result;
067            }
068    
069            @Override
070            public boolean equals(Object obj) {
071                    if (this == obj)
072                            return true;
073                    if (obj == null)
074                            return false;
075                    if (getClass() != obj.getClass())
076                            return false;
077                    SpecificationSubModel other = (SpecificationSubModel) obj;
078                    if (featureSpecSet == null) {
079                            if (other.featureSpecSet != null)
080                                    return false;
081                    } else if (!featureSpecSet.equals(other.featureSpecSet))
082                            return false;
083                    if (name == null) {
084                            if (other.name != null)
085                                    return false;
086                    } else if (!name.equals(other.name))
087                            return false;
088                    return true;
089            }
090    }