From: Patrick Plitzner Date: Wed, 8 May 2019 14:36:22 +0000 (+0200) Subject: ref #8263 Cache child terms in content provider X-Git-Tag: 5.7.1^2~2 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/0dcf41f3a4e86bcf89e4573a97a8a6a3dab3a7a7 ref #8263 Cache child terms in content provider --- diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermDtoContentProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermDtoContentProvider.java index 6b32392db..bb77dd5ee 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermDtoContentProvider.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermDtoContentProvider.java @@ -8,8 +8,11 @@ */ package eu.etaxonomy.taxeditor.editor.definedterm; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import org.eclipse.jface.viewers.TreeNodeContentProvider; @@ -26,7 +29,9 @@ import eu.etaxonomy.taxeditor.store.CdmStore; */ public class TermDtoContentProvider extends TreeNodeContentProvider { - @Override + private Map> vocabularyToChildTermMap = new HashMap<>(); + + @Override public Object[] getElements(Object inputElement) { Collection inputElements = (Collection) inputElement; return inputElements.toArray(); @@ -36,7 +41,7 @@ public class TermDtoContentProvider extends TreeNodeContentProvider { public Object[] getChildren(Object parentElement) { Collection children = new HashSet<>(); if(parentElement instanceof TermVocabularyDto){ - children.addAll(CdmStore.getService(IVocabularyService.class).getCompleteTermHierarchy((TermVocabularyDto)parentElement)); + children.addAll(getChildTerms((TermVocabularyDto)parentElement)); } else if(parentElement instanceof TermDto){ if(((TermDto) parentElement).getIncludes()!=null){ children.addAll(((TermDto) parentElement).getIncludes()); @@ -82,4 +87,17 @@ public class TermDtoContentProvider extends TreeNodeContentProvider { return false; } + public Collection getChildTerms(TermVocabularyDto voc) { + Collection children = vocabularyToChildTermMap.get(voc); + if(children==null){ + children = new ArrayList<>(CdmStore.getService(IVocabularyService.class).getCompleteTermHierarchy(voc)); + vocabularyToChildTermMap.put(voc, children); + } + return children; + } + + public void removeVocabularyFromCache(TermVocabularyDto voc){ + vocabularyToChildTermMap.remove(voc); + } + } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java index 1b68f88b4..5961f5a7a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java @@ -96,6 +96,8 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex private Set changedTerms = new HashSet<>(); + private TermDtoContentProvider contentProvider; + @Inject public DefinedTermEditorE4() { CdmStore.getContextManager().addContextListener(this); @@ -120,7 +122,8 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex parent.setLayout(layout); viewer = new TreeViewer(new Tree(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI)); viewer.getControl().setLayoutData(LayoutConstants.FILL()); - viewer.setContentProvider(new TermDtoContentProvider()); + contentProvider = new TermDtoContentProvider(); + viewer.setContentProvider(contentProvider); viewer.setLabelProvider(new TermDtoLabelProvider()); viewer.setComparator(new DefinedTermSorter()); @@ -148,9 +151,11 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex if(objectAffectedByOperation instanceof Collection){ for (Object o : (Collection)objectAffectedByOperation) { if(o instanceof TermVocabularyDto){ + contentProvider.removeVocabularyFromCache((TermVocabularyDto) o); viewer.refresh(o); } else if(o instanceof TermDto){ + contentProvider.removeVocabularyFromCache(((TermDto) o).getVocabularyDto()); viewer.refresh(((TermDto) o).getVocabularyDto()); viewer.refresh(o); itemsToSelect.add((TermDto) o); @@ -158,12 +163,14 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex } } if(objectAffectedByOperation instanceof TermVocabularyDto){ + contentProvider.removeVocabularyFromCache((TermVocabularyDto) objectAffectedByOperation); viewer.refresh(); itemsToSelect.add((AbstractTermDto) objectAffectedByOperation); } else if(objectAffectedByOperation instanceof TermDto){ TermDto termDto = (TermDto) objectAffectedByOperation; itemsToSelect.add(termDto); + contentProvider.removeVocabularyFromCache(termDto.getVocabularyDto()); viewer.refresh(termDto.getVocabularyDto()); } else{