/******************************************************************************* * Copyright (c) 2013 Pivotal Software, 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: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.springsource.ide.eclipse.gradle.ui; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.springsource.ide.eclipse.gradle.core.GradleCore; import org.springsource.ide.eclipse.gradle.core.m2e.M2EUtils; import org.springsource.ide.eclipse.gradle.core.preferences.GradlePreferences; import org.springsource.ide.eclipse.gradle.core.util.expression.LiveExpression; import org.springsource.ide.eclipse.gradle.core.validators.CompositeValidator; import org.springsource.ide.eclipse.gradle.core.validators.ValidationResult; /** * @author Kris De Volder */ public class DependencyManagementSection extends PrefsPageSection { LiveExpression<ValidationResult> validator = new CompositeValidator(); Text autoRefreshDelayText; Button enableAutoRefreshButton; private Button enableJarToMvnProjectMappingButton; private Button enableJarToGradleProjectMappingButton; private Button useCustomToolingModelButton; private Button enableJarRemappingOnOpenClose; private Button exportDependencies; public DependencyManagementSection(GradlePreferencesPage owner) { super(owner); } @Override public boolean performOK() { setEnableAutoRefresh(getEnableAutoRefreshInPage()); setAutoRefreshDelay(getAutoRefreshDelayInPage()); setExportDependencies(getExportDependenciesInPage()); if (enableJarToMvnProjectMappingButton!=null) { //This can be null if M2E is not installed. In that case the option is not supported and the UI widgetry for it is not created. setRemapJarsToMavenProjects(enableJarToMvnProjectMappingButton.getSelection()); } setRemapJarsToGradleProjects(enableJarToGradleProjectMappingButton.getSelection()); setJarRemappingOnOpenClose(enableJarRemappingOnOpenClose.getSelection()); setUseCustomToolingModel(useCustomToolingModelButton.getSelection()); return true; } @Override public void performDefaults() { setEnableAutoRefreshInPage(GradlePreferences.DEFAULT_AUTO_REFRESH_DEPENDENCIES); setAutoRefreshDelayInPage(GradlePreferences.DEFAULT_AUTO_REFRESH_DELAY); setExportDependenciesInPage(GradlePreferences.DEFAULT_EXPORT_DEPENDENCIES); setRemapJarsToMavenProjectsInPage(GradlePreferences.DEFAULT_JAR_REMAP_GRADLE_TO_MAVEN); setRemapJarsToGradleProjectsInPage(GradlePreferences.DEFAULT_JAR_REMAP_GRADLE_TO_GRADLE); setUseCustomToolingModelInPage(GradlePreferences.DEFAULT_USE_CUSTOM_TOOLING_MODEL); setJarRemappingOnOpenCloseInPage(GradlePreferences.DEFAULT_JAR_REMAP_ON_OPEN_CLOSE); } @Override public LiveExpression<ValidationResult> getValidator() { return validator; } @Override public void createContents(Composite page) { GridDataFactory grabHorizontal = GridDataFactory.fillDefaults().grab(true, false); GridDataFactory span2 = GridDataFactory.fillDefaults().span(2, 1); Label label = new Label(page, SWT.NONE); label.setText("Dependency Management"); Composite composite = new Composite(page, SWT.NONE); GridLayout layout = new GridLayout(2, false); composite.setLayout(layout); //Export 'Gradle Dependencies'? exportDependencies = new Button(composite, SWT.CHECK); exportDependencies.setText("Export 'Gradle Dependencies' classpath elements"); exportDependencies.setToolTipText("Should the entries in 'Gradle Dependencies' classpath container be exported\n" + "This option only affects projects with 'Dependency Management' enabled. " + "Other projects use whatever is generated by running the Gradle 'eclipse' task."); span2.applyTo(exportDependencies); setExportDependenciesInPage(getExportDependencies()); //Enable auto refresh checkbox enableAutoRefreshButton = new Button(composite, SWT.CHECK); enableAutoRefreshButton.setText("Enable automatic refresh. Delay (ms) : "); enableAutoRefreshButton.setToolTipText("Automatically refresh 'Gradle Depencies' when any .gradle file is changed"); enableAutoRefreshButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { } public void widgetSelected(SelectionEvent e) { enableDisableWidgets(); } }); setEnableAutoRefreshInPage(getEnableAutoRefresh()); //Refresh delay text widget autoRefreshDelayText = new Text(composite, SWT.BORDER); autoRefreshDelayText.setToolTipText("Delay between change event and triggered auto refresh."); grabHorizontal.applyTo(composite); grabHorizontal.applyTo(autoRefreshDelayText); setAutoRefreshDelayInPage(getAutoRefreshDelay()); enableJarToMvnProjectMappingButton = new Button(composite, SWT.CHECK); enableJarToMvnProjectMappingButton.setText("Remap Jars to maven projects (requires Gradle 1.1 and m2e)"); enableJarToMvnProjectMappingButton.setToolTipText("Try to replace jars in Gradle Dependencies by dependencies to maven projects in the workspace."); enableJarToMvnProjectMappingButton.setSelection(GradleCore.getInstance().getPreferences().getRemapJarsToMavenProjects()); enableJarToMvnProjectMappingButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { } public void widgetSelected(SelectionEvent e) { enableDisableWidgets(); } }); if (!M2EUtils.isInstalled()) { enableJarToMvnProjectMappingButton.setEnabled(false); } span2.applyTo(enableJarToMvnProjectMappingButton); enableJarToGradleProjectMappingButton = new Button(composite, SWT.CHECK); enableJarToGradleProjectMappingButton.setText("Remap Jars to Gradle Projects (requires Gradle 1.12 or later)"); enableJarToGradleProjectMappingButton.setToolTipText("Try to replace jars in Gradle Dependencies by dependencies to Gradle projects in the workspace."); enableJarToGradleProjectMappingButton.setSelection(GradleCore.getInstance().getPreferences().getRemapJarsToGradleProjects()); enableJarToGradleProjectMappingButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { } public void widgetSelected(SelectionEvent e) { enableDisableWidgets(); } }); span2.applyTo(enableJarToGradleProjectMappingButton); enableJarRemappingOnOpenClose = new Button(composite, SWT.CHECK); enableJarRemappingOnOpenClose.setText("Jar Remapping on Project Open/Close"); enableJarRemappingOnOpenClose.setToolTipText("When jar remapping is enabled, recompute remappings automatically" + "when projects in the workspace are openened or closed."); enableJarRemappingOnOpenClose.setSelection(GradleCore.getInstance().getPreferences().getJarRemappingOnOpenClose()); span2.applyTo(enableJarRemappingOnOpenClose); useCustomToolingModelButton = new Button(composite, SWT.CHECK); useCustomToolingModelButton.setText("Use Custom Tooling Model (requires Gradle 2.2)"); useCustomToolingModelButton.setToolTipText("The tooling will work better on newer versions of Gradle but " + "may not work at all on older versions of Gradle."); useCustomToolingModelButton.setSelection(GradleCore.getInstance().getPreferences().getUseCustomToolingModel()); span2.applyTo(useCustomToolingModelButton); enableDisableWidgets(); } private void enableDisableWidgets() { enableDisableWidgets(enableAutoRefreshButton, autoRefreshDelayText); if (enableJarToGradleProjectMappingButton!=null && enableJarToMvnProjectMappingButton!=null && enableJarRemappingOnOpenClose!=null) { boolean openCloseListerWidgetEnabled = enableJarToGradleProjectMappingButton.getSelection() || enableJarToMvnProjectMappingButton.getSelection(); enableJarRemappingOnOpenClose.setEnabled(openCloseListerWidgetEnabled); } } public void enableDisableWidgets(Button radio, Control... others) { boolean enable = radio.getSelection(); for (Control widget : others) { widget.setEnabled(enable); } } ////////////////// 'in page' getters and setters ////////////////////////// public boolean getEnableAutoRefreshInPage() { if (enableAutoRefreshButton!=null) { return enableAutoRefreshButton.getSelection(); } return GradlePreferences.DEFAULT_AUTO_REFRESH_DEPENDENCIES; } public void setEnableAutoRefreshInPage(boolean e) { enableAutoRefreshButton.setSelection(e); } private void setAutoRefreshDelayInPage(int v) { autoRefreshDelayText.setText(""+v); } private int getAutoRefreshDelayInPage() { if (autoRefreshDelayText!=null) { try { return Integer.parseInt(autoRefreshDelayText.getText()); } catch (NumberFormatException e) { } } return GradlePreferences.DEFAULT_AUTO_REFRESH_DELAY; } private boolean getExportDependenciesInPage() { return exportDependencies.getSelection(); } private void setExportDependenciesInPage(boolean enable) { exportDependencies.setSelection(enable); } private void setRemapJarsToMavenProjectsInPage(boolean enable) { enableJarToMvnProjectMappingButton.setSelection(enable); } private void setRemapJarsToGradleProjectsInPage(boolean enable) { enableJarToGradleProjectMappingButton.setSelection(enable); } private void setUseCustomToolingModelInPage(boolean enable) { useCustomToolingModelButton.setSelection(enable); } private void setJarRemappingOnOpenCloseInPage(boolean v) { enableJarRemappingOnOpenClose.setSelection(v); } ///////////// preferences getters and setters ///////////////////////////////// private boolean getEnableAutoRefresh() { return GradleCore.getInstance().getPreferences().isAutoRefreshDependencies(); } private boolean getExportDependencies() { return GradleCore.getInstance().getPreferences().isExportDependencies(); } private void setExportDependencies(boolean e) { GradleCore.getInstance().getPreferences().setExportDependencies(e); } private int getAutoRefreshDelay() { return GradleCore.getInstance().getPreferences().getAutoRefreshDelay(); } private void setEnableAutoRefresh(boolean e) { GradleCore.getInstance().getPreferences().setAutoRefreshDependencies(e); } private void setAutoRefreshDelay(int v) { GradleCore.getInstance().getPreferences().setAutoRefreshDelay(v); } private void setRemapJarsToMavenProjects(boolean v) { GradleCore.getInstance().getPreferences().setRemapJarsToMavenProjects(v); } private void setRemapJarsToGradleProjects(boolean v) { GradleCore.getInstance().getPreferences().setRemapJarsToGradleProjects(v); } private void setUseCustomToolingModel(boolean v) { GradleCore.getInstance().getPreferences().setUseCustomToolingModel(v); } private void setJarRemappingOnOpenClose(boolean v) { GradleCore.getInstance().getPreferences().setJarRemappingOnOpenClose(v); } }