Java tutorial
/****************************************************************************** * Copyright (c) 2006-2008 g-Eclipse consortium * 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 * * Initial development of the original code was made for * project g-Eclipse founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributor(s): * PSNC: * - Katarzyna Bylec (katis@man.poznan.pl) * *****************************************************************************/ package eu.geclipse.jsdl.ui.wizards; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.IWizardNode; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.jface.wizard.WizardSelectionPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.xml.sax.SAXException; import eu.geclipse.core.model.GridModel; import eu.geclipse.core.model.IGridConnectionElement; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IVirtualOrganization; import eu.geclipse.core.reporting.ProblemException; import eu.geclipse.jsdl.JSDLJobDescription; import eu.geclipse.jsdl.ui.internal.Activator; import eu.geclipse.jsdl.ui.preference.ApplicationParametersRegistry; import eu.geclipse.jsdl.ui.wizards.nodes.BasicWizardPart; import eu.geclipse.jsdl.ui.wizards.nodes.SpecificWizardPart; import eu.geclipse.jsdl.ui.wizards.specific.ApplicationSpecificPage; import eu.geclipse.jsdl.ui.wizards.specific.IApplicationSpecificPage; import eu.geclipse.ui.dialogs.GridFileDialog; import eu.geclipse.ui.dialogs.ProblemDialog; import eu.geclipse.ui.widgets.StoredCombo; import eu.geclipse.ui.wizards.IProjectSelectionProvider; /** * Wizard page that allows user to choose an executable for the grid job, name * of the job and its description */ public class ExecutableNewJobWizardPage extends WizardSelectionPage implements ModifyListener { private static final String STD_FILES_TOOL_TIP = "Specify executable file to activate this field"; /** * Key for the executable file preference. */ private static String INPUT_EXE_ID = "executable_file"; //$NON-NLS-1$ boolean done; boolean firstTime = true; IVirtualOrganization virtualOrg; Text stdin; Text stdout; Text stderr; /** * Holds the name of the executable */ StoredCombo executableFile; Composite parentP; /** * Button for opening {@link GridFileDialog} - a dialog for choosing local or * remote files */ private Button gridFileDialogButton; /** * Holds name of the application */ private CCombo applicationName; private ArrayList<WizardPage> internalPages; private BasicWizardPart basicNode; private Button chooseButton; private Text argumentsLine; private Map<String, Integer> appsWithParametersFromPrefs = new HashMap<String, Integer>(); /** * Object representing basic JSDL content for an application specific * settings. It is parsed (created) when the "Finish" button is pressed - not * every time the application chosen by user changes. This is kind of lazy * loading. This object is passed to {@link DataStagingNewJobWizardPage} so it * can present data staging information form basic JSDL file to the user. */ private JSDLJobDescription basicJSDL; private Group stdFilesGroup; private Button outButton; private Button errButton; /** * Creates new wizard page * * @param pageName name of the page * @param internalPages */ protected ExecutableNewJobWizardPage(final String pageName, final ArrayList<WizardPage> internalPages) { super(pageName); setTitle(Messages.getString("ExecutableNewJobWizardPage.title")); //$NON-NLS-1$ setDescription(Messages.getString("ExecutableNewJobWizardPage.description")); //$NON-NLS-1$ this.internalPages = internalPages; } @Override public IWizardPage getNextPage() { // If in application specific settings basic JSDL file is given its copy - a // temporary jsdl file - is created in workspace. This file is used to // generate JSDLJobDescription object which will be passed to next wizard's // page. if (this.applicationName != null && this.applicationName.getText() != null) { Integer aspID = this.appsWithParametersFromPrefs.get(this.applicationName.getText()); if (aspID != null) { IPath path = ApplicationParametersRegistry.getInstance().getApplicationData(aspID.intValue()) .getJsdlPath(); if (path != null && !path.toOSString().equals("")) { //$NON-NLS-1$ // getting jsdl source // creating temp Eclipse's resource IPath workspacePath = ((NewJobWizard) getWizard()).getProject(); workspacePath = workspacePath.append(".tempJSDL.jsdl"); //$NON-NLS-1$ IFile newFileHandle = ResourcesPlugin.getWorkspace().getRoot().getFile(workspacePath); try { newFileHandle.createLink(path, IResource.REPLACE, null); IGridElement element = GridModel.getRoot().findElement(newFileHandle); if (element instanceof JSDLJobDescription) { this.basicJSDL = (JSDLJobDescription) element; ((NewJobWizard) getWizard()).updateBasicJSDL(this.basicJSDL, this.applicationName.getText()); } } catch (CoreException e) { // TODO katis - error handling } finally { try { newFileHandle.delete(true, null); } catch (CoreException e) { // TODO katis - error handling } } } else { ((NewJobWizard) getWizard()).updateBasicJSDL(null, this.applicationName.getText()); } } } else { ((NewJobWizard) getWizard()).updateBasicJSDL(null, this.applicationName.getText()); } return super.getNextPage(); } @Override public boolean isPageComplete() { return true; } public void createControl(final Composite parent) { this.parentP = parent; // mainComposite Composite mainComp = new Composite(parent, SWT.NONE); IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); URL openFileIcon = Activator.getDefault().getBundle().getEntry("icons/obj16/open_file.gif"); //$NON-NLS-1$ Image openFileImage = ImageDescriptor.createFromURL(openFileIcon).createImage(); GridLayout gLayout = new GridLayout(3, false); gLayout.horizontalSpacing = 10; gLayout.verticalSpacing = 12; mainComp.setLayout(gLayout); // Label for application name GridData layout = new GridData(); Label applicationNameLabel = new Label(mainComp, GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER); applicationNameLabel.setText(Messages.getString("ExecutableNewJobWizardPage.application_name_label")); //$NON-NLS-1$ layout = new GridData(); layout.horizontalAlignment = GridData.FILL; applicationNameLabel.setLayoutData(layout); // Combo - application name this.applicationName = new CCombo(mainComp, SWT.BORDER); layout = new GridData(); layout.horizontalAlignment = GridData.FILL; layout.horizontalSpan = 2; this.applicationName.setLayoutData(layout); this.applicationName.addModifyListener(this); this.applicationName.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent e) { if (ExecutableNewJobWizardPage.this.firstTime) { fetchApps(ExecutableNewJobWizardPage.this.virtualOrg); ExecutableNewJobWizardPage.this.applicationName.setListVisible(true); } } public void focusLost(final FocusEvent e) { // do nothing } }); // Label - executable file Label inputLabel = new Label(mainComp, GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER); inputLabel.setText(Messages.getString("ExecutableNewJobWizardPage.exe_input_label")); //$NON-NLS-1$ layout = new GridData(); layout.horizontalAlignment = GridData.FILL; inputLabel.setLayoutData(layout); // Stored combo - executable file this.executableFile = new StoredCombo(mainComp, SWT.DROP_DOWN); this.executableFile.setPreferences(prefs, INPUT_EXE_ID); this.executableFile.setText(""); //$NON-NLS-1$ layout = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER); this.executableFile.setLayoutData(layout); this.executableFile.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent event) { if (ExecutableNewJobWizardPage.this.executableFile.getText().equals("")) { //$NON-NLS-1$ setStdFilesGroupEnabled(false); } else { setStdFilesGroupEnabled(true); } } }); // Button - browsing for executable file this.gridFileDialogButton = new Button(mainComp, SWT.PUSH); this.gridFileDialogButton.setImage(openFileImage); layout = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); this.gridFileDialogButton.setLayoutData(layout); this.gridFileDialogButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { GridFileDialog dialog = new GridFileDialog(getShell(), GridFileDialog.STYLE_ALLOW_ONLY_EXISTING | GridFileDialog.STYLE_ALLOW_ONLY_FILES); if (dialog.open() == Window.OK) { URI[] uris = dialog.getSelectedURIs(); if ((uris != null) && (uris.length > 0)) { ExecutableNewJobWizardPage.this.executableFile.setText(uris[0].toString()); } else { ExecutableNewJobWizardPage.this.executableFile.setText(""); //$NON-NLS-1$ } } } }); // Label - arguments list Label argumentsLabel = new Label(mainComp, SWT.LEAD); argumentsLabel.setText(Messages.getString("ExecutableNewJobWizardPage.arguments_line_label")); //$NON-NLS-1$ layout = new GridData(); argumentsLabel.setLayoutData(layout); // Text - arguments list this.argumentsLine = new Text(mainComp, SWT.BORDER); layout = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); layout.horizontalSpan = 2; this.argumentsLine.setLayoutData(layout); // Group - std files group this.stdFilesGroup = new Group(mainComp, SWT.NONE); this.stdFilesGroup.setToolTipText(STD_FILES_TOOL_TIP); this.stdFilesGroup.setText(Messages.getString("ExecutableNewJobWizardPage.composite_group_title")); //$NON-NLS-1$ this.stdFilesGroup.setLayout(new GridLayout(3, false)); layout = new GridData(GridData.FILL_HORIZONTAL); layout.grabExcessHorizontalSpace = true; layout.horizontalSpan = 3; this.stdFilesGroup.setLayoutData(layout); // Label - stdin file Label stdinLabel = new Label(this.stdFilesGroup, SWT.LEAD); layout = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING); stdinLabel.setLayoutData(layout); stdinLabel.setText(Messages.getString("FilesInputNewJobWizardPage.stdin_label")); //$NON-NLS-1$ // Text - stdin file this.stdin = new Text(this.stdFilesGroup, SWT.NONE | SWT.BORDER); layout = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_CENTER); this.stdin.setLayoutData(layout); // Button - browsing for stdin file this.chooseButton = new Button(this.stdFilesGroup, SWT.PUSH); this.chooseButton.setImage(openFileImage); layout = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); this.chooseButton.setLayoutData(layout); this.chooseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { GridFileDialog dialog = new GridFileDialog(getShell(), GridFileDialog.STYLE_ALLOW_ONLY_FILES | GridFileDialog.STYLE_ALLOW_ONLY_EXISTING); if (dialog.open() == Window.OK) { URI[] uris = getUrisFromDialog(dialog); if ((uris != null) && (uris.length > 0)) { ExecutableNewJobWizardPage.this.stdin.setText(uris[0].toString()); } } } }); // Label - stdout file Label stdoutLabel = new Label(this.stdFilesGroup, SWT.NONE); layout = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING); stdoutLabel.setLayoutData(layout); stdoutLabel.setText(Messages.getString("FilesInputNewJobWizardPage.stdout_label")); //$NON-NLS-1$ // Text - stdout file this.stdout = new Text(this.stdFilesGroup, SWT.NONE | SWT.BORDER); layout = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_CENTER); this.stdout.setLayoutData(layout); // Button - browsing for stdout files (only remote) this.outButton = new Button(this.stdFilesGroup, SWT.PUSH); this.outButton.setImage(openFileImage); layout = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); this.outButton.setLayoutData(layout); this.outButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { GridFileDialog dialog = new GridFileDialog(getShell(), GridFileDialog.STYLE_ALLOW_ONLY_FILES); if (dialog.open() == Window.OK) { URI[] uris = getUrisFromDialog(dialog); if ((uris != null) && ((uris.length > 0))) { ExecutableNewJobWizardPage.this.stdout.setText(uris[0].toString()); } } } }); // Label - stderr file Label stderrLabel = new Label(this.stdFilesGroup, SWT.NONE); layout = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING); stderrLabel.setLayoutData(layout); stderrLabel.setText(Messages.getString("FilesInputNewJobWizardPage.stderr_label")); //$NON-NLS-1$ // Text - stderr file (only remote) this.stderr = new Text(this.stdFilesGroup, SWT.NONE | SWT.BORDER); layout = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_CENTER | GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); this.stderr.setLayoutData(layout); // Button - browsing for stderr file (only remote) this.errButton = new Button(this.stdFilesGroup, SWT.PUSH); this.errButton.setImage(openFileImage); layout = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); this.errButton.setLayoutData(layout); this.errButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { GridFileDialog dialog = new GridFileDialog(getShell(), GridFileDialog.STYLE_ALLOW_ONLY_FILES); if (dialog.open() == Window.OK) { URI[] uris = getUrisFromDialog(dialog); if ((uris != null) && (uris.length > 0)) { ExecutableNewJobWizardPage.this.stderr.setText(uris[0].toString()); } } } }); if (this.basicNode == null) { this.basicNode = new BasicWizardPart(this.internalPages, getWizard()); } setSelectedNode(this.basicNode); setStdFilesGroupEnabled(false); setControl(mainComp); } URI[] getUrisFromDialog(final GridFileDialog dialog) { URI[] uris = dialog.getSelectedURIs(); for (int j = 0; j < uris.length; j++) { URI uri = uris[j]; String query = uri.getQuery(); if (query != null && query.trim().length() > 0) { String[] qParts = query.split("&"); //$NON-NLS-1$ query = ""; //$NON-NLS-1$ for (int i = 0; i < qParts.length; i++) { String qPart = qParts[i]; if (!qPart.startsWith("vo")) { //$NON-NLS-1$ if (query.trim().length() > 0) { query += "&"; //$NON-NLS-1$ } query += qPart; } } if (query.trim().length() == 0) { query = null; } } try { uri = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(), query, uri.getFragment()); uris[j] = uri; } catch (URISyntaxException e) { //TODO } } return uris; } void fetchApps(final IVirtualOrganization vo) { try { getContainer().run(true, true, new IRunnableWithProgress() { public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask(Messages.getString("ExecutableNewJobWizardPage.get_apps_params_progress"), 1); //$NON-NLS-1$ ExecutableNewJobWizardPage.this.firstTime = false; try { ApplicationParametersRegistry.getInstance().updateApplicationsParameters(vo, monitor); } catch (ProblemException e) { ProblemDialog.openProblem(getShell(), Messages.getString("ExecutableNewJobWizardPage.error_fetching_title"), //$NON-NLS-1$ Messages.getString("ExecutableNewJobWizardPage.error_fetching_message"), //$NON-NLS-1$ e); } finally { monitor.worked(1); } IWorkbench workbench = PlatformUI.getWorkbench(); Display display = workbench.getDisplay(); final Map<String, Integer> map = ApplicationParametersRegistry.getInstance() .getApplicationDataMapping(vo); display.syncExec(new Runnable() { public void run() { setApplications(map); } }); } }); } catch (InvocationTargetException e) { // TODO Auto-generated catch block Activator.logException(e); } catch (InterruptedException e) { // TODO Auto-generated catch block Activator.logException(e); } } void setStdFilesGroupEnabled(final boolean enabled) { this.stdin.setEnabled(enabled); this.chooseButton.setEnabled(enabled); this.stdout.setEnabled(enabled); this.outButton.setEnabled(enabled); this.stderr.setEnabled(enabled); this.errButton.setEnabled(enabled); if (enabled) { this.stdFilesGroup.setToolTipText(null); } else { this.stdFilesGroup.setToolTipText(STD_FILES_TOOL_TIP); } } String getSelectedElementDisplayName(final IGridConnectionElement element) { String result = ""; //$NON-NLS-1$ result = element.getURI().toString(); try { if (element.getConnectionFileStore().getFileSystem().getScheme().equalsIgnoreCase("file")) //$NON-NLS-1$ { result = "file://" + result; //$NON-NLS-1$ } } catch (CoreException coreExc) { Activator.logException(coreExc); } return result; } /** * Returns name of executable to run on grid * * @return name of executable */ public String getExecutableFile() { String result = this.executableFile.getText(); return result; } /** * Returns application name to be run on the grid * * @return name of the application */ String getApplicationName() { String result = this.applicationName.getText(); if (this.appsWithParametersFromPrefs.keySet().contains(result)) { result = ApplicationParametersRegistry.getInstance() .getApplicationData((this.appsWithParametersFromPrefs.get(result)).intValue()) .getApplicationName(); } return result; } public void modifyText(final ModifyEvent e) { getContainer().updateButtons(); if (this.basicNode == null) { this.basicNode = new BasicWizardPart(this.internalPages, getWizard()); } if (this.appsWithParametersFromPrefs.keySet().contains(this.applicationName.getText())) { int appId = this.appsWithParametersFromPrefs.get(this.applicationName.getText()).intValue(); IPath pathA = ApplicationParametersRegistry.getInstance().getApplicationData(appId).getXmlPath(); Path path = new Path(pathA.toFile().getPath()); try { setSelectedNode(new SpecificWizardPart(this.basicNode, path)); this.executableFile.setText( ApplicationParametersRegistry.getInstance().getApplicationData(appId).getApplicationPath()); } catch (SAXException e1) { // TODO katis what to do with this exception } catch (ParserConfigurationException e1) { // TODO katis what to do with this exception } catch (IOException e1) { // empty } } else { setSelectedNode(this.basicNode); } } /** * Method to access application specific page * * @return instance of {@link ApplicationSpecificPage} or null if this page * wasn't used by wizard */ public ApplicationSpecificPage getApplicationSpecificPage() { ApplicationSpecificPage result = null; return result; } @Override protected void setSelectedNode(final IWizardNode node) { super.setSelectedNode(node); } /** * Returns list of pages created from parsing XML with description of * additional pages specific to application * * @return list of application specific pages */ public List<IApplicationSpecificPage> getApplicationSpecificPages() { List<IApplicationSpecificPage> result = new ArrayList<IApplicationSpecificPage>(); if (getSelectedNode() != null && getSelectedNode() != this.basicNode) { SpecificWizardPart specificNode = (SpecificWizardPart) getSelectedNode(); for (IWizardPage asp : specificNode.getPages()) { result.add((IApplicationSpecificPage) asp); } } return result; } /** * Method to access value of field holding path to stdin file * * @return String representing remote path to stdin file */ public String getStdin() { return this.stdin.getText(); } /** * Method to access value of a field holding path to stdout * * @return String representing remote path to stdout file */ public String getStdout() { return this.stdout.getText(); } /** * Method to access job's arguments given by user. * * @return list of arguments */ public ArrayList<String> getArgumentsList() { ArrayList<String> result = new ArrayList<String>(); String[] table = this.argumentsLine.getText().split(" "); //$NON-NLS-1$ for (String tableElement : table) { result.add(tableElement); } return result; } /** * Method to access basic JSDL file used by application specific settings. * * @return object representing information kept in basic JSDL file or * <code>null</code> if no such file is present. */ public JSDLJobDescription getBasicJSDL() { // If in application specific settings basic JSDL file is given its copy - a // temporary jsdl file - is created in workspace. This file is used to // generate JSDLJobDescription object which will be passed to next wizard's // page. Integer aspID = this.appsWithParametersFromPrefs.get(this.applicationName.getText()); if (aspID != null) { IPath path = ApplicationParametersRegistry.getInstance().getApplicationData(aspID.intValue()) .getJsdlPath(); if (path != null && !path.toOSString().equals("")) { //$NON-NLS-1$ IPath workspacePath = ((NewJobWizard) getWizard()).getProject(); workspacePath = workspacePath.append(".tempJSDL.jsdl"); //$NON-NLS-1$ IFile newFileHandle = ResourcesPlugin.getWorkspace().getRoot().getFile(workspacePath); try { newFileHandle.createLink(path, IResource.REPLACE, null); IGridElement element = GridModel.getRoot().findElement(newFileHandle); if (element instanceof JSDLJobDescription) { this.basicJSDL = (JSDLJobDescription) element; } } catch (CoreException e) { // TODO katis - error handling } finally { try { newFileHandle.delete(true, null); } catch (CoreException e) { // TODO katis - error handling } } } else { this.basicJSDL = null; } } else { this.basicJSDL = null; } return this.basicJSDL; } /** * Updates buttons as a reaction to changes in page's fields content. */ public void updateButtons() { getContainer().updateButtons(); } class ModifyTextListener implements ModifyListener { public void modifyText(final ModifyEvent event) { updateButtons(); } } /** * Method to access value of path to standard error file * * @return string value kept in standard error text field */ public String getStderr() { return this.stderr.getText(); } @Override public void setVisible(final boolean visible) { final IVirtualOrganization vo = ((IProjectSelectionProvider) getWizard()).getGridProject().getVO(); if (this.virtualOrg == null || this.virtualOrg != vo) { this.firstTime = true; if (this.applicationName != null) { this.applicationName.removeAll(); // this.applicationName.setText( "" ); } } this.virtualOrg = vo; // Job job = new Job( Messages.getString( // "ExecutableNewJobWizardPage.fetching_apps_job_name" ) ) { //$NON-NLS-1$ // // @Override // protected IStatus run( final IProgressMonitor monitor ) { // if( visible == true && ExecutableNewJobWizardPage.this.firstTime ) { // ExecutableNewJobWizardPage.this.firstTime = false; // try { // ApplicationParametersRegistry.getInstance() // .updateApplicationsParameters( vo ); // } catch( ProblemException e ) { // ProblemDialog.openProblem( getShell(), // Messages.getString( "ExecutableNewJobWizardPage.error_fetching_title" ), // //$NON-NLS-1$ // Messages.getString( "ExecutableNewJobWizardPage.error_fetching_message" // ), //$NON-NLS-1$ // e ); // } // IWorkbench workbench = PlatformUI.getWorkbench(); // Display display = workbench.getDisplay(); // final Map<String, Integer> map = // ApplicationParametersRegistry.getInstance() // .getApplicationDataMapping( vo ); // display.syncExec( new Runnable() { // // public void run() { // setApplications( map ); // } // } ); // } // return Status.OK_STATUS; // } // }; // job.setUser( false ); // if( this.firstTime ) { // setMessage( Messages.getString( // "ExecutableNewJobWizardPage.fetching_apps" ), //$NON-NLS-1$ // IMessageProvider.WARNING ); // } // job.schedule(); super.setVisible(visible); } void setApplications(final Map<String, Integer> map) { this.appsWithParametersFromPrefs = map; for (String name : this.appsWithParametersFromPrefs.keySet()) { this.applicationName.add(name); } this.setMessage(null); } }