Project

General

Profile

Download (7.27 KB) Statistics
| Branch: | Tag: | Revision:
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.bulkeditor.referencingobjects;
12

    
13
import java.util.ArrayList;
14
import java.util.Collections;
15
import java.util.Comparator;
16
import java.util.List;
17
import java.util.Set;
18

    
19
import org.apache.log4j.Logger;
20
import org.eclipse.core.runtime.IProgressMonitor;
21
import org.eclipse.core.runtime.IStatus;
22
import org.eclipse.core.runtime.Status;
23
import org.eclipse.core.runtime.jobs.Job;
24
import org.eclipse.jface.viewers.ISelection;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.TableViewer;
27
import org.eclipse.jface.viewers.TableViewerColumn;
28
import org.eclipse.jface.viewers.Viewer;
29
import org.eclipse.swt.SWT;
30
import org.eclipse.swt.widgets.Composite;
31
import org.eclipse.swt.widgets.Display;
32
import org.eclipse.swt.widgets.Table;
33
import org.eclipse.ui.ISelectionListener;
34
import org.eclipse.ui.IWorkbenchPart;
35

    
36
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
37
import eu.etaxonomy.cdm.model.common.CdmBase;
38
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
39
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
40
import eu.etaxonomy.taxeditor.model.AbstractCdmViewPart;
41
import eu.etaxonomy.taxeditor.model.DescriptionHelper;
42
import eu.etaxonomy.taxeditor.model.LineSelection;
43
import eu.etaxonomy.taxeditor.store.CdmStore;
44

    
45
/**
46
 * <p>ReferencingObjectsView class.</p>
47
 *
48
 * @author p.ciardelli
49
 * @created 08.07.2009
50
 * @version 1.0
51
 */
52
public class ReferencingObjectsView extends AbstractCdmViewPart implements ISelectionListener{
53
	private static final Logger logger = Logger
54
			.getLogger(ReferencingObjectsView.class);
55

    
56
	/** Constant <code>ID="eu.etaxonomy.taxeditor.bulkeditor.refer"{trunked}</code> */
57
	public static final String ID = "eu.etaxonomy.taxeditor.bulkeditor.referencingobjectsview";
58
	
59
	private TableViewer viewer;
60

    
61
	private CdmBase referencedObject;
62
	
63
	/* (non-Javadoc)
64
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite)
65
	 */
66
	/** {@inheritDoc} */
67
	@Override
68
	public void createViewer(Composite parent) {
69
		selectionService.addSelectionListener(this);
70
		
71
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
72
				| SWT.V_SCROLL | SWT.FULL_SELECTION);
73
		createColumns(viewer);
74
		viewer.setContentProvider(new ReferencingObjectsContentProvider());
75
		viewer.setLabelProvider(new ReferencingObjectsLabelProvider());
76
//		viewer.setInput(new ArrayList<CdmBase>());
77
	}
78
	
79
	/**
80
	 * Create the columns for the table
81
	 * @param viewer
82
	 */
83
	private void createColumns(TableViewer viewer) {
84
		Table table = viewer.getTable();
85
		String[] titles = {"Class", "Description", "UUID", "Object ID" };
86
		int[] bounds = { 100, 200, 100, 70};
87

    
88
		for (int i = 0; i < titles.length; i++) {
89
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
90
			column.getColumn().setText(titles[i]);
91
			column.getColumn().setWidth(bounds[i]);
92
			column.getColumn().setResizable(true);
93
			column.getColumn().setMoveable(true);
94
		}
95
		table.setHeaderVisible(true);
96
		table.setLinesVisible(true);
97
	}
98

    
99
	/**
100
	 * <p>updateReferencingObjects</p>
101
	 *
102
	 * @param entity a {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity} object.
103
	 */
