ref #10287: add move up and down in context menu
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 12 Apr 2023 07:59:34 +0000 (09:59 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 12 Apr 2023 11:07:59 +0000 (13:07 +0200)
eu.etaxonomy.taxeditor.store/fragment.e4xmi
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/CdmRemoteServerViewPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/common/CdmRemoteServerRepository.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveDownRemoteServerHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveUpRemoteServerHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/wizard/CdmRemoteServerWizard.java

index 699e70ec91512ef0b3577e4dbdb68270a25bb45d..10ed9fc2d103894444ca165127f2f02a1d4d07c1 100644 (file)
       <handlers xmi:id="_WsXuMZ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handler.CreateRemoteServerHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.remoteserver.handler.CreateRemoteServerHandler" command="_nYPOkJ1XEe2Oid79gMgNzw"/>
       <handlers xmi:id="_WsXuMp1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handler.EditRemoteServerHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.remoteserver.handler.EditRemoteServerHandler" command="_m1wMkJ1XEe2Oid79gMgNzw"/>
       <handlers xmi:id="_WsXuNJ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handler.DeleteRemoteServerHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.remoteserver.handler.DeleteRemoteServerHandler" command="_lvyqEJ1XEe2Oid79gMgNzw"/>
+      <handlers xmi:id="_l8zFcNkaEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.local.handler.MoveUpRemoteServerHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.remoteserver.handler.MoveUpRemoteServerHandler" command="_tEWW8NkaEe231IdeAjpAvg"/>
+      <handlers xmi:id="_8KIN0NkbEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.local.handler.MoveDownRemoteServerHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.remoteserver.handler.MoveDownRemoteServerHandler" command="_-iLDQNkbEe231IdeAjpAvg"/>
       <menus xsi:type="menu:PopupMenu" xmi:id="_WsXuNZ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.popupmenu.remoteServerViewPart">
         <children xsi:type="menu:HandledMenuItem" xmi:id="_WsXuNp1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handledmenuitem.new" label="New" command="_nYPOkJ1XEe2Oid79gMgNzw"/>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_WsXuN51XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handledmenuitem.edit" label="Edit" command="_m1wMkJ1XEe2Oid79gMgNzw"/>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_WsXuOZ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.handledmenuitem.delete" label="Delete" command="_lvyqEJ1XEe2Oid79gMgNzw"/>
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_lMYVINkaEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.moveup" label="Move up" command="_tEWW8NkaEe231IdeAjpAvg"/>
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_6bF5INkbEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.movedown" label="Move down" command="_-iLDQNkbEe231IdeAjpAvg"/>
       </menus>
     </elements>
   </fragments>
     <elements xsi:type="commands:Command" xmi:id="_lvyqEJ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.command.deleteRemoteServer" commandName="Delete"/>
     <elements xsi:type="commands:Command" xmi:id="_m1wMkJ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.command.editRemoteServer" commandName="Edit"/>
     <elements xsi:type="commands:Command" xmi:id="_nYPOkJ1XEe2Oid79gMgNzw" elementId="eu.etaxonomy.taxeditor.local.command.newRemoteServer" commandName="New"/>
+    <elements xsi:type="commands:Command" xmi:id="_tEWW8NkaEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.local.command.moveUpRemoteServer" commandName="Move up"/>
+    <elements xsi:type="commands:Command" xmi:id="_-iLDQNkbEe231IdeAjpAvg" elementId="eu.etaxonomy.taxeditor.local.command.moveDownRemoteServer" commandName="Move down"/>
   </fragments>
   <fragments xsi:type="fragment:StringModelFragment" xmi:id="_swGH0GhvEee3K4uKJljEYg" featurename="handlers" parentElementId="xpath:/">
     <elements xsi:type="commands:Handler" xmi:id="_rVEdIGcjEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.termtree.e4.handler.RemoveTermHandler" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
index 4ee9216196edd0deb5fe97c884b07398a98e9ee2..8fc843c0297dbdd8f6f910d5087c4fc2b8b91af2 100644 (file)
@@ -214,21 +214,6 @@ public class CdmRemoteServerViewPart {
         }
        }
 
