* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-
package eu.etaxonomy.taxeditor.navigation.navigator.e4;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.editor.ITaxonEditor;
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
+import eu.etaxonomy.taxeditor.event.EventUtility;
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.preference.NavigatorOrderEnum;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.store.LoginManager;
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
import eu.etaxonomy.taxeditor.workbench.part.ICollapsableExpandable;
/**
- *
* @author pplitzner
* @since Sep 7, 2017
- *
*/
public class TaxonNavigatorE4 implements
IPostOperationEnabled, IConversationEnabled, Observer,
- ICdmEntitySessionEnabled, ICdmChangeListener, IContextListener,
+ ICdmChangeListener, IContextListener,
ICollapsableExpandable {
private static final String RESTORING_TAXON_NAVIGATOR = Messages.TaxonNavigator_RESTORE;
private ConversationHolder conversation;
- private ICdmEntitySession cdmEntitySession;
-
private IDataChangeBehavior dataChangeBehavior;
private Root root;
updateSyncButton();
-
-
init();
}
}
}
- /** {@inheritDoc} */
protected IAdaptable getInitialInput() {
- Comparator<TaxonNodeDto> comparator;
- NavigatorOrderEnum orderValue = PreferencesUtil.getSortNodes();
- if (orderValue.equals(NavigatorOrderEnum.NaturalOrder)){
- comparator = new TaxonNodeDtoNaturalComparator();
- } else if (orderValue.equals(NavigatorOrderEnum.AlphabeticalOrder)){
- comparator = new TaxonNodeDtoByNameComparator();
- }else {
- comparator = new TaxonNodeDtoByRankAndNameComparator();
- }
-
+ Comparator<TaxonNodeDto> comparator = PreferencesUtil.getNodeComparator();
+
TaxonNodeNavigatorComparator viewerComparator = new TaxonNodeNavigatorComparator(comparator);
viewer.setComparator(viewerComparator);
viewer.setComparer(new IElementComparer() {
conversation.registerForDataStoreChanges(TaxonNavigatorE4.this);
}
if (CdmStore.isActive()) {
- cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+// cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
CdmApplicationState.getCurrentDataChangeService().register(this);
viewer.setInput(getInitialInput());
}
taxonNode = new TaxonNodeDto(editor.getTaxon().getTaxonNodes().iterator().next());
}
}
-
- viewer.reveal(taxonNode);
- viewer.setSelection(new StructuredSelection(taxonNode));
+ if (taxonNode != null){
+ viewer.reveal(taxonNode);
+ viewer.setSelection(new StructuredSelection(taxonNode));
+ }else{
+ //TODO: show message in status bar
+ }
}
}
}
+ @Inject
+ @Optional
+ public void updateLinkWithTaxon(@UIEventTopic(WorkbenchEventConstants.UPDATE_LINK_WITH_TAXON) boolean isDummy){
+ this.linkWithTaxon = !linkWithTaxon;
+
+ if(this.isLinkWithTaxon()){
+ this.updateCurrentTaxon(EventUtility.getTaxonEditor());
+ }
+ }
+
public void setLinkWithTaxon(boolean linkWithTaxon) {
this.linkWithTaxon = linkWithTaxon;
}
}
}
if(!viewer.getTree().isDisposed()){
+ if (CdmStore.isActive()){
+
+ viewer.setInput(getInitialInput());
+ }
viewer.refresh();
}
return;
}
int mementoWork = 0;
- Set<TreePath> treePaths = new HashSet<TreePath>();
+ Set<TreePath> treePaths = new HashSet<>();
IMemento[] treePathMementos = null;
IMemento treePathsMemento = memento.getChild(TREE_PATHS);
private TreePath createTreePathFromString(String string) {
- List<CdmBase> pathList = new ArrayList<CdmBase>();
+ List<CdmBase> pathList = new ArrayList<>();
if (string.length() == 0) {
return null;
return new TreePath(pathList.toArray());
}
- /**
- * {@inheritDoc}
- */
@Override
public void collapse() {
viewer.collapseAll();
}
- /**
- * {@inheritDoc}
- */
@Override
public void expand() {
viewer.expandAll();
return conversation;
}
- /** {@inheritDoc} */
@PreDestroy
public void dispose() {
dataChangeBehavior = null;
conversation.unregisterForDataStoreChanges(this);
conversation.close();
}
- if(cdmEntitySession != null) {
- cdmEntitySession.dispose();
- cdmEntitySession = null;
- }
if(CdmApplicationState.getCurrentDataChangeService() != null) {
CdmApplicationState.getCurrentDataChangeService().unregister(this);
}
}
- /** {@inheritDoc} */
@Focus
public void setFocus() {
if (getConversationHolder() != null) {
getConversationHolder().bind();
}
- if(cdmEntitySession != null) {
- cdmEntitySession.bind();
- }
}
public UISynchronize getSync() {
return undoContext;
}
- /** {@inheritDoc} */
@Override
public boolean postOperation(Object objectAffectedByOperation) {
viewer.refresh();
if(o instanceof LoginManager){
refresh();
}
-
}
- /** {@inheritDoc} */
+
@Override
public void update(CdmDataChangeMap changeEvents) {
if (dataChangeBehavior == null) {
}
- @Override
- public ICdmEntitySession getCdmEntitySession() {
- return cdmEntitySession;
- }
-
- @Override
public List<TaxonNodeDto> getRootEntities() {
if(root != null) {
return root.getParentBeans();
@Override
public void onChange(CdmChangeEvent event) {
+ Object[] expandedElements = viewer.getExpandedElements();
refresh();
for(CdmBase cb : event.getChangedObjects()) {
if(cb instanceof TaxonNode) {
viewer.refresh();
}
}
+ viewer.setExpandedElements(expandedElements);
}
- @Override
- public Map<Object, List<String>> getPropertyPathsMap() {
- Map<Object, List<String>> propertyPathsMap = new HashMap<Object, List<String>>();
- List<String> taxonNodePropertyPaths = Arrays.asList(new String[] {
- "taxon.name" //$NON-NLS-1$
- });
- propertyPathsMap.put("childNodes", taxonNodePropertyPaths); //$NON-NLS-1$
- return propertyPathsMap;
- }
-
- /**
- * {@inheritDoc}
- */
@Override
public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
// TODO Auto-generated method stub
-
}
- /**
- * {@inheritDoc}
- */
@Override
public void contextStop(IMemento memento, IProgressMonitor monitor) {
}
- /**
- * {@inheritDoc}
- */
@Override
public void contextStart(IMemento memento, IProgressMonitor monitor) {
if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
}
}
- /**
- * {@inheritDoc}
- */
@Override
public void contextRefresh(IProgressMonitor monitor) {
+// viewer.refresh();
}
- /**
- * {@inheritDoc}
- */
@Override
public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
}
+ @Inject
+ @Optional
+ private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_NAVIGATOR)TaxonNodeDto dto){
+ if(dto!= null){
+ Object[] expandedElements = viewer.getExpandedElements();
+ ISelection sel = viewer.getSelection();
+ refresh(dto);
+ viewer.setExpandedElements(expandedElements);
+ if (sel != null && !sel.isEmpty()){
+ viewer.reveal(dto);
+ viewer.setSelection(sel);
+ }
+ }
+ }
+
@Inject
@Optional
private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_NAVIGATOR)boolean refresh){
if(refresh){
+ Object[] expandedElements = viewer.getExpandedElements();
refresh();
+ viewer.setExpandedElements(expandedElements);
}
}
-}
+}
\ No newline at end of file