/******************************************************************************* * Copyright (c) 2012 VMWare, 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: * VMWare, Inc. - initial API and implementation *******************************************************************************/ package org.grails.ide.eclipse.runonserver.ui; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.IWorkbenchPropertyPage; import org.eclipse.ui.dialogs.PropertyPage; import org.grails.ide.eclipse.core.GrailsCoreActivator; import org.grails.ide.eclipse.core.model.GrailsVersion; import org.grails.ide.eclipse.runonserver.RunOnServerProperties; /** * Property page for Grails App projects, containing run on server related properties. * * @author Kris De Volder * @since 2.6 */ public class RunOnServerPropertyPage extends PropertyPage implements IWorkbenchPropertyPage { Button[] envButtons; private Button customEnvButton; private Text customEnvText; private Button incrementalButton; public RunOnServerPropertyPage() { // TODO Auto-generated constructor stub } @Override protected Control createContents(Composite parent) { Composite page = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); layout.marginHeight = 1; layout.marginWidth = 1; page.setLayout(layout); createEnvSection(page); createIncrementalSection(page); return page; } private void createEnvSection(Composite page) { GridDataFactory grabHorizontal = GridDataFactory.fillDefaults().grab(true, false); Label label = new Label(page, SWT.NONE); label.setText("Grails Environment"); label.setToolTipText("Grails Environment parameter that will be used to deploy\n" + "this Grails app to TcServer"); Composite composite = new Composite(page, SWT.NONE); GridLayout layout = new GridLayout(2, false); composite.setLayout(layout); envButtons = new Button[] { new Button(composite, SWT.RADIO), new Button(composite, SWT.RADIO), new Button(composite, SWT.RADIO) }; GridDataFactory spanTwo = GridDataFactory.fillDefaults().span(2, 1); for (Button b : envButtons) { spanTwo.applyTo(b); } envButtons[0].setText("dev"); envButtons[1].setText("prod"); envButtons[2].setText("test"); customEnvButton = new Button(composite, SWT.RADIO); customEnvButton.setText("Custom"); customEnvText = new Text(composite, SWT.BORDER); customEnvText.setText(RunOnServerProperties.DEFAULT_ENV); customEnvButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { customEnvText.setEnabled(customEnvButton.getSelection()); } }); grabHorizontal.applyTo(composite); grabHorizontal.applyTo(customEnvText); setEnvironmentInPage(getEnvironment()); oldGrailsBugWarning(); } private void createIncrementalSection(Composite page) { incrementalButton = new Button(page, SWT.CHECK); incrementalButton.setText("Incremental War Build"); incrementalButton.setToolTipText("When enabled, tries to avoid calls to grails war command by applying " + "changes from workspace incrementally to previously created war contents."); incrementalButton.setSelection(getIncremental()); } private void oldGrailsBugWarning() { GrailsVersion version = GrailsVersion.getEclipseGrailsVersion(getProject()); if (GrailsVersion.V_1_3_6.compareTo(version)>0) { setMessage("Grails "+version+" (older than 1.3.6) may not honor the environment parameter!", DialogPage.WARNING); } } private String getEnvironmentInPage() { for (Button b : envButtons) { if (b.getSelection()) { return b.getText(); } } String customEnv = customEnvText.getText().trim(); if ("".equals(customEnv)) { customEnv = RunOnServerProperties.DEFAULT_ENV; } return customEnv; } private void setEnvironmentInPage(String environment) { boolean custom = true; for (Button b : envButtons) { boolean setThis = b.getText().equals(environment); b.setSelection(setThis); if (setThis) { custom = false; } } customEnvButton.setSelection(custom); customEnvText.setEnabled(custom); if (custom) { customEnvText.setText(environment); } } private String getEnvironment() { IProject project = getProject(); return RunOnServerProperties.getEnv(project); } private boolean getIncremental() { IProject project = getProject(); return RunOnServerProperties.getIncremental(project); } private IProject getProject() { return (IProject) getElement().getAdapter(IProject.class); } private void setEnvironment(String env) throws CoreException { IProject project = getProject(); RunOnServerProperties.setEnv(project, env); } private void setIncremental(boolean isIncremental) throws CoreException { IProject project = getProject(); RunOnServerProperties.setIncremental(project, isIncremental); } @Override public boolean performOk() { super.performOk(); try { setEnvironment(getEnvironmentInPage()); setIncremental(incrementalButton.getSelection()); return true; } catch (CoreException e) { GrailsCoreActivator.log(e); return false; } } }