/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jbpm.gd.jpdl.wizard; import java.io.File; import org.eclipse.core.runtime.Path; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class ConfigureRuntimePage extends WizardPage { private static final String ENTER_NAME_MSG = "Choose a name for the jBPM 3 Runtime, e.g. 'jBPM jPDL 3.2.2'"; private static final String ENTER_LOCATION_MSG = "Enter or search a location for the jBPM 3 Runtime"; private static final String CONTINUE_MSG = "Press next to continue the project creation"; private static final String UNEXISTING_LOCATION_MSG = "This location does not exist"; private static final String INVALID_LOCATION_MSG = "This location does not contain a valid jBPM 3 runtime, please retry"; Text nameText, locationText; public ConfigureRuntimePage() { super("Configure JBoss jBPM Runtime"); setTitle("Configure JBoss jBPM Runtime"); setMessage(ENTER_NAME_MSG); } public void createControl(Composite parent) { Composite composite = createClientArea(parent); createLocateJbpmRuntimeGroup(composite); createSpace(composite); // createDownloadJbpmRuntimeLink(composite); setControl(composite); } private void update() { updateMessage(); updatePages(); } private void updatePages() { setPageComplete(!isNameEmpty() && !isLocationEmpty()); if (!isNameEmpty()) { NewProcessProjectDetailsWizardPage page = (NewProcessProjectDetailsWizardPage)getNextPage(); page.combo.removeAll(); page.combo.add(nameText.getText()); page.combo.select(0); } } private void createSpace(Composite composite) { Label label = new Label(composite, SWT.NONE); label.setLayoutData(new GridData(GridData.FILL_BOTH)); } // private void createDownloadJbpmRuntimeLink(Composite composite) { // Link link = new Link(composite, SWT.NONE); // link.setText("<a>Download the JBoss jBPM package if you have none available yet.</a>"); // GridData gridData = new GridData(GridData.FILL_HORIZONTAL); // gridData.horizontalAlignment = SWT.CENTER; // gridData.verticalIndent = 5; // link.setLayoutData(gridData); // link.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent e) { // Program.launch("http://labs.jboss.com/jbossjbpm/downloads/"); // } // }); // } private void createLocateJbpmRuntimeGroup(Composite composite) { Group group = new Group(composite, SWT.NONE); group.setText("Locate a JBoss jBPM Runtime"); group.setLayout(new GridLayout(3, false)); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.verticalIndent = 5; group.setLayoutData(gridData); createJbpmRuntimeNameField(group); createJbpmRuntimeLocationField(group); } private void createJbpmRuntimeNameField(Composite composite) { Label nameLabel = new Label(composite, SWT.NONE); nameLabel.setText("Name :"); nameText = new Text(composite, SWT.BORDER); nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); nameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { update(); } }); new Label(composite, SWT.NONE); } private void createJbpmRuntimeLocationField(Composite composite) { Label locationLabel = new Label(composite, SWT.NONE); locationLabel.setText("Location :"); locationText = new Text(composite, SWT.BORDER); locationText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); locationText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { update(); } }); Button locationButton = new Button(composite, SWT.PUSH); locationButton.setText("Browse..."); locationButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { searchLocation(); } }); } private void searchLocation() { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN); String result = dialog.open(); if (result != null) { locationText.setText(result); } } private Composite createClientArea(Composite parent) { Composite composite= new Composite(parent, SWT.NONE); GridLayout layout= new GridLayout(); layout.marginWidth= 0; layout.marginHeight= 0; layout.numColumns= 1; composite.setLayout(layout); return composite; } private void updateMessage() { setErrorMessage(null); if (isNameEmpty() && isLocationEmpty()) { setMessage(ENTER_NAME_MSG); } else if (isLocationEmpty()) { setMessage(ENTER_LOCATION_MSG); } else if (!isLocationExisting()) { setErrorMessage(UNEXISTING_LOCATION_MSG); } else if (!isValidJbpm3Installation()) { setErrorMessage(INVALID_LOCATION_MSG); } else if (isNameEmpty()) { setMessage(ENTER_NAME_MSG); } else { setMessage(CONTINUE_MSG); } } private boolean isNameEmpty() { String text = nameText.getText(); return text == null || "".equals(text); } private boolean isLocationEmpty() { String text = locationText.getText(); return text == null || "".equals(text); } private boolean isLocationExisting() { return new Path(locationText.getText()).toFile().exists(); } private boolean isValidJbpm3Installation() { return getJbpmVersionInfoFile().exists(); } private File getJbpmVersionInfoFile() { return new Path(locationText.getText()).append("/src/resources/gpd/version.info.xml").toFile(); } }