Java tutorial
/* * 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); } }