/****************************************************************************** * 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): * PSNC: * - Katarzyna Bylec (katis@man.poznan.pl) * *****************************************************************************/ package eu.geclipse.ui.wizards.jobsubmission; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; 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.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.model.WorkbenchLabelProvider; import eu.geclipse.core.model.IGridContainer; import eu.geclipse.core.model.IGridJob; import eu.geclipse.core.model.IGridJobDescription; import eu.geclipse.core.model.IGridProject; import eu.geclipse.ui.internal.Activator; public class FolderSelectionWizardPage extends WizardPage { IGridProject project; private Tree tree; private Text jobNameText; private List<IGridJobDescription> jobDescriptions; private TreeViewer treeViewer; public FolderSelectionWizardPage( final String pageName, final IGridProject project, final List<IGridJobDescription> jobDescriptions ) { super( pageName ); super.setTitle( "Submit job description" ); super.setDescription( "Choose location and name for the job" ); this.project = project; this.jobDescriptions = jobDescriptions; } public void createControl( final Composite parent ) { Composite mainComp = new Composite( parent, SWT.NONE ); mainComp.setLayout( new GridLayout( 2, 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; this.treeViewer = new TreeViewer( mainComp, SWT.SINGLE | SWT.BORDER ); this.treeViewer.setContentProvider( new RProvider() ); this.treeViewer.setLabelProvider( WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider() ); this.treeViewer.setInput( this.project.getParent().getResource() ); this.setTree( this.treeViewer.getTree() ); this.getTree().setLayoutData( gd ); this.tree.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( final SelectionEvent e ) { FolderSelectionWizardPage.this.updateButtons(); } } ); for( TreeItem item : this.tree.getItems() ) { if( item.getData() instanceof IContainer ) { this.tree.setSelection( item ); break; } } // name control Label jobNameLabel = new Label( mainComp, SWT.LEAD ); jobNameLabel.setText( "Job name" ); gd = new GridData(); jobNameLabel.setLayoutData( gd ); this.jobNameText = new Text( mainComp, SWT.LEAD | SWT.BORDER ); String name = this.jobDescriptions.get( 0 ).getName(); name = name.substring( 0, name.indexOf( "." ) ); if( this.jobDescriptions.size() > 1 ) { this.jobNameText.setEnabled( false ); String longName = ""; for( IGridJobDescription jobDesc : this.jobDescriptions ) { longName = longName + jobDesc.getName().substring( 0, jobDesc.getName() .indexOf( "." ) ) + ", "; } longName = longName.substring( 0, longName.lastIndexOf( "," ) ); this.jobNameText.setText( longName ); } else { this.jobNameText.setText( name ); } this.jobNameText.addModifyListener( new ModifyListener() { public void modifyText( final ModifyEvent e ) { FolderSelectionWizardPage.this.updateButtons(); } } ); gd = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL ); this.jobNameText.setLayoutData( gd ); IGridContainer jobFolder = this.project.getProjectFolder( IGridJob.class ); IResource jobFolderResource = jobFolder.getResource(); this.treeViewer.expandToLevel( 2 ); if( this.tree.getItems().length > 0 ) { for( TreeItem item : this.tree.getItems()[ 0 ].getItems() ) { if( item.getData() instanceof IContainer ) { if( item.getData().equals( jobFolderResource ) ) { this.tree.setSelection( item ); break; } } } } setControl( mainComp ); } protected void updateButtons() { this.getContainer().updateButtons(); } @Override public boolean canFlipToNextPage() { boolean result = false; if( !this.jobNameText.getText().equals( "" ) //$NON-NLS-1$ && ( this.getDestinationFolder() != null ) ) { result = true; } // if( result ) { // if( getWizard() instanceof JobCreatorSelectionWizard ) { // ( ( JobCreatorSelectionWizard )getWizard() ).changeInitData(); // } // } return result; } private void setTree( final Tree tree ) { this.tree = tree; } public IResource getDestinationFolder() { IResource result = null; for( TreeItem item : this.tree.getSelection() ) { if( item.getData() instanceof IContainer ) { result = ( IContainer )item.getData(); } } return result; } public List<String> getJobNames() { List<String> result = new ArrayList<String>(); if( this.jobDescriptions.size() > 1 ) { for( IGridJobDescription jobDesc : this.jobDescriptions ) { result.add( jobDesc.getName().substring( 0, jobDesc.getName() .indexOf( "." ) ) ); } } else { String baseName = this.jobNameText.getText(); int i = 1; String sufix = ""; for( IGridJobDescription jobDescr : this.jobDescriptions ) { result.add( baseName + sufix ); sufix = "_" + Integer.valueOf( i ).toString(); i++; } } return result; } private Tree getTree() { return tree; } class RProvider implements ITreeContentProvider { public Object[] getChildren( final Object parentElement ) { List<IResource> list = new ArrayList<IResource>(); if( parentElement instanceof IContainer ) { try { if( ( ( IContainer )parentElement ).members().length != 0 ) { for( IResource member : ( ( IContainer )parentElement ).members() ) { if( member instanceof IProject ) { if( member.getName() .equals( FolderSelectionWizardPage.this.project.getName() ) ) { list.add( member ); } } else if( member instanceof IContainer && !( member.getName().startsWith( "." ) ) ) //$NON-NLS-1$ { list.add( member ); } } } } catch( CoreException e ) { // TODO Auto-generated catch block Activator.logException( e ); } } return list.toArray(); } public Object getParent( final Object element ) { // TODO Auto-generated method stub return null; } public boolean hasChildren( final Object element ) { boolean result = false; if( element instanceof IContainer ) { try { for( IResource member : ( ( IContainer )element ).members() ) { if( member instanceof IProject ) { if( member.getName() .equals( FolderSelectionWizardPage.this.project.getName() ) ) { result = true; break; } } else if( member instanceof IContainer && !( member.getName().startsWith( "." ) ) ) //$NON-NLS-1$ { result = true; break; } } } catch( CoreException e ) { // TODO Auto-generated catch block Activator.logException( e ); } } return result; } public Object[] getElements( final Object inputElement ) { List<IResource> list = new ArrayList<IResource>(); if( inputElement instanceof IContainer ) { try { if( ( ( IContainer )inputElement ).members().length != 0 ) { for( IResource member : ( ( IContainer )inputElement ).members() ) { if( member instanceof IProject ) { if( member.getName() .equals( FolderSelectionWizardPage.this.project.getName() ) ) { list.add( member ); } } else if( member instanceof IContainer && !( member.getName().startsWith( "." ) ) ) { list.add( member ); } } } } catch( CoreException e ) { // TODO Auto-generated catch block Activator.logException( e ); } } return list.toArray(); } public void dispose() { // TODO Auto-generated method stub } public void inputChanged( final Viewer viewer, final Object oldInput, final Object newInput ) { // empty implementation } } }