Project

General

Profile

« Previous | Next » 

Revision 0847fd74

Added by Patrick Plitzner almost 8 years ago

Tweak performance for typeDesignation cache in label provider

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
927 927
        return defaultService.listIndividualsAssociations(specimen, limit, start, orderHints, propertyPaths);
928 928
    }
929 929

  
930
    @Override
931
    public Collection<SpecimenTypeDesignation> listTypeDesignations(SpecimenOrObservationBase<?> specimen,
932
            Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
933
        return defaultService.listTypeDesignations(specimen, limit, start, orderHints, propertyPaths);
934
    }
935

  
936 930
    @Override
937 931
    public Collection<DescriptionBase<?>> listDescriptionsWithDescriptionSpecimen(
938 932
            SpecimenOrObservationBase<?> specimen, Integer limit, Integer start, List<OrderHint> orderHints,
......
1081 1075
        return defaultService.listIndividualsAssociationTaxa(arg0, arg1, arg2, arg3, arg4);
1082 1076
    }
1083 1077

  
1084
    @Override
1085
    public Collection<TaxonBase<?>> listTypeDesignationTaxa(SpecimenOrObservationBase<?> arg0, Integer arg1,
1086
            Integer arg2, List<OrderHint> arg3, List<String> arg4) {
1087
        return defaultService.listTypeDesignationTaxa(arg0, arg1, arg2, arg3, arg4);
1088
    }
1089

  
1090 1078
     /**
1091 1079
     * {@inheritDoc}
1092 1080
     */
......
1095 1083
        return defaultService.load(arg0, arg1);
1096 1084
    }
1097 1085

  
1086
    @Override
1087
    public Collection<TaxonBase<?>> listTypeDesignationTaxa(DerivedUnit arg0, Integer arg1, Integer arg2,
1088
            List<OrderHint> arg3, List<String> arg4) {
1089
        return defaultService.listTypeDesignationTaxa(arg0, arg1, arg2, arg3, arg4);
1090
    }
1091

  
1092
    @Override
1093
    public Map<DerivedUnit, Collection<SpecimenTypeDesignation>> listTypeDesignations(Collection<DerivedUnit> arg0,
1094
            Integer arg1, Integer arg2, List<OrderHint> arg3, List<String> arg4) {
1095
        return defaultService.listTypeDesignations(arg0, arg1, arg2, arg3, arg4);
1096
    }
1097

  
1098
    @Override
1099
    public Collection<SpecimenTypeDesignation> listTypeDesignations(DerivedUnit arg0, Integer arg1, Integer arg2,
1100
            List<OrderHint> arg3, List<String> arg4) {
1101
        return defaultService.listTypeDesignations(arg0, arg1, arg2, arg3, arg4);
1102
    }
1103

  
1104

  
1098 1105
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
238 238
                derivates = CdmStore.getService(IOccurrenceService.class).load(new ArrayList(derivativeUuids), SPECIMEN_INIT_STRATEGY);
239 239
            }
240 240
            updateRootEntities(derivates);
241
            refreshTree(false);
241
            labelProvider.initCache(derivates);
242 242
            previousCdmEntitySession.bind();
243 243
        }
244 244
    }
......
390 390
     * Refreshes the derivate hierarchy tree
391 391
     */
392 392
    public void refreshTree(){
393
        refreshTree(true);
394
    }
395

  
396
    /**
397
     * Refreshes the derivate hierarchy tree
398
     * @param refreshViewer if <code>true</code> then also the
399
     * viewer will be refreshed. This was implemented due to
400
     * performance reasons. If passing <code>false</code>
401
     * does what was expected use <code>false</code> preferably.
402
     */
403
    public void refreshTree(boolean refreshViewer){
404
        //refresh typedesignations
405
        labelProvider.refresh();
406
        if(refreshViewer){
407
            viewer.refresh();
408
        }
393
        viewer.refresh();
409 394
    }
410 395

  
411 396
    //FIXME:Remoting hack to make this work for remoting
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
61 61

  
62 62
    private static Set<SingleRead> multiLinkSingleReads;
63 63

  
64
    private static Map<DerivedUnit, List<SpecimenTypeDesignation>> typeDesignations;
64
    private static Map<DerivedUnit, Collection<SpecimenTypeDesignation>> typeDesignations;
65 65

  
66 66
    private ConversationHolder conversation;
67 67

  
......
421 421
        return null;
422 422
    }
423 423

  
424
    /**
425
     * Refreshes cached label extensions
426
     * @param multiLinkSingleReads
427
     */
428
    public void refresh() {
429
        DerivateLabelProvider.multiLinkSingleReads = new HashSet<SingleRead>();
430
        for(Entry<SingleRead, Collection<Sequence>> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){
431
            if(entry.getValue().size()>1){
432
                multiLinkSingleReads.add(entry.getKey());
433
            }
434
        }
435
        DerivateLabelProvider.typeDesignations = new HashMap<DerivedUnit, List<SpecimenTypeDesignation>>();
436
    }
437

  
438 424
    private static void addTypeDesignation(DerivedUnit derivedUnit, SpecimenTypeDesignation typeDesignation){
439
        List<SpecimenTypeDesignation> list = typeDesignations.get(derivedUnit);
425
        Collection<SpecimenTypeDesignation> list = typeDesignations.get(derivedUnit);
440 426
        if(list==null){
441 427
            list = new ArrayList<SpecimenTypeDesignation>();
442 428
        }
......
448 434
        return multiLinkSingleReads;
449 435
    }
450 436

  
437
    public void initCache(List<SpecimenOrObservationBase> derivates) {
438
        DerivateLabelProvider.multiLinkSingleReads = new HashSet<SingleRead>();
439
        DerivateLabelProvider.typeDesignations = new HashMap<DerivedUnit, Collection<SpecimenTypeDesignation>>();
440
        for(Entry<SingleRead, Collection<Sequence>> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){
441
            if(entry.getValue().size()>1){
442
                multiLinkSingleReads.add(entry.getKey());
443
            }
444
        }
445
        Collection<DerivedUnit> derivedUnits = new ArrayList<DerivedUnit>();
446
        for (SpecimenOrObservationBase specimenOrObservationBase : derivates) {
447
            if(specimenOrObservationBase.isInstanceOf(DerivedUnit.class)){
448
                derivedUnits.add(HibernateProxyHelper.deproxy(specimenOrObservationBase, DerivedUnit.class));
449
            }
450
        }
451
        typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(derivedUnits, null, null, null, null);
452
    }
453

  
451 454
}

Also available in: Unified diff