com.tasktop.c2c.server.tasks.client.presenters.AbstractEditTaskPresenter.java Source code

Java tutorial

Introduction

Here is the source code for com.tasktop.c2c.server.tasks.client.presenters.AbstractEditTaskPresenter.java

Source

/*******************************************************************************
 * Copyright (c) 2010, 2012 Tasktop Technologies
 * Copyright (c) 2010, 2011 SpringSource, a division of VMware
 * 
 * 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:
 *     Tasktop Technologies - initial API and implementation
 ******************************************************************************/
package com.tasktop.c2c.server.tasks.client.presenters;

import java.util.List;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.tasktop.c2c.server.common.profile.web.client.ProfileGinjector;
import com.tasktop.c2c.server.common.profile.web.client.presenter.person.ProjectPersonService;
import com.tasktop.c2c.server.common.web.client.widgets.chooser.person.Person;
import com.tasktop.c2c.server.tasks.client.widgets.AbstractEditTaskDisplay;
import com.tasktop.c2c.server.tasks.client.widgets.presenter.person.KeywordSuggestService;
import com.tasktop.c2c.server.tasks.domain.Component;
import com.tasktop.c2c.server.tasks.domain.Product;
import com.tasktop.c2c.server.tasks.domain.RepositoryConfiguration;
import com.tasktop.c2c.server.tasks.domain.Task;

public abstract class AbstractEditTaskPresenter<EditTaskViewType extends AbstractEditTaskDisplay>
        extends AbstractTaskPresenter {

    protected final EditTaskViewType editTaskView;
    protected String projectIdentifier;
    protected RepositoryConfiguration repositoryConfiguration;
    protected Task task;
    protected boolean ownerSet = false;

    public AbstractEditTaskPresenter(EditTaskViewType view) {
        super(view.asWidget());
        editTaskView = view;
        addClickHandlers();
    }

    @Override
    protected void bind() {

        editTaskView.setSelf(ProfileGinjector.get.instance().getAppState().getSelf());

        KeywordSuggestService keywordService = new KeywordSuggestService(projectIdentifier);
        editTaskView.setKeywordService(keywordService);

        ProjectPersonService personService = new ProjectPersonService(projectIdentifier);
        editTaskView.setPersonService(personService);
        editTaskView.setProjectIdentifier(projectIdentifier);
        configure(repositoryConfiguration);
        ownerSet = false;
        renderTask();
    }

    protected abstract void renderTask();

    protected void productChanged(ValueChangeEvent<Product> event) {
        Product product = event.getValue();

        List<Component> components = repositoryConfiguration.getComponents(product);
        editTaskView.setComponents(components);
        editTaskView.setMilestones(repositoryConfiguration.getMilestones(product));
        Product product2 = repositoryConfiguration.getProducts()
                .get(repositoryConfiguration.getProducts().indexOf(product));
        editTaskView.setSelectedMilestone(product2.getDefaultMilestone());
        editTaskView.clearFoundInReleases();

        componentChanged(components.get(0));
    }

    private void componentChanged(Component selected) {
        if (!ownerSet) {
            editTaskView.setAssignee(selected.getInitialOwner());
        }
    }

    protected void addClickHandlers() {
        editTaskView.addProductChangeHandler(new ValueChangeHandler<Product>() {

            @Override
            public void onValueChange(ValueChangeEvent<Product> event) {
                productChanged(event);
            }
        });

        editTaskView.addComponentChangeHandler(new ValueChangeHandler<Component>() {

            @Override
            public void onValueChange(ValueChangeEvent<Component> event) {
                componentChanged(event.getValue());
            }
        });
        editTaskView.addOwnerChangeHandler(new ValueChangeHandler<Person>() {
            @Override
            public void onValueChange(ValueChangeEvent<Person> event) {
                // User touched the owner widget, so we won't be automatically setting it to default component owner
                // anymore
                ownerSet = true;
            }
        });

        editTaskView.getCancelClickHandlers().addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                doCancel();
            }
        });

        editTaskView.getSaveClickHandlers().addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                doSaveTask();
            }
        });

    }

    protected abstract void doCancel();

    protected abstract void doSaveTask();

    public void configure(RepositoryConfiguration configuration) {
        editTaskView.setRepositoryConfiguration(configuration);
        if (task != null) {
            editTaskView.setIterations(repositoryConfiguration.getValidIterationsForTask(task));
        } else {
            editTaskView.setIterations(configuration.getActiveIterations());
        }
    }

    public void populateUi(Task task) {
        editTaskView.setComponents(repositoryConfiguration.getComponents(task.getProduct()));
        editTaskView.setMilestones(repositoryConfiguration.getMilestones(task.getProduct()));
    }

    protected void populateModel() {
        task = editTaskView.getValue(); // FIXME give this task??
    }

    @Override
    public String mayStop() {
        if (editTaskView.isDirty()) {
            return tasksMessages.dirtyNavigateWarning();
        }
        return null;
    }
}