@Override public void startElement(ELEMENT element, Attributes attributes) throws SAXException { if (element.equals(SpecVersionHandler.EL)) { MutableUDAVersion udaVersion = new MutableUDAVersion(); getInstance().udaVersion = udaVersion; new SpecVersionHandler(udaVersion, this); } if (element.equals(DeviceHandler.EL)) { new DeviceHandler(getInstance(), this); } }
@Override public void startElement(ELEMENT element, Attributes attributes) throws SAXException { if (element.equals(DeviceHandler.EL)) { MutableDevice device = new MutableDevice(); getInstance().add(device); new DeviceHandler(device, this); } }
@Override public void startElement(ELEMENT element, Attributes attributes) throws SAXException { if (element.equals(IconHandler.EL)) { MutableIcon icon = new MutableIcon(); getInstance().add(icon); new IconHandler(icon, this); } }
@Override public void startElement(ELEMENT element, Attributes attributes) throws SAXException { if (element.equals(IconListHandler.EL)) { List<MutableIcon> icons = new ArrayList(); getInstance().icons = icons; new IconListHandler(icons, this); } if (element.equals(ServiceListHandler.EL)) { List<MutableService> services = new ArrayList(); getInstance().services = services; new ServiceListHandler(services, this); } if (element.equals(DeviceListHandler.EL)) { List<MutableDevice> devices = new ArrayList(); getInstance().embeddedDevices = devices; new DeviceListHandler(devices, this); } }
// ----------------------------------------------------- // Advance // ------- public static <ELEMENT> OrderDiff<ELEMENT> analyzeOrderDiff( List<ELEMENT> beforeUniqueList, List<ELEMENT> afterUniqueList) { final LinkedHashSet<ELEMENT> linkedBeforeSet = newLinkedHashSet(beforeUniqueList); if (beforeUniqueList.size() != linkedBeforeSet.size()) { String msg = "The argument 'beforeList' should be unique: " + beforeUniqueList; throw new IllegalArgumentException(msg); } final LinkedHashSet<ELEMENT> linkedAfterSet = newLinkedHashSet(afterUniqueList); if (afterUniqueList.size() != linkedAfterSet.size()) { String msg = "The argument 'afterList' should be unique: " + afterUniqueList; throw new IllegalArgumentException(msg); } final ElementDiff<ELEMENT> elementDiff = analyzeElementDiff(linkedBeforeSet, linkedAfterSet); final Set<ELEMENT> addedSet = elementDiff.getAddedSet(); final Set<ELEMENT> deletedSet = elementDiff.getDeletedSet(); final List<ELEMENT> beforeRemainingList = newArrayList(beforeUniqueList); beforeRemainingList.removeAll(deletedSet); final List<ELEMENT> afterRemainingList = newArrayList(afterUniqueList); afterRemainingList.removeAll(addedSet); if (beforeRemainingList.size() != afterRemainingList.size()) { String msg = "The beforeRemainingList.size() should be the same as the afterRemainingList's:"; msg = msg + " beforeRemainingList.size()=" + beforeRemainingList.size(); msg = msg + " afterRemainingList.size()=" + afterRemainingList.size(); throw new IllegalStateException(msg); } final Map<ELEMENT, OrderDiffDetail<ELEMENT>> movedMap = newLinkedHashMap(); doAnalyzeOrderChange(beforeRemainingList, afterRemainingList, movedMap); for (Entry<ELEMENT, OrderDiffDetail<ELEMENT>> entry : movedMap.entrySet()) { final ELEMENT movedElement = entry.getKey(); final ELEMENT previousElement = entry.getValue().getPreviousElement(); final int movedIndex = afterUniqueList.indexOf(movedElement); final ELEMENT realPrevious = afterUniqueList.get(movedIndex - 1); if (!previousElement.equals(realPrevious)) { entry.getValue().setPreviousElement(realPrevious); } } final OrderDiff<ELEMENT> orderDiff = new OrderDiff<ELEMENT>(); orderDiff.setMovedMap(movedMap); return orderDiff; }
@Override public boolean isLastElement(ELEMENT element) { return element.equals(EL); }