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