/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * 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: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.springsource.ide.eclipse.dashboard.internal.ui.editors; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.mylyn.commons.ui.CommonImages; import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorDescriptionPart; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.ui.TasksUiImages; import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart; import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.RowSpan; import org.eclipse.mylyn.tasks.ui.editors.TaskEditor; import org.eclipse.mylyn.tasks.ui.editors.TaskEditorPartDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.springsource.ide.eclipse.dashboard.internal.ui.util.IdeUiUtils; /** * @author Steffen Pingel * @author Wesley Coelho * @author Leo Dos Santos * @author Christian Dupuis */ public class StsTaskPage extends AbstractTaskEditorPage { private class ActionPart extends AbstractTaskEditorPart { @Override public void createControl(Composite parent, FormToolkit toolkit) { Composite composite = toolkit.createComposite(parent); composite.setLayout(new GridLayout(1, false)); if (IdeUiUtils.getBugsQuery() == null) { // FIXME // final Button addQueryButton = toolkit.createButton(composite, // "Add query to Task List", SWT.CHECK); // addQueryButton.setSelection(true); // addQuery = true; // addQueryButton.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetSelected(SelectionEvent event) { // addQuery = addQueryButton.getSelection(); // } // }); } Button submitButton = toolkit.createButton(composite, "Submit", SWT.NONE); submitButton.setImage(CommonImages.getImage(TasksUiImages.REPOSITORY_SUBMIT)); submitButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { doSubmit(); } }); } } private class AttributesPart extends AbstractTaskEditorPart { private AbstractAttributeEditor summaryEditor; private AbstractAttributeEditor addAttribute(Composite composite, FormToolkit toolkit, String attributeId, boolean span) { AbstractAttributeEditor editor = createAttributeEditor(getTaskData().getRoot().getMappedAttribute( attributeId)); editor.createLabelControl(composite, toolkit); editor.createControl(composite, toolkit); if (span) { GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).span(2, 1) .applyTo(editor.getControl()); } else { GridDataFactory.fillDefaults().applyTo(editor.getControl()); toolkit.createLabel(composite, ""); // place holder } // limit height if (editor.getLayoutHint() != null && editor.getLayoutHint().rowSpan == RowSpan.MULTIPLE) { ((GridData) editor.getControl().getLayoutData()).heightHint = 50; } return editor; } @Override public void createControl(Composite parent, FormToolkit toolkit) { Composite composite = toolkit.createComposite(parent); composite.setLayout(new GridLayout(3, false)); summaryEditor = addAttribute(composite, toolkit, IdeUiUtils.JIRA_ATTRIBUTE_SUMMARY, true); addAttribute(composite, toolkit, IdeUiUtils.JIRA_ATTRIBUTE_PRIORITY, false); TaskAttribute attribute = getTaskData().getRoot().getMappedAttribute( IdeUiUtils.JIRA_ATTRIBUTE_AFFECTS_VERSION); if (attribute != null) { if ("".equals(attribute.getValue())) { String value = IdeUiUtils.getVersion().toString(); for (Map.Entry<String, String> entry : attribute.getOptions().entrySet()) { if (entry.getValue().equals(value)) { attribute.setValue(entry.getKey()); getModel().attributeChanged(attribute); break; } } } addAttribute(composite, toolkit, IdeUiUtils.JIRA_ATTRIBUTE_AFFECTS_VERSION, false); } toolkit.paintBordersFor(composite); setControl(composite); } @Override public void setFocus() { summaryEditor.getControl().setFocus(); } } public static final String PAGE_ID = "com.springsource.sts.ide.ui.editors.page.task"; protected boolean addQuery; public StsTaskPage(TaskEditor editor) { super(editor, IdeUiUtils.JIRA_CONNECTOR_KIND); // headerForm.getForm().setText("Report SpringSource Bug or Enhancement") // ; // getToolkit().decorateFormHeading(headerForm.getForm().getForm()); setNeedsSubmitButton(true); } @Override protected Set<TaskEditorPartDescriptor> createPartDescriptors() { Set<TaskEditorPartDescriptor> descriptors = new LinkedHashSet<TaskEditorPartDescriptor>(); descriptors.add(new TaskEditorPartDescriptor(ID_PART_SUMMARY) { @Override public AbstractTaskEditorPart createPart() { return new HeaderPart( "Please use this form to provide feedback on the Spring Tool Suite, or report a bug."); } }.setPath(PATH_HEADER)); descriptors.add(new TaskEditorPartDescriptor(ID_PART_ATTRIBUTES) { @Override public AbstractTaskEditorPart createPart() { return new AttributesPart(); } }.setPath(PATH_ATTRIBUTES)); descriptors.add(new TaskEditorPartDescriptor(ID_PART_DESCRIPTION) { @Override public AbstractTaskEditorPart createPart() { TaskEditorDescriptionPart part = new TaskEditorDescriptionPart(); if (getModel().getTaskData().isNew()) { part.setExpandVertically(true); part.setSectionStyle(ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED); } return part; } }.setPath(PATH_COMMENTS)); descriptors.add(new TaskEditorPartDescriptor(ID_PART_ACTIONS) { @Override public AbstractTaskEditorPart createPart() { return new ActionPart(); } }.setPath(PATH_ACTIONS)); return descriptors; } // FIXME // @Override // protected void handleSuccess(ITask task) { // if (addQuery) { // IdeUiUtils.createQuery(IIdeUiConstants.SPRINGSOURCE_BUGS_URL, // IIdeUiConstants.LABEL_SPRINGSOURCE_BUGS, // IIdeUiConstants.QUERY_SPRINGSOURCE_BUGS); // } // // MessageDialog.openInformation(getSite().getShell(), "Submit", // "Your task has been submitted to SpringSource."); // // IdeUiUtils.closeEditor(this); // // if (task != null) { // showTask(task); // } // } }