package ie.dcu.apps.ist; import ie.dcu.segment.*; import java.util.*; /** * Registry for segmenters. * * @author Kevin McGuinness */ public class SegmenterRegistry implements Iterable { private static final String DEFAULT_SEGMENTER_NAME = "IgcSegmenter"; private static SegmenterRegistry instance; private final Set segmenters; private SegmenterRegistry() { segmenters = new LinkedHashSet(); init(); } private void init() { // OutlineSegmenter is not very useful // add(new OutlineSegmenter()); // Geodesic Active Contours is too sensitive to parameters // for general use on natural images. // add(new SeededGacSegmenter()); //add(new SrgSegmenter()); //add(new IgcSegmenter()); //add(new BptSegmenter()); //add(new SioxSegmenter()); //add(new SpatiogramSegmenter()); } public static SegmenterRegistry getInstance() { if (instance == null) { instance = new SegmenterRegistry(); } return instance; } public Segmenter find(String name) { for (Segmenter s : segmenters) { // Check name String ename = s.getName(); if (ename.equals(name)) { return s; } // Check class name String cname = s.getClass().getName(); if (cname.equals(name)) { return s; } // Check simple name String sname = s.getClass().getSimpleName(); if (sname.equals(name)) { return s; } } return null; } public boolean isDefault(Segmenter s) { if (s != null) { if (segmenters.size() == 1 && segmenters.contains(s)) { return true; } return s.getClass().getSimpleName().equals(DEFAULT_SEGMENTER_NAME); } return false; } public Segmenter getDefault() { for (Segmenter s : segmenters) { if (isDefault(s)) { return s; } } return null; } public void add(Segmenter segmenter) { segmenters.add(segmenter); } public Set segmenters() { return Collections.unmodifiableSet(segmenters); } public Iterator iterator() { return segmenters.iterator(); } }