Make cell text in ReferencingObjectsView selectable
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 8 Jul 2015 18:31:02 +0000 (20:31 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 8 Jul 2015 18:31:02 +0000 (20:31 +0200)
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java

index 1b4438a96460f72cc218c1e10b5392c142d79a7b..ee3cd44efb078430a6d24fdee4cd1db9eb08a8a1 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
@@ -22,44 +22,38 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TextCellEditor;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
-
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Table;
-import org.eclipse.ui.INullSelectionListener;
-import org.eclipse.ui.ISelectionListener;
-
 import org.eclipse.ui.IWorkbenchPart;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IAgentService;
-import eu.etaxonomy.cdm.api.service.ICommonService;
 import eu.etaxonomy.cdm.api.service.IGroupService;
-
 import eu.etaxonomy.cdm.api.service.INameService;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.api.service.IReferenceService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.IUserService;
-
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Group;
-
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.name.NonViralName;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
 import eu.etaxonomy.taxeditor.model.DescriptionHelper;
 import eu.etaxonomy.taxeditor.model.LineSelection;
@@ -79,12 +73,12 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
 
        /** Constant <code>ID="eu.etaxonomy.taxeditor.bulkeditor.refer"{trunked}</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.bulkeditor.view.referencingobjects";
-       
+
        private TableViewer viewer;
 
        private String referencedObjectTitleCache;
-       private ConversationHolder conversation; 
-       
+       private ConversationHolder conversation;
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite)
         */
@@ -98,9 +92,37 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                createColumns(viewer);
                viewer.setContentProvider(new ReferencingObjectsContentProvider());
                viewer.setLabelProvider(new ReferencingObjectsLabelProvider());
+               viewer.setCellModifier(new ICellModifier() {
+
+            @Override
+            public void modify(Object element, String property, Object value) {
+                // TODO Auto-generated method stub
+
+            }
+
+            @Override
+            public Object getValue(Object element, String property) {
+                ITableLabelProvider tableLabelProvider = null;
+                if(viewer.getLabelProvider() instanceof ITableLabelProvider){
+                    tableLabelProvider = (ITableLabelProvider) viewer.getLabelProvider();
+                }
+                Object[] columnProperties = viewer.getColumnProperties();
+                for (int i=0;i<columnProperties.length;i++) {
+                    if(columnProperties[i].equals(property) && tableLabelProvider!=null){
+                        return tableLabelProvider.getColumnText(element, i);
+                    }
+                }
+                return "";
+            }
+
+            @Override
+            public boolean canModify(Object element, String property) {
+                return true;
+            }
+        });
 //             viewer.setInput(new ArrayList<CdmBase>());
        }
-       
+
        /**
         * Create the columns for the table
         * @param viewer
@@ -110,8 +132,11 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                String[] titles = {"Class", "Description", "UUID", "Object ID" };
                int[] bounds = { 100, 200, 100, 70};
 
+        CellEditor[] editors = new CellEditor[titles.length];
+
                for (int i = 0; i < titles.length; i++) {
                        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+                       editors[i] = new TextCellEditor(table);
                        column.getColumn().setText(titles[i]);
                        column.getColumn().setWidth(bounds[i]);
                        column.getColumn().setResizable(true);
@@ -119,6 +144,9 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                }
                table.setHeaderVisible(true);
                table.setLinesVisible(true);
+
+               viewer.setCellEditors(editors);
+               viewer.setColumnProperties(titles);
        }
 
        /**
@@ -127,38 +155,38 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
         * @param entity a {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity} object.
         */
        public void updateReferencingObjects(final UUID entityUUID, final Class objectClass) {
-               
+
                final Display display = Display.getCurrent();
-               
+
                Job job = new Job("Update Referencing Objects") {
-                       
+
                        @Override
                        protected IStatus run(IProgressMonitor monitor) {
                                monitor.beginTask("Calculating referencing objects", 10);
-                       
+
                                monitor.worked(3);
-                               
+
                                display.asyncExec(new Runnable() {
-                                       
+
                                        @Override
                                        public void run() {
                                                if (entityUUID != null){
-                                                       
+
                                                        List<CdmBase> referencingObjects = getReferencingObjects(entityUUID, objectClass);
-                                                       
+
                                                        updateView(referencingObjects);
-                                                       
+
                                                }
                                        }
                                });
-                               
+
                                monitor.done();
-                               
-                               
+
+
                                return Status.OK_STATUS;
                        }
                };
-               
+
                job.setPriority(Job.DECORATE);
                job.schedule();
        }
