/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2002 - 2006 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowlegement: "This product includes software
* developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately,
* this acknowlegement may appear in the software itself, if and wherever such
* third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or
* promote products derived from this software without prior written permission.
* For written permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle" nor
* may "ObjectStyle" appear in their names without prior written permission of
* the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals on
* behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.ui.propertypages;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Text;
import org.objectstyle.woenvironment.frameworks.Root;
import org.objectstyle.wolips.core.resources.types.project.ProjectAdapter;
import org.objectstyle.wolips.jdt.JdtPlugin;
import org.objectstyle.wolips.jdt.ProjectFrameworkAdapter;
import org.objectstyle.wolips.ui.UIPlugin;
import org.objectstyle.wolips.variables.BuildProperties;
public class WOLipsDeploymentPropertyPage extends WOLipsPropertyPage {
private Button _servletDeploymentCheck;
private Button _generateWebXMLCheck;
private Map<Root, Button> _embedButtons;
private Text _customInfoPListText;
private Text _customWebXMLText;
private Button _javaClientButton;
private Button _javaWebStartButton;
private void _addEmbedSettingsSection(Composite parent, ProjectAdapter project) {
Composite embedGroup = _createGroupWithLabel(parent, "Embed Frameworks");
embedGroup.setLayout(new GridLayout(1, false));
_embedButtons = new HashMap<Root, Button>();
for (Root root : JdtPlugin.getDefault().getFrameworkModel(project.getUnderlyingProject()).getRoots()) {
Button embedButton = new Button(embedGroup, SWT.CHECK | SWT.LEFT);
embedButton.setText(root.getName());
embedButton.setEnabled(true);
embedButton.setSelection(getBuildProperties().isEmbed(root));
embedButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_embedButtons.put(root, embedButton);
}
}
private void _addCustomInfoPListSettingsSection(Composite parent, ProjectAdapter project) {
Composite customInfoPListGroup = _createGroupWithLabel(parent, "Custom Info.plist");
customInfoPListGroup.setLayout(new GridLayout(2, false));
_customInfoPListText = _addTextArea(customInfoPListGroup, null);
if (project != null) {
BuildProperties buildProperties = getBuildProperties();
if (buildProperties != null) {
_customInfoPListText.setText(buildProperties.getCustomInfoPListContent(true));
}
}
}
private void _addJavaClientSection(Composite parent) {
Composite javaClientGroup = _createGroupWithLabel(parent, "Java Client");
javaClientGroup.setLayout(new GridLayout(1, false));
_javaClientButton = new Button(javaClientGroup, SWT.CHECK | SWT.LEFT);
_javaClientButton.setText("Java Client");
_javaClientButton.setEnabled(true);
_javaClientButton.setSelection(getBuildProperties().isJavaClient());
_javaClientButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WOLipsDeploymentPropertyPage.this.enableWidgets();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
_javaWebStartButton = new Button(javaClientGroup, SWT.CHECK | SWT.LEFT);
_javaWebStartButton.setText("Java WebStart");
_javaWebStartButton.setEnabled(true);
_javaWebStartButton.setSelection(getBuildProperties().isJavaWebStart());
}
private void _addServletDeploymentSection(Composite parent) {
Composite group = _createGroupWithLabel(parent, "Servlet Deployment");
group.setLayout(new GridLayout(2, false));
_servletDeploymentCheck = new Button(group, SWT.CHECK | SWT.LEFT);
GridData servletDeploymentData = new GridData();
servletDeploymentData.horizontalSpan = 2;
_servletDeploymentCheck.setLayoutData(servletDeploymentData);
_servletDeploymentCheck.setText("Servlet Deployment");
_servletDeploymentCheck.setEnabled(true);
_servletDeploymentCheck.setSelection(getBuildProperties().isServletDeployment());
_servletDeploymentCheck.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WOLipsDeploymentPropertyPage.this.enableWidgets();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
_generateWebXMLCheck = new Button(group, SWT.CHECK | SWT.LEFT);
GridData generateWebXmlData = new GridData();
generateWebXmlData.horizontalSpan = 2;
_generateWebXMLCheck.setLayoutData(generateWebXmlData);
_generateWebXMLCheck.setText("Autogenerate web.xml");
_generateWebXMLCheck.setEnabled(true);
_generateWebXMLCheck.setSelection(getBuildProperties().getWebXML());
_generateWebXMLCheck.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WOLipsDeploymentPropertyPage.this.enableWidgets();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
_customWebXMLText = _addTextArea(group, "Custom web.xml");
_customWebXMLText.setText(getBuildProperties().getWebXML_CustomContent(true));
}
protected void enableWidgets() {
_customInfoPListText.setEnabled(true);
if (getProjectAdapter() != null) {
boolean isApplication = getProjectAdapter().isApplication();
_servletDeploymentCheck.setEnabled(isApplication);
_generateWebXMLCheck.setEnabled(isApplication && _servletDeploymentCheck.getSelection());
_customWebXMLText.setEnabled(isApplication && _servletDeploymentCheck.getSelection() && !_generateWebXMLCheck.getSelection());
for (Button embedButton : _embedButtons.values()) {
embedButton.setEnabled(isApplication && !_servletDeploymentCheck.getSelection());
}
_javaWebStartButton.setEnabled(_javaClientButton.getSelection());
}
}
@Override
protected void _createContents(Composite parent, ProjectAdapter projectAdapter, boolean isWOProject) {
_addCustomInfoPListSettingsSection(parent, projectAdapter);
_addServletDeploymentSection(parent);
_addJavaClientSection(parent);
_addEmbedSettingsSection(parent, projectAdapter);
enableWidgets();
}
protected void setDefaults(ProjectAdapter project) {
String customInfoPListContent = getBuildProperties().getCustomInfoPListContent(true);
if (customInfoPListContent != null) {
_customInfoPListText.setText(customInfoPListContent);
}
_customWebXMLText.setText("");
_servletDeploymentCheck.setSelection(false);
_generateWebXMLCheck.setSelection(false);
}
public boolean performOk() {
// store the value in the owner text field
try {
ProjectAdapter projectAdapter = getProjectAdapter();
if (projectAdapter != null) {
BuildProperties buildProperties = getBuildProperties();
buildProperties.setCustomInfoPListContent(_customInfoPListText.getText());
buildProperties.setServletDeployment(_servletDeploymentCheck.getSelection());
buildProperties.setWebXML(_generateWebXMLCheck.getSelection());
buildProperties.setWebXML_CustomContent(_customWebXMLText.getText());
ProjectFrameworkAdapter projectFrameworkAdapter = getProjectFrameworkAdapter();
if (buildProperties.isServletDeployment()) {
projectFrameworkAdapter.addFrameworkNamed("JavaWOJSPServlet");
} else {
projectFrameworkAdapter.removeFrameworkNamed("JavaWOJSPServlet");
}
for (Root root : _embedButtons.keySet()) {
Button embedButton = _embedButtons.get(root);
boolean embed = buildProperties.isServletDeployment() || (embedButton.isEnabled() && embedButton.getSelection());
buildProperties.setEmbed(root, embed);
}
buildProperties.setJavaClient(_javaClientButton.getSelection());
buildProperties.setJavaWebStart(_javaClientButton.getSelection() && _javaWebStartButton.getSelection());
buildProperties.save();
}
} catch (Exception up) {
UIPlugin.getDefault().log(up);
return false;
}
return true;
}
}