| /******************************************************************************* |
| * Copyright (c) 2004, 2008 Tasktop Technologies 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: |
| * Ken Sueda - initial API and implementation |
| * Tasktop Technologies - improvements |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.examples.monitor.study; |
| |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.OutputStream; |
| |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.mylyn.commons.core.StatusHandler; |
| import org.eclipse.mylyn.monitor.usage.AbstractStudyQuestionnairePage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| 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.Label; |
| import org.eclipse.swt.widgets.Text; |
| |
| /** |
| * A wizard for uploading the Mylyn statistics to a website |
| * |
| * @author Ken Sueda |
| * @author Mik Kersten |
| */ |
| public class QuestionnaireWizardPage extends AbstractStudyQuestionnairePage { |
| |
| private static final String NOT_GOOD = "Not Good"; |
| |
| private static final String GOOD = "Good"; |
| |
| private static final String NOT_WELL = "Not well"; |
| |
| private static final String OK = "OK"; |
| |
| private static final String WELL = "Well"; |
| |
| private static final String UNSURE = "Unsure"; |
| |
| private static final String SELECT = ""; |
| |
| private static final String EXPLORED = "Explored"; |
| |
| private static final String DOCUMENTED = "Documented"; |
| |
| private static final String TESTED = "Tested"; |
| |
| private static final String ADDED_NEW_FEATURES = "Added new features"; |
| |
| private static final String MADE_ENHANCEMENTS = "Made enhancements"; |
| |
| private static final String FIXED_BUGS = "Fixed bugs"; |
| |
| private Combo taskCombo; |
| |
| private Combo mentalModelCombo; |
| |
| private Combo integrateCombo; |
| |
| private Combo doiCombo; |
| |
| private String taskPerformedFeedback = null; |
| |
| private String mentalModelFeedback = null; |
| |
| private String doiModelFeedback = null; |
| |
| private String integrateFeedback = null; |
| |
| private String positiveFeedback = null; |
| |
| private String negativeFeedback = null; |
| |
| private Text positiveText = null; |
| |
| private Text negativeText = null; |
| |
| public QuestionnaireWizardPage() { |
| super("Questionnaire Wizard"); |
| setTitle("Questionnaire"); |
| } |
| |
| public void createControl(Composite parent) { |
| Composite container = new Composite(parent, SWT.NULL); |
| GridLayout layout = new GridLayout(); |
| container.setLayout(layout); |
| layout.numColumns = 1; |
| layout.verticalSpacing = 9; |
| |
| // drop down box, choose from: |
| // fixed bugs, made enhancements, added new features, tested, |
| // documented, explored |
| Label label = new Label(container, SWT.NULL); |
| label.setText("What task did you primarily work on this week?"); |
| |
| taskCombo = new Combo(container, SWT.READ_ONLY); |
| taskCombo.setText(SELECT); |
| taskCombo.add(FIXED_BUGS); |
| taskCombo.add(MADE_ENHANCEMENTS); |
| taskCombo.add(ADDED_NEW_FEATURES); |
| taskCombo.add(TESTED); |
| taskCombo.add(DOCUMENTED); |
| taskCombo.add(EXPLORED); |
| taskCombo.add(UNSURE); |
| |
| taskCombo.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| taskPerformedFeedback = taskCombo.getText(); |
| getContainer().updateButtons(); |
| } |
| }); |
| |
| // drop down box, choose from: |
| // well, ok, not well |
| label = new Label(container, SWT.NULL); |
| label.setText("How accurately did the context model match your mental model of interesting elements?"); |
| mentalModelCombo = new Combo(container, SWT.READ_ONLY); |
| mentalModelCombo.setText(SELECT); |
| mentalModelCombo.add(WELL); |
| mentalModelCombo.add(OK); |
| mentalModelCombo.add(NOT_WELL); |
| mentalModelCombo.add(UNSURE); |
| |
| mentalModelCombo.addSelectionListener(new SelectionAdapter() { |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| mentalModelFeedback = mentalModelCombo.getText(); |
| getContainer().updateButtons(); |
| } |
| }); |
| |
| // drop down box |
| // chose from: good, ok, not good |
| label = new Label(container, SWT.NULL); |
| label.setText("How effective are the Mylyn views at exposing what you are working on?"); |
| doiCombo = new Combo(container, SWT.READ_ONLY); |
| doiCombo.setText(SELECT); |
| doiCombo.add(GOOD); |
| doiCombo.add(OK); |
| doiCombo.add(NOT_GOOD); |
| doiCombo.add(UNSURE); |
| |
| doiCombo.addSelectionListener(new SelectionAdapter() { |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| doiModelFeedback = doiCombo.getText(); |
| getContainer().updateButtons(); |
| } |
| }); |
| |
| // drop down box |
| // chose from: well, ok, not well |
| label = new Label(container, SWT.NULL); |
| label.setText("How well did Mylyn integrate with your workspace and environment?"); |
| integrateCombo = new Combo(container, SWT.READ_ONLY); |
| integrateCombo.setText(SELECT); |
| integrateCombo.add(WELL); |
| integrateCombo.add(OK); |
| integrateCombo.add(NOT_WELL); |
| integrateCombo.add(UNSURE); |
| |
| integrateCombo.addSelectionListener(new SelectionAdapter() { |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| integrateFeedback = integrateCombo.getText(); |
| getContainer().updateButtons(); |
| } |
| }); |
| |
| positiveText = createTextWithLabel(container, "What worked well?"); |
| negativeText = createTextWithLabel(container, "What does not work well?"); |
| setControl(container); |
| } |
| |
| private Text createTextWithLabel(Composite parent, String label) { |
| GridData gd = new GridData(); |
| gd.horizontalAlignment = GridData.FILL; |
| gd.verticalAlignment = GridData.FILL; |
| gd.verticalSpan = 10; |
| Label searchLabel = new Label(parent, SWT.NONE); |
| searchLabel.setText(label); |
| Text t = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); |
| t.setLayoutData(gd); |
| return t; |
| } |
| |
| private void finishedSelected() { |
| if (this.taskPerformedFeedback == null) { |
| this.taskPerformedFeedback = FIXED_BUGS; |
| } |
| if (this.mentalModelFeedback == null) { |
| this.mentalModelFeedback = WELL; |
| } |
| if (this.doiModelFeedback == null) { |
| this.doiModelFeedback = GOOD; |
| } |
| if (this.integrateFeedback == null) { |
| this.integrateFeedback = WELL; |
| } |
| positiveFeedback = positiveText.getText(); |
| if (this.positiveFeedback == null) { |
| positiveFeedback = "none"; |
| } |
| negativeFeedback = negativeText.getText(); |
| if (this.negativeFeedback == null) { |
| negativeFeedback = "none"; |
| } |
| } |
| |
| @Override |
| public File createFeedbackFile() { |
| finishedSelected(); |
| IPath rootPath = ResourcesPlugin.getWorkspace().getRoot().getLocation(); |
| String path = rootPath.toString() + File.separator + "questionnaire.txt"; |
| File questionnaireFile = new File(path); |
| |
| if (questionnaireFile.exists()) { |
| questionnaireFile.delete(); |
| } |
| |
| OutputStream outputStream; |
| try { |
| outputStream = new FileOutputStream(questionnaireFile); |
| |
| String buffer = "Tasks: " + getTaskPerformedFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| buffer = "MentalModel: " + getMentalModelFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| buffer = "DOI: " + getDoiModelFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| buffer = "Integrate: " + getIntegrateFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| buffer = "Positive: " + getPositiveFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| buffer = "Negative: " + getNegativeFeedback() + "\r\n"; |
| outputStream.write(buffer.getBytes()); |
| outputStream.close(); |
| return questionnaireFile; |
| } catch (IOException e) { |
| StatusHandler.log(new Status(IStatus.ERROR, MylynUserStudyExamplePlugin.ID_PLUGIN, "Failed to submit", e)); |
| } |
| return null; |
| } |
| |
| /******************************************************************************************************************* |
| * getters Methods |
| ******************************************************************************************************************/ |
| public String getDoiModelFeedback() { |
| return doiModelFeedback; |
| } |
| |
| public String getIntegrateFeedback() { |
| return integrateFeedback; |
| } |
| |
| public String getMentalModelFeedback() { |
| return mentalModelFeedback; |
| } |
| |
| public String getNegativeFeedback() { |
| return negativeFeedback; |
| } |
| |
| public String getPositiveFeedback() { |
| return positiveFeedback; |
| } |
| |
| public String getTaskPerformedFeedback() { |
| return taskPerformedFeedback; |
| } |
| |
| @Override |
| public boolean isPageComplete() { |
| if (taskCombo.getText().equals(SELECT) || doiCombo.getText().equals(SELECT) |
| || mentalModelCombo.getText().equals(SELECT) || integrateCombo.getText().equals(SELECT)) { |
| // setErrorMessage("Must complete answers"); |
| return false; |
| } else { |
| // setErrorMessage(null); |
| return true; |
| } |
| } |
| } |