Refactoring type designation gathering according to model change
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 2 Dec 2015 07:30:37 +0000 (08:30 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 2 Dec 2015 10:09:38 +0000 (11:09 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java

index d859b70db978f43345b4f6d9f835514c9b74d97a..9d43c008743b8da2e594577046552f2933db2b9b 100644 (file)
@@ -1101,5 +1101,10 @@ public class TransientOccurenceService implements IOccurrenceService {
         return defaultService.listTypeDesignations(arg0, arg1, arg2, arg3, arg4);
     }
 
+    @Override
+    public List<DerivedUnit> getAllChildDerivatives(UUID arg0) {
+        return defaultService.getAllChildDerivatives(arg0);
+    }
+
 
 }
index 25ebd89bd2dbec93dcebef48c7b7775e192e577b..106d180e4b10b95bb346cd6ec1402b0a8c93b5fa 100644 (file)
@@ -238,7 +238,6 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
                 derivates = CdmStore.getService(IOccurrenceService.class).load(new ArrayList(derivativeUuids), SPECIMEN_INIT_STRATEGY);
             }
             updateRootEntities(derivates);
-            labelProvider.initCache(derivates);
             previousCdmEntitySession.bind();
         }
     }
@@ -268,6 +267,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
                     rootElements.add(specimen);
                 }
             }
+            //FIXME: only init cache when elements have changed
+            labelProvider.initCache(rootElements);
             viewer.setInput(rootElements);
 
     }
index d7cbfdddc97ca2d0803c05dec9505626117d4a2a..3579eff6f83e618e47c14e819892e589f3908ebc 100644 (file)
@@ -354,7 +354,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
 
                 boolean isType = false;
                 //type designation extension
-                if(typeDesignations.get(derivedUnit)!=null){
+                if(typeDesignations.get(derivedUnit)!=null && !typeDesignations.get(derivedUnit).isEmpty()){
                     isType = true;
                 }
                 if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.FieldUnit){
@@ -434,7 +434,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
         return multiLinkSingleReads;
     }
 
-    public void initCache(List<SpecimenOrObservationBase> derivates) {
+    public void initCache(Collection<SpecimenOrObservationBase<?>> rootElements) {
         DerivateLabelProvider.multiLinkSingleReads = new HashSet<SingleRead>();
         DerivateLabelProvider.typeDesignations = new HashMap<DerivedUnit, Collection<SpecimenTypeDesignation>>();
         for(Entry<SingleRead, Collection<Sequence>> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){
@@ -442,13 +442,16 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
                 multiLinkSingleReads.add(entry.getKey());
             }
         }
-        Collection<DerivedUnit> derivedUnits = new ArrayList<DerivedUnit>();
-        for (SpecimenOrObservationBase specimenOrObservationBase : derivates) {
-            if(specimenOrObservationBase.isInstanceOf(DerivedUnit.class)){
-                derivedUnits.add(HibernateProxyHelper.deproxy(specimenOrObservationBase, DerivedUnit.class));
+        if(rootElements!=null){
+            Collection<DerivedUnit> derivedUnits = new ArrayList<DerivedUnit>();
+            for (SpecimenOrObservationBase specimenOrObservationBase : rootElements) {
+                derivedUnits.addAll(CdmStore.getService(IOccurrenceService.class).getAllChildDerivatives(specimenOrObservationBase.getUuid()));
+                if(specimenOrObservationBase.isInstanceOf(DerivedUnit.class)){
+                    derivedUnits.add(HibernateProxyHelper.deproxy(specimenOrObservationBase, DerivedUnit.class));
+                }
             }
+            typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(derivedUnits, null, null, null, null);
         }
-        typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(derivedUnits, null, null, null, null);
     }
 
 }