@@ -183,31 +211,32 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                }
                        //referencedObject =(CdmBase) CdmStore.getService(IIdentifiableEntityService.class).load(referencedObject.getUuid());
                Set<CdmBase> setOfReferencingObjects = null;
-               
+
                if (referencedObject != null){
                        referencedObjectTitleCache = ((IdentifiableEntity)referencedObject).getTitleCache();
                        setOfReferencingObjects = CdmStore.getCommonService().getReferencingObjects(referencedObject);
                }
                if (setOfReferencingObjects != null){
-                       List<CdmBase> referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);                     
-                       
+                       List<CdmBase> referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);
+
                        Collections.sort(referencingObjects, new ReferencingClassComparator());
-                               
+
                        return referencingObjects;
-                       
+
                }
         } catch (Exception e) {
             logger.error("Error retrieving referencing objects", e);
         }
                return null;
        }
-       
+
        class ReferencingClassComparator implements Comparator<CdmBase> {
 
                /* (non-Javadoc)
                 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
                 */
-               public int compare(CdmBase o1, CdmBase o2) {
+               @Override
+        public int compare(CdmBase o1, CdmBase o2) {
                        String string1 = o1.getClass().getSimpleName();
                        String string2 = o2.getClass().getSimpleName();
                        int classCompare = string1.compareToIgnoreCase(string2);
@@ -220,9 +249,9 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                        }
                }
        }
-       
+
        /**
-        * 
+        *
         */
        private void updateView(List<CdmBase> referencingObjects) {
                if (viewer != null && !viewer.getControl().isDisposed()){
@@ -237,34 +266,35 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                        }catch(Exception e){
                                setContentDescription("Some Problems occured.");
                        }
-                       
+
                }
        }
 
        /** {@inheritDoc} */
-       public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+       @Override
+    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
                if(! (part instanceof BulkEditor)){
                        setContentDescription("");
                        showEmptyPage();
                        return;
                }
-               
+
                if(! (selection instanceof LineSelection)){
                        return;
                }
                LineSelection lineSelection = (LineSelection) selection;
-               
+
                if(lineSelection.size() != 1){
                        return;
                }
-                       
+
                if(! (lineSelection.getFirstElement() instanceof IdentifiableEntity)){
                        return;
                }
-               
+
                showViewer(part, lineSelection);
        }
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#showViewer(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
         */
@@ -272,10 +302,10 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
        @Override
        public void showViewer(IWorkbenchPart part, IStructuredSelection selection) {
        //      this.part = part;
-               
+
                updateReferencingObjects(((IdentifiableEntity) selection.getFirstElement()).getUuid(),selection.getFirstElement().getClass() );
        }
-       
+
        /** {@inheritDoc} */
        @Override
        public void dispose() {
@@ -283,7 +313,7 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
                selectionService.removePostSelectionListener(this);
                selectionService.removeSelectionListener(this);
                super.dispose();
-               
+
        }
 
        /* (non-Javadoc)
@@ -303,7 +333,7 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
        public void changed(Object object) {
                // no editing in this view
        }
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#onComplete()
         */
@@ -312,14 +342,14 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{
        public boolean onComplete() {
                return false;
        }
-       
+
        public void refresh(){
-               
+
                selectionService.removePostSelectionListener(this);
                selectionService.removeSelectionListener(this);
                selectionService.addPostSelectionListener(this);
                selectionService.addSelectionListener(this);
-               
+
        }