/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.ui.wizards.imports; import java.util.HashSet; import java.util.Observable; import java.util.Observer; import java.util.Set; import net.rim.ejde.internal.core.IConstants; import net.rim.ejde.internal.model.BlackBerryVMInstallType; import net.rim.ejde.internal.model.IModelConstants; import net.rim.ejde.internal.ui.wizards.JRESelectionUI; import net.rim.ejde.internal.util.Messages; import net.rim.ejde.internal.util.VMUtils; import net.rim.ide.Project; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.osgi.util.NLS; 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; /** * This class provide the UI which allows users to select projects from a legacy workspace file and import them. * */ public class BasicGenericSelectionPage extends AbstractImporterPage implements IModelConstants, IProjectImportSelectionUICallback { static private final Logger _log = Logger.getLogger( GenericSelectionPage.class ); private JRESelectionUI _jreSelectionUI; private ProjectImportSelectionUI _projectSelectionTableGroup; private final Set< String > _existingProjects; protected boolean _generalImport; /** * Constructor * */ public BasicGenericSelectionPage( boolean generalImport ) { _generalImport = generalImport; if( generalImport ) { setTitle( Messages.GenericSelectionPage_IMPORT_PAGE_TITLE ); setDescription( Messages.GenericSelectionPage_IMPORT_PAGE_DESCRIPTION ); } else { setTitle( Messages.GenericSelectionPage_SAMPLES_IMPORT_PAGE_TITLE ); setDescription( Messages.GenericSelectionPage_SAMPLES_IMPORT_PAGE_DESCRIPTION ); } IWorkspace workspace = ResourcesPlugin.getWorkspace(); IProject[] eclipseProjects = workspace.getRoot().getProjects(); _existingProjects = new HashSet< String >( eclipseProjects.length ); if( 0 < eclipseProjects.length ) { for( int i = 0; i < eclipseProjects.length; i++ ) { _existingProjects.add( eclipseProjects[ i ].getName() ); } } } public ProjectImportSelectionUI getProjectSelectionUI() { return _projectSelectionTableGroup; } public String convertToString( String[] projectNames ) { StringBuffer formattedString = new StringBuffer(); for( String projectName : projectNames ) { formattedString.append( "\n-" + projectName ); //$NON-NLS-1$ } return formattedString.toString(); } public IPath getREPath() { return _jreSelectionUI.getJREContainerPath(); } @Override public boolean isPageComplete() { if( VMUtils.getDefaultBBVM() == null ) { setMessage( net.rim.ejde.internal.util.Messages.NewBlackBerryProjectWizardPageOne_Message_noBBJREInstalled, IMessageProvider.ERROR ); return false; } if( !isBBVMSelected( _jreSelectionUI ) ) { setMessage( net.rim.ejde.internal.util.Messages.NewBlackBerryProjectWizardPageOne_Message_noJRESelected, IMessageProvider.ERROR ); return false; } IPath currentWorkspace = _projectSelectionTableGroup.getCurrentWorkspace(); if( currentWorkspace == null || currentWorkspace.isEmpty() ) { setMessage( Messages.GenericSelectionPage_NO_WORKSPACE_SELECTED_MSG, IMessageProvider.INFORMATION ); return false; } if( !_projectSelectionTableGroup.isValidWorkspaceFile() ) { setMessage( NLS.bind( Messages.GenericSelectionPage_FILE_NOT_EXIST_MSG, currentWorkspace.toOSString() ), IMessageProvider.INFORMATION ); return false; } if( _projectSelectionTableGroup.getAllProjectNumber() == 0 ) { setMessage( Messages.GenericSelectionPage_NO_WORKSPACE_LOADED_MSG, IMessageProvider.INFORMATION ); return false; } if( ( _projectSelectionTableGroup.getSelectedProjectsNumber() - _projectSelectionTableGroup.getExistingProjectsNumber() ) == 0 ) { setMessage( Messages.GenericSelectionPage_NO_PROJECT_SELECTED_ERROR_MSG, IMessageProvider.INFORMATION ); return false; } String message = _projectSelectionTableGroup.hasDependencyProblem(); if( !StringUtils.isBlank( message ) ) { setMessage( message, IMessageProvider.WARNING ); return true; } if( _projectSelectionTableGroup.getExistingProjectsNumber() > 0 ) { setMessage( Messages.GenericSelectionPage_SOME_PROJECTS_EXIST_MSG, IMessageProvider.WARNING ); return true; } setMessage( IConstants.EMPTY_STRING ); return true; } protected boolean isBBVMSelected( JRESelectionUI jreSelectionUI ) { IVMInstall vm = jreSelectionUI.getSelectedJVM(); return ( vm != null ) && ( BlackBerryVMInstallType.VM_ID.equals( vm.getVMInstallType().getId() ) ); } protected void enableProjectSelectionUI( boolean enabled ) { _projectSelectionTableGroup.enableUI( enabled ); if( enabled ) { setMessage( IConstants.EMPTY_STRING ); } } /* * (non-Javadoc) * * @see net.rim.eide.internal.ui.wizards.AbstractImporterPage#buildUIContainer (org.eclipse.swt.widgets.Composite) */ @Override protected void buildUI( Composite parent ) { Composite composite = new Composite( parent, SWT.NONE ); GridLayout gridLayout = new GridLayout( 1, false ); composite.setLayout( gridLayout ); GridData gridData = new GridData( GridData.FILL_BOTH ); composite.setLayoutData( gridData ); // BB RE selection group createBBREGroup( composite ); _projectSelectionTableGroup = new ProjectImportSelectionUI( composite, this, _generalImport ); _projectSelectionTableGroup.creatContent(); enableProjectSelectionUI( VMUtils.getDefaultBBVM() != null && isBBVMSelected( _jreSelectionUI ) ); setPageComplete( false ); _projectSelectionTableGroup.setCurrentVM( _jreSelectionUI.getSelectedJVM() ); if( !_generalImport ) { loadSameples(); } composite.setFocus(); } private void loadSameples() { IVMInstall vm = getSelectedJVM(); if( vm == null ) { return; } IPath jdwFilePath = new Path( vm.getInstallLocation().getPath() ); jdwFilePath = jdwFilePath.append( ProjectImportSelectionUI.SAMPLE_JDW_RELATIVE_PATH ); _projectSelectionTableGroup.setCurrentVM( vm ); _projectSelectionTableGroup.loadWorkspace( jdwFilePath ); } private void createBBREGroup( Composite comp ) { _jreSelectionUI = new JRESelectionUI( this ); Control control = _jreSelectionUI.createControl( comp ); control.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); _jreSelectionUI.addObserver( new REObserver() ); } private final class REObserver implements Observer { /* * (non-Javadoc) * * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ @Override public void update( Observable arg0, Object arg1 ) { if( !( arg0 instanceof JRESelectionUI ) ) { return; } JRESelectionUI ui = (JRESelectionUI) arg0; _log.debug( "JRE selection is changed to " + ui.getSelectedJVM().getId() ); if( !_generalImport ) { loadSameples(); } _projectSelectionTableGroup.setCurrentVM( ui.getSelectedJVM() ); enableProjectSelectionUI( VMUtils.getDefaultBBVM() != null && isBBVMSelected( ui ) ); setPageComplete( isPageComplete() ); } } public Set< Project > getSelectedProjects() { return _projectSelectionTableGroup.getSelectedProjects(); } public int getImportType() { return _projectSelectionTableGroup.getImportType(); } @Override public IVMInstall getSelectedJVM() { return _jreSelectionUI.getSelectedJVM(); } public void setComplete( boolean complete ) { setPageComplete( complete ); } }