104
	public void updateReferencingObjects(final IdentifiableEntity entity) {
105
		
106
		final Display display = Display.getCurrent();
107
		
108
		Job job = new Job("Update Referencing Objects") {
109
			
110
			@Override
111
			protected IStatus run(IProgressMonitor monitor) {
112
				monitor.beginTask("Calculating referencing objects", 10);
113
				
114
				monitor.worked(3);
115
				
116
				display.asyncExec(new Runnable() {
117
					
118
					@Override
119
					public void run() {
120
						ConversationHolder conversation = CdmStore.createConversation();
121
						List<CdmBase> referencingObjects = getReferencingObjects(entity);
122
						updateView(referencingObjects);
123
						conversation.close();
124
					}
125
				});
126
				
127
				monitor.done();
128
				
129
				
130
				return Status.OK_STATUS;
131
			}
132
		};
133
		
134
		job.setPriority(Job.DECORATE);
135
		job.schedule();
136
	}
137

    
138
	private List<CdmBase> getReferencingObjects(Object entity) {
139
        try {
140
        	if(entity instanceof CdmBase){
141
	        	referencedObject = (CdmBase) entity;
142
	        	Set<CdmBase> setOfReferencingObjects = CdmStore.getCommonService().getReferencingObjects(referencedObject);
143
	        	
144
	        	List<CdmBase> referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);	        	
145
	        	
146
	    		Collections.sort(referencingObjects, new ReferencingClassComparator());
147
	    		
148
	    		return referencingObjects;
149
        	}
150
        } catch (Exception e) {
151
            logger.error("Error retrieving referencing objects", e);
152
        }
153
		return null;
154
	}
155
	
156
	class ReferencingClassComparator implements Comparator<CdmBase> {
157

    
158
		/* (non-Javadoc)
159
		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
160
		 */
161
		public int compare(CdmBase o1, CdmBase o2) {
162
			String string1 = o1.getClass().getSimpleName();
163
			String string2 = o2.getClass().getSimpleName();
164
			int classCompare = string1.compareToIgnoreCase(string2);
165
			if (classCompare == 0) {
166
				string1 = DescriptionHelper.getObjectDescription(o1);
167
				string2 = DescriptionHelper.getObjectDescription(o2);
168
				return string1.compareToIgnoreCase(string2);
169
			} else {
170
				return classCompare;
171
			}
172
		}
173
	}
174
	
175
	/**
176
	 * 
177
	 */
178
	private void updateView(List<CdmBase> referencingObjects) {
179
		viewer.setInput(referencingObjects);
180
		setContentDescription("'" + referencedObject + "' is referenced by:");
181
		showViewer();
182
	}
183

    
184
	/** {@inheritDoc} */
185
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
186
		if(! (part instanceof BulkEditor)){
187
			setContentDescription("");
188
			showEmptyPage();
189
			return;
190
		}
191
		
192
		if(! (selection instanceof LineSelection)){
193
			return;
194
		}
195
		LineSelection lineSelection = (LineSelection) selection;
196
		
197
		if(lineSelection.size() != 1){
198
			return;
199
		}
200
			
201
		if(! (lineSelection.getFirstElement() instanceof IdentifiableEntity)){
202
			return;
203
		}
204
		
205
		showViewer(part, lineSelection);
206
	}
207
	
208
	/* (non-Javadoc)
209
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#showViewer(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
210
	 */
211
	/** {@inheritDoc} */
212
	@Override
213
	public void showViewer(IWorkbenchPart part, ISelection selection) {
214
		this.part = part;
215
		
216
		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
217
		
218
		updateReferencingObjects((IdentifiableEntity) structuredSelection.getFirstElement());
219
	}
220
	
221
	/** {@inheritDoc} */
222
	@Override
223
	public void dispose() {
224
		selectionService.removePostSelectionListener(this);
225
		selectionService.removeSelectionListener(this);
226
		super.dispose();
227
	}
228

    
229
	/* (non-Javadoc)
230
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getViewer()
231
	 */
232
	/** {@inheritDoc} */
233
	@Override
234
	public Viewer getViewer() {
235
		return viewer;
236
	}
237

    
238
	/* (non-Javadoc)
239
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#dirtyStateChanged()
240
	 */
241
	/** {@inheritDoc} */
242
	@Override
243
	public void changed(Object object) {
244
		// no editing in this view
245
	}
246
	
247
	/* (non-Javadoc)
248
	 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#onComplete()
249
	 */
250
	/** {@inheritDoc} */
251
	@Override
252
	public boolean onComplete() {
253
		return false;
254
	}
255
}
(3-3/3)