fix bug on excel to insure multi-os compatibility
authorBruno Sinou <bsinou@argeo.org>
Thu, 18 Nov 2010 11:36:49 +0000 (11:36 +0000)
committerBruno Sinou <bsinou@argeo.org>
Thu, 18 Nov 2010 11:36:49 +0000 (11:36 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3909 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/runtime/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailContentProvider.java
eclipse/plugins/runtime/org.argeo.slc.client.ui/META-INF/MANIFEST.MF
eclipse/plugins/runtime/org.argeo.slc.client.ui/plugin.xml
eclipse/plugins/runtime/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/ResultDetailsDisplayHandler.java
eclipse/plugins/runtime/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/ResultListView.java

index fef065ea54c15d8b805963861fd067adfa4a5131..36c96326647b246a9b91dca78377ce814e6562d4 100644 (file)
@@ -80,8 +80,8 @@ public class ResultDetailContentProvider implements ITreeContentProvider {
 
                                // We create intermediate folders if needed
                                for (int i = 0; i < pathes.length; i++) {
-                                       if (log.isDebugEnabled())
-                                               log.debug("i = " + i + " - " + pathes[i]);
+                                       // if (log.isDebugEnabled())
+                                       // log.debug("i = " + i + " - " + pathes[i]);
 
                                        if (curTreeParent.getChildByName(pathes[i]) == null) {
                                                ResultTreeParent child = new ResultTreeParent(pathes[i]);
index 4b932e3f2506ae704e15ea74ca6c670fe196b716..679ac07714c91e22ee368b86b8f88bea562c98fc 100644 (file)
@@ -11,14 +11,14 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.argeo.slc.client.ui.listeners,
  org.argeo.slc.client.ui.perspectives,
  org.argeo.slc.client.ui.views
-Import-Package: org.argeo.slc.client.ui,
- org.apache.commons.io;version="1.4.0",
+Import-Package: org.apache.commons.io;version="1.4.0",
  org.apache.commons.logging;version="1.1.1",
  org.argeo.eclipse.spring,
  org.argeo.eclipse.ui,
  org.argeo.slc,
  org.argeo.slc.build,
  org.argeo.slc.client.oxm,
+ org.argeo.slc.client.ui,
  org.argeo.slc.core.attachment,
  org.argeo.slc.core.execution,
  org.argeo.slc.core.runtime,
@@ -35,6 +35,7 @@ Import-Package: org.argeo.slc.client.ui,
  org.argeo.slc.services,
  org.argeo.slc.services.impl,
  org.argeo.slc.test,
+ org.eclipse.core.expressions,
  org.springframework.beans.factory,
  org.springframework.context,
  org.springframework.core.io.support
index fa05ca859ffec933aca434efc9bb4e17a8680f28..fb1ea90e3cb5ad837ea9ab0c950c19dfacc1b225 100644 (file)
                        id="org.argeo.slc.client.commands.resultUuid"
                        name="Result UUID">
                        </commandParameter>
+                       <commandParameter
+                       id="org.argeo.slc.client.commands.resultName"
+                       name="Result Name">
+                       </commandParameter>
        </command>
     </extension>
    <extension
index fc82ddaafd9152e5ca44bf9f7a512877c7b338e5..aa434607292c559fabc5ff6fe730613501503d15 100644 (file)
@@ -1,11 +1,9 @@
 package org.argeo.slc.client.ui.commands;
 
 import org.argeo.slc.client.ui.views.ResultDetailView;
-import org.argeo.slc.client.ui.views.ResultListView;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.handlers.HandlerUtil;
 
 /**
@@ -28,18 +26,18 @@ public class ResultDetailsDisplayHandler extends AbstractHandler {
                                .getParameter("org.argeo.slc.client.commands.resultUuid");
 
                // TODO : remove this.
-               if (uuid == null || "".equals(uuid)) {
-                       try {
-                               ResultListView pbv = (ResultListView) HandlerUtil
-                                               .getActiveWorkbenchWindow(event).getActivePage()
-                                               .showView(ResultListView.ID);
-                               uuid = pbv.getSelectedResult()[0];
-                       } catch (PartInitException e) {
-                               // TODO Auto-generated catch block
-                               e.printStackTrace();
-                       }
-
-               }
+               // if (uuid == null || "".equals(uuid)) {
+               // try {
+               // ResultListView pbv = (ResultListView) HandlerUtil
+               // .getActiveWorkbenchWindow(event).getActivePage()
+               // .showView(ResultListView.ID);
+               // uuid = pbv.getSelectedResult()[0];
+               // } catch (PartInitException e) {
+               // // TODO Auto-generated catch block
+               // e.printStackTrace();
+               // }
+               //
+               // }
 
                // mode = 2 : VIEW_VISIBLE, Show view mode that indicates the view
                // should be created or made visible if already created .
index ca2b4a5b6b9dcfe31052d3882d4e24279ceedc03..3d26c7d0dfa4adce220ff25fb5fa701ce95e4b27 100644 (file)
@@ -1,7 +1,10 @@
 package org.argeo.slc.client.ui.views;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -13,13 +16,18 @@ import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.IParameter;
 import org.eclipse.core.commands.Parameterization;
 import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
@@ -27,24 +35,37 @@ import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.services.IServiceLocator;
 
 public class ResultListView extends ViewPart {
        private final static Log log = LogFactory.getLog(ResultListView.class);
 
        public static final String ID = "org.argeo.slc.client.ui.resultListView";
 
-       private TableViewer viewer;
+       private final static String DISPLAY_CMD_ID = "org.argeo.slc.client.ui.displayResultDetails";
+       private final static String DISPLAY_AS_XLS_CMD_ID = "com.capco.sparta.client.ui.displayResultDetailsWithExcel";
+       private final static String SAVE_AS_XLS_CMD_ID = "com.capco.sparta.client.ui.saveResultAsExcelFile";
+       private final static String UUID_PARAM_ID = "org.argeo.slc.client.commands.resultUuid";
+       private final static String NAME_PARAM_ID = "org.argeo.slc.client.commands.resultName";
+       private final static String PLATFORM = SWT.getPlatform();
+
+       private final static SimpleDateFormat dateFormatter = new SimpleDateFormat(
+                       "MM/dd/yyyy 'at' HH:mm:ss");
 
+       private TableViewer viewer;
        private TreeTestResultCollectionDao testResultCollectionDao;
 
+       private ResultAttributes selectedRa;
+
        public void createPartControl(Composite parent) {
                Table table = createTable(parent);
                viewer = new TableViewer(table);
@@ -52,19 +73,17 @@ public class ResultListView extends ViewPart {
                viewer.setContentProvider(new ViewContentProvider());
                viewer.setInput(getViewSite());
                viewer.addDoubleClickListener(new ViewDoubleClickListener());
+               viewer.addSelectionChangedListener(new SelectionChangedListener());
+
+               // create the context menu
 
-               // Context Menu for the end user to choose what kind of display he wants
-               // Problem to dynamically add parameters linked with the current
-               // selected object
                MenuManager menuManager = new MenuManager();
                Menu menu = menuManager.createContextMenu(viewer.getControl());
-
-               // unable excel commands if not on windows
-               MenuItem[] items = menu.getItems();
-               String platform = SWT.getPlatform();
-               if (!(platform.equals("win32") || platform.equals("wpf"))) {
-                       items[1].setEnabled(false);
-               }
+               menuManager.addMenuListener(new IMenuListener() {
+                       public void menuAboutToShow(IMenuManager manager) {
+                               contextMenuAboutToShow(manager);
+                       }
+               });
 
                viewer.getControl().setMenu(menu);
                getSite().registerContextMenu(menuManager, viewer);
@@ -86,10 +105,14 @@ public class ResultListView extends ViewPart {
                table.setHeaderVisible(true);
 
                TableColumn column = new TableColumn(table, SWT.LEFT, 0);
-               column.setText("Date");
+               column.setText("Test Case");
                column.setWidth(200);
 
                column = new TableColumn(table, SWT.LEFT, 1);
+               column.setText("Close Date");
+               column.setWidth(120);
+
+               column = new TableColumn(table, SWT.LEFT, 2);
                column.setText("UUID");
                column.setWidth(300);
 
@@ -99,24 +122,84 @@ public class ResultListView extends ViewPart {
        // TODO : Improve this methods.
        // For now it is a workaround because we cannot dynamically update context
        // menu to pass the UUID as command parameter
-       public String[] getSelectedResult() {
-               Object obj = ((IStructuredSelection) viewer.getSelection())
-                               .getFirstElement();
+       // public String[] getSelectedResult() {
+       // Object obj = ((IStructuredSelection) viewer.getSelection())
+       // .getFirstElement();
+       //
+       // String[] attributes = new String[2];
+       //
+       // if (obj == null || !(obj instanceof ResultAttributes))
+       // return null;
+       // else {
+       // ResultAttributes ra = (ResultAttributes) obj;
+       // attributes[0] = ra.getUuid();
+       // attributes[1] = (ra.getAttributes().get("testCase") == null) ? null
+       // : ra.getAttributes().get("testCase");
+       // return attributes;
+       // }
+       // }
 
-               String[] attributes = new String[2];
+       // View Specific inner class
 
-               if (obj == null || !(obj instanceof ResultAttributes))
-                       return null;
-               else {
-                       ResultAttributes ra = (ResultAttributes) obj;
-                       attributes[0] = ra.getUuid();
-                       attributes[1] = (ra.getAttributes().get("testCase") == null) ? null
-                                       : ra.getAttributes().get("testCase");
-                       return attributes;
+       // Handle Events
+       class SelectionChangedListener implements ISelectionChangedListener {
+               public void selectionChanged(SelectionChangedEvent evt) {
+
+                       IStructuredSelection curSelection = (IStructuredSelection) evt
+                                       .getSelection();
+                       Object obj = curSelection.getFirstElement();
+
+                       if (obj instanceof ResultAttributes) {
+                               selectedRa = (ResultAttributes) obj;
+                       }
                }
        }
 
-       // View Specific inner class
+       private void refreshCommand(IMenuManager menuManager,
+                       IServiceLocator locator, String cmdId, String label, String iconPath) {
+               IContributionItem ici = menuManager.find(cmdId);
+               if (ici != null)
+                       menuManager.remove(ici);
+               CommandContributionItemParameter contributionItemParameter = new CommandContributionItemParameter(
+                               locator, null, cmdId, SWT.PUSH);
+
+               // Set Params
+               contributionItemParameter.label = label;
+               contributionItemParameter.icon = ClientUiPlugin
+                               .getImageDescriptor(iconPath);
+
+               Map<String, String> params = new HashMap<String, String>();
+               params.put(UUID_PARAM_ID, selectedRa.getUuid());
+               params.put(NAME_PARAM_ID,
+                               (selectedRa.getAttributes().get("testCase") == null) ? null
+                                               : selectedRa.getAttributes().get("testCase"));
+               contributionItemParameter.parameters = params;
+
+               CommandContributionItem cci = new CommandContributionItem(
+                               contributionItemParameter);
+               cci.setId(cmdId);
+               menuManager.add(cci);
+       }
+
+       private void contextMenuAboutToShow(IMenuManager menuManager) {
+
+               IContributionItem[] items = menuManager.getItems();
+               IWorkbenchWindow window = ClientUiPlugin.getDefault().getWorkbench()
+                               .getActiveWorkbenchWindow();
+
+               refreshCommand(menuManager, window, DISPLAY_CMD_ID,
+                               "Display as a tree", "icons/result_details.gif");
+               // We only show this command on windows OS
+               if (PLATFORM.equals("win32") || PLATFORM.equals("wpf")) {
+                       refreshCommand(menuManager, window, DISPLAY_AS_XLS_CMD_ID,
+                                       "Display with Excel", "icons/excel.png");
+               }
+               refreshCommand(menuManager, window, SAVE_AS_XLS_CMD_ID,
+                               "Save as Excel file", "icons/excel.png");
+       }
+
+       // Providers
+
        protected static class ViewContentProvider implements
                        IStructuredContentProvider {
 
@@ -142,8 +225,11 @@ public class ResultListView extends ViewPart {
                        ResultAttributes ra = (ResultAttributes) obj;
                        switch (index) {
                        case 0:
-                               return getText(ra.getCloseDate());
+                               return (ra.getAttributes().get("testCase") == null) ? null : ra
+                                               .getAttributes().get("testCase");
                        case 1:
+                               return dateFormatter.format(ra.getCloseDate());
+                       case 2:
                                return ra.getUuid();
                        }
                        return getText(obj);
@@ -186,7 +272,6 @@ public class ResultListView extends ViewPart {
 
                        if (obj instanceof ResultAttributes) {
                                ResultAttributes ra = (ResultAttributes) obj;
-
                                IWorkbench iw = ClientUiPlugin.getDefault().getWorkbench();
                                IHandlerService handlerService = (IHandlerService) iw
                                                .getService(IHandlerService.class);