Refactoring of selection elements. Additional minor refactoring. Fixed a bug with...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / AbstractAccountViewPart.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 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
11 package eu.etaxonomy.taxeditor.view;
12
13 import java.util.Collection;
14
15 import org.eclipse.core.runtime.IProgressMonitor;
16 import org.eclipse.jface.action.GroupMarker;
17 import org.eclipse.jface.action.MenuManager;
18 import org.eclipse.jface.viewers.ArrayContentProvider;
19 import org.eclipse.jface.viewers.IBaseLabelProvider;
20 import org.eclipse.jface.viewers.ISelection;
21 import org.eclipse.jface.viewers.TableViewer;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.events.FocusAdapter;
25 import org.eclipse.swt.events.FocusEvent;
26 import org.eclipse.swt.layout.FillLayout;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Control;
29 import org.eclipse.swt.widgets.Menu;
30 import org.eclipse.ui.IMemento;
31 import org.eclipse.ui.IWorkbenchActionConstants;
32 import org.eclipse.ui.IWorkbenchPart;
33
34 import eu.etaxonomy.cdm.model.common.CdmBase;
35 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
36 import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
37 import eu.etaxonomy.taxeditor.model.IContextListener;
38 import eu.etaxonomy.taxeditor.store.CdmStore;
39
40 /**
41 * @author n.hoffmann
42 * @created Feb 16, 2011
43 * @version 1.0
44 */
45 public abstract class AbstractAccountViewPart<T> extends AbstractCdmViewPart {
46
47 private class ContextListener extends ContextListenerAdapter{
48
49 /* (non-Javadoc)
50 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
51 */
52 @Override
53 public void contextStop(IMemento memento, IProgressMonitor monitor) {
54 monitor.subTask("Shutting down User View");
55 viewer.setInput(null);
56 }
57
58 /* (non-Javadoc)
59 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
60 */
61 @Override
62 public void contextStart(IMemento memento, IProgressMonitor monitor) {
63 monitor.subTask("Initiating User View");
64 viewer.setInput(getInput());
65 }
66 }
67
68 protected TableViewer viewer;
69
70 private IContextListener contextListener;
71
72 /* (non-Javadoc)
73 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
74 */
75 /** {@inheritDoc} */
76 @Override
77 public void createPartControl(Composite parent) {
78 contextListener = new ContextListener();
79 CdmStore.getContextManager().addContextListener(contextListener);
80
81 FillLayout fillLayout = new FillLayout();
82 fillLayout.marginWidth = 0;
83 fillLayout.marginHeight = 0;
84 fillLayout.type = SWT.VERTICAL;
85 parent.setLayout(fillLayout);
86
87 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
88 | SWT.V_SCROLL | SWT.FULL_SELECTION);
89
90 getSite().setSelectionProvider(viewer);
91
92 createColumns(viewer);
93
94 MenuManager menuMgr = new MenuManager();
95 menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
96 getSite().registerContextMenu(menuMgr, viewer);
97
98 Control control = viewer.getControl();
99 Menu menu = menuMgr.createContextMenu(control);
100 control.setMenu(menu);
101
102 viewer.setContentProvider(new ArrayContentProvider());
103 viewer.setLabelProvider(getLabelProvider());
104
105 if(CdmStore.isActive()){
106 viewer.setInput(getInput());
107 }
108
109
110 this.addListenerObject(new FocusAdapter() {
111 /* (non-Javadoc)
112 * @see org.eclipse.swt.events.FocusAdapter#focusGained(org.eclipse.swt.events.FocusEvent)
113 */
114 @Override
115 public void focusGained(FocusEvent e) {
116 super.focusGained(e);
117 getConversationHolder().bind();
118 viewer.getControl().setFocus();
119 }
120 });
121 }
122
123 /**
124 * @return
125 */
126 protected abstract IBaseLabelProvider getLabelProvider();
127
128 /**
129 * @param viewer2
130 */
131 protected abstract void createColumns(TableViewer viewer);
132
133 /**
134 * @return the contextListener
135 */
136 public IContextListener getContextListener() {
137 if(contextListener == null){
138 throw new IllegalStateException("Context listener was not initialized");
139 }
140 return contextListener;
141 }
142
143 /* (non-Javadoc)
144 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
145 */
146 @Override
147 public void update(CdmDataChangeMap changeEvents) {
148 // data changes can only be generate here at the moment
149 }
150
151 /* (non-Javadoc)
152 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
153 */
154 @Override
155 public boolean postOperation(CdmBase objectAffectedByOperation) {
156 if(CdmStore.isActive()){
157 viewer.setInput(getInput());
158 viewer.refresh();
159 }
160
161 return true;
162 }
163
164 /**
165 * @return
166 */
167 public abstract Collection getInput();
168
169 /* (non-Javadoc)
170 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
171 */
172 @Override
173 public void dispose() {
174 CdmStore.getContextManager().removeContextListener(getContextListener());
175 super.dispose();
176 }
177
178
179 @Override
180 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
181 // TODO Auto-generated method stub
182
183 }
184
185 @Override
186 public Viewer getViewer() {
187 return viewer;
188 }
189
190 @Override
191 public void createViewer(Composite parent) {
192 // TODO Auto-generated method stub
193
194 }
195
196 @Override
197 public void changed(Object object) {
198 // do nothing
199 }
200
201
202 @Override
203 public boolean onComplete() {
204 return true;
205 }
206
207 }