Merge branch 'develop' into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / derivateSearch / DerivateSearchView.java
1 // $Id$
2 /**
3 * Copyright (C) 2013 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.derivateSearch;
11
12 import java.util.Collection;
13 import java.util.List;
14 import java.util.Map;
15
16 import org.eclipse.core.runtime.IProgressMonitor;
17 import org.eclipse.jface.action.MenuManager;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Menu;
21 import org.eclipse.ui.IMemento;
22 import org.eclipse.ui.part.ViewPart;
23
24 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
25 import eu.etaxonomy.cdm.model.common.CdmBase;
26 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27 import eu.etaxonomy.taxeditor.model.IContextListener;
28 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
29 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31
32 /**
33 * This view allows to search for and filter {@link SpecimenOrObservationBase}s and display
34 * the results in a list. The results can be selected and opened in an editor.
35 */
36 public class DerivateSearchView extends ViewPart implements IContextListener, ICdmEntitySessionEnabled {
37
38 public static final String ID = "eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchView";
39 private DerivateSearchCompositeController derivateSearchCompositeController;
40 private ConversationHolder conversationHolder;
41 private ICdmEntitySession cdmEntitySession;
42
43 /**
44 * Constructs a new DerivateSearchView and registers it to listen to context changes
45 */
46 public DerivateSearchView() {
47 CdmStore.getContextManager().addContextListener(this);
48 }
49
50 /* (non-Javadoc)
51 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
52 */
53 @Override
54 public void createPartControl(Composite parent) {
55
56 derivateSearchCompositeController = new DerivateSearchCompositeController(parent, this);
57 getSite().setSelectionProvider(derivateSearchCompositeController.getResultViewer());
58 derivateSearchCompositeController.setEnabled(CdmStore.isActive());
59
60 //create context menu
61 MenuManager menuManager = new MenuManager();
62 getSite().registerContextMenu(menuManager, derivateSearchCompositeController.getResultViewer());
63 Control control = derivateSearchCompositeController.getResultViewer().getControl();
64 Menu menu = menuManager.createContextMenu(control);
65 control.setMenu(menu);
66 }
67
68 /* (non-Javadoc)
69 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
70 */
71 @Override
72 public void setFocus() {
73 derivateSearchCompositeController.setFocus();
74 //make sure to bind again if maybe in another view the conversation was unbound
75 if(getConversationHolder()!=null && !getConversationHolder().isClosed() && !getConversationHolder().isBound()){
76 getConversationHolder().bind();
77 }
78 if(getCdmEntitySession() != null) {
79 getCdmEntitySession().bind();
80 }
81 }
82
83 /* (non-Javadoc)
84 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
85 */
86 @Override
87 public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
88 }
89
90 /* (non-Javadoc)
91 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
92 */
93 @Override
94 public void contextStop(IMemento memento, IProgressMonitor monitor) {
95 derivateSearchCompositeController.setEnabled(false);
96 derivateSearchCompositeController.reset();
97 }
98
99 /* (non-Javadoc)
100 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
101 */
102 @Override
103 public void contextStart(IMemento memento, IProgressMonitor monitor) {
104 derivateSearchCompositeController.setEnabled(true);
105 }
106
107 /* (non-Javadoc)
108 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
109 */
110 @Override
111 public void contextRefresh(IProgressMonitor monitor) {
112 initConversation();
113 initSession();
114 }
115
116 private void initSession() {
117 if(CdmStore.isActive() && cdmEntitySession == null) {
118 cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
119 }
120 }
121
122 private void initConversation(){
123 if(conversationHolder==null){
124 conversationHolder = CdmStore.createConversation();
125 derivateSearchCompositeController.setConversation(conversationHolder);
126 }
127 }
128
129 /* (non-Javadoc)
130 * @see eu.etaxonomy.taxeditor.model.IContextListener#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
131 */
132 @Override
133 public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
134 }
135
136 /**
137 * @return the conversationHolder
138 */
139 public ConversationHolder getConversationHolder() {
140 if(CdmStore.isActive() && conversationHolder==null){
141 initConversation();
142 }
143 return conversationHolder;
144 }
145
146 @Override
147 public void dispose() {
148 cdmEntitySession.dispose();
149 super.dispose();
150 }
151
152
153 /* (non-Javadoc)
154 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
155 */
156 @Override
157 public ICdmEntitySession getCdmEntitySession() {
158 initSession();
159 return cdmEntitySession;
160 }
161
162 /* (non-Javadoc)
163 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
164 */
165 @Override
166 public <T extends CdmBase> Collection<T> getRootEntities() {
167 // TODO Auto-generated method stub
168 return null;
169 }
170
171 /* (non-Javadoc)
172 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
173 */
174 @Override
175 public Map<Object, List<String>> getPropertyPathsMap() {
176 // TODO Auto-generated method stub
177 return null;
178 }
179 }