/******************************************************************************* * Copyright (c) 2008-2010 Sonatype, Inc. * 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 * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.m2e.core.ui.internal.preferences; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; 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.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.PropertyPage; import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.internal.IMavenConstants; import org.eclipse.m2e.core.project.IProjectConfigurationManager; import org.eclipse.m2e.core.project.ResolverConfiguration; import org.eclipse.m2e.core.ui.internal.Messages; /** * Maven project preference page * * @author Eugene Kuleshov */ public class MavenProjectPreferencePage extends PropertyPage { private static final Logger log = LoggerFactory.getLogger(MavenProjectPreferencePage.class); private Button resolveWorspaceProjectsButton; // private Button includeModulesButton; private Text selectedProfilesText; public MavenProjectPreferencePage() { setTitle(Messages.MavenProjectPreferencePage_title); } protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new GridData(GridData.FILL)); Label profilesLabel = new Label(composite, SWT.NONE); profilesLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); profilesLabel.setText(Messages.MavenProjectPreferencePage_lblProfiles); selectedProfilesText = new Text(composite, SWT.BORDER); selectedProfilesText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); resolveWorspaceProjectsButton = new Button(composite, SWT.CHECK); GridData resolveWorspaceProjectsButtonData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); resolveWorspaceProjectsButton.setLayoutData(resolveWorspaceProjectsButtonData); resolveWorspaceProjectsButton.setText(Messages.MavenProjectPreferencePage_btnResolve); // includeModulesButton = new Button(composite, SWT.CHECK); // GridData gd = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1); // gd.verticalIndent = 15; // includeModulesButton.setLayoutData(gd); // includeModulesButton.setText("Include &Modules"); // // Text includeModulesText = new Text(composite, SWT.WRAP | SWT.READ_ONLY | SWT.MULTI); // includeModulesText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE)); // GridData gd_includeModulesText = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1); // gd_includeModulesText.horizontalIndent = 15; // gd_includeModulesText.verticalIndent = 0; // gd_includeModulesText.widthHint = 300; // gd_includeModulesText.heightHint = 120; // includeModulesText.setLayoutData(gd_includeModulesText); // includeModulesText.setBackground(composite.getBackground()); // includeModulesText.setText("When enabled, dependencies from all nested modules " // + "are added to the \"Maven Dependencies\" container and " // + "source folders from nested modules are added to the current " // + "project build path (use \"Update Sources\" action)"); init(getResolverConfiguration()); return composite; } protected void performDefaults() { init(new ResolverConfiguration()); } private void init(ResolverConfiguration configuration) { resolveWorspaceProjectsButton.setSelection(configuration.shouldResolveWorkspaceProjects()); // includeModulesButton.setSelection(configuration.shouldIncludeModules()); selectedProfilesText.setText(configuration.getSelectedProfiles()); } public boolean performOk() { final IProject project = getProject(); try { if(!project.isAccessible() || !project.hasNature(IMavenConstants.NATURE_ID)) { return true; } } catch(CoreException ex) { log.error(ex.getMessage(), ex); return false; } final ResolverConfiguration configuration = getResolverConfiguration(); if(configuration.getSelectedProfiles().equals(selectedProfilesText.getText()) && // configuration.shouldIncludeModules()==includeModulesButton.getSelection() && configuration.shouldResolveWorkspaceProjects() == resolveWorspaceProjectsButton.getSelection()) { return true; } configuration.setResolveWorkspaceProjects(resolveWorspaceProjectsButton.getSelection()); // configuration.setIncludeModules(includeModulesButton.getSelection()); configuration.setSelectedProfiles(selectedProfilesText.getText()); IProjectConfigurationManager projectManager = MavenPlugin.getProjectConfigurationManager(); boolean isSet = projectManager.setResolverConfiguration(getProject(), configuration); if(isSet) { boolean res = MessageDialog.openQuestion(getShell(), Messages.MavenProjectPreferencePage_dialog_title, // Messages.MavenProjectPreferencePage_dialog_message); if(res) { WorkspaceJob job = new WorkspaceJob(NLS.bind(Messages.MavenProjectPreferencePage_job, project.getName())) { public IStatus runInWorkspace(IProgressMonitor monitor) { try { MavenPlugin.getProjectConfigurationManager().updateProjectConfiguration(project, monitor); } catch(CoreException ex) { return ex.getStatus(); } return Status.OK_STATUS; } }; job.setRule(MavenPlugin.getProjectConfigurationManager().getRule()); job.schedule(); } } return isSet; } private ResolverConfiguration getResolverConfiguration() { IProjectConfigurationManager projectManager = MavenPlugin.getProjectConfigurationManager(); return projectManager.getResolverConfiguration(getProject()); } private IProject getProject() { return (IProject) getElement().getAdapter(IProject.class); } }