package clone; import java.util.NoSuchElementException; import util.nice.NiceIterator; import util.nice.NiceEnumeration; import misc.Separators; import util.log.Log; public class CloneAlgo { public static final int F_NAME = 0; public static final int F_BRIEF = 1; public static void insert(CloneStore store, Clone clo) { if (store.isEmpty()) { store.insert(clo); return; } NiceIterator iter = store.getIterator(); Clone curr = (Clone) iter.getCurrent(); if (clo.isCloneOf(curr)) { store.insert(clo); return; } try { for ( ; ; iter.next()) { Clone next = (Clone) iter.getNext(); if (clo.isCloneOf(next)) { iter.insertNext(clo); return; } } } catch(NoSuchElementException e) { store.insert(clo); } } static private String selectField(Clone clo, int field) { String str = null; switch(field) { case F_NAME: str = clo.getName(); break; case F_BRIEF: str = clo.getBrief(); break; } return str; } public static String getList(CloneStore store, Clone except, int field) { return getList(store, except, field, Separators.NL); } public static String getList(CloneStore store, Clone except, int field, String sep) { String cloneList = ""; if (store.isEmpty()) return cloneList; int count = 1; NiceEnumeration cloneEnum = store.elements(); Clone prevClone = (Clone) cloneEnum.nextElement(); if (prevClone == except) if (cloneEnum.hasMoreElements()) prevClone = (Clone) cloneEnum.nextElement(); else return cloneList; while (cloneEnum.hasMoreElements()) { Clone currClone = (Clone) cloneEnum.nextElement(); if (currClone == except) continue; else if (currClone.isCloneOf(prevClone)) ++count; else { cloneList += (count == 1) ? sep + selectField(prevClone, field) : sep + "[" + String.valueOf(count) + "] " + selectField(prevClone, field); prevClone = currClone; count = 1; } } cloneList += (count == 1) ? sep + selectField(prevClone, field) : sep + "[" + String.valueOf(count) + "] " + selectField(prevClone, field); return cloneList; } public static String getHeadedList(CloneStore store, Clone except, int field) { return getHeadedList(store, except, field, Separators.NL); } public static String getHeadedList(CloneStore store, Clone except, int field, String sep) { String cloneList = ""; if (store.isEmpty()) return cloneList; int count = 1; int lines = 0; NiceEnumeration cloneEnum = store.elements(); Clone prevClone = (Clone) cloneEnum.nextElement(); if (prevClone == except) if (cloneEnum.hasMoreElements()) prevClone = (Clone) cloneEnum.nextElement(); else return cloneList; if (cloneEnum.hasMoreElements()) { Clone currClone = (Clone) cloneEnum.nextElement(); if (currClone != except) { if (currClone.isCloneOf(prevClone)) ++count; else { cloneList += (count == 1) ? selectField(prevClone, field) : "[" + String.valueOf(count) + "] " + selectField(prevClone, field); prevClone = currClone; count = 1; ++lines; } } } while (cloneEnum.hasMoreElements()) { Clone currClone = (Clone) cloneEnum.nextElement(); if (currClone == except) continue; else if (currClone.isCloneOf(prevClone)) ++count; else { cloneList += (count == 1) ? sep + selectField(prevClone, field) : sep + "[" + String.valueOf(count) + "] " + selectField(prevClone, field); prevClone = currClone; count = 1; ++lines; } } if (lines == 0) cloneList += (count == 1) ? selectField(prevClone, field) : "[" + String.valueOf(count) + "] " + selectField(prevClone, field); else cloneList += (count == 1) ? sep + selectField(prevClone, field) : sep + "[" + String.valueOf(count) + "] " + selectField(prevClone, field); return cloneList; } }