Dashboard contribution (1)
Change-Id: Ia1e3b0bb5249ddcad2ceea7da8b1a488acaf27ec
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
index e843de3..ee5b32d 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
@@ -5,6 +5,7 @@
Bundle-Version: 0.2.1.qualifier
Bundle-Activator: org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi
Require-Bundle: org.eclipse.ui,
+ org.eclipse.ui.forms;bundle-version="3.6.0",
org.eclipse.core.runtime,
org.eclipse.mylyn.tasks.core;bundle-version="3.9.0",
org.eclipse.mylyn.gerrit.core;bundle-version="2.0.0",
@@ -12,6 +13,7 @@
org.eclipse.jgit,
org.eclipse.mylyn.tasks.ui;bundle-version="3.9.0",
org.eclipse.mylyn.reviews.core;bundle-version="2.0.0",
+ org.eclipse.mylyn.reviews.ui;bundle-version="2.0.1",
org.eclipse.mylyn.commons.ui;bundle-version="3.9.0",
org.eclipse.mylyn.reviews.r4e-gerrit;bundle-version="0.2.0"
Bundle-ActivationPolicy: lazy
@@ -19,3 +21,4 @@
Bundle-Vendor: %providerName
Export-Package: org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands,
org.eclipse.mylyn.reviews.r4egerrit.ui.views
+Import-Package: org.eclipse.mylyn.internal.gerrit.ui.editor
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico
new file mode 100644
index 0000000..155217b
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/gerrit.ico
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png
new file mode 100644
index 0000000..1121f93
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/minusOne.png
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png
new file mode 100644
index 0000000..0089262
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/icons/view16/plusOne.png
Binary files differ
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
index dcc17d5..581c6c8 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
@@ -12,8 +12,8 @@
id="org.eclipse.mylyn.reviews.r4e-gerrit.ui">
</category>
<view
- name="R4E-Gerrit table"
- icon="icons/view16/revnav_misc.gif"
+ name="Dashboard"
+ icon="icons/view16/gerrit.ico"
category="org.eclipse.mylyn.reviews.r4e-gerrit.ui"
class="org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView"
id="org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView">
@@ -469,5 +469,8 @@
</handler>
</extension>
+ <extension
+ point="org.eclipse.mylyn.tasks.ui.editors">
+ </extension>
</plugin>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java
new file mode 100644
index 0000000..770f4ee
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/menus/DynamicMenuAddition.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ * This class implements the Dynamic menu selection to pre-filled the list of gerrit
+ * project locations.
+ *
+ * Contributors:
+ * Jacques Bouthillier - Initial Implementation of the dynamic menu selection
+ ******************************************************************************/
+package org.eclipse.mylyn.reviews.r4e_gerrit.internal.menus;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.internal.utils.R4EGerritServerUtility;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EUIConstants;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.menus.IWorkbenchContribution;
+import org.eclipse.ui.services.IServiceLocator;
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+public class DynamicMenuAddition extends CompoundContributionItem implements IWorkbenchContribution {
+
+
+ // ------------------------------------------------------------------------
+ // Constants
+ // ------------------------------------------------------------------------
+
+ /**
+ * Field SELECT_PICTURE_FILE. (value is ""icons/select.png"")
+ */
+// private String SELECT_PICTURE_FILE = "icons/select.png";
+ private static String SELECT_PICTURE_FILE = "icons/select.gif";
+
+ /**
+ * Note: An image registry owns all of the image objects registered with it,
+ * and automatically disposes of them the SWT Display is disposed.
+ */
+ // For the images
+ private static ImageRegistry fImageRegistry = new ImageRegistry();
+
+ static {
+ fImageRegistry
+ .put(SELECT_PICTURE_FILE,
+ R4EGerritUi.getImageDescriptor(SELECT_PICTURE_FILE));
+ }
+
+ // ------------------------------------------------------------------------
+ // Variables
+ // ------------------------------------------------------------------------
+
+ private IServiceLocator fServiceLocator;
+
+ private R4EGerritServerUtility fServer = null;
+
+ private Map<TaskRepository, String> fMapServer = null;
+
+ private ImageDescriptor fSelectPicture = null;
+
+ // ------------------------------------------------------------------------
+ // Methods
+ // ------------------------------------------------------------------------
+ @Override
+ protected IContributionItem[] getContributionItems() {
+
+ R4EGerritPlugin.Ftracer
+ .traceInfo("\t\t DynamicMenuAddition .getContributionItems()");
+ CommandContributionItem[] contributionItems = new CommandContributionItem[0];
+ if (fServer != null) {
+ fMapServer = fServer.getGerritMapping();
+ }
+
+ if (fMapServer != null && !fMapServer.isEmpty()) {
+ Set<TaskRepository> mapSet = fMapServer.keySet();
+ String lastSelected = fServer.getLastSavedGerritServer();
+ R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+ int size = mapSet.size();
+ contributionItems = new CommandContributionItem[size];
+
+ int count = 0;
+ for (TaskRepository key : mapSet) {
+ R4EGerritPlugin.Ftracer.traceInfo("Map Key: "
+ + key.getRepositoryLabel() + "\t URL: "
+ + fMapServer.get(key));
+ CommandContributionItemParameter contributionParameter = new CommandContributionItemParameter(
+ fServiceLocator, fMapServer.get(key),
+ R4EUIConstants.ADD_GERRIT_SITE_COMMAND_ID,
+ CommandContributionItem.STYLE_PUSH);
+ contributionParameter.label = key.getRepositoryLabel();
+ contributionParameter.visibleEnabled = true;
+ if (lastSelected != null
+ && lastSelected.equals(fMapServer.get(key))) {
+ fSelectPicture = fImageRegistry.getDescriptor(SELECT_PICTURE_FILE);
+
+ contributionParameter.icon = fSelectPicture;
+
+ }
+ contributionItems[count++] = new CommandContributionItem(
+ contributionParameter);
+ }
+ }
+
+ return contributionItems;
+ }
+
+ @Override
+ public void initialize(IServiceLocator aServiceLocator) {
+ fServiceLocator = aServiceLocator;
+
+ //Read the Gerrit potential servers
+ fServer = new R4EGerritServerUtility();
+ R4EGerritPlugin.Ftracer.traceInfo("\t\t DynamicMenuAddition .initialize()()" );
+
+ }
+
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java
new file mode 100644
index 0000000..3bc4aec
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/internal/utils/R4EGerritServerUtility.java
@@ -0,0 +1,495 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ * This class implements some utility for the Gerrit servers.
+ *
+ * Contributors:
+ * Jacques Bouthillier - Initial Implementation of the server selection
+ ******************************************************************************/
+
+package org.eclipse.mylyn.reviews.r4e_gerrit.internal.utils;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.egit.core.RepositoryCache;
+import org.eclipse.egit.core.RepositoryUtil;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.lib.ConfigConstants;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
+import org.eclipse.mylyn.internal.tasks.core.RepositoryTemplateManager;
+import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
+import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+@SuppressWarnings("restriction")
+public class R4EGerritServerUtility {
+
+ // ------------------------------------------------------------------------
+ // Constants
+ // ------------------------------------------------------------------------
+
+ /**
+ * Field GERRIT_PORT. (value is "":29418"")
+ */
+ private static final String GERRIT_PORT = ":29418";
+
+ /**
+ * Field AT. (value is ""@"")
+ */
+ private static final String AT = "@";
+
+ /**
+ * Field AT. (value is ""https://"")
+ */
+ private static final String HTTPS = "https://";
+
+ /**
+ * Field LAST_GERRIT_FILE. (value is ""lastGerrit.txt"")
+ */
+ private static final String LAST_GERRIT_FILE = "lastGerrit.txt";
+
+ // ------------------------------------------------------------------------
+ // Variables
+ // ------------------------------------------------------------------------
+
+ private static R4EGerritServerUtility instance = null;
+
+ private static Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
+
+ // ------------------------------------------------------------------------
+ // Constructors
+ // ------------------------------------------------------------------------
+ public R4EGerritServerUtility() {
+ instance = this;
+ mapConfiguredGerritServer();
+
+ //LATER: Map the workspace gerrit to the menu option
+ //addWorkspaceGerritRepo();
+
+ //Begin Test
+ //testTaskRepo(); not needed anymore
+ //End Test
+ }
+
+ // ------------------------------------------------------------------------
+ // Methods Private
+ // ------------------------------------------------------------------------
+
+ /**
+ * Map the configured Gerrit server found in the TaskList
+ * @return Map<TaskRepository, String>
+ */
+ private Map<TaskRepository, String> mapConfiguredGerritServer () {
+ //Reset the list of Gerrit server
+ fResultTask.clear();
+
+ TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
+
+ //Only get the TaskRepository related to Gerrit review connnector
+ R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
+ Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
+ for (TaskRepository taskRepo: reviewRepo) {
+ R4EGerritPlugin.Ftracer.traceInfo("Add Gerrit Review repo: " + taskRepo.getRepositoryLabel() + "\t url: " + taskRepo.getRepositoryUrl());
+ fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
+ if (null != taskRepo.getRepositoryUrl() ) {
+ adjustTemplatemanager(taskRepo);
+ }
+ }
+ //Print a the end the info for all Gerrit
+ printRepositoryTemplate();
+ return fResultTask;
+ }
+
+ /**
+ * Build a list of Gerrit server to display in the combo box in the dialogue window
+ * @param aTaskRepo
+ */
+ private void adjustTemplatemanager (TaskRepository aTaskRepo) {
+ RepositoryTemplateManager templateManager = TasksUiPlugin.getRepositoryTemplateManager();
+ //Verify to only add once in the repository template
+ Boolean found = false;
+ // printTaskRepository(aTaskRepo);
+ for (RepositoryTemplate template : templateManager.getTemplates(GerritConnector.CONNECTOR_KIND)) {
+ String convertedRemoteURL = aTaskRepo.getRepositoryUrl() ;
+ R4EGerritPlugin.Ftracer.traceInfo("\t template.label: " + template.label
+ + "\t repo label: " + aTaskRepo.getRepositoryLabel() +" repo getname: " + convertedRemoteURL );
+ //Test the name and the remoteURL to reduce duplications
+ if (template.label.equals(aTaskRepo.getRepositoryLabel()) ||
+ template.repositoryUrl.equals(convertedRemoteURL) ) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ //Set each parameter of the Gerrit server
+ String userName = aTaskRepo.getUserName();
+ Boolean anonymous = (userName != null && !userName.isEmpty()) ? false: true;
+
+ //Create a repository template
+ RepositoryTemplate templateTest = new RepositoryTemplate(aTaskRepo.getRepositoryLabel(),
+ aTaskRepo.getRepositoryUrl(),
+ aTaskRepo.getCharacterEncoding(),
+ aTaskRepo.getVersion(),
+ "", "", "",
+ aTaskRepo.getUserName(), anonymous, true);
+
+ //Set the attributes
+ Map<String, String> attributes = aTaskRepo.getProperties();
+
+ Set<Entry<String, String>> value = attributes.entrySet();
+ for ( Map.Entry <String, String> entry: value){
+ templateTest.addAttribute(entry.getKey(), entry.getValue());
+ }
+ templateManager.addTemplate(GerritConnector.CONNECTOR_KIND, templateTest);
+
+ }
+ }
+
+ private void printRepositoryTemplate() {
+ RepositoryTemplateManager templateManager = TasksUiPlugin.getRepositoryTemplateManager();
+ for (RepositoryTemplate template : templateManager.getTemplates(GerritConnector.CONNECTOR_KIND)) {
+ R4EGerritPlugin.Ftracer.traceInfo("------------======================------------------");
+ Set<Entry<String, String>> value = template.getAttributes().entrySet();
+ for (Map.Entry <String, String> entry: value) {
+ R4EGerritPlugin.Ftracer.traceInfo("key: " + entry.getKey() + "\tvalue: " +
+ entry.getValue());
+ }
+ }
+ }
+
+ private void printTaskRepository(TaskRepository aTask) {
+ Set<Entry<String, String>> value = aTask.getProperties().entrySet();
+ for (Map.Entry<String, String> entry : value) {
+ R4EGerritPlugin.Ftracer.traceInfo("TaskRepo key: " + entry.getKey()
+ + "\tvalue: " + entry.getValue());
+ }
+ R4EGerritPlugin.Ftracer.traceInfo(" UserName: " + aTask.getUserName());
+ R4EGerritPlugin.Ftracer
+ .traceInfo("===================================");
+ }
+
+ /**
+ * This method use the Gerrit from the git server in the workspace
+ */
+ private void addWorkspaceGerritRepo () {
+ RepositoryUtil repoUtil = org.eclipse.egit.core.Activator.getDefault().getRepositoryUtil();
+ List<String> repoPaths = repoUtil.getConfiguredRepositories();
+ RepositoryCache repositoryCache = org.eclipse.egit.core.Activator.getDefault().getRepositoryCache();
+ Repository repo = null;
+
+ for (String repoPath : repoPaths) {
+ R4EGerritPlugin.Ftracer.traceInfo("List Gerrit repository: " + repoPath );
+ File gitDir = new File(repoPath);
+ if (!gitDir.exists()) {
+ R4EGerritPlugin.Ftracer.traceInfo("Gerrit repository do not exist: " + gitDir.getPath());
+ continue;
+ }
+ try {
+ repo = repositoryCache.lookupRepository(gitDir);
+ R4EGerritPlugin.Ftracer.traceInfo("\trepository config after lookup: " +
+ repo.getConfig());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (repo != null) {
+ Config config = new Config(repo.getConfig());
+ //Look to get the remotes URL
+ Set<String> remotes = config.getSubsections(ConfigConstants.CONFIG_REMOTE_SECTION);
+ for (String remote: remotes) {
+ String remoteURL = config.getString(ConfigConstants.CONFIG_REMOTE_SECTION,
+ remote,
+ ConfigConstants.CONFIG_KEY_URL);
+ R4EGerritPlugin.Ftracer.traceInfo("\t\t " + remote +" -> remoteURL: " + remoteURL );
+
+ //Test if this is a Gerrit server and add it to the Dialogue combo
+ String convertedRemoteURL = getReformatGerritServer(remoteURL) ;
+ if (null != convertedRemoteURL ) {
+ TaskRepository taskRepo = new TaskRepository(GerritConnector.CONNECTOR_KIND, convertedRemoteURL);
+ taskRepo.setRepositoryLabel(convertedRemoteURL);
+ fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
+ adjustTemplatemanager(taskRepo);
+
+ }
+ }
+ }
+ }
+ }
+
+
+ //Note the Gerrit server for "git.eclipse.org" in config is
+ // not the same as in the task Repository: "git.eclipse.org/r"
+ /**
+ * Verify if the gerrit remote URL has the gerrit port (29418 )
+ * @param aRemoteURL
+ * @return String remote converted URL
+ */
+ private String getReformatGerritServer(String aRemoteURL) {
+ //Test if this is a Gerrit server or not
+ String[] strParsePort = aRemoteURL.split(GERRIT_PORT);
+ if (strParsePort.length == 2) {
+ //Do not convert it for now
+ return aRemoteURL;
+// //We found a Gerrit server, lets build the URL
+// //String[] strParseServer = strParsePort[0].split(AT);
+// int index = strParsePort[0].indexOf(AT);
+// String server = strParsePort[0].substring(++index);
+// StringBuilder sb = new StringBuilder();
+// sb.append(HTTPS);
+// sb.append(server);
+// return sb.toString();
+ }
+ return null;
+ }
+
+ private File getLastGerritFile () {
+ IPath ipath = R4EGerritUi.getDefault().getStateLocation();
+ String fileName = ipath.append(LAST_GERRIT_FILE).toPortableString();
+ File file = new File (fileName);
+ return file;
+ }
+
+ // ------------------------------------------------------------------------
+ // Methods Public
+ // ------------------------------------------------------------------------
+ public static R4EGerritServerUtility getDefault () {
+ if (instance == null) {
+ new R4EGerritServerUtility();
+ }
+ return instance;
+ }
+
+ /**
+ * Return the mapping of the available Gerrit server used in the user workspace
+ * @return Map<Repository, String>
+ */
+ public static Map<TaskRepository, String> getGerritMapping () {
+ return fResultTask;
+ }
+
+ /**
+ * Save the selected Gerrit server URL
+ * @param aURL
+ * @return Boolean
+ */
+ public Boolean saveLastGerritServer (String aURL) {
+ Boolean ok = true;
+ File file = getLastGerritFile();
+ try {
+ FileWriter fw= new FileWriter(file);
+ BufferedWriter out = new BufferedWriter(fw);
+ out.write(aURL);
+ out.close();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ ok = false;
+ }
+
+ return ok;
+ }
+
+ /**
+ * Return the last selected Gerrit server used
+ * @return String
+ */
+ public String getLastSavedGerritServer () {
+ String lastGerritURL = null;
+ File file = getLastGerritFile();
+ if (file != null) {
+ try {
+ FileReader fr= new FileReader(file);
+ BufferedReader in = new BufferedReader(fr);
+ lastGerritURL = in.readLine();
+ in.close();
+ } catch (IOException e1) {
+ //When there is no file,
+ //e1.printStackTrace();
+ }
+ }
+ return lastGerritURL;
+ }
+
+ /**
+ * Get the Gerrit URL based on the provided string
+ *
+ * @param Menu string aSt
+ * @return URL as a string
+ *
+ */
+ public String getMenuSelectionURL (String aSt) {
+ String urlStr = null;
+ if (!fResultTask.isEmpty()) {
+ Set<TaskRepository> mapSet = fResultTask.keySet();
+ R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+ for (TaskRepository key: mapSet) {
+ if (key.getRepositoryLabel().equals(aSt)) {
+ urlStr = fResultTask.get(key);
+
+ R4EGerritPlugin.Ftracer.traceInfo("Map Key: " + key.getRepositoryLabel() + "\t URL: " + fResultTask.get(key));
+ return urlStr;
+ }
+ }
+ }
+
+ return urlStr;
+ }
+
+ /**
+ * Get the Gerrit task Repository
+ *
+ * @param string aSt
+ * @return TaskRepository
+ *
+ */
+ public TaskRepository getTaskRepo (String aStURL) {
+
+ if (aStURL != null && !fResultTask.isEmpty()) {
+ Set<TaskRepository> mapSet = fResultTask.keySet();
+ R4EGerritPlugin.Ftracer.traceInfo("-------------------");
+ for (TaskRepository key: mapSet) {
+ if (key.getRepositoryUrl().equals(aStURL)) {
+
+ R4EGerritPlugin.Ftracer.traceInfo("Key label : " + key.getRepositoryLabel() + "\t URL: " + fResultTask.get(key));
+ return key;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Read the Gerrit server to populate the list of reviews
+ */
+ public void getReviewListFromServer () {
+ //Get the Gerrit URL to query
+ String urlToUsed = getLastSavedGerritServer ();
+
+ if (urlToUsed != null) {
+ //Initiate the request to populate the list of Reviews
+ R4EGerritPlugin.Ftracer.traceInfo("use the following Gerrit URL to populate the list of reviews: " + urlToUsed);
+
+ // TODO: Make it pick the right repository
+ Set<TaskRepository> gerritRepositories = fResultTask.keySet();
+ Iterator<TaskRepository> it = gerritRepositories.iterator();
+ if (it.hasNext()) {
+ TaskRepository repository = it.next();
+ // List<R4EGerritReviewSummary> reviews = getReviewListFromRepository(repository, GerritQuery.MY_WATCHED_CHANGES);
+ // TODO: populate the Gerrit Dashboard with 'reviews'
+ }
+ } else {
+ //Open the dialogue to populate a Gerrit server, Should not happen here
+ R4EGerritPlugin.Ftracer.traceInfo("Need to open the dialogue to populate a gerrit server" );
+ }
+ }
+//
+// /**
+// *
+// */
+// public static List<R4EGerritReviewSummary> getReviewListFromRepository(TaskRepository repository, String query) {
+// List<R4EGerritReviewSummary> results = new ArrayList<R4EGerritReviewSummary>();
+// R4EGerritQueryHandler handler = new R4EGerritQueryHandler(repository, query);
+// IStatus status = handler.performQuery();
+// if (status.isOK()) {
+// for (R4EGerritReviewSummary summary : handler.getQueryResult()) {
+// if (summary.getAttribute(R4EGerritReviewSummary.DATE_COMPLETION) == null) {
+// R4EGerritPlugin.Ftracer.traceInfo(summary.toString());
+// results.add(summary);
+// }
+// }
+// }
+// return results;
+// }
+
+ /******************************************************************/
+ /******************************************************************/
+ /******************************************************************/
+ /******************************************************************/
+ /******** TEST *************************************************/
+ /******************************************************************/
+ /******************************************************************/
+ /******************************************************************/
+ /******************************************************************/
+
+ private void testTaskRepo () {
+ // TaskRepository repository = new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository"); //$NON-NLS-1$
+// final TaskRepository repository = new TaskRepository(GerritConnector.CONNECTOR_KIND, "https://"); //$NON-NLS-1$
+
+ final TaskRepository repository = getTaskRepository(); //$NON-NLS-1$
+ R4EGerritPlugin.Ftracer.traceInfo("repository: " + repository.getUrl()); //$NON-NLS-1$
+// int ret = TasksUiUtil.openEditRepositoryWizard(repository); //Generate a null pointer for the workbench window
+
+
+ R4EGerritPlugin.Ftracer.traceInfo("Before: repository url: " + repository.getUrl() ); //$NON-NLS-1$
+
+ }
+
+ /**
+ * Look at the current Gerrit repository and return a default value
+ * i.e the first Gerrit if found ???
+ * @return TaskRepository
+ */
+ private TaskRepository getTaskRepository () {
+ TaskRepository taskRepo = null;
+ /**
+ * Field DEFAULT_REPOSITORY. (value is ""https://repository"")
+ */
+ String DEFAULT_REPOSITORY = "https://";
+ //Reset the list of Gerrit server
+ fResultTask.clear();
+
+
+ //Test to read the TaskRepositories
+
+ TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
+
+ //List all repositories in the the TaskRepositories view
+ List <TaskRepository>listallRepo = repositoryManager.getAllRepositories();
+ for (int i = 0;i < listallRepo.size(); i++) {
+ R4EGerritPlugin.Ftracer.traceInfo("TaskRepositoryManager repository: [ " + i + " ] : " + listallRepo.get(i).getRepositoryLabel() );
+ }
+
+ //Only get the TaskRepository related to Gerrit review connnector
+ R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
+ Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
+ for (TaskRepository tp: reviewRepo) {
+ R4EGerritPlugin.Ftracer.traceInfo("Only Gerrit Review repo: " + tp.getRepositoryLabel() + "\t url: " + tp.getRepositoryUrl());
+ }
+
+ //Testing bugzilla but need to add the mylyn bugzilla in plugin dependencies
+// for (RepositoryTemplate template : templateManager.getTemplates(BugzillaCorePlugin.CONNECTOR_KIND)) {
+// R4EGerritPlugin.Ftracer.traceInfo("Gerrit Bugzilla repository: " + template.label + "\t URL: " + template.repositoryUrl);
+// }
+
+ return taskRepo;
+ }
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
index 759b400..439e6d6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/table/AdjustMyStarredHandler.java
@@ -21,7 +21,7 @@
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
import org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView;
@@ -35,10 +35,11 @@
/* (non-Javadoc)
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
+ @SuppressWarnings("restriction")
@Override
public Object execute(ExecutionEvent aEvent) throws ExecutionException {
//R4EGerritPlugin.Ftracer.traceInfo("AdjustMyStarred " ); //$NON-NLS-1$
- R4EGerritReviewData item = null;
+ R4EGerritTask item = null;
TableViewer viewer = R4EGerritTableView.getTableViewer();
ISelection tableSelection = viewer.getSelection();
if (tableSelection.isEmpty()) {
@@ -47,13 +48,13 @@
} else {
if (tableSelection instanceof IStructuredSelection ) {
Object obj = ((IStructuredSelection) tableSelection).getFirstElement();
- if (obj instanceof R4EGerritReviewData) {
- item = (R4EGerritReviewData) obj;
+ if (obj instanceof R4EGerritTask) {
+ item = (R4EGerritTask) obj;
//R4EGerritPlugin.Ftracer.traceInfo("Selected table OBJECT selection ID: " + item.getId() );
- if (Boolean.valueOf(item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))) {
- item.setAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR, Boolean.toString(false));
- } else if (!Boolean.valueOf(item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))) {
- item.setAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR, Boolean.toString(true));
+ if (Boolean.valueOf(item.getAttribute(R4EGerritTask.IS_STARRED))) {
+ item.setAttribute(R4EGerritTask.IS_STARRED, Boolean.toString(false));
+ } else if (!Boolean.valueOf(item.getAttribute(R4EGerritTask.IS_STARRED))) {
+ item.setAttribute(R4EGerritTask.IS_STARRED, Boolean.toString(true));
}
viewer.update(item, null);
}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
index cfa4f7d..ce2a1d5 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableContentProvider.java
@@ -16,7 +16,7 @@
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
/**
* @author Jacques Bouthillier
@@ -58,14 +58,14 @@
@Override
public Object[] getElements(Object aInputElement) {
//R4EGerritPlugin.Ftracer.traceInfo("getElements() content provider Object: " + aInputElement);
- if (aInputElement instanceof R4EGerritReviewData[]) {
- R4EGerritReviewData[] itemList = (R4EGerritReviewData[]) aInputElement;
+ if (aInputElement instanceof R4EGerritTask[]) {
+ R4EGerritTask[] itemList = (R4EGerritTask[]) aInputElement;
return itemList;
}
//This null will generate an error if we reach this point, may be we should log an error and
// initiate an empty structure to return
//return null;
- return new R4EGerritReviewData[] {};
+ return new R4EGerritTask[] {};
}
}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
index 1459231..f42a2e4 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableData.java
@@ -14,78 +14,103 @@
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
/**
* @author Jacques Bouthillier
* @version $Revision: 1.0 $
- *
*/
public class ReviewTableData {
- // ------------------------------------------------------------------------
- // Member variables
- // ------------------------------------------------------------------------
+ // ------------------------------------------------------------------------
+ // Member variables
+ // ------------------------------------------------------------------------
- private R4EGerritReviewData[] fReviewList = null;
-
- private TaskRepository fTaskRepo = null;
-
- private String fQuery = null;
-
-
- /**
- * Create a new review entry to insert to the list of reviews
- *
- * @param Object
- */
- public void createReviewItem(R4EGerritReviewData[] aList, String aQuery, TaskRepository aTaskRepo) {
+ // The list of reviews indexed by the SHORT_CHANGE_ID
+ private Map<String, R4EGerritTask> fReviewList;
- // Create the new object
-// if (fQuery != aQuery) {
- fReviewList = aList;
- fTaskRepo = aTaskRepo;
- fQuery = aQuery;
-
-// } else {
-// //Need to reset the list, we just created a null entry
-// reset();
-// }
- }
-
- /**
- * Provide the list of review available for the table list
- * @return ReviewTableListItem[]
- */
- public R4EGerritReviewData[] getReviews () {
- if (fReviewList == null) {
- fReviewList = new R4EGerritReviewData[0];
- }
- return fReviewList;
- }
-
- /**
- * Get the current TaskRepo populating the table list view
- * @return TaskRepository
- */
- public TaskRepository getCurrentTaskRepo () {
- return fTaskRepo;
+ private TaskRepository fTaskRepo = null;
+
+ private String fQuery = null;
+
+ /**
+ * Create a new review entry to insert to the list of reviews
+ *
+ * @param Object
+ */
+ @SuppressWarnings("restriction")
+ public void createReviewItem(R4EGerritTask[] aList, String aQuery,
+ TaskRepository aTaskRepo) {
+
+ // Create the new object
+ // if (fQuery != aQuery) {
+ fReviewList = new HashMap<String, R4EGerritTask>();
+ for (R4EGerritTask review : aList) {
+ fReviewList.put(
+ review.getAttribute(R4EGerritTask.SHORT_CHANGE_ID),
+ review);
+ }
+ fTaskRepo = aTaskRepo;
+ fQuery = aQuery;
+
+ // } else {
+ // //Need to reset the list, we just created a null entry
+ // reset();
+ // }
}
-
+
+ /**
+ * Provide the list of review available for the table list
+ *
+ * @return the list of gerrit reviews
+ */
+ public R4EGerritTask[] getReviews() {
+ if (fReviewList == null) {
+ fReviewList = new HashMap<String, R4EGerritTask>();
+ }
+ return fReviewList.values().toArray(new R4EGerritTask[0]);
+ }
+
+ /**
+ * Provide the review with the specified ID
+ *
+ * @param id
+ * the requested ID (SHORT_CHANGE_ID)
+ * @return the requested review (or null)
+ */
+ public R4EGerritTask getReview(String id) {
+ if (id != null && fReviewList.containsKey(id)) {
+ return fReviewList.get(id);
+ }
+ return null;
+ }
+
+ /**
+ * Get the current TaskRepo populating the table list view
+ *
+ * @return TaskRepository
+ */
+ public TaskRepository getCurrentTaskRepo() {
+ return fTaskRepo;
+ }
+
/**
* Return the query information used to populate the review table
+ *
* @return String
*/
- public String getQueryInfo () {
- return fQuery;
+ public String getQueryInfo() {
+ return fQuery;
}
-
- private void reset() {
- if (fReviewList != null) {
- fReviewList = new R4EGerritReviewData[0];
- }
- }
+// private void reset() {
+// if (fReviewList != null) {
+// fReviewList = new HashMap<String, R4EGerritReviewData>();
+// }
+// }
}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
index e92a33d..9a7028d 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableDefinition.java
@@ -17,6 +17,8 @@
import java.util.ArrayList;
+import org.eclipse.swt.SWT;
+
/**
* @author Jacques Bouthillier
* @version $Revision: 1.0 $
@@ -29,28 +31,29 @@
// Moveable}
public enum ReviewTableDefinition {
// Name Width Resize Moveable
- STARRED( "", 20, false, true),
- ID( "ID", 80, false, true),
- SUBJECT( "Subject", 200, true, true),
- OWNER( "Owner", 140, true, true),
- PROJECT( "Project", 200, true, true),
- BRANCH( "Branch", 100, true, true),
- UPDATED( "Updated", 75, true, true),
- CR( "CR", 28, false, true),
- IC( "IC", 28, false, true),
- VERIFY( "V", 28, false, true);
+ STARRED( "", 20, false, true, SWT.LEFT),
+ ID( "ID", 80, false, true, SWT.LEFT),
+ SUBJECT( "Subject", 200, true, true, SWT.LEFT),
+ OWNER( "Owner", 140, true, true, SWT.LEFT),
+ PROJECT( "Project", 200, true, true, SWT.LEFT),
+ BRANCH( "Branch", 100, true, true, SWT.LEFT),
+ UPDATED( "Updated", 100, true, true, SWT.RIGHT),
+ CR( "CR", 28, false, true, SWT.LEFT),
+// IC( "IC", 28, false, true, SWT.LEFT),
+ VERIFY( "V", 28, false, true, SWT.LEFT);
- private String fHeader;
- private int fwidth;
- private Boolean fResize;
- private Boolean fMoveable;
+ private final String fHeader;
+ private final int fwidth;
+ private final boolean fResize;
+ private final boolean fMoveable;
+ private final int fAlignment;
- private ReviewTableDefinition(String aName, int aWidth, Boolean aResize,
- Boolean aMove) {
+ private ReviewTableDefinition(String aName, int aWidth, boolean aResize, boolean aMove, int align) {
fHeader = aName;
fwidth = aWidth;
fResize = aResize;
fMoveable = aMove;
+ fAlignment = align;
}
public String getName() {
@@ -61,14 +64,18 @@
return fwidth;
}
- public Boolean getResize() {
+ public boolean getResize() {
return fResize;
}
- public Boolean getMoveable() {
+ public boolean getMoveable() {
return fMoveable;
}
+ public int getAlignment() {
+ return fAlignment;
+ }
+
public static String[] getColumnName() {
ArrayList<String> listName = new ArrayList<String>();
for (ReviewTableDefinition st : ReviewTableDefinition.values()) {
@@ -92,4 +99,4 @@
// return ReviewTableDefinition.valueOf(st).ordinal();
// }
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
index b714274..adc4ad8 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableLabelProvider.java
@@ -19,7 +19,7 @@
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
@@ -37,13 +37,21 @@
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
- private final String EMPTY_STRING = "";
- // Names of images used to represent review-checked
+
+ private final String EMPTY_STRING = "";
+
+ // +2 Names of images used to represent review-checked
public static final String CHECKED_IMAGE = "greenCheck";
- // Names of images used to represent review-not OK
+ // -2 Names of images used to represent review-not OK
public static final String NOT_OK_IMAGE = "redNot";
+ // -1
+ public static final String MINUS_ONE = "minusOne";
+
+ // +1
+ public static final String PLUS_ONE = "plusOne";
+
// Names of images used to represent STAR FILLED
public static final String STAR_FILLED = "starFilled";
@@ -61,8 +69,10 @@
//Color used depending on the review state
private static Color DEFAULT_COLOR = fDisplay.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
// private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
- private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
- private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
+ private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WHITE);
+ private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WHITE);
+// private static Color INCOMING_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
+// private static Color CLOSED_COLOR = fDisplay.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
// For the images
private static ImageRegistry fImageRegistry = new ImageRegistry();
@@ -72,21 +82,23 @@
* and automatically disposes of them the SWT Display is disposed.
*/
static {
+
String iconPath = "icons/view16/";
- // icon used for the column ID
- fImageRegistry.put(
- CHECKED_IMAGE,
- R4EGerritUi.getImageDescriptor(iconPath + CHECKED_IMAGE
- + ".png"));
- fImageRegistry.put(NOT_OK_IMAGE, R4EGerritUi
- .getImageDescriptor(iconPath + NOT_OK_IMAGE + ".png"));
+ fImageRegistry.put(CHECKED_IMAGE,
+ R4EGerritUi.getImageDescriptor(iconPath + CHECKED_IMAGE + ".png"));
- // icon used for the column ID
- fImageRegistry
- .put(STAR_FILLED,
- R4EGerritUi.getImageDescriptor(iconPath + STAR_FILLED
- + ".gif"));
+ fImageRegistry.put(NOT_OK_IMAGE,
+ R4EGerritUi.getImageDescriptor(iconPath + NOT_OK_IMAGE + ".png"));
+
+ fImageRegistry.put(MINUS_ONE,
+ R4EGerritUi.getImageDescriptor(iconPath + MINUS_ONE + ".png"));
+
+ fImageRegistry.put(PLUS_ONE,
+ R4EGerritUi.getImageDescriptor(iconPath + PLUS_ONE + ".png"));
+
+ fImageRegistry.put(STAR_FILLED,
+ R4EGerritUi.getImageDescriptor(iconPath + STAR_FILLED + ".gif"));
fImageRegistry.put(STAR_OPEN,
R4EGerritUi.getImageDescriptor(iconPath + STAR_OPEN + ".gif"));
@@ -101,17 +113,47 @@
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
+
/**
* Return an image representing the state of the object
*
* @param int aState
* @return Image
*/
- private Image getReviewSate(int aState) {
- if (aState == NOT_OK_IMAGE_STATE) {
- return fImageRegistry.get(NOT_OK_IMAGE);
- } else if (aState == CHECKED_IMAGE_STATE) {
+ private Image getReviewStateImage(int aState) {
+ switch (aState) {
+ case 2:
return fImageRegistry.get(CHECKED_IMAGE);
+ case 1:
+ return fImageRegistry.get(PLUS_ONE);
+ case 0:
+ break;
+ case -1:
+ return fImageRegistry.get(MINUS_ONE);
+ case -2:
+ return fImageRegistry.get(NOT_OK_IMAGE);
+ default:
+ break;
+ }
+ return null;
+ }
+
+ /**
+ * Return an image representing the state of the object
+ *
+ * @param int aState
+ * @return Image
+ */
+ private Image getVerifyStateImage(int aState) {
+ switch (aState) {
+ case 1:
+ return fImageRegistry.get(CHECKED_IMAGE);
+ case 0:
+ break;
+ case -1:
+ return fImageRegistry.get(NOT_OK_IMAGE);
+ default:
+ break;
}
return null;
}
@@ -142,67 +184,67 @@
*
* @return String text associated to the column
*/
+ @SuppressWarnings("restriction")
public String getColumnText(Object aObj, int aIndex) {
// R4EGerritPlugin.Ftracer.traceWarning("getColumnText object: " + aObj
// + "\tcolumn: " + aIndex);
- if (aObj instanceof R4EGerritReviewData) {
- R4EGerritReviewData reviewSummary = (R4EGerritReviewData) aObj;
- String value = null;
+ if (aObj instanceof R4EGerritTask) {
+ R4EGerritTask reviewSummary = (R4EGerritTask) aObj;
+// String value = null;
switch (aIndex) {
case 0:
- return reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR); // Needed for the sorter
+ return reviewSummary.getAttribute(R4EGerritTask.IS_STARRED); // Needed for the sorter
case 1:
- return reviewSummary.getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID);
+ return reviewSummary.getAttribute(R4EGerritTask.SHORT_CHANGE_ID);
case 2:
- return reviewSummary.getAttribute(R4EGerritReviewData.SUBJECT);
+ return reviewSummary.getAttribute(R4EGerritTask.SUBJECT);
case 3:
- return reviewSummary.getAttribute(R4EGerritReviewData.OWNER);
+ return reviewSummary.getAttribute(R4EGerritTask.OWNER);
case 4:
- return reviewSummary.getAttribute(R4EGerritReviewData.PROJECT);
+ return reviewSummary.getAttribute(R4EGerritTask.PROJECT);
case 5:
- return reviewSummary.getAttribute(R4EGerritReviewData.BRANCH);
+ return reviewSummary.getAttribute(R4EGerritTask.BRANCH);
case 6:
- return reviewSummary.getAttributeAsDate(R4EGerritReviewData.DATE_MODIFICATION);
- case 7:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
- if (null != value && !value.equals(EMPTY_STRING)) {
- return formatValue (value);
- }
- break;
- case 8:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
- if (null != value && !value.equals(EMPTY_STRING)) {
- return formatValue (value);
- }
- break;
- case 9:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
- if (null != value && !value.equals(EMPTY_STRING)) {
- return formatValue (value);
- }
- break;
+ return reviewSummary.getAttributeAsDate(R4EGerritTask.DATE_MODIFICATION);
+// case 7:
+// value = reviewSummary.getAttribute(R4EGerritTask.REVIEW_STATE);
+// if (null != value && !value.equals(EMPTY_STRING)) {
+// return formatValue (value);
+// }
+// case 8:
+// value = reviewSummary.getAttribute(R4EGerritTask.IS_IPCLEAN);
+// if (null != value && !value.equals(EMPTY_STRING)) {
+// return formatValue (value);
+// }
+// return EMPTY_STRING;
+// case 9:
+// value = reviewSummary.getAttribute(R4EGerritTask.VERIFY_STATE);
+// if (null != value && !value.equals(EMPTY_STRING)) {
+// return formatValue (value);
+// }
+// return EMPTY_STRING;
default:
return EMPTY_STRING;
}
}
- return "";
+ return EMPTY_STRING;
}
- /**
- * Format the numbering value to display
- * @param aSt
- * @return String
- */
- private String formatValue (String aSt) {
- int val = aSt.equals("")? 0 : Integer.parseInt(aSt, 10);
- if ( val > 0) {
- String st = "+" + aSt;
- return st;
- }
- return aSt;
-
- }
+// /**
+// * Format the numbering value to display
+// * @param aSt
+// * @return String
+// */
+// private String formatValue (String aSt) {
+// int val = aSt.equals("")? 0 : Integer.parseInt(aSt, 10);
+// if ( val > 0) {
+// String st = "+" + aSt;
+// return st;
+// }
+// return aSt;
+//
+// }
/**
* Return the image associated to the column
@@ -213,16 +255,17 @@
*
* @return Image Image according to the selected column
*/
+ @SuppressWarnings("restriction")
public Image getColumnImage(Object aObj, int aIndex) {
// R4EGerritPlugin.Ftracer
// .traceWarning("getColumnImage column: " + aIndex);
Image image = null;
String value = null;
- if (aObj instanceof R4EGerritReviewData) {
- R4EGerritReviewData reviewSummary = (R4EGerritReviewData) aObj;
+ if (aObj instanceof R4EGerritTask) {
+ R4EGerritTask reviewSummary = (R4EGerritTask) aObj;
switch (aIndex) {
case 0:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR);
+ value = reviewSummary.getAttribute(R4EGerritTask.IS_STARRED);
if (null != value && !value.equals(EMPTY_STRING)) {
return getReviewId(Boolean.valueOf(value.toLowerCase()));
}
@@ -240,27 +283,27 @@
case 6:
return image;
case 7:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
+ value = reviewSummary.getAttribute(R4EGerritTask.REVIEW_STATE);
if (null != value && !value.equals(EMPTY_STRING)) {
int val = Integer.parseInt(value);
- return getReviewSate(val);
+ return getReviewStateImage(val);
}
break;
case 8:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
+// value = reviewSummary.getAttribute(R4EGerritTask.IS_IPCLEAN);
+//
+// if (null != value && !value.equals(EMPTY_STRING)) {
+// int val = Integer.parseInt(value);
+// return getReviewSate(val);
+// }
+// break;
+// case 9:
+ value = reviewSummary.getAttribute(R4EGerritTask.VERIFY_STATE);
if (null != value && !value.equals(EMPTY_STRING)) {
int val = Integer.parseInt(value);
- return getReviewSate(val);
- }
- break;
- case 9:
- value = reviewSummary.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
-
- if (null != value && !value.equals(EMPTY_STRING)) {
- int val = Integer.parseInt(value);
- return getReviewSate(val);
+ return getVerifyStateImage(val);
}
break;
default:
@@ -280,36 +323,36 @@
*/
@Override
public Color getForeground(Object aElement, int aColumnIndex) {
- if (aElement instanceof R4EGerritReviewData) {
- R4EGerritReviewData item = (R4EGerritReviewData) aElement;
+ if (aElement instanceof R4EGerritTask) {
+ R4EGerritTask item = (R4EGerritTask) aElement;
int value = 0;
String st = null;
// R4EGerritPlugin.Ftracer.traceWarning("getForeground() object CR : "
// + item.getCr() + "\tcolumn : " + aColumnIndex );
if (aColumnIndex == ReviewTableDefinition.CR.ordinal()
- || aColumnIndex == ReviewTableDefinition.IC.ordinal()
+// || aColumnIndex == ReviewTableDefinition.IC.ordinal()
|| aColumnIndex == ReviewTableDefinition.VERIFY.ordinal()) {
switch (aColumnIndex) {
case 7: // ReviewTableDefinition.CR.ordinal():
- st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR);
- if (st != null) {
- value = st.equals(EMPTY_STRING) ? 0 : Integer
- .parseInt(st);
- }
+// st = item.getAttribute(R4EGerritTask.REVIEW_STATE);
+// if (st != null) {
+// value = st.equals(EMPTY_STRING) ? 0 : Integer
+// .parseInt(st);
+// }
break;
case 8: // ReviewTableDefinition.IC.ordinal():
- st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI);
- if (st != null) {
- value = st.equals(EMPTY_STRING) ? 0 : Integer
- .parseInt(st);
- }
- break;
- case 9: // ReviewTableDefinition.VERIFY.ordinal():
- st = item.getAttribute(R4EGerritReviewData.REVIEW_FLAG_V);
- if (st != null) {
- value = st.equals(EMPTY_STRING) ? 0 : Integer
- .parseInt(st);
- }
+// st = item.getAttribute(R4EGerritTask.IS_IPCLEAN);
+// if (st != null) {
+// value = st.equals(EMPTY_STRING) ? 0 : Integer
+// .parseInt(st);
+// }
+// break;
+// case 9: // ReviewTableDefinition.VERIFY.ordinal():
+// st = item.getAttribute(R4EGerritTask.VERIFY_STATE);
+// if (st != null) {
+// value = st.equals(EMPTY_STRING) ? 0 : Integer
+// .parseInt(st);
+// }
break;
}
if (value < 0) {
@@ -323,16 +366,17 @@
}
@Override
+ @SuppressWarnings("restriction")
public Color getBackground(Object aElement, int aColumnIndex) {
// R4EGerritUi.Ftracer.traceInfo("getBackground column : " +
// aColumnIndex +
// " ]: "+ aElement );
- if (aElement instanceof R4EGerritReviewData) {
- R4EGerritReviewData item = (R4EGerritReviewData) aElement;
+ if (aElement instanceof R4EGerritTask) {
+ R4EGerritTask item = (R4EGerritTask) aElement;
//
// To modify when we can verify the review state
String state = item
- .getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR);
+ .getAttribute(R4EGerritTask.IS_STARRED);
if (state != null) {
if (state.equals("true")) {
return INCOMING_COLOR;
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
index b3222fd..d1e83a6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/ReviewTableSorter.java
@@ -11,6 +11,7 @@
*
* Contributors:
* Jacques Bouthillier - Initial Implementation of the view sorter
+ * Francois Chouinard - Refined the sorting of 1) dates and 2) flags
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model;
@@ -18,6 +19,7 @@
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -25,32 +27,110 @@
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TreeItem;
-
-
/**
* @author Jacques Bouthillier
* @version $Revision: 1.0 $
*
*/
public class ReviewTableSorter extends ViewerSorter {
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+
+ // The target column
private int columnIndex = 0;
- private static UIReviewTable fReviewTable = null;
+
+ // ------------------------------------------------------------------------
+ // Constructor
+ // ------------------------------------------------------------------------
public ReviewTableSorter(int columnIndex) {
super();
this.columnIndex = columnIndex;
}
- /*
- * public static void reverseOrder() { order *= -1; }
- */
+ // ------------------------------------------------------------------------
+ // ViewerSorter
+ // ------------------------------------------------------------------------
- public int compare(Viewer aViewer, Object aE1, Object aE2) {
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @SuppressWarnings("restriction")
+ public int compare(Viewer viewer, Object item1, Object item2) {
+
+ // The comparison result (< 0, == 0, > 0)
+ int result = 0;
+
+ // We are dealing with R4EGerritTask:s but just in case...
+ if (viewer instanceof TableViewer && item1 instanceof R4EGerritTask && item2 instanceof R4EGerritTask) {
+
+ R4EGerritTask task1 = (R4EGerritTask) item1;
+ R4EGerritTask task2 = (R4EGerritTask) item2;
+
+ String val1 = null;
+ String val2 = null;
+
+ switch (columnIndex) {
+ case 0: // Star
+ val1 = task1.getAttribute(R4EGerritTask.IS_STARRED);
+ val2 = task2.getAttribute(R4EGerritTask.IS_STARRED);
+ if (val1 != null && val2 != null) {
+ result = val1.compareTo(val2);
+ }
+ break;
+ case 6: // Updated
+ val1 = task1.getAttribute(R4EGerritTask.DATE_MODIFICATION);
+ val2 = task2.getAttribute(R4EGerritTask.DATE_MODIFICATION);
+ if (val1 != null && val2 != null) {
+ result = val1.compareTo(val2);
+ }
+ break;
+ case 7: // Code Review
+ val1 = task1.getAttribute(R4EGerritTask.REVIEW_STATE);
+ val2 = task2.getAttribute(R4EGerritTask.REVIEW_STATE);
+ if (val1 != null && val2 != null) {
+ Integer v1 = new Integer(val1);
+ Integer v2 = new Integer(val2);
+ result = v2 - v1;
+ }
+ break;
+ case 8: // Verify
+ val1 = task1.getAttribute(R4EGerritTask.VERIFY_STATE);
+ val2 = task2.getAttribute(R4EGerritTask.VERIFY_STATE);
+ if (val1 != null && val2 != null) {
+ Integer v1 = new Integer(val1);
+ Integer v2 = new Integer(val2);
+ result = v2 - v1;
+ }
+ break;
+ case 9: // IPLog Clean
+ default:
+ result = defaultCompare(viewer, item1, item2);
+ break;
+ }
+
+ if (((TableViewer) viewer).getTable().getSortDirection() != SWT.UP) {
+ result = -result;
+ }
+
+ } else {
+ result = defaultCompare(viewer, item1, item2);
+ }
+
+ return result;
+ }
+
+ private int defaultCompare(Viewer aViewer, Object aE1, Object aE2) {
if (aViewer instanceof TableViewer) {
+ // We are in a table
TableViewer tv = (TableViewer) aViewer;
tv.getTable().setSortColumn(tv.getTable().getColumn(columnIndex));
+
+ // Lookup aE1 and aE2
int idx1 = -1, idx2 = -1;
for (int i = 0; i < tv.getTable().getItemCount(); i++) {
Object obj = tv.getElementAt(i);
@@ -59,23 +139,26 @@
} else if (obj.equals(aE2)) {
idx2 = i;
}
- if (idx1 > 0 && idx2 > 0) {
+ if (idx1 != -1 && idx2 != -1) {
break;
}
}
+
+ // Compare the respective fields
int order = 0;
+
if (idx1 > -1 && idx2 > -1) {
- String str1 = tv.getTable().getItems()[idx1]
- .getText(this.columnIndex);
- String str2 = tv.getTable().getItems()[idx2]
- .getText(this.columnIndex);
+ String str1 = tv.getTable().getItems()[idx1].getText(this.columnIndex);
+ String str2 = tv.getTable().getItems()[idx2].getText(this.columnIndex);
order = str1.compareTo(str2);
- if (tv.getTable().getSortDirection() != SWT.UP) {
- order *= -1;
- }
+ }
+ if (tv.getTable().getSortDirection() != SWT.UP) {
+ order *= -1;
}
return order;
- } else if (aViewer instanceof TreeViewer) {
+ }
+
+ else if (aViewer instanceof TreeViewer) {
TreeViewer tv = (TreeViewer) aViewer;
tv.getTree().setSortColumn(tv.getTree().getColumn(columnIndex));
@@ -104,7 +187,7 @@
}
}
}
-
+
int order = 0;
if (idx1 > -1 && idx2 > -1) {
String str1 = tv.getTree().getItems()[idx1]
@@ -121,8 +204,12 @@
return 0;
}
+ // ------------------------------------------------------------------------
+ // Static methods
+ // ------------------------------------------------------------------------
+
/**
- * table is bind to Sorter.
+ * Bind a sorter to each table column
*
* @param aTableViewer
*/
@@ -132,8 +219,7 @@
TableColumn column = aTableViewer.getTable().getColumn(i);
column.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
- ReviewTableSorter sorter = new ReviewTableSorter(
- columnNum);
+ ReviewTableSorter sorter = new ReviewTableSorter(columnNum);
Table table = aTableViewer.getTable();
if (table.getSortDirection() == SWT.UP) {
table.setSortDirection(SWT.DOWN);
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
index 14fd08a..4d3b0d7 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/model/UIReviewTable.java
@@ -23,7 +23,7 @@
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.table.AdjustMyStarredHandler;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
@@ -153,7 +153,6 @@
GridData gribData = new GridData(GridData.FILL_BOTH);
gribData.minimumWidth = tableInfo[index].getWidth();
col.getColumn().getParent().setLayoutData(gribData);
-
}
TableLayout tableLayout = new TableLayout();
@@ -219,7 +218,8 @@
SWT.NONE);
final TableColumn column = viewerColumn.getColumn();
column.setText(aTableInfo.getName());
- column.setWidth(aTableInfo.getWidth());
+ column.setWidth(aTableInfo.getWidth());
+ column.setAlignment(aTableInfo.getAlignment());
column.setResizable(aTableInfo.getResize());
column.setMoveable(aTableInfo.getMoveable());
return viewerColumn;
@@ -332,20 +332,13 @@
R4EGerritUi.Ftracer.traceInfo("Selected table selection is EMPTY ");
} else {
- if (tableSelection instanceof IStructuredSelection) {
- Object obj = ((IStructuredSelection) tableSelection)
- .getFirstElement();
- R4EGerritUi.Ftracer
- .traceInfo("Selected table selection class: "
- + obj.getClass());
- if (obj instanceof R4EGerritReviewData) {
- R4EGerritReviewData item = (R4EGerritReviewData) obj;
- R4EGerritUi.Ftracer
- .traceInfo("Selected table OBJECT selection ID: "
- + item.getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID)
- + "\t subject: "
- + item.getAttribute(R4EGerritReviewData.SUBJECT));
-
+ if (tableSelection instanceof IStructuredSelection ) {
+ Object obj = ((IStructuredSelection) tableSelection).getFirstElement();
+ R4EGerritUi.Ftracer.traceInfo("Selected table selection class: " + obj.getClass() );
+ if (obj instanceof R4EGerritTask) {
+ R4EGerritTask item = (R4EGerritTask) obj;
+ R4EGerritUi.Ftracer.traceInfo("Selected table OBJECT selection ID: " + item.getAttribute(R4EGerritTask.SHORT_CHANGE_ID) +
+ "\t subject: " + item.getAttribute(R4EGerritTask.SUBJECT));
}
}
}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
index c9607f0..41d9e6b 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
@@ -15,11 +15,17 @@
package org.eclipse.mylyn.reviews.r4egerrit.ui.views;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.Action;
@@ -28,18 +34,22 @@
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
-import org.eclipse.mylyn.internal.tasks.core.TaskTask;
+import org.eclipse.mylyn.internal.gerrit.core.GerritCorePlugin;
+import org.eclipse.mylyn.internal.gerrit.core.GerritQuery;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
+import org.eclipse.mylyn.internal.tasks.core.TaskList;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritQueryUtils;
-import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritReviewData;
+import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EQueryException;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model.ReviewTableData;
@@ -48,9 +58,12 @@
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EUIConstants;
import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.tasks.core.IRepositoryModel;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
+import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
import org.eclipse.swt.SWT;
@@ -64,6 +77,7 @@
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
@@ -165,18 +179,14 @@
createSearchSection(aParent);
UIReviewTable reviewTable = new UIReviewTable();
fViewer = reviewTable.createTableViewerSection(aParent);
-
// Setup the view layout
createLayout(aParent);
-
-
-
-
-
+
fViewer.setInput(fReviewItem.getReviews());
+ Table table = fViewer.getTable();
+ addListeners(table);
-
// fViewer.setInput(getViewSite());
//
// // Create the help context id for the viewer's control
@@ -229,12 +239,12 @@
GridData gribDataViewer = new GridData(GridData.FILL_HORIZONTAL);
leftSearchForm.setLayoutData(gribDataViewer);
- GridLayout leftLyoutForm = new GridLayout();
- leftLyoutForm.numColumns = 2;
- leftLyoutForm.marginHeight = 0;
- leftLyoutForm.makeColumnsEqualWidth = false;
+ GridLayout leftLayoutForm = new GridLayout();
+ leftLayoutForm.numColumns = 2;
+ leftLayoutForm.marginHeight = 0;
+ leftLayoutForm.makeColumnsEqualWidth = false;
- leftSearchForm.setLayout(leftLyoutForm);
+ leftSearchForm.setLayout(leftLayoutForm);
// Label for SEARCH for
fSearchForLabel = new Label(leftSearchForm, SWT.NONE);
@@ -322,33 +332,37 @@
private void makeActions() {
doubleClickAction = new Action() {
+ @Override
public void run() {
// -------------------------------------------------
// Open an editor with the detailed task information
// -------------------------------------------------
- // Retrieve the table selection
- ISelection selection = fViewer.getSelection();
- Object obj = ((IStructuredSelection) selection).getFirstElement();
+ // Retrieve the single table selection ("the" task)
+ ISelection selection = fViewer.getSelection();
+ if (!(selection instanceof IStructuredSelection)) {
+ return;
+ }
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+ if (structuredSelection.size() != 1) {
+ return;
+ }
+ Object element = structuredSelection.getFirstElement();
+ if (!(element instanceof AbstractTask)) {
+ return;
+ }
+ AbstractTask task = (AbstractTask) element;
- // Get the task id from the table selection
- R4EGerritReviewData summary = (R4EGerritReviewData) obj;
- String mylynTaskId = summary.getAttribute(R4EGerritReviewData.TASK_ID);
-
- // Fetch the detailed task information from the server
- AbstractRepositoryConnectorUi connector = TasksUiPlugin.getConnectorUi(GerritConnector.CONNECTOR_KIND);
- ITask task = new TaskTask(connector.getConnectorKind(), fTaskRepository.getRepositoryUrl(), mylynTaskId);
-
- // Select the proper editor...
- IEditorInput editorInput = connector.getTaskEditorInput(fTaskRepository, task);
+ // Open the task in the proper editor
+ AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(GerritConnector.CONNECTOR_KIND);
+ IEditorInput editorInput = connectorUi.getTaskEditorInput(fTaskRepository, task);
if (editorInput == null) {
editorInput = new TaskEditorInput(fTaskRepository, task);
}
- String editorId = connector.getTaskEditorId(task);
-
- // ... and open it with the task data
+ String editorId = connectorUi.getTaskEditorId(task);
TasksUiUtil.openEditor(editorInput, editorId, null);
+
}
};
}
@@ -361,10 +375,10 @@
});
}
- private void showMessage(String message) {
- MessageDialog.openInformation(fViewer.getControl().getShell(),
- "R4E-Gerrit table", message);
- }
+// private void showMessage(String message) {
+// MessageDialog.openInformation(fViewer.getControl().getShell(),
+// "R4E-Gerrit table", message);
+// }
/**
* Passing the focus request to the viewer's control.
@@ -467,7 +481,7 @@
* Process the commands based on the Gerrit string
* @param String aQuery
*/
- public void processCommands (String aQuery) {
+ public void processCommands(String aQuery) {
R4EGerritUi.Ftracer.traceInfo("Process command : " + aQuery );
String lastSaved = fServerUtil.getLastSavedGerritServer();
if (lastSaved != null) {
@@ -508,8 +522,7 @@
}
- private Object updateTable (final TaskRepository aTaskRepo, final String aQuery) {
-
+ private Object updateTable(final TaskRepository aTaskRepo, final String aQuery) {
final Job job = new Job(COMMAND_MESSAGE) {
@@ -530,10 +543,11 @@
// If there is only have one Gerrit server, we can proceed as if it was already used before
IStatus status = null;
try {
- R4EGerritReviewData[] list = R4EGerritQueryUtils.getReviewList(aTaskRepo, aQuery);
- final int numItems = list.length;
+ R4EGerritTask[] reviewList = getReviewTasks(aTaskRepo, aQuery);
+// R4EGerritTask[] reviewList = R4EGerritQueryUtils.getReviewList(aTaskRepo, aQuery);
+ final int numItems = reviewList.length;
R4EGerritPlugin.Ftracer.traceInfo("Number of review items: " + numItems);
- fReviewItem.createReviewItem(list, aQuery, aTaskRepo );
+ fReviewItem.createReviewItem(reviewList, aQuery, aTaskRepo );
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
@@ -542,12 +556,12 @@
setRepositoryLabel (aTaskRepo.getRepositoryLabel());
fViewer.setInput(fReviewItem.getReviews());
fViewer.refresh();
- if (numItems < 1) {
- //Display a popup, we did not find any items to display
- String msg = "Query ( " + aQuery + ") on " + aTaskRepo.getUrl();
- String reason = "Return " + numItems + " items.";
- UIUtils.showErrorDialog(msg, reason);
- }
+// if (numItems < 1) {
+// //Display a popup, we did not find any items to display
+// String msg = "Query ( " + aQuery + ") on " + aTaskRepo.getUrl();
+// String reason = "Return " + numItems + " items.";
+// UIUtils.showErrorDialog(msg, reason);
+// }
}
});
status = Status.OK_STATUS;
@@ -559,6 +573,7 @@
}
aMonitor.done();
+// fetchMissingReviewInfo();
return status;
}
};
@@ -566,10 +581,67 @@
job.schedule();
return null;
-
-
}
+ /**
+ * Perform the requested query and convert the resulting tasks in R4EGerritTask:s
+ *
+ * @param repository the tasks repository
+ * @param queryType the query
+ *
+ * @return a list of R4EGerritTask:s
+ * @throws R4EQueryException
+ */
+ private R4EGerritTask[] getReviewTasks(TaskRepository repository, String queryType) throws R4EQueryException {
+
+ // Format the query id
+ String queryId = rtv.getTitle() + " - " + queryType;
+
+ // Retrieve the query from the repository (if previously defined)
+ Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
+ RepositoryQuery query = null;
+ for (RepositoryQuery rquery : queries) {
+ if (rquery.getRepositoryUrl().equals(repository.getRepositoryUrl()) && rquery.getSummary().equals(queryId)) {
+ query = rquery;
+ break;
+ }
+ }
+
+ // If not found, create one and save it
+ if (query == null) {
+ IRepositoryModel repositoryModel = TasksUi.getRepositoryModel();
+ query = (RepositoryQuery) repositoryModel.createRepositoryQuery(repository);
+ query.setSummary(queryId);
+ query.setAttribute(GerritQuery.TYPE, queryType);
+ query.setAttribute(GerritQuery.PROJECT, null);
+ query.setAttribute(GerritQuery.QUERY_STRING, null);
+ TasksUiInternal.getTaskList().addQuery(query);
+ }
+
+ // Execute the query and wait for the job completion
+ GerritConnector connector = GerritCorePlugin.getDefault().getConnector();
+ try {
+ Job job = TasksUiInternal.synchronizeQuery(connector, query, null, true);
+ job.join();
+ } catch (Exception e) {
+ }
+
+ // Convert the resulting tasks in R4EGerritTask:s
+ Collection<ITask> tasks = query.getChildren();
+ List<R4EGerritTask> reviews = new ArrayList<R4EGerritTask>();
+ for (ITask task : tasks) {
+ try {
+ TaskData taskData = connector.getTaskData(repository, task.getTaskId(), new NullProgressMonitor());
+ R4EGerritTask review = new R4EGerritTask(taskData);
+ if (review.getAttribute(R4EGerritTask.DATE_COMPLETION) == null) {
+ reviews.add(review);
+ }
+ } catch (CoreException e) {
+ }
+ }
+ return reviews.toArray(new R4EGerritTask[0]);
+ }
+
// /**
// * Reset the data in the table.
// *
@@ -610,7 +682,196 @@
fRepositoryResulLabel.setText(aSt);
}
}
-
-
+
+ // ------------------------------------------------------------------------
+ // Review data updates
+ // ------------------------------------------------------------------------
+ // Background:
+ //
+ // The general query returns the list of reviews with some but not all the
+ // data required to fill a table entry - the remaining data is retrieved
+ // from the server using detailed review queries, one per review.
+ //
+ // Since there can be a large number of reviews to fetch, it can be very
+ // time consuming to retrieve ALL the detailed reviews. This is mitigated
+ // by retrieving the details of the visible reviews only.
+ //
+ // However, this requires a little bit of plumbing, namely:
+ // - Identify the reviews to fetch (the visible ones)
+ // - Format and send the corresponding detailed review requests
+ // - Update the table as each request reply comes in
+ // ------------------------------------------------------------------------
+
+ /**
+ * Add the listeners that trigger the review summary updates
+ *
+ * @param table the table widget
+ */
+ private void addListeners(final Table table) {
+
+// // Key scrolling
+// table.addKeyListener(new KeyListener() {
+// @Override
+// public void keyReleased(KeyEvent e) {
+// trace("keyReleased");
+//// fetchMissingReviewInfo();
+// }
+// @Override
+// public void keyPressed(KeyEvent e) {
+// }
+// });
+
+// // Mouse scrolling
+// table.addMouseWheelListener(new MouseWheelListener() {
+// @Override
+// public void mouseScrolled(MouseEvent e) {
+// trace("mouseScrolled");
+//// fetchMissingReviewInfo();
+// }
+// });
+
+// // Scrollbar handling
+// ScrollBar scrollbar = table.getVerticalBar();
+// scrollbar.addSelectionListener(new SelectionListener() {
+// @Override
+// public void widgetSelected(SelectionEvent e) {
+// trace("ScrollBar event");
+// int top = table.getTopIndex();
+// System.out.println("top=" + top + ", detail=" + e.detail);
+//// fetchMissingReviewInfo();
+//// table.setTopIndex(top);
+//// table.showItem(table.getItem(top + e.detail));
+// }
+// @Override
+// public void widgetDefaultSelected(SelectionEvent e) {
+// }
+// });
+
+// // Table resizing
+// table.addControlListener(new ControlListener() {
+// @Override
+// public void controlResized(ControlEvent e) {
+// trace("tableResized");
+//// fetchMissingReviewInfo();
+// }
+// @Override
+// public void controlMoved(ControlEvent e) {
+// }
+// });
+
+ }
+
+// /**
+// * Fetch and display the detailed data of visible reviews
+// */
+// private void updateVisibleReviews() {
+// List<String> reviewIds = getVisibleReviewIds();
+// for (String id : reviewIds) {
+// R4EGerritReviewData review = fReviewItem.getReview(id);
+// if (review != null && !review.hasDetails()) {
+// R4EGerritQueryUtils.getReviewDetails(fTaskRepository, review);
+// refresh(); // Refresh every time? Arguable.
+// }
+// }
+// }
+
+// /**
+// * Fetch and display the detailed data of the missing (visible) reviews
+// */
+// private Job job = null;
+// private void fetchMissingReviewInfo() {
+//
+// trace("updateVisibleReviews");
+//
+// if (job != null && job.getState() != Job.NONE && job.getThread() != null) {
+// trace("Killing job #" + job.getThread().getId());
+// job.cancel();
+// }
+//
+// final List<String> reviewIds = new ArrayList<String>();
+// getVisibleReviewIds(reviewIds);
+//
+// job = new Job("Fetch review data...") {
+// @Override
+// protected IStatus run(IProgressMonitor monitor) {
+// trace("Starting job");
+// for (String id : reviewIds) {
+// if (monitor.isCanceled()) {
+// trace("Canceling job");
+// break;
+// }
+// R4EGerritReviewData review = fReviewItem.getReview(id);
+// if (review != null && !review.hasDetails()) {
+// trace("Get review details for: " + id);
+// R4EGerritQueryUtils.getReviewDetails(fTaskRepository, review);
+// review.hasDetails(true);
+// refresh(); // More selective refresh?
+// }
+// }
+// trace("Completing job");
+// return Status.OK_STATUS;
+// }
+// };
+//
+// trace("Scheduling job");
+// job.schedule();
+// }
+//
+//
+// /**
+// * @return the list of review IDs that are currently visible
+// */
+// volatile Boolean semaphore = false;
+// private void getVisibleReviewIds(final List<String> reviewIds) {
+// trace("getVisibleReviewIds: enter");
+// boolean mySemaphore = false;
+// synchronized(semaphore) {
+// if (!semaphore) {
+// mySemaphore = semaphore = true;
+// }
+// }
+// if (mySemaphore) {
+// Display.getDefault().syncExec(new Runnable() {
+// @Override
+// public void run() {
+// Table table = fViewer.getTable();
+// int tableHeight = table.getClientArea().height;
+// int headerHeight = table.getHeaderHeight();
+// int itemHeight = table.getItemHeight();
+// int nbReviewsVisible = (tableHeight - headerHeight) / itemHeight + 1;
+//
+// int topIndex = table.getTopIndex();
+// int nbReviewsTotal = table.getItemCount();
+// for (int i = 0; i < nbReviewsVisible; i++) {
+// int index = topIndex + i;
+// if (index < nbReviewsTotal) {
+// TableItem item = table.getItem(index);
+// if (item != null) {
+// reviewIds.add(item.getText(1));
+// }
+// }
+// }
+// }
+// });
+// semaphore = false;
+// }
+// trace("getVisibleReviewIds: exit");
+// }
+//
+// /**
+// * Refresh the table content with the new data
+// */
+// private void refresh() {
+// Display.getDefault().syncExec(new Runnable() {
+// @Override
+// public void run() {
+// fViewer.refresh();
+// }
+// });
+// }
+
+// private void trace(String msg) {
+// System.out.println("[" + System.currentTimeMillis() + "] " + "T=" + Thread.currentThread().getId() + " " + msg);
+// }
}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
index 1410fe5..88acace 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/R4EGerritPlugin.java
@@ -27,7 +27,7 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.Version;
-// import utils.Tracer;
+//import utils.Tracer;
/**
* @author Jacques Bouthillier
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
index 1731905..2fbc297 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritQueryUtils.java
@@ -15,7 +15,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
@@ -24,7 +23,6 @@
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
/**
@@ -48,7 +46,7 @@
* @param query the query
* @return the list of reviews matching the query
*/
- public static R4EGerritReviewData[] getReviewList(TaskRepository repository, String queryType) throws R4EQueryException {
+ public static R4EGerritTask[] getReviewList(TaskRepository repository, String queryType) throws R4EQueryException {
// Format the query
IRepositoryQuery query = new RepositoryQuery(repository.getConnectorKind(), "query"); //$NON-NLS-1$
@@ -64,51 +62,32 @@
}
// Extract the result
- List<R4EGerritReviewData> reviews = new ArrayList<R4EGerritReviewData>();
+ List<R4EGerritTask> reviews = new ArrayList<R4EGerritTask>();
List<TaskData> tasksData = resultCollector.getResults();
for (TaskData taskData : tasksData) {
- R4EGerritReviewData review = new R4EGerritReviewData(taskData);
- if (review.getAttribute(R4EGerritReviewData.DATE_COMPLETION) == null) {
+ R4EGerritTask review = new R4EGerritTask(taskData);
+ if (review.getAttribute(R4EGerritTask.DATE_COMPLETION) == null) {
reviews.add(review);
}
}
- return reviews.toArray(new R4EGerritReviewData[0]);
+ return reviews.toArray(new R4EGerritTask[0]);
}
- /**
- * Updates the review data with detailed information from the repository
- *
- * @param repository the repository
- * @param reviewData the original (partial) review data
- */
- public static void getReviewDetails(TaskRepository repository, R4EGerritReviewData reviewData) {
- GerritConnector connector = GerritCorePlugin.getDefault().getConnector();
- try {
- TaskData taskData = connector.getTaskData(repository, reviewData.getAttribute(R4EGerritReviewData.TASK_ID), new NullProgressMonitor());
- reviewData.setAttribute(R4EGerritReviewData.OWNER, getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.OWNER)));
- reviewData.setAttribute(R4EGerritReviewData.PROJECT, getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.PROJECT)));
- reviewData.setAttribute(R4EGerritReviewData.BRANCH, getValue(taskData.getRoot().getAttribute(R4EGerritReviewData.BRANCH)));
- } catch (CoreException e) {
- // TODO Log an error
- e.printStackTrace();
- }
- }
-
- /*
- * Extract the first value from the specified task attributes list.
- *
- * @param taskAttribute
- * @return the first value in the list (if any)
- */
- private static String getValue(TaskAttribute taskAttribute) {
- if (taskAttribute != null) {
- List<String> values = taskAttribute.getValues();
- if (values.size() > 0) {
- return values.get(0);
- }
- }
- return null;
- }
+// /*
+// * Extract the first value from the specified task attributes list.
+// *
+// * @param taskAttribute
+// * @return the first value in the list (if any)
+// */
+// private static String getValue(TaskAttribute taskAttribute) {
+// if (taskAttribute != null) {
+// List<String> values = taskAttribute.getValues();
+// if (values.size() > 0) {
+// return values.get(0);
+// }
+// }
+// return null;
+// }
//-------------------------------------------------------------------------
// Attributes
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
similarity index 69%
rename from org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java
rename to org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
index 55cc07d..7ee9b97 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritReviewData.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
@@ -15,23 +15,23 @@
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.mylyn.internal.gerrit.core.GerritQueryResultSchema;
import org.eclipse.mylyn.internal.gerrit.core.GerritTaskSchema;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
/**
- * A Gerrit review data entry.
+ * An R4E Gerrit review task
*
* @author Francois Chouinard
* @version 0.1
*/
@SuppressWarnings("restriction")
-public class R4EGerritReviewData {
+public class R4EGerritTask extends AbstractTask {
//-------------------------------------------------------------------------
// Constants
@@ -90,43 +90,45 @@
/**
* Gerrit Review flags
*/
- public static final String REVIEW_FLAG_STAR = "org.eclipse.gerrit.Starred";
- public static final String REVIEW_FLAG_CI = "org.eclipse.gerrit.Checked";
- public static final String REVIEW_FLAG_CR = "org.eclipse.gerrit.Reviewed";
- public static final String REVIEW_FLAG_V = "org.eclipse.gerrit.Verified";
+ public static final String IS_STARRED = GerritTaskSchema.getDefault().IS_STARRED.getKey();
+ public static final String REVIEW_STATE = GerritTaskSchema.getDefault().REVIEW_STATE.getKey();
+ public static final String VERIFY_STATE = GerritTaskSchema.getDefault().VERIFY_STATE.getKey();
/**
* Date format
*/
- private static SimpleDateFormat FORMAT_TODAY = new SimpleDateFormat("h:mm a");
- private static SimpleDateFormat FORMAT_FULL = new SimpleDateFormat("MMM d");
+ private static SimpleDateFormat FORMAT_HOUR = new SimpleDateFormat("h:mm a");
+ private static SimpleDateFormat FORMAT_MONTH = new SimpleDateFormat("MMM d");
+ private static SimpleDateFormat FORMAT_FULL = new SimpleDateFormat("MMM d, yyyy");
//-------------------------------------------------------------------------
// Attributes
//-------------------------------------------------------------------------
- /*
- * Map of review attributes
- */
- private Map<String, String> fReviewAttributes;
-
+ // The connector kind
+ private final String fConnectorKind;
+
//-------------------------------------------------------------------------
// Constructor
//-------------------------------------------------------------------------
/**
* Construct an R4EGerritReviewSumamry from a Gerrit query result. Some
- * fields my be missing from the task data.
+ * fields may be missing from the task data.
*
- * @param result the Gerrit query result
+ * @param taskData the Gerrit task data
*/
- public R4EGerritReviewData(final TaskData result) {
- TaskAttribute root = result.getRoot();
- Map<String, TaskAttribute> attributes = root.getAttributes();
+ public R4EGerritTask(final TaskData taskData) {
+ super(taskData.getRepositoryUrl(), taskData.getTaskId(),
+ taskData.getRoot().getAttribute(TaskAttribute.SUMMARY).getValue() +
+ " [" + taskData.getRoot().getAttribute(TaskAttribute.TASK_KEY).getValue() + "]");
- fReviewAttributes = new HashMap<String, String>();
-
- setAttribute(TASK_ID, result.getTaskId());
+ fConnectorKind = taskData.getConnectorKind();
+
+ TaskAttribute root = taskData.getRoot();
+ Map<String, TaskAttribute> attributes = root.getAttributes();
+
+ setAttribute(TASK_ID, taskData.getTaskId());
setAttribute(SHORT_CHANGE_ID, getValue(attributes.get(SHORT_CHANGE_ID)));
setAttribute(CHANGE_ID, getValue(attributes.get(CHANGE_ID)));
setAttribute(SUBJECT, getValue(attributes.get(SUBJECT)));
@@ -139,10 +141,9 @@
setAttribute(DATE_MODIFICATION, getValue(attributes.get(DATE_MODIFICATION)));
setAttribute(DATE_COMPLETION, getValue(attributes.get(DATE_COMPLETION)));
- setAttribute(REVIEW_FLAG_STAR, getValue(attributes.get(REVIEW_FLAG_STAR)));
- setAttribute(REVIEW_FLAG_CI, getValue(attributes.get(REVIEW_FLAG_CI)));
- setAttribute(REVIEW_FLAG_CR, getValue(attributes.get(REVIEW_FLAG_CR)));
- setAttribute(REVIEW_FLAG_V, getValue(attributes.get(REVIEW_FLAG_V)));
+ setAttribute(IS_STARRED, getValue(attributes.get(IS_STARRED)));
+ setAttribute(REVIEW_STATE, getValue(attributes.get(REVIEW_STATE)));
+ setAttribute(VERIFY_STATE, getValue(attributes.get(VERIFY_STATE)));
}
/*
@@ -166,21 +167,6 @@
//-------------------------------------------------------------------------
/**
- * @param key the review attribute key
- * @param value the review attribute value
- */
- public void setAttribute(String key, String value) {
- fReviewAttributes.put(key, value);
- }
-
- /**
- * @return the requested review attribute
- */
- public String getAttribute(String key) {
- return fReviewAttributes.get(key);
- }
-
- /**
* Format the requested Gerrit Review attribute as a date string.
* As in the Gerrit web UI, the output format depends on the date
* relation with 'today':
@@ -200,7 +186,7 @@
}
// Retrieve the date
- String rawDate = fReviewAttributes.get(key);
+ String rawDate = getAttribute(key);
if (rawDate == null) {
return "";
}
@@ -208,10 +194,12 @@
// Format the date
Date date = new Date(Long.parseLong(rawDate));
if (isToday(date)) {
- return FORMAT_TODAY.format(date);
- } else {
- return FORMAT_FULL.format(date);
+ return FORMAT_HOUR.format(date);
}
+ if (isThisYear(date)) {
+ return FORMAT_MONTH.format(date);
+ }
+ return FORMAT_FULL.format(date);
}
/**
@@ -224,8 +212,6 @@
Calendar cal1 = Calendar.getInstance(); // today
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date);
- int year = cal2.get(Calendar.YEAR);
- int day = cal2.get(Calendar.DAY_OF_YEAR);
boolean sameDay =
(cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
@@ -234,6 +220,34 @@
return sameDay;
}
+ /**
+ * Indicates if a date is 'this year'
+ *
+ * @param date the date to check
+ * @return true if same year as today
+ */
+ private boolean isThisYear(Date date) {
+ Calendar cal1 = Calendar.getInstance(); // today
+ Calendar cal2 = Calendar.getInstance();
+ cal2.setTime(date);
+
+ return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
+ }
+
+ //-------------------------------------------------------------------------
+ // AbstractTask
+ //-------------------------------------------------------------------------
+
+ @Override
+ public boolean isLocal() {
+ return false;
+ }
+
+ @Override
+ public String getConnectorKind() {
+ return fConnectorKind;
+ }
+
//-------------------------------------------------------------------------
// Object
//-------------------------------------------------------------------------
@@ -244,18 +258,17 @@
@Override
public String toString() {
StringBuffer buffer = new StringBuffer();
- buffer.append("TaskID = ").append(getAttribute(R4EGerritReviewData.TASK_ID)).append("\n");
- buffer.append("ShortID = ").append(getAttribute(R4EGerritReviewData.SHORT_CHANGE_ID)).append("\n");
- buffer.append("ChangeID= ").append(getAttribute(R4EGerritReviewData.CHANGE_ID)).append("\n");
- buffer.append("Subject = ").append(getAttribute(R4EGerritReviewData.SUBJECT)).append("\n");
- buffer.append("Owner = ").append(getAttribute(R4EGerritReviewData.OWNER)).append("\n");
- buffer.append("Project = ").append(getAttribute(R4EGerritReviewData.PROJECT)).append("\n");
- buffer.append("Branch = ").append(getAttribute(R4EGerritReviewData.BRANCH)).append("\n");
- buffer.append("Updated = ").append(getAttributeAsDate(R4EGerritReviewData.DATE_MODIFICATION)).append("\n");
- buffer.append("STAR = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_STAR))
- .append(", CR = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_CR))
- .append(", IC = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_CI))
- .append(", Ve = ").append(getAttribute(R4EGerritReviewData.REVIEW_FLAG_V)).append("\n");
+ buffer.append("TaskID = ").append(getAttribute(R4EGerritTask.TASK_ID)).append("\n");
+ buffer.append("ShortID = ").append(getAttribute(R4EGerritTask.SHORT_CHANGE_ID)).append("\n");
+ buffer.append("ChangeID= ").append(getAttribute(R4EGerritTask.CHANGE_ID)).append("\n");
+ buffer.append("Subject = ").append(getAttribute(R4EGerritTask.SUBJECT)).append("\n");
+ buffer.append("Owner = ").append(getAttribute(R4EGerritTask.OWNER)).append("\n");
+ buffer.append("Project = ").append(getAttribute(R4EGerritTask.PROJECT)).append("\n");
+ buffer.append("Branch = ").append(getAttribute(R4EGerritTask.BRANCH)).append("\n");
+ buffer.append("Updated = ").append(getAttributeAsDate(R4EGerritTask.DATE_MODIFICATION)).append("\n");
+ buffer.append("STAR = ").append(getAttribute(R4EGerritTask.IS_STARRED))
+ .append(", CRVW = ").append(getAttribute(R4EGerritTask.REVIEW_STATE))
+ .append(", VRIF = ").append(getAttribute(R4EGerritTask.VERIFY_STATE)).append("\n");
return buffer.toString();
}
diff --git a/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target b/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
index a6ea925..774caf7 100644
--- a/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
+++ b/org.eclipse.mylyn.reviews.r4e-target/r4e-dev-eclipse4.2.target
@@ -43,7 +43,6 @@
<unit id="org.objenesis" version="1.0.0.v201105211943"/>
<unit id="org.junit" version="4.8.2.v4_8_2_v20110321-1705"/>
<unit id="org.junit.source" version="4.8.2.v4_8_2_v20110321-1705"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
<unit id="javax.servlet" version="2.5.0.v201103041518"/>
<unit id="javax.el" version="2.2.0.v201108011116"/>
<unit id="org.antlr.runtime" version="3.0.0.v200803061811"/>
diff --git a/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch b/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch
deleted file mode 100644
index 8dddcd8..0000000
--- a/org.eclipse.mylyn.reviews.r4e.connector.tests/R4E Connector Core Tests.launch
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
-<booleanAttribute key="append.args" value="true"/>
-<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="true"/>
-<booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
-<booleanAttribute key="default" value="false"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.mylyn.reviews.r4e.connector.tests"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<booleanAttribute key="run_in_ui_thread" value="false"/>
-<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.sun.syndication@default:default,javax.activation@default:default,javax.annotation@default:default,javax.inject@default:default,javax.mail@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core*2.9.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.birt.jetty.overlay@default:false,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.egit.core@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help.base@default:default,org.eclipse.help@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jgit@default:default,org.eclipse.mylyn.commons.core@default:default,org.eclipse.mylyn.commons.identity.core@default:default,org.eclipse.mylyn.commons.net@default:default,org.eclipse.mylyn.commons.notifications.core@default:default,org.eclipse.mylyn.commons.notifications.feed@default:default,org.eclipse.mylyn.commons.notifications.ui@default:default,org.eclipse.mylyn.commons.repositories.core@default:default,org.eclipse.mylyn.commons.repositories.ui@default:default,org.eclipse.mylyn.commons.screenshots@default:default,org.eclipse.mylyn.commons.sdk.util@default:default,org.eclipse.mylyn.commons.ui@default:default,org.eclipse.mylyn.commons.workbench@default:default,org.eclipse.mylyn.context.core@default:default,org.eclipse.mylyn.monitor.core@default:default,org.eclipse.mylyn.monitor.ui@default:default,org.eclipse.mylyn.tasks.core@default:default,org.eclipse.mylyn.tasks.ui@default:default,org.eclipse.mylyn.tests.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.platform@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.integration@default:default,org.hamcrest.library@default:default,org.hamcrest.text@default:default,org.hamcrest@default:default,org.jdom@default:default,org.junit@default:default,org.mockito@default:default,org.objenesis@default:default,org.w3c.css.sac@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.mylyn.reviews.VCalendar@default:default,org.eclipse.mylyn.reviews.frame.ui@default:default,org.eclipse.mylyn.reviews.notifications@default:default,org.eclipse.mylyn.reviews.r4e.connector.tests@default:false,org.eclipse.mylyn.reviews.r4e.connector@default:default,org.eclipse.mylyn.reviews.r4e.core.tests@default:default,org.eclipse.mylyn.reviews.r4e.core@default:default,org.eclipse.mylyn.reviews.r4e.mail.smtp@default:default,org.eclipse.mylyn.reviews.r4e.transform@default:default,org.eclipse.mylyn.reviews.r4e.ui@default:default"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<booleanAttribute key="useProduct" value="false"/>
-</launchConfiguration>
diff --git a/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java b/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
index 0ae8778..d132361 100644
--- a/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
+++ b/org.eclipse.mylyn.reviews.r4e.ui.tests/src/org/eclipse/mylyn/reviews/r4e/ui/tests/R4ETestCase.java
@@ -12,7 +12,6 @@
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
- *
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.tests;
diff --git a/pom.xml b/pom.xml
index 2568e5f..5a7c62b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,7 +195,7 @@
<module>org.eclipse.mylyn.reviews.r4e.ui</module>
<module>org.eclipse.mylyn.reviews.r4e.upgrade</module>
<module>org.eclipse.mylyn.reviews.VCalendar</module>
- <!-- module>org.eclipse.mylyn.reviews.r4e.ui.tests</module -->
+ <!-- module>org.eclipse.mylyn.reviews.r4e.ui.tests</module -->
<module>org.eclipse.mylyn.reviews.connector</module>
<module>org.eclipse.mylyn.reviews.connector.ui</module>
<module>org.eclipse.mylyn.reviews.connector.tests</module>