-       //FIXME E4 migrate
-//     @Override
-//     public void showBusy(boolean busy) {
-//             super.showBusy(busy);
-////           viewer.getTable().setEnabled(!busy);
-//             if(busy){
-//                     partNameCache = getPartName();
-//                     setPartName(Messages.CdmDataSourceViewPart_1);
-//             }else{
-//                     if(partNameCache != null){
-//                             setPartName(partNameCache);
-//                     }
-//             }
-//     }
-
        public StructuredViewer getViewer() {
                return viewer;
        }
index 4cc736a31312a3c8bf3e3fa019e534936c499845..bdf3eb105caf4d450823991ceb8c6b6965ceb532 100644 (file)
 package eu.etaxonomy.taxeditor.view.remoteserver.common;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.XMLMemento;
-
-import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils;
 import eu.etaxonomy.cdm.config.ConfigFileUtil;
-import eu.etaxonomy.cdm.config.ICdmPersistentSource;
-import eu.etaxonomy.cdm.config.ICdmSource;
-import eu.etaxonomy.cdm.database.CdmDataSource;
-import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
-import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
-import eu.etaxonomy.cdm.database.ICdmDataSource;
-import eu.etaxonomy.taxeditor.model.MementoHelper;
-import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.remoting.source.CdmPersistentRemoteSource;
-import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource;
 import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException;
 import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo;
 import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfoConfig;
