/* * Copyright (c) 2017 the original author or authors. * 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 */ package org.eclipse.buildship.ui.preferences; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Platform; 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.Group; import org.eclipse.ui.dialogs.PropertyPage; import org.eclipse.buildship.core.CorePlugin; import org.eclipse.buildship.core.configuration.BuildConfiguration; import org.eclipse.buildship.core.configuration.ConfigurationManager; import org.eclipse.buildship.ui.util.selection.Enabler; /** * Preference page for Gradle projects. * * @author Donat Csikos */ public final class GradleProjectPreferencePage extends PropertyPage { private Button overrideWorkspaceSettingsCheckbox; private Button offlineModeCheckbox; private Button buildScansEnabledCheckbox; @Override protected Control createContents(Composite parent) { Composite page = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); page.setLayout(layout); Group overridePreferencesGroup = createGroup(page); createOverrideWorkspacePreferencesControl(overridePreferencesGroup); initialize(); return page; } private Group createGroup(Composite parent) { Group group = new Group(parent, SWT.NONE); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); return group; } private void createOverrideWorkspacePreferencesControl(Composite container) { GridLayout layout = new GridLayout(3, false); container.setLayout(layout); this.overrideWorkspaceSettingsCheckbox = new Button(container, SWT.CHECK); this.overrideWorkspaceSettingsCheckbox.setText("Override workspace settings"); this.offlineModeCheckbox = new Button(container, SWT.CHECK); this.offlineModeCheckbox.setText("Offline Mode"); this.buildScansEnabledCheckbox = new Button(container, SWT.CHECK); this.buildScansEnabledCheckbox.setText("Build Scans"); new Enabler(this.overrideWorkspaceSettingsCheckbox).enables(this.offlineModeCheckbox, this.buildScansEnabledCheckbox); } private void initialize() { IProject project = getTargetProject(); BuildConfiguration buildConfig = CorePlugin.configurationManager().loadProjectConfiguration(project).getBuildConfiguration(); boolean overrideWorkspaceSettings = buildConfig.isOverrideWorkspaceSettings(); this.overrideWorkspaceSettingsCheckbox.setSelection(overrideWorkspaceSettings); this.buildScansEnabledCheckbox.setEnabled(overrideWorkspaceSettings); this.buildScansEnabledCheckbox.setSelection(buildConfig.isBuildScansEnabled()); this.offlineModeCheckbox.setEnabled(overrideWorkspaceSettings); this.offlineModeCheckbox.setSelection(buildConfig.isOfflineMode()); } @Override public boolean performOk() { IProject project = getTargetProject(); ConfigurationManager manager = CorePlugin.configurationManager(); BuildConfiguration currentConfig = manager.loadProjectConfiguration(project).getBuildConfiguration(); BuildConfiguration updatedConfig = manager.createBuildConfiguration(currentConfig.getRootProjectDirectory(), currentConfig.getGradleDistribution(), this.overrideWorkspaceSettingsCheckbox.getSelection(), this.buildScansEnabledCheckbox.getSelection(), this.offlineModeCheckbox.getSelection()); manager.saveBuildConfiguration(updatedConfig); return true; } @SuppressWarnings({"cast", "RedundantCast"}) private IProject getTargetProject() { return (IProject) Platform.getAdapterManager().getAdapter(getElement(), IProject.class); } }