blob: d023e51775b38d5764a848925a986d599741f6ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2009 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.ui.editor;
import java.util.EnumSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttribute;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaTaskDataHandler;
import org.eclipse.mylyn.internal.tasks.ui.editors.EditorUtil;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author Rob Elves
*/
public class BugzillaPlanningEditorPart extends AbstractTaskEditorPart {
private boolean hasIncoming;
private static final Set<BugzillaAttribute> PLANNING_ATTRIBUTES = EnumSet.of(BugzillaAttribute.ACTUAL_TIME,
BugzillaAttribute.ESTIMATED_TIME, BugzillaAttribute.WORK_TIME, BugzillaAttribute.REMAINING_TIME,
BugzillaAttribute.DEADLINE);
public BugzillaPlanningEditorPart() {
setPartName(Messages.BugzillaPlanningEditorPart_Team_Planning);
}
@Override
public void createControl(Composite parent, FormToolkit toolkit) {
initialize();
int style = ExpandableComposite.TWISTIE;
if (hasIncoming) {
style |= ExpandableComposite.EXPANDED;
}
Section timeSection = createSection(parent, toolkit, style);
EditorUtil.setTitleBarForeground(timeSection, toolkit.getColors().getColor(IFormColors.TITLE));
GridLayout gl = new GridLayout();
GridData gd = new GridData(SWT.FILL, SWT.NONE, false, false);
gd.horizontalSpan = 4;
timeSection.setLayout(gl);
timeSection.setLayoutData(gd);
Composite timeComposite = toolkit.createComposite(timeSection);
gl = new GridLayout(6, false);
timeComposite.setLayout(gl);
gd = new GridData();
gd.horizontalSpan = 4;
timeComposite.setLayoutData(gd);
TaskAttribute attribute = getTaskData().getRoot().getMappedAttribute(BugzillaAttribute.DEADLINE.getKey());
if (attribute != null) {
AbstractAttributeEditor attributeEditor = createAttributeEditor(attribute);
attributeEditor.createLabelControl(timeComposite, toolkit);
attributeEditor.createControl(timeComposite, toolkit);
getTaskEditorPage().getAttributeEditorToolkit().adapt(attributeEditor);
}
attribute = getTaskData().getRoot().getMappedAttribute(BugzillaAttribute.ESTIMATED_TIME.getKey());
AbstractAttributeEditor attributeEditor = createAttributeEditor(attribute);
attributeEditor.createLabelControl(timeComposite, toolkit);
attributeEditor.createControl(timeComposite, toolkit);
getTaskEditorPage().getAttributeEditorToolkit().adapt(attributeEditor);
Label label = toolkit.createLabel(timeComposite, Messages.BugzillaPlanningEditorPart_Current_Estimate);
label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
float total = 0;
try {
TaskAttribute attrActualTime = getTaskData().getRoot().getMappedAttribute(
BugzillaAttribute.ACTUAL_TIME.getKey());
float actual = 0;
if (attrActualTime != null) {
actual = Float.parseFloat(attrActualTime.getValue());
}
TaskAttribute attrRemainingTime = getTaskData().getRoot().getMappedAttribute(
BugzillaAttribute.REMAINING_TIME.getKey());
float remaining = 0;
if (attrRemainingTime != null) {
remaining = Float.parseFloat(attrRemainingTime.getValue());
}
total = actual + remaining;
} catch (Exception e) {
// ignore NumberFormatException
}
Text currentEstimate = toolkit.createText(timeComposite, "" + total, SWT.FLAT | SWT.READ_ONLY); //$NON-NLS-1$
currentEstimate.setFont(TEXT_FONT);
toolkit.adapt(currentEstimate, false, false);
currentEstimate.setData(FormToolkit.KEY_DRAW_BORDER, Boolean.FALSE);
currentEstimate.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
attribute = getTaskData().getRoot().getMappedAttribute(BugzillaAttribute.ACTUAL_TIME.getKey());
if (attribute != null) {
attributeEditor = createAttributeEditor(attribute);
attributeEditor.createLabelControl(timeComposite, toolkit);
attributeEditor.createControl(timeComposite, toolkit);
getTaskEditorPage().getAttributeEditorToolkit().adapt(attributeEditor);
}
// Add Time
TaskAttribute addTimeAttribute = getTaskData().getRoot().getMappedAttribute(
BugzillaAttribute.WORK_TIME.getKey());
if (addTimeAttribute == null) {
addTimeAttribute = BugzillaTaskDataHandler.createAttribute(getTaskData(), BugzillaAttribute.WORK_TIME);
}
if (addTimeAttribute != null) {
attributeEditor = createAttributeEditor(addTimeAttribute);
attributeEditor.createLabelControl(timeComposite, toolkit);
attributeEditor.createControl(timeComposite, toolkit);
getTaskEditorPage().getAttributeEditorToolkit().adapt(attributeEditor);
}
attribute = getTaskData().getRoot().getAttribute(BugzillaAttribute.REMAINING_TIME.getKey());
if (attribute != null) {
attributeEditor = createAttributeEditor(attribute);
attributeEditor.createLabelControl(timeComposite, toolkit);
attributeEditor.createControl(timeComposite, toolkit);
getTaskEditorPage().getAttributeEditorToolkit().adapt(attributeEditor);
}
timeSection.setClient(timeComposite);
toolkit.paintBordersFor(timeComposite);
setSection(toolkit, timeSection);
}
private void initialize() {
hasIncoming = false;
Map<String, TaskAttribute> attributes = getTaskData().getRoot().getAttributes();
for (TaskAttribute attribute : attributes.values()) {
BugzillaAttribute bugzillaAttribute = BugzillaAttribute.UNKNOWN;
try {
bugzillaAttribute = BugzillaAttribute.valueOf(attribute.getId().trim().toUpperCase(Locale.ENGLISH));
} catch (RuntimeException e) {
if (e instanceof IllegalArgumentException) {
// ignore unrecognized tags
continue;
}
throw e;
}
if (PLANNING_ATTRIBUTES.contains(bugzillaAttribute)) {
if (getModel().hasIncomingChanges(attribute)) {
hasIncoming = true;
}
}
}
}
}