| /******************************************************************************* |
| * Copyright (c) 2003 - 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 org.eclipse.mylyn.internal.bugzilla.ui.wizard; |
| |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.wizard.IWizardPage; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaReportElement; |
| import org.eclipse.mylyn.internal.bugzilla.core.NewBugzillaReport; |
| import org.eclipse.mylyn.internal.core.util.MylarStatusHandler; |
| import org.eclipse.mylyn.internal.tasklist.RepositoryTaskAttribute; |
| import org.eclipse.mylyn.internal.tasklist.ui.editors.AbstractTaskEditor; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.graphics.FontData; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.WorkbenchImages; |
| import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages; |
| import org.eclipse.ui.themes.IThemeManager; |
| |
| /** |
| * Class that contains shared functions for the last page of the wizards that |
| * submit bug reports. This page allows the user to set the bug report's |
| * attributes before submitting it. |
| * |
| * @author Mik Kersten (hardening of initial prototype) |
| */ |
| public abstract class AbstractBugzillaWizardPage extends WizardPage implements Listener { |
| |
| /** The instance of the workbench */ |
| protected IWorkbench workbench; |
| |
| /** Text field for the bugs url */ |
| protected Text urlText; |
| |
| /** Text field for the description of the bug */ |
| protected Text descriptionText; |
| |
| /** Text field for the summary of the bug */ |
| protected Text summaryText; |
| |
| /** Text field for the assignedTo of the bug */ |
| protected Text assignedToText; |
| |
| // /** Radio button to select when sending the new bug report to the server |
| // */ |
| // protected Button serverButton; |
| // |
| // /** Radio button to select when saving the new bug report offline */ |
| // protected Button offlineButton; |
| |
| /** Combo box for the component that caused the bug */ |
| protected Combo componentCombo; |
| |
| /** Combo box for the priority of the bug */ |
| protected Combo priorityCombo; |
| |
| /** Combo box for the platform the bug occurred on */ |
| protected Combo platformCombo; |
| |
| /** Combo box for the severity of the bug */ |
| protected Combo severityCombo; |
| |
| /** Combo box for the products version */ |
| protected Combo versionCombo; |
| |
| /** Combo box for the OS that the bug occurred under */ |
| protected Combo oSCombo; |
| |
| /** Combo box for the Milestone that the bug addresses */ |
| protected Combo milestoneCombo; |
| |
| /** Enum for value */ |
| protected final String VALUE = "VALUE"; |
| |
| /** Enum for property */ |
| protected final String PROPERTY = "PROPERTY"; |
| |
| /** Enum for header */ |
| protected final String HEADER = "HEADER"; |
| |
| /** The horizontal indentation of the labels */ |
| protected final int HORZ_INDENT = 0; |
| |
| /** Status variable for the possible errors on this page */ |
| protected IStatus attributeStatus; |
| |
| /** |
| * Constructor for AbstractWizardDataPage |
| * |
| * @param pageName |
| * the name of the page |
| * @param title |
| * the title of the page |
| * @param description |
| * the description text for the page |
| * @param workbench |
| * the instance of the workbench |
| */ |
| public AbstractBugzillaWizardPage(String pageName, String title, String description, IWorkbench workbench) { |
| super(pageName); |
| setTitle(title); |
| setDescription(description); |
| this.workbench = workbench; |
| |
| // set the status for the page |
| attributeStatus = new Status(IStatus.OK, "not_used", 0, "", null); |
| } |
| |
| /** |
| * Applies the status to the status line of a dialog page. |
| * |
| * @param status |
| * The status to apply to the status line |
| */ |
| protected void applyToStatusLine(IStatus status) { |
| String message = status.getMessage(); |
| if (message.length() == 0) |
| message = null; |
| switch (status.getSeverity()) { |
| case IStatus.OK: |
| setErrorMessage(null); |
| setMessage(message); |
| break; |
| case IStatus.WARNING: |
| setErrorMessage(null); |
| setMessage(message, WizardPage.WARNING); |
| break; |
| case IStatus.INFO: |
| setErrorMessage(null); |
| setMessage(message, WizardPage.INFORMATION); |
| break; |
| default: |
| setErrorMessage(null); |
| setMessage(message, WizardPage.ERROR); |
| break; |
| } |
| } |
| |
| /** |
| * Make sure that a String that is <code>null</code> is changed to a null |
| * string |
| * |
| * @param text |
| * The text to check if it is null or not |
| * @return The string in its proper format |
| */ |
| public String checkText(String text) { |
| if (text == null) |
| return ""; |
| else |
| return text; |
| } |
| |
| @Override |
| public boolean canFlipToNextPage() { |
| // no next page for this path through the wizard |
| return false; |
| } |
| |
| /** |
| * Create a new layout for a component |
| * |
| * @param composite |
| * The parent composite |
| * @param colSpan |
| * The number of columns that this can span |
| * @param text |
| * The text to add to the control |
| * @param style |
| * The style that the control should have |
| */ |
| public void newLayout(Composite composite, int colSpan, String text, String style) { |
| GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); |
| data.horizontalSpan = colSpan; |
| |
| // create the proper layout for the style |
| if (style.equalsIgnoreCase(VALUE)) { |
| Label l = new Label(composite, SWT.NONE); |
| FontData fontData = l.getFont().getFontData()[0]; |
| fontData.setStyle(SWT.BOLD | fontData.getStyle()); |
| Font font = new Font(null, fontData); |
| l.setFont(font); |
| l.setText(checkText(text)); |
| |
| data.horizontalIndent = HORZ_INDENT; |
| l.setLayoutData(data); |
| } else if (style.equalsIgnoreCase(PROPERTY)) { |
| Label l = new Label(composite, SWT.NONE); |
| FontData fontData = l.getFont().getFontData()[0]; |
| fontData.setStyle(SWT.BOLD | fontData.getStyle()); |
| Font font = new Font(null, fontData); |
| l.setFont(font); |
| l.setText(checkText(text)); |
| |
| data.horizontalIndent = HORZ_INDENT; |
| l.setLayoutData(data); |
| } else { |
| Composite generalTitleGroup = new Composite(composite, SWT.NONE); |
| generalTitleGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| generalTitleGroup.setLayoutData(data); |
| GridLayout generalTitleLayout = new GridLayout(); |
| generalTitleLayout.numColumns = 2; |
| generalTitleLayout.marginWidth = 0; |
| generalTitleLayout.marginHeight = 9; |
| generalTitleGroup.setLayout(generalTitleLayout); |
| |
| Label image = new Label(generalTitleGroup, SWT.NONE); |
| image.setImage(WorkbenchImages.getImage(IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM)); |
| |
| GridData gd = new GridData(GridData.FILL_BOTH); |
| gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING; |
| image.setLayoutData(gd); |
| Label l = new Label(composite, SWT.NONE); |
| FontData fontData = l.getFont().getFontData()[0]; |
| fontData.setStyle(SWT.BOLD | fontData.getStyle()); |
| Font font = new Font(null, fontData); |
| l.setFont(font); |
| l.setText(checkText(text)); |
| |
| data.horizontalIndent = HORZ_INDENT; |
| l.setLayoutData(data); |
| } |
| } |
| |
| /** |
| * Determine if the page is complete when the summary is changed |
| * |
| * @param e |
| * The event which occurred |
| */ |
| public void handleEvent(Event e) { |
| boolean pageComplete = isPageComplete(); |
| |
| // Initialize a variable with the no error status |
| Status status = new Status(IStatus.OK, "not_used", 0, "", null); |
| |
| setPageComplete(pageComplete); |
| |
| if (!pageComplete) |
| status = new Status(IStatus.ERROR, "not_used", 0, "You must enter a summary and a description", null); |
| |
| attributeStatus = status; |
| |
| // Show the most serious error |
| applyToStatusLine(attributeStatus); |
| |
| setPageComplete(pageComplete); |
| getWizard().getContainer().updateButtons(); |
| } |
| |
| @Override |
| public IWizardPage getNextPage() { |
| saveDataToModel(); |
| return null; |
| } |
| |
| /** |
| * Sets the completed field on the wizard class when all the needed |
| * information is entered and the wizard can be completed |
| * |
| * @return true if the wizard can be completed, false otherwise |
| */ |
| @Override |
| public boolean isPageComplete() { |
| AbstractBugzillaReportWizard wizard = (AbstractBugzillaReportWizard) getWizard(); |
| if (summaryText.getText() == null || summaryText.getText().equals("") || descriptionText.getText() == null |
| || descriptionText.getText().equals("")) { |
| wizard.completed = false; |
| return false; |
| } |
| // saveDataToModel(); |
| wizard.completed = true; |
| return true; |
| } |
| |
| /** |
| * Save the data obtained from this point in the wizard to the model. |
| */ |
| public void saveDataToModel() { |
| // get the model that we are using |
| AbstractBugzillaReportWizard wizard = (AbstractBugzillaReportWizard) getWizard(); |
| NewBugzillaReport nbm = wizard.model; |
| |
| nbm.setDescription(descriptionText.getText()); |
| nbm.setSummary(summaryText.getText()); |
| |
| // go through each of the attributes and sync their values with the |
| // combo boxes |
| for (Iterator<RepositoryTaskAttribute> it = nbm.getAttributes().iterator(); it.hasNext();) { |
| RepositoryTaskAttribute attribute = it.next(); |
| String key = attribute.getName(); |
| Map<String, String> values = attribute.getOptionValues(); |
| |
| try { |
| if (values == null) |
| values = new HashMap<String, String>(); |
| if (key.equals(BugzillaReportElement.OP_SYS.toString())) { |
| String os = oSCombo.getItem(oSCombo.getSelectionIndex()); |
| attribute.setValue(os); |
| } else if (key.equals(BugzillaReportElement.VERSION.toString())) { |
| String version = versionCombo.getItem(versionCombo.getSelectionIndex()); |
| attribute.setValue(version); |
| } else if (key.equals(BugzillaReportElement.BUG_SEVERITY.toString())) { |
| String severity = severityCombo.getItem(severityCombo.getSelectionIndex()); |
| attribute.setValue(severity); |
| } else if (key.equals(BugzillaReportElement.REP_PLATFORM.toString())) { |
| String platform = platformCombo.getItem(platformCombo.getSelectionIndex()); |
| attribute.setValue(platform); |
| } else if (key.equals(BugzillaReportElement.TARGET_MILESTONE.toString())) { |
| int index = milestoneCombo.getSelectionIndex(); |
| if(index >= 0) { |
| String milestone = milestoneCombo.getItem(milestoneCombo.getSelectionIndex()); |
| attribute.setValue(milestone); |
| } |
| } else if (key.equals(BugzillaReportElement.COMPONENT.toString())) { |
| String component = componentCombo.getItem(componentCombo.getSelectionIndex()); |
| attribute.setValue(component); |
| } else if (key.equals(BugzillaReportElement.PRIORITY.toString())) { |
| String priority = priorityCombo.getItem(priorityCombo.getSelectionIndex()); |
| attribute.setValue(priority); |
| } else if (key.equals(BugzillaReportElement.BUG_FILE_LOC.toString())) { |
| if (urlText != null) { |
| String url = urlText.getText(); |
| if (url.equalsIgnoreCase("http://")) |
| url = ""; |
| attribute.setValue(url); |
| } |
| } else if (key.equals(BugzillaReportElement.ASSIGNED_TO.toString())) { |
| String assignTo = assignedToText.getText(); |
| attribute.setValue(assignTo); |
| } else { |
| // do nothing |
| } |
| } catch (IllegalArgumentException e) { |
| MylarStatusHandler.fail(e, "could not set attribute: " + attribute, false); |
| } |
| } |
| // wizard.attributeCompleted = true; |
| } |
| |
| @Override |
| protected void setControl(Control c) { |
| super.setControl(c); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) |
| */ |
| public void createControl(Composite parent) { |
| // whether the priority exists or not |
| boolean priExist = false; |
| boolean mileExist = false; |
| |
| String url = null; |
| |
| // get the model for the new bug |
| AbstractBugzillaReportWizard wizard = (AbstractBugzillaReportWizard) getWizard(); |
| NewBugzillaReport nbm = wizard.model; |
| |
| // Set the current platform and OS on the model |
| setPlatformOptions(nbm); |
| |
| // Attributes Composite- this holds all the combo fields and text |
| // fields |
| Composite attributesComposite = new Composite(parent, SWT.NONE); |
| GridLayout attributesLayout = new GridLayout(); |
| attributesLayout.numColumns = 4; |
| attributesLayout.horizontalSpacing = 14; |
| attributesLayout.verticalSpacing = 6; |
| attributesLayout.makeColumnsEqualWidth = false; |
| attributesComposite.setLayout(attributesLayout); |
| |
| GridData attributesData = new GridData(GridData.FILL_BOTH); |
| attributesData.horizontalSpan = 1; |
| attributesData.grabExcessVerticalSpace = false; |
| attributesComposite.setLayoutData(attributesData); |
| // End Attributes Composite |
| |
| GridLayout attributesTitleLayout = new GridLayout(); |
| attributesTitleLayout.horizontalSpacing = 0; |
| attributesTitleLayout.marginWidth = 0; |
| |
| GridData attributesTitleData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| attributesTitleData.horizontalSpan = 4; |
| |
| attributesTitleData.grabExcessVerticalSpace = false; |
| |
| // Add the product to the composite |
| newLayout(attributesComposite, 1, "Product", PROPERTY); |
| newLayout(attributesComposite, 1, nbm.getProduct(), VALUE); |
| |
| // Populate Attributes |
| for (Iterator<RepositoryTaskAttribute> it = nbm.getAttributes().iterator(); it.hasNext();) { |
| RepositoryTaskAttribute attribute = it.next(); |
| String key = attribute.getID(); |
| String name = attribute.getName(); |
| String value = checkText(attribute.getValue()); |
| Map<String, String> values = attribute.getOptionValues(); |
| |
| // if it is a hidden field, don't try to display it |
| if (attribute.isHidden()) |
| continue; |
| |
| if (key == null) |
| key = ""; |
| |
| if (values == null) |
| values = new HashMap<String, String>(); |
| |
| GridData data = new GridData(GridData.BEGINNING); |
| data.horizontalSpan = 1; |
| data.horizontalIndent = HORZ_INDENT; |
| data.widthHint = 150; |
| // create and populate the combo fields for the attributes |
| if (key.equals(BugzillaReportElement.OP_SYS.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| oSCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY); |
| |
| oSCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| oSCombo.add(a[i]); |
| } |
| int index; |
| if ((index = oSCombo.indexOf(value)) == -1) |
| index = 0; |
| oSCombo.select(index); |
| oSCombo.addListener(SWT.Modify, this); |
| } else if (key.equals(BugzillaReportElement.VERSION.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| |
| versionCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| |
| versionCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| versionCombo.add(a[i]); |
| } |
| int index; |
| if ((index = versionCombo.indexOf(value)) == -1) |
| index = 0; |
| versionCombo.select(index); |
| versionCombo.addListener(SWT.Modify, this); |
| } else if (key.equals(BugzillaReportElement.BUG_SEVERITY.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| severityCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| |
| severityCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| severityCombo.add(a[i]); |
| } |
| int index; |
| if ((index = severityCombo.indexOf(value)) == -1) |
| index = 0; |
| severityCombo.select(index); |
| severityCombo.addListener(SWT.Modify, this); |
| |
| } else if (key.equals(BugzillaReportElement.REP_PLATFORM.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| platformCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| |
| platformCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| platformCombo.add(a[i]); |
| } |
| int index; |
| if ((index = platformCombo.indexOf(value)) == -1) |
| index = 0; |
| platformCombo.select(index); |
| platformCombo.addListener(SWT.Modify, this); |
| } else if (key.equals(BugzillaReportElement.TARGET_MILESTONE.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| milestoneCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| milestoneCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| milestoneCombo.add(a[i]); |
| } |
| int index; |
| if ((index = milestoneCombo.indexOf(value)) == -1) |
| index = 0; |
| milestoneCombo.select(index); |
| milestoneCombo.addListener(SWT.Modify, this); |
| //if(s.isEmpty()) milestoneCombo.setEnabled(false); |
| mileExist = true; |
| } else if (key.equals(BugzillaReportElement.COMPONENT.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| componentCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| |
| componentCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| componentCombo.add(a[i]); |
| } |
| int index; |
| if ((index = componentCombo.indexOf(value)) == -1) |
| index = 0; |
| componentCombo.select(index); |
| componentCombo.addListener(SWT.Modify, this); |
| } else if (key.equals(BugzillaReportElement.PRIORITY.getKeyString())) { |
| newLayout(attributesComposite, 1, name, PROPERTY); |
| priorityCombo = new Combo(attributesComposite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL |
| | SWT.READ_ONLY); |
| |
| priorityCombo.setLayoutData(data); |
| Set<String> s = values.keySet(); |
| String[] a = s.toArray(new String[s.size()]); |
| for (int i = 0; i < a.length; i++) { |
| priorityCombo.add(a[i]); |
| } |
| int index; |
| if ((index = priorityCombo.indexOf(value)) == -1) |
| index = 0; |
| priorityCombo.select(index); |
| priorityCombo.addListener(SWT.Modify, this); |
| priExist = true; |
| } else if (key.equals(BugzillaReportElement.BUG_FILE_LOC.getKeyString())) { |
| url = value; |
| } else { |
| // do nothing if it isn't a standard value to change |
| } |
| } |
| |
| if (priExist && !mileExist) { |
| newLayout(attributesComposite, 1, "", PROPERTY); |
| newLayout(attributesComposite, 1, "", PROPERTY); |
| } |
| |
| Composite textComposite = new Composite(attributesComposite, SWT.NONE); |
| textComposite.setLayout(new GridLayout(3, false)); |
| GridData textCompositeGD = new GridData(); |
| textCompositeGD.horizontalSpan = 4; |
| textCompositeGD.grabExcessHorizontalSpace = true; |
| textComposite.setLayoutData(textCompositeGD); |
| |
| |
| GridData urlTextData; |
| if (url != null) { |
| newLayout(textComposite, 1, BugzillaReportElement.BUG_FILE_LOC.toString(), PROPERTY); |
| urlText = new Text(textComposite, SWT.BORDER | SWT.SINGLE | SWT.WRAP); |
| urlTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| |
| urlTextData.horizontalSpan = 2; |
| // summaryTextData.widthHint = 200; |
| urlText.setLayoutData(urlTextData); |
| urlText.setText(url); |
| urlText.addListener(SWT.FocusOut, this); |
| } |
| |
| GridData summaryTextData; |
| newLayout(textComposite, 1, BugzillaReportElement.ASSIGNED_TO.toString(), PROPERTY); |
| Label l = new Label(textComposite, SWT.NONE); |
| l.setText("(if email is incorrect submit will not proceed)"); |
| summaryTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| summaryTextData.horizontalSpan = 1; |
| l.setLayoutData(summaryTextData); |
| assignedToText = new Text(textComposite, SWT.BORDER | SWT.SINGLE | SWT.WRAP); |
| summaryTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| |
| summaryTextData.horizontalSpan = 1; |
| summaryTextData.widthHint = 200; |
| assignedToText.setLayoutData(summaryTextData); |
| assignedToText.setText(""); |
| |
| |
| IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); |
| Font repositoryFont = themeManager.getCurrentTheme().getFontRegistry().get(AbstractTaskEditor.REPOSITORY_TEXT_ID); |
| |
| // add the summary text field |
| newLayout(textComposite, 1, BugzillaReportElement.SHORT_DESC.toString(), PROPERTY); |
| summaryText = new Text(textComposite, SWT.BORDER | SWT.SINGLE | SWT.WRAP); |
| summaryText.setFont(repositoryFont); |
| summaryTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| |
| summaryTextData.horizontalSpan = 2; |
| summaryTextData.widthHint = 200; |
| summaryText.setLayoutData(summaryTextData); |
| summaryText.setText(nbm.getSummary()); |
| summaryText.addListener(SWT.Modify, this); |
| |
| // Description Text |
| Composite descriptionComposite = new Composite(attributesComposite, SWT.NONE); |
| |
| descriptionComposite.setLayout(attributesTitleLayout); |
| |
| GridData descriptionData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| descriptionData.horizontalSpan = 4; |
| descriptionData.grabExcessVerticalSpace = false; |
| descriptionComposite.setLayoutData(descriptionData); |
| newLayout(descriptionComposite, 4, "Description:", HEADER); |
| |
| // add the description text field |
| descriptionText = new Text(attributesComposite, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP); |
| |
| //descriptionText.setFont(AbstractTaskEditor.COMMENT_FONT); |
| descriptionText.setFont(repositoryFont); |
| GridData descriptionTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| descriptionTextData.horizontalSpan = 4; |
| descriptionTextData.widthHint = AbstractTaskEditor.DESCRIPTION_WIDTH; |
| descriptionTextData.heightHint = AbstractTaskEditor.DESCRIPTION_HEIGHT; |
| descriptionText.setLayoutData(descriptionTextData); |
| descriptionText.addListener(SWT.Modify, this); |
| |
| // serverButton = new Button(attributesComposite, SWT.RADIO); |
| // serverButton.setText("Submit bug report to the server."); |
| // GridData toServerButtonData = new |
| // GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); |
| // toServerButtonData.horizontalSpan = 4; |
| // serverButton.setLayoutData(toServerButtonData); |
| // serverButton.setSelection(true); |
| // |
| // offlineButton = new Button(attributesComposite, SWT.RADIO); |
| // offlineButton.setText("Save bug report offline."); |
| // GridData offlineButtonData = new |
| // GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); |
| // offlineButtonData.horizontalSpan = 4; |
| // offlineButton.setLayoutData(offlineButtonData); |
| // offlineButton.setSelection(false); |
| |
| // if (wizard.fromDialog) |
| // offlineButton.setEnabled(false); |
| |
| setControl(attributesComposite); |
| return; |
| } |
| |
| // /** |
| // * @return <code>true</code> if the radio button to submit the bug to the |
| // * server is selected. |
| // */ |
| // public boolean serverSelected() { |
| // return (serverButton == null) ? false : serverButton.getSelection(); |
| // } |
| // |
| // /** |
| // * @return <code>true</code> if the radio button to save the bug offline |
| // * is selected. |
| // */ |
| // public boolean offlineSelected() { |
| // return (offlineButton == null) ? false : offlineButton.getSelection(); |
| // } |
| |
| /* |
| * The following are Bugzilla's: OS's All AIX Windows 95 Windows 98 Windows |
| * CE Windows Mobile 2003 Windows Mobile 2005 Windows ME Windows 2000 |
| * Windows NT Windows XP Windows 2003 Server Windows All MacOS X Linux |
| * Linux-GTK Linux-Motif HP-UX Neutrino QNX-Photon Solaris Solaris-GTK |
| * Solaris-Motif SymbianOS-Series 80 Unix All other |
| * |
| * The following are the platforsm in Bugzilla: All Macintosh PC Power PC |
| * Sun Other |
| * |
| * The following are Java's Archictures: [PA_RISC, ppc, sparc, x86, x86_64, |
| * ia64, ia64_32] |
| * |
| * The following are Java's OS's: [aix, hpux, linux, macosx, qnx, solaris, |
| * win32] |
| */ |
| /** |
| * Sets the OS and Platform for the new bug |
| * |
| * @param newBugModel |
| * The bug to set the options for |
| */ |
| public void setPlatformOptions(NewBugzillaReport newBugModel) { |
| try { |
| // A Map from Java's OS and Platform to Buzilla's |
| Map<String, String> java2buzillaOSMap = new HashMap<String, String>(); |
| Map<String, String> java2buzillaPlatformMap = new HashMap<String, String>(); |
| |
| java2buzillaPlatformMap.put("x86", "PC"); |
| java2buzillaPlatformMap.put("x86_64", "PC"); |
| java2buzillaPlatformMap.put("ia64", "PC"); |
| java2buzillaPlatformMap.put("ia64_32", "PC"); |
| java2buzillaPlatformMap.put("sparc", "Sun"); |
| java2buzillaPlatformMap.put("ppc", "Power"); |
| |
| java2buzillaOSMap.put("aix", "AIX"); |
| java2buzillaOSMap.put("hpux", "HP-UX"); |
| java2buzillaOSMap.put("linux", "Linux"); |
| java2buzillaOSMap.put("macosx", "MacOS X"); |
| java2buzillaOSMap.put("qnx", "QNX-Photon"); |
| java2buzillaOSMap.put("solaris", "Solaris"); |
| java2buzillaOSMap.put("win32", "Windows"); |
| |
| // Get OS Lookup Map |
| // Check that the result is in Values, if it is not, set it to other |
| RepositoryTaskAttribute opSysAttribute = newBugModel.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()); |
| RepositoryTaskAttribute platformAttribute = newBugModel.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()); |
| |
| String OS = Platform.getOS(); |
| String platform = Platform.getOSArch(); |
| |
| String bugzillaOS = null; // Bugzilla String for OS |
| String bugzillaPlatform = null; // Bugzilla String for Platform |
| |
| if (java2buzillaOSMap != null && java2buzillaOSMap.containsKey(OS) && opSysAttribute != null |
| && opSysAttribute.getOptionValues() != null) { |
| bugzillaOS = java2buzillaOSMap.get(OS); |
| if (opSysAttribute != null && !opSysAttribute.getOptionValues().values().contains(bugzillaOS)) { |
| // If the OS we found is not in the list of available |
| // options, set bugzillaOS |
| // to null, and just use "other" |
| bugzillaOS = null; |
| } |
| } else { |
| // If we have a strangeOS, then just set buzillaOS to null, and |
| // use "other" |
| bugzillaOS = null; |
| } |
| |
| if (platform != null && java2buzillaPlatformMap.containsKey(platform)) { |
| bugzillaPlatform = java2buzillaPlatformMap.get(platform); |
| |
| if (platformAttribute != null |
| && !platformAttribute.getOptionValues().values().contains(bugzillaPlatform)) { |
| // If the platform we found is not int the list of available |
| // optinos, set the |
| // Bugzilla Platform to null, and juse use "other" |
| bugzillaPlatform = null; |
| } |
| } else { |
| // If we have a strange platform, then just set bugzillaPatforrm |
| // to null, and use "other" |
| bugzillaPlatform = null; |
| } |
| |
| // Set the OS and the Platform in the model |
| if (bugzillaOS != null && opSysAttribute != null) |
| opSysAttribute.setValue(bugzillaOS); |
| if (bugzillaPlatform != null && platformAttribute != null) |
| platformAttribute.setValue(bugzillaPlatform); |
| |
| } catch (Exception e) { |
| MylarStatusHandler.fail(e, "could not set platform options", false); |
| } |
| } |
| |
| } |