ref #6905 Enable supplemental view for selections in details view
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / e4 / details / DetailsPartE4.java
1 // $Id$
2 /**
3 * Copyright (C) 2017 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.view.e4.details;
11
12 import javax.annotation.PostConstruct;
13 import javax.inject.Inject;
14
15 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
16 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
17 import org.eclipse.jface.viewers.ISelectionChangedListener;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.swt.widgets.Composite;
20
21 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
22 import eu.etaxonomy.cdm.model.description.Feature;
23 import eu.etaxonomy.taxeditor.l10n.Messages;
24 import eu.etaxonomy.taxeditor.model.AbstractUtility;
25 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
26 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
27 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
28 import eu.etaxonomy.taxeditor.view.e4.AbstractCdmEditorPartE4;
29 import eu.etaxonomy.taxeditor.workbench.part.ISelectionElementEditingPart;
30
31 /**
32 * @author pplitzner
33 * @date 18.07.2017
34 *
35 */
36 public class DetailsPartE4 extends AbstractCdmEditorPartE4 implements IPartContentHasSupplementalData {
37
38 private ISelectionChangedListener selectionChangedListener;
39
40 @Inject
41 private ESelectionService selService;
42
43 @Inject
44 public DetailsPartE4() {
45 }
46
47 @PostConstruct
48 public void create(Composite parent) {
49 viewer = new DetailsViewerE4(parent, this);
50
51 // Propagate selection from viewer
52 selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
53 viewer.addSelectionChangedListener(selectionChangedListener);
54 }
55
56 @Override
57 public void selectionChanged_internal(Object selection, MPart activePart, MPart thisPart) {
58 if (activePart==thisPart){
59 return;
60 }
61
62 Object partObject = createPartObject(activePart);
63
64 if(partObject instanceof IPartContentHasDetails){
65 IStructuredSelection structuredSelection = createSelection(selection);
66 if(structuredSelection==null || structuredSelection.isEmpty()){
67 showEmptyPage();
68 return;
69 }
70 if(!(partObject instanceof ISelectionElementEditingPart) &&
71 partObject instanceof IConversationEnabled && ((IConversationEnabled) partObject).getConversationHolder()==null) {
72 //TODO show specific message (refactor EmptyElement to allow specific messages)
73 showEmptyPage();
74 return;
75 }
76 // do not show details for feature nodes TODO strange check to avoid having shown the distribution map for every FeatureNodeContainer
77 if(structuredSelection.getFirstElement() instanceof FeatureNodeContainer){
78 // do show the map for distributions
79 Feature feature = ((FeatureNodeContainer) structuredSelection.getFirstElement()).getFeature();
80 if(!feature.equals(Feature.DISTRIBUTION())){
81 showEmptyPage();
82 return;
83 }
84 }
85 showViewer(structuredSelection, activePart, viewer);
86 return;
87 }
88 else if(selectionProvidingPart!=null && selectionProvidingPart.isVisible()){
89 return;
90 }
91 else{
92 showEmptyPage();
93 return;
94 }
95 }
96
97 // protected void showEmptyPage() {
98 // super.showEmptyPage();
99 // if(viewer!=null){
100 // viewer.showEmptyPage();
101 // }
102 // selectionProvidingPart = null;
103 // }
104
105 @Override
106 protected String getViewName(){
107 return Messages.DetailsViewPart_VIEWER_NAME;
108 }
109
110 }