package com.mobilesorcery.sdk.builder.blackberry.ui.preferences; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.PreferencePage; 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.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import com.mobilesorcery.sdk.builder.blackberry.BlackBerryPlugin; import com.mobilesorcery.sdk.builder.blackberry.GuessVersionJob; import com.mobilesorcery.sdk.builder.blackberry.JDE; import com.mobilesorcery.sdk.core.Version; import com.mobilesorcery.sdk.ui.SimpleListEditor; import com.mobilesorcery.sdk.ui.UIUtils; public class JDEPreferencePage extends PreferencePage implements IWorkbenchPreferencePage{ private SimpleListEditor<JDE> editor; public JDEPreferencePage() { super(); setPreferenceStore(BlackBerryPlugin.getDefault().getPreferenceStore()); } @Override public void init(IWorkbench workbench) { } @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(1, false)); editor = new SimpleListEditor<JDE>(main, SWT.NONE) { @Override public boolean edit(Object selection, boolean add) { return openEditor((JDE) selection, add); } @Override public JDE createObject() { return createJDE(new Path(""), null); } }; editor.setInput(getJDEs()); editor.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 1, 1)); return main; } private List<JDE> getJDEs() { return BlackBerryPlugin.getDefault().getJDEs(getToolType()); } protected boolean openEditor(JDE selection, boolean add) { Shell shell = getShell(); JDEEditorDialog dialog = new JDEEditorDialog(shell); dialog.setShowVersionField(!add); dialog.setInitial(selection); dialog.setToolType(getToolType()); int result = dialog.open(); if (result == JDEEditorDialog.OK) { JDE newJDE = dialog.getEdited(); if (add) { GuessVersionJob job = new GuessVersionJob(); job.setJDE(newJDE); job.schedule(); try { job.join(); } catch (InterruptedException e) { BlackBerryPlugin.getDefault().getLog().log(new Status(IStatus.WARNING, BlackBerryPlugin.PLUGIN_ID, "Timeout")); } newJDE.apply(createJDE(newJDE.getLocation(), job.getVersion())); } selection.apply(newJDE); return true; } return false; } protected JDE createJDE(IPath location, Version version) { return JDE.create(getToolType(), location, version); } @Override public boolean performOk() { BlackBerryPlugin.getDefault().setJDEs(getToolType(), editor.getEditedInput()); return super.performOk(); } protected int getToolType() { return JDE.TYPE_DEV_TOOLS; } }