private void clearDeleteRecord() { if (deleteList != null) { java.util.List list = deleteList.getSelection(); if (list.size() > 0) { try { java.util.List dbIDs = new ArrayList(list.size()); for (Iterator it = list.iterator(); it.hasNext(); ) { GKInstance instance = (GKInstance) it.next(); dbIDs.add(instance.getDBID()); } fileAdaptor.clearDeleteRecord(dbIDs); } catch (IOException e) { System.err.println("SynchronizationDialog.clearDeleteRecord(): " + e); e.printStackTrace(); } deleteList.deleteInstances(list); // Check if deleteList needs to be removed if (deleteList.getDisplayedInstances().size() == 0) { centerPane.remove(deleteList); centerPane.validate(); centerPane.repaint(); } } } }
private void updateFromDB() { InstanceListPane touchedList = null; // Find out which instances have been selected in all relevant lists // Update the attribute values for changed list. try { if (changedList != null) { java.util.List list = new ArrayList(changedList.getSelection()); // To support it.remove() // Use a new ArrayList. if (list != null && list.size() > 0) { for (Iterator it = list.iterator(); it.hasNext(); ) { GKInstance instance = (GKInstance) it.next(); // Fetch GKInstance based on its DB_ID since SchemaClass might be changed. GKInstance localCopy = fileAdaptor.fetchInstance(instance.getDBID()); dbAdaptor.setUseCache(false); GKInstance dbCopy = dbAdaptor.fetchInstance(instance.getDBID()); dbAdaptor.setUseCache(true); if (SynchronizationManager.getManager().updateFromDB(localCopy, dbCopy, this)) { AttributeEditManager.getManager().attributeEdit(localCopy); fileAdaptor.removeDirtyFlag(localCopy); } else it.remove(); // Remove from the list } // Remove all selected instances changedList.deleteInstances(list); touchedList = changedList; } } if (localHasMoreIEList != null && localHasMoreIEList.getSelection().size() > 0) { List list = new ArrayList(localHasMoreIEList.getSelection()); for (Iterator it = list.iterator(); it.hasNext(); ) { GKInstance localCopy = (GKInstance) it.next(); dbAdaptor.setUseCache(false); GKInstance dbCopy = dbAdaptor.fetchInstance(localCopy.getDBID()); dbAdaptor.setUseCache(true); if (SynchronizationManager.getManager().updateFromDB(localCopy, dbCopy, this)) { AttributeEditManager.getManager().attributeEdit(localCopy); fileAdaptor.removeDirtyFlag(localCopy); } else it.remove(); // Remove from the list, if it it cancelled by the user. } localHasMoreIEList.deleteInstances(list); touchedList = localHasMoreIEList; } // Delete the local copy for deleteInDBList. if (deleteInDBList != null) { java.util.List list = deleteInDBList.getSelection(); if (list != null && list.size() > 0) { for (Iterator it = list.iterator(); it.hasNext(); ) { GKInstance instance = (GKInstance) it.next(); fileAdaptor.deleteInstance(instance); } } deleteInDBList.deleteInstances(list); touchedList = deleteInDBList; } // Get another copy for the local repository if (deleteList != null) { java.util.List<?> list = deleteList.getSelection(); if (list != null && list.size() > 0) { Map<SchemaClass, Set<GKInstance>> checkOutMap = new HashMap<SchemaClass, Set<GKInstance>>(); // All checked out Instances for (Iterator<?> it = list.iterator(); it.hasNext(); ) { GKInstance instance = (GKInstance) it.next(); Map<SchemaClass, List<GKInstance>> schemaMap = InstanceUtilities.listDownloadableInstances(instance); // Have to merge schemaMap to checkOutMap for (SchemaClass key : schemaMap.keySet()) { List<GKInstance> list1 = schemaMap.get(key); if (list1 != null && list1.size() > 0) { Set<GKInstance> list2 = checkOutMap.get(key); if (list2 == null) { list2 = new HashSet<GKInstance>(); checkOutMap.put(key, list2); } // Remove first to avoid any duplication list2.addAll(list1); } } } fileAdaptor.store(checkOutMap); InstanceUtilities.clearShellFlags(checkOutMap); // There are maybe more than selected instances after checking out List<GKInstance> checkedOut = new ArrayList<GKInstance>(); for (Set<GKInstance> set : checkOutMap.values()) { checkedOut.addAll(set); } deleteList.deleteInstances(checkedOut); // deleteList.deleteInstances(list); // Need to clear out these deletion records List<Long> dbIds = new ArrayList<Long>(); for (GKInstance inst : checkedOut) dbIds.add(inst.getDBID()); fileAdaptor.clearDeleteRecord(dbIds); touchedList = deleteList; } } } catch (Exception e) { System.err.println("SynchronizationDialog.updateFromDB(): " + e); e.printStackTrace(); } updateInstanceList(touchedList); }