Package net.sf.redmine_mylyn.internal.ui.action

Source Code of net.sf.redmine_mylyn.internal.ui.action.RedmineStatusTaskListContributionItem

package net.sf.redmine_mylyn.internal.ui.action;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import net.sf.redmine_mylyn.common.logging.ILogService;
import net.sf.redmine_mylyn.core.RedmineAttribute;
import net.sf.redmine_mylyn.internal.ui.Messages;
import net.sf.redmine_mylyn.ui.RedmineUiPlugin;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.data.ITaskDataManager;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.TasksUi;

public class RedmineStatusTaskListContributionItem extends AbstractRedmineTaskListContributionItem {

  private MenuManager subMenuManager;
 
  @Override
  protected MenuManager getSubMenuManager() {
    if(subMenuManager==null) {
      subMenuManager = new MenuManager();
     
      Map<String, String> statusMap = buildStatusMap();
      if(statusMap!=null) {
       
        for (Entry<String, String> entry : statusMap.entrySet()) {
          List<ITask> taskList = getSelectedTasks();
          ITask[] tasks = taskList.toArray(new ITask[taskList.size()]);
         
          IContributionItem item = new ActionContributionItem(new RedmineStatusAttributeChangeAction(entry.getKey(), entry.getValue(), tasks));
          subMenuManager.add(item);
        }
      }
    }
   
    return subMenuManager;
  }

  private Map<String, String> buildStatusMap() {

    Map<String, String> statusMap = null;
    List<ITask> tasks = getSelectedTasks();
   
    ITaskDataManager taskDataManager = TasksUi.getTaskDataManager();
   
    try {
      if (tasks.size()>0) {
        ITask firstTask = tasks.get(0);
        String repositoryUrl = firstTask.getRepositoryUrl();
       
        if (repositoryUrl!=null && taskDataManager.hasTaskData(firstTask)) {
          TaskData taskData = taskDataManager.getTaskData(firstTask);
          TaskAttribute attribute = taskData.getRoot().getAttribute(RedmineAttribute.STATUS.getTaskKey());
          Set<String> commonIds = new HashSet<String>(attribute.getOptions().keySet());
         
          for (ITask task : tasks) {
            if (task.getRepositoryUrl().equals(repositoryUrl)) { //Same-Repository-Policy
              if (taskDataManager.hasTaskData(task)) {
                taskData = taskDataManager.getTaskData(task);
                attribute = taskData.getRoot().getAttribute(RedmineAttribute.STATUS.getTaskKey());
                commonIds.retainAll(attribute.getOptions().keySet());
              }
            } else {
              return null; //Same-Repository-Policy
            }
          }
         
          if(commonIds.size()>0) {
            statusMap = new HashMap<String, String>(commonIds.size());
            for (String key : commonIds) {
              statusMap.put(key, attribute.getOption(key));
            }
          }
        }
      }
     
    } catch (NullPointerException e) {
      ILogService log = RedmineUiPlugin.getLogService(getClass());
      log.error(e, Messages.ERRMSG_CANT_FILL_MARKAS_MENU);
    } catch (CoreException e) {
      ILogService log = RedmineUiPlugin.getLogService(getClass());
      log.error(e, Messages.ERRMSG_CANT_FILL_MARKAS_MENU);
    }
   
    return statusMap;
  }
 
 
}
TOP

Related Classes of net.sf.redmine_mylyn.internal.ui.action.RedmineStatusTaskListContributionItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.