-import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 public class CdmRemoteServerRepository{
 
        private static final String DEFAULT_REMOTE_SERVER_FILENAME = "cdm_remote_servers.json";
-       
-       static List<CdmServerInfoConfig> cdmServerList = new ArrayList<>(); 
 
-       
+       static List<CdmServerInfoConfig> cdmServerList = new ArrayList<>();
+
+
 
        public static boolean delete(CdmServerInfoConfig remoteServerConfig) {
                cdmServerList.remove(remoteServerConfig);
                save();
                return true;
        }
-       
-       public static boolean check(CdmServerInfoConfig remoteServerConfig) {
-               
-               boolean contains = false;
+
+       public static Integer check(CdmServerInfoConfig remoteServerConfig) {
+
+           int index = 0;
                for (CdmServerInfoConfig server: cdmServerList) {
                        if (server.getName().equals(remoteServerConfig.getName())) {
-                               contains = true;
-                               break;
+                           return index;
                        }
+                       index++;
                }
-               return contains;
-               
+               return null;
+
        }
-       
+
        public static boolean add(CdmServerInfoConfig newRemoteServer) {
 //             if (cdmServerList.containsKey(newRemoteServer)) {
 //                     return false;
 //             }
-               
+
                cdmServerList.add(newRemoteServer);
                return true;
        }
-       
+
        public static boolean update(CdmServerInfoConfig updatedRemoteServer, String oldName) {
                int i = 0;
                boolean contains = false;
@@ -91,6 +71,42 @@ public class CdmRemoteServerRepository{
                return true;
        }
 
+       public static boolean moveUp(CdmServerInfoConfig updatedRemoteServer) {
+        int i = 0;
+        boolean contains = false;
+        for (CdmServerInfoConfig server: cdmServerList) {
+            if (server.getName().equals(updatedRemoteServer.getName())) {
+                contains = true;
+                break;
+            }
+            i++;
+        }
+        if (contains) {
+            cdmServerList.remove(i);
+        }
+
+        cdmServerList.add(--i, updatedRemoteServer);
+        return true;
+    }
+
+       public static boolean moveDown(CdmServerInfoConfig updatedRemoteServer) {
+        int i = 0;
+        boolean contains = false;
+        for (CdmServerInfoConfig server: cdmServerList) {
+            if (server.getName().equals(updatedRemoteServer.getName())) {
+                contains = true;
+                break;
+            }
+            i++;
+        }
+        if (contains) {
+            cdmServerList.remove(i);
+        }
+
+        cdmServerList.add(++i, updatedRemoteServer);
+        return true;
+    }
+
        public static List<CdmServerInfoConfig> getAll() {
                List<CdmServerInfoConfig> cdmServers = null;
                try {
@@ -104,13 +120,13 @@ public class CdmRemoteServerRepository{
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
-               
+
                return cdmServers;
        }
 
-       
 
-       
+
+
 
        /**
         * <p>save</p>
@@ -125,46 +141,10 @@ public class CdmRemoteServerRepository{
                return CdmServerInfo.saveToConfigFile(cdmServerList, file);
        }
 
-       
 
-//     public static ICdmPersistentSource replace(String strCdmSourceName, CdmServerInfoConfig remoteServer){
-//             try {
-//                     return CdmPersistentDataSource.replace(strCdmSourceName, cdmSource);
-//             } catch (Exception e) {
-//                     MessagingUtils.error(CdmRemoteServerRepository.class, "Error updating CDM Source", e);
-//             }
-//             return null;
-//     }
 
-       /**
-        * <p>update</p>
-        *
-        * @param strDataSourceName a {@link java.lang.String} object.
-        * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
-        * @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object.
-        */
-//     public static ICdmPersistentSource update(String strCdmSourceName, CdmRemoteSource cdmSource){
-//             try {
-//                     return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);
-//             } catch (Exception e) {
-//                     MessagingUtils.error(CdmRemoteServerRepository.class, "Error updating CDM Source", e);
-//
-//             }
-//             return null;
-//     }
 
-       
 
-       /*
-        * Answer the workbench state file.
-        */
-       private static File getCdmServerFile() {
-               IPath path = TaxeditorStorePlugin.getDefault().getStateLocation();
-               if (path == null) {
-                       return null;
-               }
-               path = path.append(DEFAULT_REMOTE_SERVER_FILENAME);
-               return path.toFile();
-       }       
+
 
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveDownRemoteServerHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveDownRemoteServerHandler.java
new file mode 100644 (file)
index 0000000..3573610
--- /dev/null
@@ -0,0 +1,56 @@
+// $Id$
+/**
+* Copyright (C) 2023 EDIT
+* 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.
+*/
+package eu.etaxonomy.taxeditor.view.remoteserver.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfoConfig;
+import eu.etaxonomy.taxeditor.view.remoteserver.CdmRemoteServerViewPart;
+import eu.etaxonomy.taxeditor.view.remoteserver.common.CdmRemoteServerRepository;
+
+/**
+ * @author k.luther
+ * @date 12.04.2023
+ *
+ */
+public class MoveDownRemoteServerHandler extends AbstractRemoteServerHandler{
+    @Override
+    @CanExecute
+    public boolean canExecute(
+            @Optional@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
+            @Named(IServiceConstants.ACTIVE_PART)MPart thisPart,
+            MHandledMenuItem menuItem) {
+        boolean canExecute = false;
+        canExecute = thisPart.getObject() instanceof CdmRemoteServerViewPart
+                && selection!=null
+                && selection.size()==1
+                && selection.getFirstElement() instanceof CdmServerInfoConfig
+                && CdmRemoteServerRepository.check((CdmServerInfoConfig)selection.getFirstElement()) < CdmRemoteServerRepository.getAll().size()-1;
+        menuItem.setVisible(canExecute);
+        return canExecute;
+    }
+
+    @Override
+    public boolean specificExecute(CdmRemoteServerViewPart dataSourceViewPart, CdmServerInfoConfig container,
+            Shell shell) {
+        CdmRemoteServerRepository.moveDown(container);
+        CdmRemoteServerRepository.save();
+        return true;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveUpRemoteServerHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/remoteserver/handler/MoveUpRemoteServerHandler.java
new file mode 100644 (file)
index 0000000..4bea77d
--- /dev/null
@@ -0,0 +1,60 @@
+// $Id$
+/**
+* Copyright (C) 2023 EDIT
+* 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.
+*/
+package eu.etaxonomy.taxeditor.view.remoteserver.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfoConfig;
+import eu.etaxonomy.taxeditor.view.remoteserver.CdmRemoteServerViewPart;
+import eu.etaxonomy.taxeditor.view.remoteserver.common.CdmRemoteServerRepository;
+
+/**
+ * @author k.luther
+ * @date 12.04.2023
+ *
+ */
+public class MoveUpRemoteServerHandler extends AbstractRemoteServerHandler{
+
+
+    @Override
+    @CanExecute
+    public boolean canExecute(
+            @Optional@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
+            @Named(IServiceConstants.ACTIVE_PART)MPart thisPart,
+            MHandledMenuItem menuItem) {
+        boolean canExecute = false;
+        canExecute = thisPart.getObject() instanceof CdmRemoteServerViewPart
+                && selection!=null
+                && selection.size()==1
+                && selection.getFirstElement() instanceof CdmServerInfoConfig
+                && CdmRemoteServerRepository.check((CdmServerInfoConfig)selection.getFirstElement()) > 0;
+        menuItem.setVisible(canExecute);
+        return canExecute;
+    }
+
+
+
+    @Override
+    public boolean specificExecute(CdmRemoteServerViewPart dataSourceViewPart, CdmServerInfoConfig container,
+            Shell shell) {
+        CdmRemoteServerRepository.moveUp(container);
+        CdmRemoteServerRepository.save();
+        return true;
+    }
+
+}
index d17cb370ec11163ae0d9fe3fffbaecfe23b0cd6a..f8840c18825371f53abb7f50ca78fc9f66d8edcb 100644 (file)
@@ -16,18 +16,18 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.view.remoteserver.common.CdmRemoteServerRepository;
 
 /**
- * <p>CdmDataSourceWizard class.</p>
  *
  * @author n.hoffmann
- * @created 18.05.2009
+ * @author k.luther
+ * @created 23.03.2023
  */
 public class CdmRemoteServerWizard extends Wizard {
 
        private CdmRemoteServerWizardPage remoteServerPage;
-       
+
        private CdmServerInfoConfig remoteServer;
        private String oldName;
-       
+
        public enum Mode {
                CREATE,
                EDIT,
@@ -41,7 +41,7 @@ public class CdmRemoteServerWizard extends Wizard {
                super();
                this.mode = Mode.CREATE;
                setForcePreviousAndNextButtons(false);
-               setWindowTitle("Datasource Dialog");
+               setWindowTitle("Remote Server Dialog");
        }
 
        public CdmRemoteServerWizard(CdmServerInfoConfig remoteServer, Mode mode) {
@@ -53,31 +53,29 @@ public class CdmRemoteServerWizard extends Wizard {
                } else {
                        this.remoteServer = new CdmServerInfoConfig();
                        this.remoteServer.setName("");
-                       //CdmRemoteServerRepository.add(this.remoteServer);
                }
-               //setForcePreviousAndNextButtons(true);
                setWindowTitle("Remote Server Dialog");
        }
 
        @Override
        public void addPages() {
                if (remoteServer != null) {
-                       
+
                        remoteServerPage = new CdmRemoteServerWizardPage(remoteServer.getName(), remoteServer, mode);
                }else {
                        remoteServerPage = new CdmRemoteServerWizardPage("New remote server", remoteServer, mode);
                }
                this.addPage(remoteServerPage);
                return;
-               
+
        }
 
        @Override
        public boolean performFinish() {
                try {
                        CdmServerInfoConfig cdmServerConf = this.remoteServerPage.getRemoteServer();
-                       if (mode.equals(Mode.CREATE) && CdmRemoteServerRepository.check(cdmServerConf)) {
-                               while(CdmRemoteServerRepository.check(cdmServerConf)){
+                       if (mode.equals(Mode.CREATE) && CdmRemoteServerRepository.check(cdmServerConf)!= null) {
+                               while(CdmRemoteServerRepository.check(cdmServerConf) != null){
                                        cdmServerConf.setName(cdmServerConf.getName()+ 1);
                                }