Java tutorial
/****************************************************************************** * Copyright (c) 2007 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): * UCY (http://www.ucy.cs.ac.cy) * - Nicholas Loulloudes (loulloudes.n@cs.ucy.ac.cy) * *****************************************************************************/ package eu.geclipse.jsdl.ui.internal.dialogs; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.TableViewer; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import eu.geclipse.core.model.IGridComputing; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IGridResource; import eu.geclipse.core.model.impl.GridResourceCategoryFactory; import eu.geclipse.jsdl.JSDLJobDescription; import eu.geclipse.jsdl.ui.internal.Activator; import eu.geclipse.jsdl.ui.internal.dialogs.MultipleInputDialog.Validator; import eu.geclipse.jsdl.ui.providers.FeatureContentProvider; import eu.geclipse.jsdl.ui.providers.FeatureLabelProvider; /** * * Create a new <code>CandidateHostsDialog</code>. The dialog consists of * a {@link CheckboxTableViewer} that displays all Computing * Elements that support a specific Virtual Organization (VO). * This VO is the same as the VO of the Grid Project the JSDL file belongs. */ public class CandidateHostsDialog extends Dialog { protected CheckboxTableViewer hostsViewer = null; protected Composite panel = null; protected String title = null; protected List<Validator> validators = new ArrayList<Validator>(); private IGridElement gridElement = null; private JSDLJobDescription jobDescription = null; private List<String> existingHostsInViewer = new ArrayList<String>(); private String[] selectedHosts = null; /** * <code>CandidateHostsDialog</code> class constructor. Create a new dialog with * the following: * * @param shell The Parent shell. * @param title The dialog title. */ public CandidateHostsDialog(final Shell shell, final String title) { super(shell); this.title = title; setShellStyle(getShellStyle() | SWT.RESIZE | SWT.APPLICATION_MODAL); } // end Class Constructor @Override protected void configureShell(final Shell shell) { shell.setSize(600, 300); super.configureShell(shell); if (this.title != null) { shell.setText(this.title); } } @Override protected Control createButtonBar(final Composite parent) { Control btnBar = super.createButtonBar(parent); getButton(IDialogConstants.OK_ID).setEnabled(false); return btnBar; } private void enableOKButton(final boolean value) { getButton(IDialogConstants.OK_ID).setEnabled(value); } // end void enableOKButton() @Override protected Control createDialogArea(final Composite parent) { Composite container = (Composite) super.createDialogArea(parent); GridData gd = new GridData(GridData.FILL_BOTH); container.setLayout(new GridLayout(1, false)); gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = true; container.setLayoutData(gd); this.panel = new Composite(container, SWT.NONE); GridLayout layout = new GridLayout(1, false); this.panel.setLayout(layout); gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = true; this.panel.setLayoutData(gd); Label label = new Label(this.panel, SWT.NONE); label.setText(Messages.getString("ResourcesPage_NewHostsDialogDescr")); //$NON-NLS-1$ label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); gd = new GridData(GridData.FILL_BOTH); gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = true; gd.verticalSpan = 3; gd.horizontalSpan = 2; gd.widthHint = 300; gd.heightHint = 100; Table table = new Table(this.panel, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CHECK); table.setLayoutData(gd); this.hostsViewer = new CheckboxTableViewer(table); this.hostsViewer.setContentProvider(new FeatureContentProvider()); FeatureLabelProvider hostsLabelProvider = new FeatureLabelProvider(); hostsLabelProvider.setStringType(FeatureLabelProvider.STRING_TYPE_CANDIDATE_HOSTS); this.hostsViewer.setLabelProvider(hostsLabelProvider); this.hostsViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(final CheckStateChangedEvent event) { setValue(CandidateHostsDialog.this.hostsViewer.getCheckedElements()); } }); try { Collection<String> computingElements = new ArrayList<String>(); IGridResource[] gridComputings = this.jobDescription.getProject().getVO().getInfoService() .fetchResources(this.jobDescription.getProject().getVO(), this.jobDescription.getProject().getVO(), GridResourceCategoryFactory.getCategory(GridResourceCategoryFactory.ID_COMPUTING), false, IGridComputing.class, new NullProgressMonitor()); // IGridComputing[] gridComputings = this.jobDescription.getProject().getVO() // .getComputing( new NullProgressMonitor() ) ; String hostnameOnly; for (int i = 0; i < gridComputings.length; i++) { /* Get only the CE host name substring * * Start from (last occurrence of empty space + 1) to remove the "CE @ " prefix. * Finish to the indexOf ":" character to remove any trailing characters. * */ if (gridComputings[i].getName().indexOf(":") != -1) { //$NON-NLS-1$ hostnameOnly = gridComputings[i].getName() .substring(gridComputings[i].getName().lastIndexOf(" ") + 1 //$NON-NLS-1$ , gridComputings[i].getName().indexOf(":")); //$NON-NLS-1$ /* * If there are elements in the Candidate Hosts Table Viewer then */ if (this.existingHostsInViewer != null) { /* check to see if the host name is already included. If not add it.*/ if (!this.existingHostsInViewer.contains(hostnameOnly)) { /* Check if the host name appears twice from the InfoSystem and if it does do not * include it twice. */ if (!computingElements.contains(hostnameOnly)) computingElements.add(hostnameOnly); } } else { /* Check if the host name appears twice from the InfoSystem and if it does do not * include it twice. */ if (!computingElements.contains(hostnameOnly)) computingElements.add(hostnameOnly); } } // end } this.hostsViewer.setInput(computingElements); } catch (Exception e) { Activator.logException(e); } Dialog.applyDialogFont(container); return parent; } // end Control createDialogArea() @Override protected void okPressed() { super.okPressed(); } @Override public int open() { applyDialogFont(this.panel); return super.open(); } private String getDialogSettingsSectionName() { return IDebugUIConstants.PLUGIN_ID + ".CANDIDATE_HOSTS_DIALOG"; //$NON-NLS-1$ } @Override protected IDialogSettings getDialogBoundsSettings() { IDialogSettings settings = Activator.getDefault().getDialogSettings(); IDialogSettings section = settings.getSection(getDialogSettingsSectionName()); if (section == null) { section = settings.addNewSection(getDialogSettingsSectionName()); } return section; } // end IDialogSetting getDialogBoundsSettings() /** * This method specifies the input the for {@link CheckboxTableViewer} in the * dialog. The input is of type {@link IGridElement} and is obtained by getting * the input file of the JSDL editor. * * @param input The IGridElement obtained from the JSDL editor. */ public void setDialogInput(final IGridElement input) { this.gridElement = input; getJobDescription(this.gridElement); } /** * This is a optional method that allows to filter the Computing Elements shown * in the {@link CheckboxTableViewer} of the dialog. Computing Elements that * already are included in the Candidate Hosts {@link TableViewer} of the JSDL * Resources page are not shown. * * @param input The Input of the Candidates Hosts {@link TableViewer} */ @SuppressWarnings("unchecked") public void setExistingCandidateHosts(final Object input) { this.existingHostsInViewer = (List<String>) input; } protected void setValue(final Object[] value) { Object[] checkedElements = value; if (checkedElements != null && checkedElements.length > 0) { enableOKButton(true); this.selectedHosts = new String[checkedElements.length]; for (int i = 0; i < checkedElements.length; i++) { this.selectedHosts[i] = (String) checkedElements[i]; } } else { enableOKButton(false); } } // end void setValue() /** * Get's the selected Candidate Hosts in the Dialog. * * @return The selected Candidate Host(s). */ public Object[] getValue() { String[] returnHosts = new String[this.selectedHosts.length]; System.arraycopy(this.selectedHosts, 0, returnHosts, 0, this.selectedHosts.length); return returnHosts; } private JSDLJobDescription getJobDescription(final IGridElement input) { if (input instanceof JSDLJobDescription) { this.jobDescription = (JSDLJobDescription) input; } else { this.jobDescription = null; } return this.jobDescription; } } // end Class