Java tutorial
/****************************************************************************** * Copyright (c) 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): * - Katarzyna Bylec (katis@man.poznan.pl) * - Szymon Mueller *****************************************************************************/ package eu.geclipse.servicejob.ui.wizard; import java.net.URL; import java.util.ArrayList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.PlatformUI; import eu.geclipse.core.model.GridModel; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IGridProject; import eu.geclipse.core.model.IGridRoot; import eu.geclipse.core.reporting.ProblemException; import eu.geclipse.servicejob.ui.Activator; import eu.geclipse.ui.dialogs.ProblemDialog; /** * Wizard page for selecting project in which should service job be created. */ public class ProjectSelectionPage extends WizardPage { static IGridProject selectedProject; String serviceJobName; Text nameText; private Tree tree; private IGridProject initialProject; /** * Constructor of project selection page. * * @param pageName Name of this page. */ public ProjectSelectionPage(final String pageName) { super(pageName); setTitle("Project selection page"); setDescription("Choose project that contains services you want to perform operator's job on."); } public ProjectSelectionPage(final String pageName, final IGridProject selectedProject) { this(pageName); this.initialProject = selectedProject; if (this.initialProject != null) { this.selectedProject = this.initialProject; } } protected void updateButtons() { getContainer().updateButtons(); } @Override public boolean canFlipToNextPage() { boolean flag = false; setErrorMessage(null); if (this.selectedProject != null && this.serviceJobName != null && !this.serviceJobName.equals("")) { flag = true; IPath projectPath = this.selectedProject.getPath(); IPath serviceJobsFolderPath = projectPath.append("/" //$NON-NLS-1$ + ServiceJobWizard.SERVICE_JOBS_FOLDER + "/"); //$NON-NLS-1$ IWorkspaceRoot workspaceRoot = (IWorkspaceRoot) GridModel.getRoot().getResource(); IFolder serviceJobsFolder = workspaceRoot.getFolder(serviceJobsFolderPath); if (serviceJobsFolder.exists()) { IFile serviceJobFile = serviceJobsFolder .getFile(this.serviceJobName + ServiceJobWizard.SERVICE_JOB_EXTENSION); if (serviceJobFile.exists()) { setErrorMessage("Operator's Job with this name already exists."); flag = false; } } } return flag && getNextPage() != null; } public void createControl(final Composite parent) { Composite mainComp = new Composite(parent, SWT.NONE); mainComp.setLayout(new GridLayout(1, false)); GridData gd = new GridData(GridData.FILL_BOTH); gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = true; gd.verticalSpan = 3; gd.horizontalSpan = 2; gd.heightHint = 300; gd.widthHint = 250; final TreeViewer treeViewer = new TreeViewer(mainComp, SWT.SINGLE | SWT.BORDER); treeViewer.setContentProvider(new CProvider()); treeViewer.setLabelProvider(new LProvider()); treeViewer.setInput(GridModel.getRoot()); setTree(treeViewer.getTree()); getTree().setLayoutData(gd); getTree().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { Object selectedData = (((Tree) e.getSource()).getSelection()[0]).getData(); if (selectedData instanceof IGridProject) { ProjectSelectionPage.selectedProject = (IGridProject) selectedData; ProjectSelectionPage.this.updateButtons(); } } }); this.tree.deselectAll(); this.tree.update(); treeViewer.refresh(); // this.tree.layout(); treeViewer.refresh(true); for (TreeItem item : this.tree.getItems()) { if (item.getData() instanceof IGridProject) { if (item.getData().equals(this.initialProject)) { this.tree.setSelection(item); break; } } } Composite textComp = new Composite(mainComp, SWT.NONE); textComp.setLayout(new GridLayout(2, false)); gd = new GridData(GridData.FILL_BOTH); gd.grabExcessHorizontalSpace = true; textComp.setLayoutData(gd); Label nameLabel = new Label(textComp, SWT.LEAD); nameLabel.setText("Operator's Job name"); gd = new GridData(); nameLabel.setLayoutData(gd); this.nameText = new Text(textComp, SWT.BORDER | SWT.LEAD); gd = new GridData(GridData.FILL_HORIZONTAL); this.nameText.setLayoutData(gd); this.nameText.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { ProjectSelectionPage.this.serviceJobName = ProjectSelectionPage.this.nameText.getText(); ProjectSelectionPage.this.updateButtons(); } }); setControl(mainComp); } @Override public IWizardPage getNextPage() { return super.getNextPage(); } public IGridProject getProject() { return this.selectedProject; } private void setTree(final Tree tree) { this.tree = tree; } private Tree getTree() { return this.tree; } class LProvider implements ILabelProvider { private Image projectImage; /** * Constructor of label provider for project selection page */ public LProvider() { super(); URL argsURL = Activator.getDefault().getBundle().getEntry("icons/gridprojects.gif"); //$NON-NLS-1$ ImageDescriptor argsDesc = ImageDescriptor.createFromURL(argsURL); this.projectImage = argsDesc.createImage(); } public Image getImage(final Object element) { return this.projectImage; } public String getText(final Object element) { return ((IGridProject) element).getName(); } public void addListener(final ILabelProviderListener listener) { // empty implementation } public void dispose() { this.projectImage.dispose(); } public boolean isLabelProperty(final Object element, final String property) { return false; } public void removeListener(final ILabelProviderListener listener) { // empty implementation } } class CProvider implements ITreeContentProvider { public Object[] getChildren(final Object parentElement) { return new Object[0]; } public Object getParent(final Object element) { return new Object(); } public boolean hasChildren(final Object element) { return false; } public Object[] getElements(final Object inputElement) { ArrayList<IGridProject> projects = new ArrayList<IGridProject>(); IGridElement[] elements = null; try { elements = ((IGridRoot) inputElement).getChildren(null); } catch (ProblemException e) { ProblemDialog.openProblem(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error when fetching children", "Error when fetching children of " + inputElement.toString(), e); } for (IGridElement elem : elements) { if (elem instanceof IGridProject && !((IGridProject) elem).isHidden() && ((IGridProject) elem).hasGridNature() && ((IGridProject) elem).isOpen()) { projects.add((IGridProject) elem); } } return projects.toArray(); } public void dispose() { // empty implementation } public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { // empty implementation } } /** * Getter method to access name of service job. * * @return String name of service job that will be used in all views as well * as a name of GTDL file. */ public String getJobName() { return this.serviceJobName; } }