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.launchers; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import net.rim.ejde.internal.core.ContextManager; import net.rim.ejde.internal.launching.IFledgeLaunchConstants; import net.rim.ejde.internal.sourcelookup.RIMSourcePathProvider; import net.rim.ejde.internal.util.Messages; import net.rim.ejde.internal.util.ProjectUtils; import net.rim.ide.Project; import org.eclipse.core.resources.IProject; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.plugin.AbstractUIPlugin; public class ProjectsTab extends AbstractLaunchConfigurationTab implements PropertyChangeListener { private AppSelectionUI _appSelectionUI; private Set<IProject> _allProjects; private AbstractBlackBerryLaunchConfigurationTabGroup _tabGroup; /** * Constructor */ public ProjectsTab(AbstractBlackBerryLaunchConfigurationTabGroup tabGroup) { _tabGroup = tabGroup; } /* * Returns false if there is no project stored in launch configuration; it disables Run/Debug button. * * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse .debug.core.ILaunchConfiguration) */ @Override public boolean isValid(ILaunchConfiguration configuration) { return LaunchUtils.getProjectsFromConfiguration(configuration).size() > 0; } /** * Creates the UI for this tab * * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite mainComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(3, false); layout.marginWidth = 0; layout.marginHeight = 0; mainComposite.setLayout(layout); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData.horizontalSpan = 3; mainComposite.setLayoutData(layoutData); mainComposite.setFont(parent.getFont()); _appSelectionUI = new AppSelectionUI(); _appSelectionUI.createControl(mainComposite, 3, 0); _appSelectionUI.addPropertyChangeListener(this); setControl(mainComposite); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ public String getName() { return Messages.ProjectsTab_Projects; } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() */ public Image getImage() { ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(ContextManager.PLUGIN_ID, "icons" + File.separator + "activated.gif"); final Image image = imageDescriptor.createImage(); return image; } /** * Inits current UI selection to data given by configuration parameter * * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) */ public void initializeFrom(ILaunchConfiguration configuration) { _allProjects = ProjectUtils.getAllBBProjectsAndDependencies(); _appSelectionUI.initializeFrom(_allProjects, LaunchUtils.getProjectsFromConfiguration(configuration)); validate(); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void performApply(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, RIMSourcePathProvider.RIM_SOURCEPATH_PROVIDER_ID); configuration.setAttribute(IFledgeLaunchConstants.ATTR_DEPLOYED_PROJECTS, getSelectedProjectNames()); } private List<String> getSelectedProjectNames() { List<String> checkedProjecs = _appSelectionUI.getCheckedProjectNames(); return checkedProjecs; } /** * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) { // do nothing } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { } /** * Sets the layout of the given <code>button</code>. * * @param button */ public static void setDialogConfirmButtonLayoutData(Button button) { GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); data.widthHint = Math.max(IDialogConstants.BUTTON_WIDTH, minSize.x); button.setLayoutData(data); } protected static class ProjectTableLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { if (null != element && element instanceof Project && columnIndex >= 0) { Project project = (Project) element; switch (columnIndex) { case 0: return project.getDisplayName(); case 1: return project.getFile().toString(); default: return ""; //$NON-NLS-1$ } } return ""; //$NON-NLS-1$ } } public void propertyChange(PropertyChangeEvent evt) { validate(); updateLaunchConfigurationDialog(); } private void validate() { if (hasProjectSelected() == false) { setErrorMessage(Messages.ProjectsTab_noProjectSelected); return; } if (hasDependencyProblem()) { return; } if (_tabGroup instanceof RunningFledgeLaunchConfigurationTabGroup) { setMessage(Messages.RunningFledgeLaunchConfiguration_projectNotDeploy); } else { setMessage(null); } setErrorMessage(null); } private boolean hasProjectSelected() { return _appSelectionUI.getCheckedProjects().size() > 0; } private boolean hasDependencyProblem() { List<IProject> checkedProjects = _appSelectionUI.getCheckedProjects(); for (IProject project : _allProjects) { if (_appSelectionUI.isChecked(project)) { continue; } IProject masterProject = ProjectUtils.isDependedByOthers(project, checkedProjects, new HashSet<IProject>()); if (masterProject == null) { continue; } setMessage(NLS.bind(Messages.ProjectsTab_dependencyErrorMsg, new String[] { project.getName(), masterProject.getName() })); return true; } return false; } public Collection<IProject> getSelectedProjects() { return _appSelectionUI.getCheckedProjects(); } }