Downloads Documentation Community Contribute Demo






Show Sidebar
Login | Register

Changeset 4972

Show
Ignore:
Timestamp:
07/17/08 18:40:13 (4 months ago)
Author:
dthomas
Message:

formimportexport. Fixed Darius' fixes -- a HashSet just need to be a LinkedHashSet.

--dt

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • openmrs-modules/formimportexport/metadata/config.xml

    r4569 r4972  
    77        <id>formimportexport</id> 
    88        <name>Form Import Export</name> 
    9         <version>1.5.1</version> 
     9        <version>1.5.2</version> 
    1010        <package>org.openmrs.module.@MODULE_ID@</package> 
    1111        <author>Darius Jazayeri</author> 
  • openmrs-modules/formimportexport/src/org/openmrs/module/formimportexport/impl/FormImportExportServiceImpl.java

    r4970 r4972  
    1212import java.util.Calendar; 
    1313import java.util.Collection; 
    14 import java.util.Collections; 
    1514import java.util.Comparator; 
    1615import java.util.Date; 
     
    1817import java.util.Iterator; 
    1918import java.util.LinkedHashMap; 
     19import java.util.LinkedHashSet; 
    2020import java.util.List; 
    2121import java.util.Map; 
     
    114114             
    115115            List<Integer> toDo = new ArrayList<Integer>(map.keySet()); 
    116             Set<Integer> done = new HashSet<Integer>(); 
     116            Set<Integer> done = new LinkedHashSet<Integer>(); 
    117117            while (toDo.size() > 0) { 
     118 
    118119                int doneThisPass = 0; 
    119120                for (Iterator<Integer> i = toDo.iterator(); i.hasNext(); ) { 
    120121                    Integer thisId = i.next(); 
    121122                    Set<Integer> childrenOfThis = childrenByConcept.get(thisId); 
    122                     if (childrenOfThis == null || childrenOfThis.size() == 0 || done.containsAll(childrenOfThis)) { 
     123                    if (childrenOfThis == null || childrenOfThis.size() == 0 || checkSafeToAddChild(done, childrenOfThis, thisId) ) { 
    123124                        i.remove(); 
    124125                        done.add(thisId); 
     
    128129                if (doneThisPass == 0) { 
    129130                    throw new RuntimeException("Unresolvable cycle in concept dictionary. The following concepts appear to be in cycles: " + toDo); 
    130                 } 
     131                }  
    131132            } 
    132133             
     
    251252                        FormImportExportService service = (FormImportExportService) Context.getService(FormImportExportService.class); 
    252253                        for (String conceptXml : toCreate) { 
     254                            log.info(toCreate); 
    253255                                Concept concept = (Concept) conceptXstream.fromXML(conceptXml); 
    254256 
     
    407409                                        //if ( concept.getConceptId() == 3037 ) { 
    408410                                                if (localConcept != null) { 
    409                                                     getDao().evictFromSession(localConcept); 
     411                                                    Context.evictFromSession(localConcept); 
    410412                                                    service.updateConcept(concept); 
    411413                                                        sb.append("Updated " + concept.getConceptId() + ": " + localConcept.getName(Context.getLocale()) + " -> " + cn + "\n"); 
     
    641643        } 
    642644 
     645        public boolean checkSafeToAddChild(Set<Integer> done, Set<Integer> childrenOfThis, Integer thisId){ 
     646                    if (done.containsAll(childrenOfThis)) 
     647                        return true; 
     648                    else { 
     649                        for (Integer i : childrenOfThis){ 
     650                            if (!(done.contains(i) || thisId.equals(i))) 
     651                               return false; 
     652                        }  
     653                        return true; 
     654                    } 
     655        } 
     656         
    643657         
    644658}