/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingspectator.monitor.ui;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import edu.illinois.codingspectator.monitor.ui.prefs.PrefsFacade;
import edu.illinois.codingspectator.monitor.ui.submission.Submitter;
/**
* This is the preference page for the plug-in. It displays the UUID(String) which will be used in
* the URL to the repository to store the recorded data.
*
* A single UUID is assigned to each workspace of Eclipse helping us identify which machine the user
* is working on in the event that a user programs on multiple machines.
*
* There is an option for the user to force the upload of the data. This is enabled through the
* "Upload Now" button on preference page (similar to the interface of the UDC preference page).
*
* @author Mohsen Vakilian
* @author nchen
* @author Stas Negara
*
*/
public class UploadingPreferencePage extends BundlePreferencePage implements IWorkbenchPreferencePage {
private StringFieldEditor lastUploadTextField;
public UploadingPreferencePage() {
super(GRID);
noDefaultAndApplyButton();
}
@Override
public void init(IWorkbench workbench) {
IPreferenceStore preferenceStore= PrefsFacade.getInstance().getPreferenceStore();
setPreferenceStore(preferenceStore);
setDescription(Activator.populateMessageWithPluginName(Messages.UploadingPreferencePage_Description));
preferenceStore.addPropertyChangeListener(new LastUploadChangeListener(Messages.PrefsFacade_LastUploadTimeKey));
}
@Override
protected void createFieldEditors() {
lastUploadTextField= addDisabledTextField(Messages.PrefsFacade_LastUploadTimeKey, Messages.UploadingPreferencePage_LastUploadTextField);
createUploadNowButton();
}
@Override
public boolean performOk() {
// Do not store any values for the disabled text fields
// All values will be stored manually through PrefsFacade
return true;
}
private void createUploadNowButton() {
Button uploadButton= new Button(getFieldEditorParent(), SWT.PUSH);
uploadButton.setText(Activator.populateMessageWithPluginName(Messages.UploadingPreferencePage_UploadNowButtonText));
uploadButton.addSelectionListener(new SelectionAdapter() {
/**
* CodingSpectator lets the user manually upload the data if Eclipse is in development
* mode. But, it doesn't automatically upload the data at the start-up if Eclipse is run
* in development mode. See #{@link Activator#earlyStartup}.
*/
@Override
public void widgetSelected(SelectionEvent e) {
final Submitter submitter= new Submitter();
if (Uploader.promptUntilValidCredentialsOrCanceled(submitter)) {
Uploader.submit(submitter);
}
}
});
}
public class LastUploadChangeListener extends PreferenceChangeListener {
public LastUploadChangeListener(String preferenceKey) {
super(preferenceKey);
}
@Override
protected StringFieldEditor getFieldEditor() {
return lastUploadTextField;
}
}
}