com.itsolut.mantis.ui.wizard.NewMantisTaskWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.itsolut.mantis.ui.wizard.NewMantisTaskWizard.java

Source

/*******************************************************************************
 * Copyright (c) 2004 - 2006 University Of British Columbia and others.
 * 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
 *
 * Contributors:
 *     University Of British Columbia - initial API and implementation
 *******************************************************************************/

package com.itsolut.mantis.ui.wizard;

import static com.itsolut.mantis.core.MantisAttributeMapper.Attribute.PROJECT;

import java.util.List;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.mylyn.tasks.core.*;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
import org.eclipse.mylyn.tasks.ui.wizards.NewTaskWizard;
import org.eclipse.ui.INewWizard;

import com.itsolut.mantis.core.IMantisClient;
import com.itsolut.mantis.core.IMantisClientManager;
import com.itsolut.mantis.core.MantisCacheData;
import com.itsolut.mantis.core.exception.MantisException;
import com.itsolut.mantis.core.model.MantisProject;
import com.itsolut.mantis.ui.util.MantisUIUtil;

/**
 * Wizard for creating new Mantis tickets through a rich editor..
 * 
 * @author Steffen Pingel
 */
public class NewMantisTaskWizard extends NewTaskWizard implements INewWizard {

    private final TaskRepository taskRepository;

    private MantisProjectPage newTaskPage;

    private IMantisClientManager clientManager;

    private ProductOnlyTaskMapping mapping;

    public NewMantisTaskWizard(TaskRepository taskRepository, ITaskMapping taskSelection,
            IMantisClientManager clientManager) {
        super(taskRepository, taskSelection);

        this.taskRepository = taskRepository;
        this.clientManager = clientManager;

        setWindowTitle("New Repository Task");
        setDefaultPageImageDescriptor(TasksUiImages.BANNER_REPOSITORY);

        setNeedsProgressMonitor(true);
    }

    @Override
    public void addPages() {

        IStructuredSelection selection = MantisUIUtil.getCurrentSelection();

        if (selection != null && !selection.isEmpty()) {

            Object selectedElement = selection.getFirstElement();
            String projectName = null;
            if (selectedElement instanceof ITask) {
                ITask task = (ITask) selectedElement;
                projectName = task.getAttribute(PROJECT.getKey());
            } else if (selectedElement instanceof IRepositoryQuery) {
                IRepositoryQuery query = (IRepositoryQuery) selectedElement;
                projectName = query.getAttribute(IMantisClient.PROJECT_NAME);
            } else if (selectedElement instanceof IAdaptable) {
                IAdaptable adaptable = (IAdaptable) selectedElement;
                ITask task = (ITask) adaptable.getAdapter(ITask.class);
                if (task != null)
                    projectName = task.getAttribute(PROJECT.getKey());
            }

            if (projectName != null && !MantisProject.ALL_PROJECTS.getName().equals(projectName)) {

                try {
                    MantisCacheData cacheData = clientManager.getRepository(taskRepository).getCacheData();
                    for (MantisProject project : cacheData.getProjects()) {
                        if (project.getName().equals(projectName)) {
                            mapping = new ProductOnlyTaskMapping(projectName);
                            return;
                        }
                    }
                } catch (MantisException e) {
                    // ignore the attempt and fall back to using a project page
                }
            }
        }

        newTaskPage = new MantisProjectPage(taskRepository, clientManager);
        addPage(newTaskPage);
    }

    @Override
    public ITaskMapping getTaskSelection() {

        ITaskMapping selection = super.getTaskSelection();
        if (selection == null)
            selection = mapping;

        return selection;
    }

    @Override
    protected ITaskMapping getInitializationData() {

        if (getTaskSelection() != null && getTaskSelection().getProduct() != null)
            return getTaskSelection();

        final MantisProject project = newTaskPage.getSelectedProject();

        return new ProductOnlyTaskMapping(project.getName());
    }

    private static class ProductOnlyTaskMapping extends TaskMapping {

        private final String product;

        public ProductOnlyTaskMapping(String product) {

            this.product = product;
        }

        public String getProduct() {

            return product;
        }

        @Override
        public String toString() {

            return getClass().getSimpleName() + "{ product: " + product + "}";
        }
    }
}