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