[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards ...

Robert Stryker rawblem at gmail.com
Fri Aug 25 22:33:14 EDT 2006


  User: rawb    
  Date: 06/08/25 22:33:14

  Added:       as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards        
                        ProjectRuntimeWizardFragment.java
                        AbstractJBossRuntimeWizardFragment.java
                        JBoss40RuntimeWizardFragment.java
                        JBoss32RuntimeWizardFragment.java
                        AbstractJBossServerWizardFragment.java
  Removed:     as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards        
                        AbstractJBossWizardFragment.java
                        JBoss40WizardFragment.java
                        JBoss32WizardFragment.java
  Log:
  Added infrastructure for facet runtime support
  
  Revision  Changes    Path
  1.1      date: 2006/08/26 02:33:14;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/ProjectRuntimeWizardFragment.java
  
  Index: ProjectRuntimeWizardFragment.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, 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.jboss.ide.eclipse.as.ui.wizards;
  
  import java.util.ArrayList;
  
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.core.runtime.Path;
  import org.eclipse.jdt.launching.IVMInstall;
  import org.eclipse.jdt.launching.IVMInstallType;
  import org.eclipse.jdt.launching.JavaRuntime;
  import org.eclipse.jface.dialogs.IMessageProvider;
  import org.eclipse.jface.window.Window;
  import org.eclipse.jst.server.ui.internal.Messages;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.SelectionEvent;
  import org.eclipse.swt.events.SelectionListener;
  import org.eclipse.swt.layout.FillLayout;
  import org.eclipse.swt.layout.FormAttachment;
  import org.eclipse.swt.layout.FormData;
  import org.eclipse.swt.layout.FormLayout;
  import org.eclipse.swt.layout.GridData;
  import org.eclipse.swt.widgets.Button;
  import org.eclipse.swt.widgets.Combo;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Group;
  import org.eclipse.swt.widgets.Label;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Text;
  import org.eclipse.wst.server.core.IRuntime;
  import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
  import org.eclipse.wst.server.core.IServer;
  import org.eclipse.wst.server.core.TaskModel;
  import org.eclipse.wst.server.core.internal.RuntimeWorkingCopy;
  import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
  import org.eclipse.wst.server.ui.internal.wizard.NewServerWizard;
  import org.eclipse.wst.server.ui.wizard.IWizardHandle;
  import org.eclipse.wst.server.ui.wizard.WizardFragment;
  import org.jboss.ide.eclipse.as.core.JBossServerCore;
  import org.jboss.ide.eclipse.as.core.server.JBossServer;
  import org.jboss.ide.eclipse.as.core.server.runtime.JBossProjectRuntime;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  
  public class ProjectRuntimeWizardFragment extends WizardFragment {
  	protected DynWebProjectRuntimeComposite comp;
  	
  	public ProjectRuntimeWizardFragment() {
  	}
  
  	public boolean hasComposite() {
  		return true;
  	}
  
  	public Composite createComposite(Composite parent, IWizardHandle wizard) {
  		comp = new DynWebProjectRuntimeComposite(parent, wizard);
  		return comp;
  	}
  
  	public boolean isComplete() {
  		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
  		
  		if (runtime == null)
  			return false;
  		IStatus status = runtime.validate(null);
  		return (status != null && status.isOK());
  	}
  
  	public void enter() {
  		if (comp != null) {
  			IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
  			comp.setRuntime(runtime);
  		}
  	}
  	
  	protected class DynWebProjectRuntimeComposite extends Composite {
  
  		
  		
  		protected IRuntimeWorkingCopy runtimeWC;
  		protected JBossProjectRuntime runtime;
  		
  		protected IWizardHandle wizard;
  		
  		protected Group runtimeGroup, serverGroup;
  		protected Combo serverCombo, jreCombo;
  		protected Text projRuntimeName, runtimeName, serverName;
  		protected Text homeText, jreText, configName;
  		protected String[] jreNames;
  		protected ArrayList installedJREs;
  		protected JBossServer[] jbservers;
  		private Button newServerButton;
  		
  		
  		private boolean repopulateRequired = false;
  		
  		/**
  		 * GenericRuntimeComposite constructor comment.
  		 */
  		protected DynWebProjectRuntimeComposite(Composite parent, IWizardHandle wizard) {
  			super(parent, SWT.NONE);
  			this.wizard = wizard;
  			
  			wizard.setTitle("Create JBoss Project Runtime");
  			wizard.setImageDescriptor(JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.IMG_JBOSS));
  			
  			createControl();
  		}
  
  		protected void setRuntime(IRuntimeWorkingCopy newRuntime) {
  			if (newRuntime == null) {
  				runtimeWC = null;
  				runtime = null;
  			} else {
  				runtimeWC = newRuntime;
  				runtime = (JBossProjectRuntime) newRuntime.getAdapter(JBossProjectRuntime.class);
  			}
  			
  			init();
  			validate();
  		}
  
  		/**
  		 * Provide a wizard page to change the root directory.
  		 */
  		protected void createControl() {
  			FillLayout layout = new FillLayout();
  			setLayout(layout);
  			setLayoutData(new GridData(GridData.FILL_BOTH));
  
  			
  			Composite main = new Composite(this, SWT.BORDER);
  			main.setLayout(new FormLayout());
  			
  			Label serverLabel = new Label(main, SWT.NONE);
  			serverLabel.setText("Server: ");
  			FormData serverLabelData = new FormData();
  			serverLabelData.left = new FormAttachment(0,5);
  			serverLabelData.top = new FormAttachment(0,7);
  			serverLabel.setLayoutData(serverLabelData);
  			
  			serverCombo = new Combo(main, SWT.READ_ONLY);
  			FormData serverComboData = new FormData();
  			serverComboData.top = new FormAttachment(0,5);
  			serverComboData.right = new FormAttachment(70,5);
  			serverComboData.left = new FormAttachment(serverLabel, 5);
  			serverCombo.setLayoutData(serverComboData);
  			
  			newServerButton = new Button(main, SWT.NONE);
  			newServerButton.setText("New Server...");
  			FormData newServerButtonData = new FormData();
  			newServerButtonData.top = new FormAttachment(0,5);
  			newServerButtonData.left = new FormAttachment(serverCombo, 5);
  			newServerButtonData.right = new FormAttachment(100, -5);
  			newServerButton.setLayoutData(newServerButtonData);
  			
  			repopulateServerCombo();
  			
  			createRuntimeGroup(main);
  			createServerGroup(main);
  			
  			addListeners();
  			
  		}
  		
  		protected void createRuntimeGroup(Composite main) {
  			runtimeGroup = new Group(main, SWT.NONE);
  			runtimeGroup.setText("Runtime Information");
  			FormData runtimeGroupData = new FormData();
  			runtimeGroupData.top = new FormAttachment(serverCombo, 5);
  			runtimeGroupData.left = new FormAttachment(0,5);
  			runtimeGroupData.right = new FormAttachment(100,-5);
  			runtimeGroup.setLayoutData(runtimeGroupData);
  			
  			runtimeGroup.setLayout(new FormLayout());
  			
  			// Name
  			
  			Label runtimeNameLabel = new Label(runtimeGroup, SWT.NONE);
  			runtimeNameLabel.setText("Runtime Name: ");
  			FormData runtimeNameLabelData = new FormData();
  			runtimeNameLabelData.left = new FormAttachment(0,5);
  			runtimeNameLabelData.top = new FormAttachment(0,7);
  			runtimeNameLabel.setLayoutData(runtimeNameLabelData);
  			
  			runtimeName = new Text(runtimeGroup, SWT.BORDER);
  			FormData runtimeNameData = new FormData();
  			runtimeNameData.left = new FormAttachment(30,5);
  			runtimeNameData.top = new FormAttachment(0,5);
  			runtimeNameData.right = new FormAttachment(100, -5);
  			runtimeName.setLayoutData(runtimeNameData);
  			runtimeName.setEditable(false);
  			
  			
  			// Home
  			Label homeLabel = new Label(runtimeGroup, SWT.NONE);
  			homeLabel.setText("Home Directory: ");
  			FormData homeLabelData = new FormData();
  			homeLabelData.left = new FormAttachment(0,5);
  			homeLabelData.top = new FormAttachment(runtimeName,5);
  			homeLabel.setLayoutData(homeLabelData);
  
  			homeText = new Text(runtimeGroup, SWT.BORDER);
  			FormData homeTextData = new FormData();
  			homeTextData.left = new FormAttachment(30,5);
  			homeTextData.top = new FormAttachment(runtimeName,5);
  			homeTextData.right = new FormAttachment(100, -5);
  			homeText.setLayoutData(homeTextData);
  			homeText.setEditable(false);		
  
  			// JRE
  			Label jreLabel = new Label(runtimeGroup, SWT.NONE);
  			jreLabel.setText("JRE: ");
  			FormData jreLabelData = new FormData();
  			jreLabelData.left = new FormAttachment(0,5);
  			jreLabelData.top = new FormAttachment(homeText,5);
  			jreLabel.setLayoutData(jreLabelData);
  
  			jreText = new Text(runtimeGroup, SWT.BORDER);
  			FormData jreTextData = new FormData();
  			jreTextData.left = new FormAttachment(30,5);
  			jreTextData.top = new FormAttachment(homeText,5);
  			jreTextData.right = new FormAttachment(100, -5);
  			jreText.setLayoutData(jreTextData);
  			jreText.setEditable(false);	
  		}
  		protected void createServerGroup(Composite main) {
  			serverGroup = new Group(main, SWT.NONE);
  			serverGroup.setText("Server Information");
  			FormData serverGroupData = new FormData();
  			serverGroupData.top = new FormAttachment(runtimeGroup, 5);
  			serverGroupData.left = new FormAttachment(0,5);
  			serverGroupData.right = new FormAttachment(100,-5);
  			serverGroup.setLayoutData(serverGroupData);
  			
  			serverGroup.setLayout(new FormLayout());
  			
  			// Name
  			
  			Label serverNameLabel = new Label(serverGroup, SWT.NONE);
  			serverNameLabel.setText("Server Name: ");
  			FormData serverNameLabelData = new FormData();
  			serverNameLabelData.left = new FormAttachment(0,5);
  			serverNameLabelData.top = new FormAttachment(0,5);
  			serverNameLabel.setLayoutData(serverNameLabelData);
  			
  			serverName = new Text(serverGroup, SWT.BORDER);
  			FormData serverNameData = new FormData();
  			serverNameData.left = new FormAttachment(30,5);
  			serverNameData.top = new FormAttachment(0,5);
  			serverNameData.right = new FormAttachment(100, -5);
  			serverName.setLayoutData(serverNameData);
  			serverName.setEditable(false);
  			
  			// Configuration
  			Label configLabel = new Label(serverGroup, SWT.NONE);
  			configLabel.setText("Server Configuration: ");
  			FormData configLabelData = new FormData();
  			configLabelData.left = new FormAttachment(0,5);
  			configLabelData.top = new FormAttachment(serverName,5);
  			configLabel.setLayoutData(configLabelData);
  			
  			configName = new Text(serverGroup, SWT.BORDER);
  			FormData configNameData = new FormData();
  			configNameData.left = new FormAttachment(30,5);
  			configNameData.top = new FormAttachment(serverName,5);
  			configNameData.right = new FormAttachment(100, -5);
  			configName.setLayoutData(configNameData);
  			configName.setEditable(false);
  
  
  		}
  		protected void addListeners() {
  			serverCombo.addSelectionListener(new SelectionListener() {
  				public void widgetDefaultSelected(SelectionEvent e) {
  				}
  				public void widgetSelected(SelectionEvent e) {
  					serverSelectionChanged();
  					detailsChanged();
  				} 
  			});
  			
  			newServerButton.addSelectionListener(new SelectionListener() {
  				public void widgetDefaultSelected(SelectionEvent e) {
  				}
  				public void widgetSelected(SelectionEvent e) {
  					NewServerWizard wizard = null;
  					wizard = new NewServerWizard();
  					ClosableWizardDialog dialog = new ClosableWizardDialog(new Shell(), wizard);
  					int result = dialog.open();
  					if( result == Window.OK) {
  						int currentItems = serverCombo.getItems().length;
  						int jbossServers = JBossServerCore.getAllJBossServers().length;
  						if( jbossServers == currentItems + 1 ) {
  							repopulateServerCombo();
  						} else {
  							repopulateRequired = true;
  						}
  					}
  					
  				} 
  			});
  		}
  		
  		protected void detailsChanged() {
  			JBossServer jbs = getSelectedServer();
  			if( jbs != null ) {
  				//runtimeWC.setLocation(path)
  				runtimeWC.setLocation(new Path(jbs.getAttributeHelper().getConfigurationPath()));
  				((RuntimeWorkingCopy)runtimeWC).setAttribute(JBossProjectRuntime.SERVER_ID, jbs.getServer().getId());
  			}
  			// alert the wizard to check again
  			wizard.setMessage(null, IMessageProvider.NONE);
  		}
  		protected void repopulateServerCombo() {
  			jbservers = JBossServerCore.getAllJBossServers();
  			String[] jbserverNames = new String[jbservers.length];
  			for( int i = 0; i < jbservers.length; i++ ) {
  				jbserverNames[i] = jbservers[i].getServer().getName();
  			}
  			serverCombo.setItems(jbserverNames);
  		}
  		protected void serverSelectionChanged() {
  			JBossServer selected = getSelectedServer();
  			if( selected != null ) {
  				IServer server = selected.getServer();
  				IRuntime runtime = server.getRuntime();
  				
  				configName.setText(selected.getAttributeHelper().getJbossConfiguration());
  				serverName.setText(server.getName());
  				jreText.setText(selected.getJBossRuntime().getVM().getName());
  				homeText.setText(runtime.getLocation().toOSString());
  				runtimeName.setText(runtime.getName());
  			}
  			if( repopulateRequired ) {
  				repopulateRequired = false;
  				repopulateServerCombo();
  			}
  		}
  		
  		public JBossServer getSelectedServer() {
  			int index = serverCombo.getSelectionIndex();
  			if( index != -1 ) {
  				String name = serverCombo.getItem(index);
  				for( int i = 0; i < jbservers.length; i++ ) { 
  					if( jbservers[i].getServer().getName().equals(name)) {
  						return jbservers[i];
  					}
  				}
  			}
  			return null;
  		}
  		
  		protected void updateJREs() {
  			// get all installed JVMs
  			installedJREs = new ArrayList();
  			IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
  			int size = vmInstallTypes.length;
  			for (int i = 0; i < size; i++) {
  				IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls();
  				int size2 = vmInstalls.length;
  				for (int j = 0; j < size2; j++) {
  					installedJREs.add(vmInstalls[j]);
  				}
  			}
  			
  			// get names
  			size = installedJREs.size();
  			jreNames = new String[size+1];
  			jreNames[0] = Messages.runtimeTypeDefaultJRE;
  			for (int i = 0; i < size; i++) {
  				IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
  				jreNames[i+1] = vmInstall.getName();
  			}
  		}
  
  		
  		protected void init() {
  		}
  
  		protected void validate() {
  		}
  
  	}
  
  }
  
  
  
  1.1      date: 2006/08/26 02:33:14;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossRuntimeWizardFragment.java
  
  Index: AbstractJBossRuntimeWizardFragment.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, 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.jboss.ide.eclipse.as.ui.wizards;
  
  import java.io.File;
  import java.util.ArrayList;
  
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.core.runtime.IProgressMonitor;
  import org.eclipse.core.runtime.NullProgressMonitor;
  import org.eclipse.core.runtime.Path;
  import org.eclipse.jdt.launching.IVMInstall;
  import org.eclipse.jdt.launching.IVMInstallType;
  import org.eclipse.jdt.launching.JavaRuntime;
  import org.eclipse.jface.dialogs.IMessageProvider;
  import org.eclipse.jface.preference.IPreferenceNode;
  import org.eclipse.jface.preference.PreferenceDialog;
  import org.eclipse.jface.preference.PreferenceManager;
  import org.eclipse.jface.resource.ImageDescriptor;
  import org.eclipse.jface.window.Window;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.custom.BusyIndicator;
  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.events.SelectionListener;
  import org.eclipse.swt.layout.FormAttachment;
  import org.eclipse.swt.layout.FormData;
  import org.eclipse.swt.layout.FormLayout;
  import org.eclipse.swt.widgets.Button;
  import org.eclipse.swt.widgets.Combo;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.DirectoryDialog;
  import org.eclipse.swt.widgets.Label;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.swt.widgets.Text;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.wst.server.core.IRuntime;
  import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
  import org.eclipse.wst.server.core.ServerCore;
  import org.eclipse.wst.server.core.TaskModel;
  import org.eclipse.wst.server.core.internal.RuntimeWorkingCopy;
  import org.eclipse.wst.server.ui.wizard.IWizardHandle;
  import org.eclipse.wst.server.ui.wizard.WizardFragment;
  import org.jboss.ide.eclipse.as.core.server.runtime.JBossServerRuntime;
  import org.jboss.ide.eclipse.as.ui.Messages;
  
  /**
   * @author Stryker
   */
  public abstract class AbstractJBossRuntimeWizardFragment extends WizardFragment {
  	
  	private final static int NAME_CHANGED = 1;
  	private final static int HOME_CHANGED = 2;
  	private final static int JRE_CHANGED = 3;
  	private final static int CONFIG_CHANGED = 4;
  	
  	private final static int SEVERITY_ALL = 1;
  	private final static int SEVERITY_MAJOR = 2;
  	
  	private IWizardHandle handle;
  	private Label nameLabel, homeDirLabel, installedJRELabel; 
  	private Text nameText, homeDirText;
  	private Combo jreCombo;
  	private Button homeDirButton, jreButton;
  	private Composite nameComposite, homeDirComposite, jreComposite;
  	private String name, homeDir;
  
  	// jre fields
  	protected ArrayList installedJREs;
  	protected String[] jreNames;
  	protected int defaultVMIndex;
  
  	private IVMInstall selectedVM;	
  
  	public Composite createComposite(Composite parent, IWizardHandle handle)
  	{
  		this.handle = handle;
  		
  		Composite main = new Composite(parent, SWT.NONE);
  		main.setLayout(new FormLayout());
  		
  		updateJREs();
  		createNameComposite(main);
  		createHomeComposite(main);
  		createJREComposite(main);
  		
  		// make modifications to parent
  		handle.setTitle(Messages.createWizardTitle);
  		handle.setDescription(Messages.createWizardDescription);
  		handle.setImageDescriptor (getImageDescriptor());
  		return main;
  	}
  
  	private void createNameComposite(Composite main) {
  		// Create our name composite
  		nameComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(0, 10);
  		nameComposite.setLayoutData(cData);
  		
  		nameComposite.setLayout(new FormLayout());
  
  		
  		// create internal widgets
  		nameLabel = new Label(nameComposite, SWT.None);
  		nameLabel.setText(Messages.wizardFragmentNameLabel);
  		
  		nameText = new Text(nameComposite, SWT.BORDER);
  		nameText.addModifyListener(new ModifyListener() {
  
  			public void modifyText(ModifyEvent e) {
  				updatePage(NAME_CHANGED);
  			} 
  			
  		});
  		
  		// organize widgets inside composite
  		FormData nameLabelData = new FormData();
  		nameLabelData.left = new FormAttachment(0,0);
  		nameLabel.setLayoutData(nameLabelData);
  		
  		FormData nameTextData = new FormData();
  		nameTextData.left = new FormAttachment(0, 5);
  		nameTextData.right = new FormAttachment(100, -5);
  		nameTextData.top = new FormAttachment(nameLabel, 5);
  		nameText.setLayoutData(nameTextData);
  	}
  	
  	private void createHomeComposite(Composite main) {
  		// Create our composite
  		homeDirComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(nameComposite, 10);
  		homeDirComposite.setLayoutData(cData);
  
  		homeDirComposite.setLayout(new FormLayout());
  		
  		
  		// Create Internal Widgets
  		homeDirLabel = new Label(homeDirComposite, SWT.NONE);
  		homeDirLabel.setText(Messages.wizardFragmentHomeDirLabel);
  		
  		homeDirText = new Text(homeDirComposite, SWT.BORDER);
  		
  		homeDirButton = new Button(homeDirComposite, SWT.NONE);
  		homeDirButton.setText(Messages.browse);
  
  		
  		// Add listeners
  		homeDirText.addModifyListener(new ModifyListener() {
  			public void modifyText(ModifyEvent e) {
  				updatePage(HOME_CHANGED);
  			}
  		});
  		
  		homeDirButton.addSelectionListener(new SelectionListener() {
  			public void widgetDefaultSelected(SelectionEvent e) {
  				browseHomeDirClicked();
  			}
  
  			public void widgetSelected(SelectionEvent e) {
  				browseHomeDirClicked();
  			} 
  			
  		});
  		
  		// Set Layout Data
  		FormData labelData = new FormData();
  		FormData textData = new FormData();
  		FormData buttonData = new FormData();
  		
  		labelData.left = new FormAttachment(0,0);
  		homeDirLabel.setLayoutData(labelData);
  		
  		
  		textData.left = new FormAttachment(0, 5);
  		textData.right = new FormAttachment(homeDirButton, -5);
  		textData.top = new FormAttachment(homeDirLabel, 5);
  		homeDirText.setLayoutData(textData);
  		
  		buttonData.top = new FormAttachment(homeDirLabel, 5);
  		buttonData.right = new FormAttachment(100, 0);
  		homeDirButton.setLayoutData(buttonData);
  	}
  
  	private void createJREComposite(Composite main) {
  		// Create our composite
  		jreComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(homeDirComposite, 10);
  		jreComposite.setLayoutData(cData);
  
  		jreComposite.setLayout(new FormLayout());
  		
  		
  		// Create Internal Widgets
  		installedJRELabel = new Label(jreComposite, SWT.NONE);
  		installedJRELabel.setText(Messages.wizardFragmentJRELabel);
  		
  		jreCombo = new Combo(jreComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
  		jreCombo.setItems(jreNames);
  		jreCombo.select(defaultVMIndex);
  		
  		jreButton = new Button(jreComposite, SWT.NONE);
  		jreButton.setText(Messages.installedJREs);
  		
  		// Add action listeners
  		jreButton.addSelectionListener(new SelectionAdapter() {
  			public void widgetSelected(SelectionEvent e) {
  				String currentVM = jreCombo.getText();
  				if (showPreferencePage()) {
  					updateJREs();
  					jreCombo.setItems(jreNames);
  					jreCombo.setText(currentVM);
  					if (jreCombo.getSelectionIndex() == -1)
  						jreCombo.select(defaultVMIndex);
  				}
  			}
  		});
  
  		jreCombo.addSelectionListener(new SelectionListener() {
  			public void widgetDefaultSelected(SelectionEvent e) {
  				updatePage(CONFIG_CHANGED);
  			}
  
  			public void widgetSelected(SelectionEvent e) {
  				updatePage(CONFIG_CHANGED);
  			} 
  		} );
  		
  		// Set Layout Data
  		FormData labelData = new FormData();
  		FormData comboData = new FormData();
  		FormData buttonData = new FormData();
  		
  		labelData.left = new FormAttachment(0,0);
  		installedJRELabel.setLayoutData(labelData);
  		
  		
  		comboData.left = new FormAttachment(0, 5);
  		comboData.right = new FormAttachment(jreButton, -5);
  		comboData.top = new FormAttachment(installedJRELabel, 5);
  		jreCombo.setLayoutData(comboData);
  		
  		buttonData.top = new FormAttachment(installedJRELabel, 5);
  		buttonData.right = new FormAttachment(100, 0);
  		jreButton.setLayoutData(buttonData);
  
  	}
  
  	private void updatePage(int changed) {
  		switch( changed ) {
  			case NAME_CHANGED:
  				updateErrorMessage(SEVERITY_MAJOR);
  				break;
  			case HOME_CHANGED:
  				updateErrorMessage(SEVERITY_MAJOR);
  				break;
  			case JRE_CHANGED:
  				int sel = jreCombo.getSelectionIndex();
  				selectedVM = (IVMInstall) installedJREs.get(sel);
  				break;
  			default:
  				break;
  		}
  	}
  
  	private void updateErrorMessage(int severity) {
  		String error = getErrorString(severity);
  		if( error == null ) {
  			handle.setMessage(null, IMessageProvider.NONE);
  			return;
  		}
  
  		handle.setMessage(error, IMessageProvider.ERROR);
  	}
  	
  	private String getErrorString(int severity) {
  		if( getRuntime(nameText.getText()) != null ) {
  			return Messages.serverNameInUse;
  		}
  		
  		if ( homeDirText.getText() != "" && !new File(homeDirText.getText()).exists()) {
  			return Messages.invalidDirectory;
  		}
  		
  		if( severity == SEVERITY_MAJOR ) return null;
  		
  		// now give minor warnings
  		if( nameText.getText().equals("")) 
  			return Messages.nameTextBlank;
  
  		if( homeDirText.getText().equals("")) 
  			return Messages.homeDirBlank;
  
  
  		return null;
  
  	}
  
  	
  	private void browseHomeDirClicked() {
  		File file = new File(homeDirText.getText());
  		if (! file.exists()) {
  			file = null;
  		}
  		
  		File directory = getDirectory(file, homeDirComposite.getShell());
  		if (directory == null) {
  			return;
  		}
  		
  		homeDirText.setText(directory.getAbsolutePath());
  	}
  	
  	protected File getDirectory(File startingDirectory, Shell shell) {
  		DirectoryDialog fileDialog = new DirectoryDialog(shell, SWT.OPEN);
  		if (startingDirectory != null) {
  			fileDialog.setFilterPath(startingDirectory.getPath());
  		}
  		
  		String dir = fileDialog.open();
  		if (dir != null) {
  			dir = dir.trim();
  			if (dir.length() > 0) {
  				return new File(dir);
  			}
  		}
  		return null;
  	}
  	
  	// Other
  	protected boolean showPreferencePage() {
  		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
  		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
  		PreferenceManager manager2 = new PreferenceManager();
  		manager2.addToRoot(node);
  		final PreferenceDialog dialog = new PreferenceDialog(jreButton.getShell(), manager2);
  		final boolean[] result = new boolean[] { false };
  		BusyIndicator.showWhile(jreButton.getDisplay(), new Runnable() {
  			public void run() {
  				dialog.create();
  				if (dialog.open() == Window.OK)
  					result[0] = true;
  			}
  		});
  		return result[0];
  	}
  	
  	
  	// JRE methods
  	protected void updateJREs() {
  		// get all installed JVMs
  		installedJREs = new ArrayList();
  		IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
  		int size = vmInstallTypes.length;
  		for (int i = 0; i < size; i++) {
  			IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls();
  			int size2 = vmInstalls.length;
  			for (int j = 0; j < size2; j++) {
  				installedJREs.add(vmInstalls[j]);
  			}
  		}
  		
  		// get names
  		size = installedJREs.size();
  		jreNames = new String[size];
  		for (int i = 0; i < size; i++) {
  			IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
  			jreNames[i] = vmInstall.getName();
  		}
  		
  		selectedVM = JavaRuntime.getDefaultVMInstall();
  		defaultVMIndex = installedJREs.indexOf(selectedVM);
  		
  
  	}
  	
  	// WST API methods
  	public void enter() {
  	}
  
  	public void exit() {
  		name = nameText.getText();
  		homeDir = homeDirText.getText();
  		IRuntime r = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
  		IRuntimeWorkingCopy runtimeWC;
  		if( r instanceof IRuntimeWorkingCopy ) {
  			runtimeWC = (IRuntimeWorkingCopy)r;
  		} else {
  			runtimeWC = r.createWorkingCopy();
  		}
  		runtimeWC.setName(name);
  		runtimeWC.setLocation(new Path(homeDir));
  
  		((RuntimeWorkingCopy)runtimeWC).setAttribute(JBossServerRuntime.PROPERTY_VM_ID, selectedVM.getId());
  		((RuntimeWorkingCopy)runtimeWC).setAttribute(JBossServerRuntime.PROPERTY_VM_TYPE_ID, selectedVM.getVMInstallType().getId());
  
  		getTaskModel().putObject(TaskModel.TASK_RUNTIME, runtimeWC);
  //		JBossServerRuntime runtime = (JBossServerRuntime)runtimeWC.loadAdapter(JBossServerRuntime.class, new NullProgressMonitor());
  //		runtime.setVMInstall(selectedVM);
  
  	}
  
  	public void performFinish(IProgressMonitor monitor) throws CoreException {
  		
  		IRuntime r = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
  		IRuntimeWorkingCopy runtimeWC = r.createWorkingCopy();
  		runtimeWC.setName(name);
  		runtimeWC.setLocation(new Path(homeDir));
  		IRuntime saved = runtimeWC.save(false, new NullProgressMonitor());
  		getTaskModel().putObject(TaskModel.TASK_RUNTIME, saved);
  		JBossServerRuntime runtime = (JBossServerRuntime)saved.loadAdapter(JBossServerRuntime.class, new NullProgressMonitor());
  		runtime.setVMInstall(selectedVM);
  		
  	}
  
  	public boolean isComplete() {
  		String s = getErrorString(SEVERITY_ALL);
  		return s == null ? true : false;
  	}
  
  	protected abstract ImageDescriptor getImageDescriptor();
  
  	public boolean hasComposite() {
  		return true;
  	}
  
  
  	
  	private IRuntime getRuntime(String runtimeName) {
  		IRuntime[] runtimes = ServerCore.getRuntimes();
  		for( int i = 0; i < runtimes.length; i++ ) {
  			if( runtimes[i].getName().equals(runtimeName)) return runtimes[i];
  		}
  		return null;
  	}
  }
  
  
  1.1      date: 2006/08/26 02:33:14;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBoss40RuntimeWizardFragment.java
  
  Index: JBoss40RuntimeWizardFragment.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, 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.jboss.ide.eclipse.as.ui.wizards;
  
  import org.eclipse.jface.resource.ImageDescriptor;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  
  /**
   * @author Marshall
   */
  public class JBoss40RuntimeWizardFragment extends AbstractJBossRuntimeWizardFragment
  {
  
  	protected ImageDescriptor getImageDescriptor()
  	{
  		return JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.WIZBAN_JBOSS40_LOGO);
  	}
  
  }
  
  
  
  1.1      date: 2006/08/26 02:33:14;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBoss32RuntimeWizardFragment.java
  
  Index: JBoss32RuntimeWizardFragment.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, 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.jboss.ide.eclipse.as.ui.wizards;
  
  import org.eclipse.jface.resource.ImageDescriptor;
  import org.jboss.ide.eclipse.as.ui.JBossServerUISharedImages;
  
  /**
   * @author Marshall
   */
  public class JBoss32RuntimeWizardFragment extends AbstractJBossRuntimeWizardFragment
  {
  
  	protected ImageDescriptor getImageDescriptor()
  	{
  		return JBossServerUISharedImages.getImageDescriptor(JBossServerUISharedImages.WIZBAN_JBOSS32_LOGO);
  	}
  
  }
  
  
  
  1.1      date: 2006/08/26 02:33:14;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossServerWizardFragment.java
  
  Index: AbstractJBossServerWizardFragment.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, 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.jboss.ide.eclipse.as.ui.wizards;
  
  import java.io.File;
  import java.util.ArrayList;
  
  import org.eclipse.core.resources.IFolder;
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.core.runtime.IPath;
  import org.eclipse.core.runtime.IProgressMonitor;
  import org.eclipse.core.runtime.NullProgressMonitor;
  import org.eclipse.jdt.launching.IVMInstall;
  import org.eclipse.jdt.launching.IVMInstallType;
  import org.eclipse.jdt.launching.JavaRuntime;
  import org.eclipse.jface.dialogs.IMessageProvider;
  import org.eclipse.jface.preference.IPreferenceNode;
  import org.eclipse.jface.preference.PreferenceDialog;
  import org.eclipse.jface.preference.PreferenceManager;
  import org.eclipse.jface.window.Window;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.custom.BusyIndicator;
  import org.eclipse.swt.events.ModifyEvent;
  import org.eclipse.swt.events.ModifyListener;
  import org.eclipse.swt.events.SelectionEvent;
  import org.eclipse.swt.events.SelectionListener;
  import org.eclipse.swt.layout.FormAttachment;
  import org.eclipse.swt.layout.FormData;
  import org.eclipse.swt.layout.FormLayout;
  import org.eclipse.swt.widgets.Button;
  import org.eclipse.swt.widgets.Combo;
  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.Shell;
  import org.eclipse.swt.widgets.Text;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.wst.server.core.IRuntime;
  import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
  import org.eclipse.wst.server.core.IServerWorkingCopy;
  import org.eclipse.wst.server.core.TaskModel;
  import org.eclipse.wst.server.core.internal.ServerType;
  import org.eclipse.wst.server.ui.wizard.IWizardHandle;
  import org.eclipse.wst.server.ui.wizard.WizardFragment;
  import org.jboss.ide.eclipse.as.core.server.JBossServer;
  import org.jboss.ide.eclipse.as.core.server.ServerAttributeHelper;
  import org.jboss.ide.eclipse.as.core.server.runtime.JBossServerRuntime;
  import org.jboss.ide.eclipse.as.core.util.ASDebug;
  import org.jboss.ide.eclipse.as.ui.Messages;
  import org.jboss.ide.eclipse.as.ui.util.JBossConfigurationTableViewer;
  
  public class AbstractJBossServerWizardFragment extends WizardFragment {
  	//private final static int UNKNOWN_CHANGED = 0;
  	private final static int NAME_CHANGED = 1;
  	private final static int HOME_CHANGED = 2;
  	private final static int JRE_CHANGED = 3;
  	private final static int CONFIG_CHANGED = 4;
  	
  	private final static int SEVERITY_ALL = 1;
  	private final static int SEVERITY_MAJOR = 2;
  	
  	private IWizardHandle handle;
  	private Label nameLabel, homeDirLabel, installedJRELabel, configLabel; 
  	private Text nameText, homeDirText;
  	private Combo jreCombo;
  	private Button homeDirButton, jreButton;
  	private Composite nameComposite, homeDirComposite, jreComposite, configComposite;
  	private Group g;
  	private String name, homeDir, jre, config;
  
  	// jre fields
  	protected ArrayList installedJREs;
  	protected String[] jreNames;
  	protected int defaultVMIndex;
  	private JBossConfigurationTableViewer configurations;
  
  	
  	private IVMInstall selectedVM;
  	private JBossServer server;
  	private JBossServerRuntime runtime;
  	
  
  	
  	protected void debug (String message)
  	{
  		System.out.println("[jboss-wizard-fragment] " + message);
  	}
  	
  	public Composite createComposite(Composite parent, IWizardHandle handle)
  	{
  		ASDebug.p("in createComposite", this);
  		this.handle = handle;
  		
  		Composite main = new Composite(parent, SWT.NONE);
  		main.setLayout(new FormLayout());
  		
  		
  		updateJREs();
  		createNameComposite(main);
  		
  		g = new Group(main, SWT.NONE);
  		g.setText("Runtime Information");
  		g.setLayout(new FormLayout());
  		FormData groupData = new FormData();
  		groupData.left = new FormAttachment(0,5);
  		groupData.right = new FormAttachment(100, -5);
  		groupData.top = new FormAttachment(nameComposite, 5);
  		g.setLayoutData(groupData);
  		
  		createHomeComposite(g);
  		createJREComposite(g);
  		createConfigurationComposite(main);
  
  		
  		
  		// make modifications to parent
  		handle.setTitle(Messages.createWizardTitle);
  		handle.setDescription(Messages.createWizardDescription);
  		//handle.setImageDescriptor (getImageDescriptor());
  		return main;
  	}
  
  	private void createNameComposite(Composite main) {
  		// Create our name composite
  		nameComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(0, 10);
  		nameComposite.setLayoutData(cData);
  		
  		nameComposite.setLayout(new FormLayout());
  
  		
  		// create internal widgets
  		nameLabel = new Label(nameComposite, SWT.None);
  		nameLabel.setText(Messages.wizardFragmentNameLabel);
  		
  		nameText = new Text(nameComposite, SWT.BORDER);
  		nameText.addModifyListener(new ModifyListener() {
  
  			public void modifyText(ModifyEvent e) {
  				updatePage(NAME_CHANGED);
  			} 
  			
  		});
  		
  		// organize widgets inside composite
  		FormData nameLabelData = new FormData();
  		nameLabelData.left = new FormAttachment(0,0);
  		nameLabel.setLayoutData(nameLabelData);
  		
  		FormData nameTextData = new FormData();
  		nameTextData.left = new FormAttachment(0, 5);
  		nameTextData.right = new FormAttachment(100, -5);
  		nameTextData.top = new FormAttachment(nameLabel, 5);
  		nameText.setLayoutData(nameTextData);
  	}
  	
  	private void createHomeComposite(Composite main) {
  		// Create our composite
  		homeDirComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(0, 5);
  		homeDirComposite.setLayoutData(cData);
  
  		homeDirComposite.setLayout(new FormLayout());
  		
  		
  		// Create Internal Widgets
  		homeDirLabel = new Label(homeDirComposite, SWT.NONE);
  		homeDirLabel.setText(Messages.wizardFragmentHomeDirLabel);
  		
  		homeDirText = new Text(homeDirComposite, SWT.BORDER);
  		homeDirText.setEditable(false);
  		
  		
  //		homeDirButton = new Button(homeDirComposite, SWT.NONE);
  //		homeDirButton.setText(Messages.browse);
  
  		
  		// Add listeners
  		homeDirText.addModifyListener(new ModifyListener() {
  			public void modifyText(ModifyEvent e) {
  				updatePage(HOME_CHANGED);
  			}
  		});
  		
  //		homeDirButton.addSelectionListener(new SelectionListener() {
  //			public void widgetDefaultSelected(SelectionEvent e) {
  //				browseHomeDirClicked();
  //			}
  //
  //			public void widgetSelected(SelectionEvent e) {
  //				browseHomeDirClicked();
  //			} 
  //			
  //		});
  		
  		// Set Layout Data
  		FormData labelData = new FormData();
  		FormData textData = new FormData();
  		//FormData buttonData = new FormData();
  		
  		labelData.left = new FormAttachment(0,0);
  		homeDirLabel.setLayoutData(labelData);
  		
  		
  		textData.left = new FormAttachment(0, 5);
  		textData.right = new FormAttachment(100, -5);
  		textData.top = new FormAttachment(homeDirLabel, 5);
  		homeDirText.setLayoutData(textData);
  		
  //		buttonData.top = new FormAttachment(homeDirLabel, 5);
  //		buttonData.right = new FormAttachment(100, 0);
  //		homeDirButton.setLayoutData(buttonData);
  
  
  	}
  	private void createJREComposite(Composite main) {
  		// Create our composite
  		jreComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(homeDirComposite, 10);
  		jreComposite.setLayoutData(cData);
  
  		jreComposite.setLayout(new FormLayout());
  		
  		
  		// Create Internal Widgets
  		installedJRELabel = new Label(jreComposite, SWT.NONE);
  		installedJRELabel.setText(Messages.wizardFragmentJRELabel);
  		
  		jreCombo = new Combo(jreComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
  		jreCombo.setItems(jreNames);
  		jreCombo.select(defaultVMIndex);
  		jreCombo.setEnabled(false);
  		
  //		jreButton = new Button(jreComposite, SWT.NONE);
  //		jreButton.setText(Messages.installedJREs);
  		
  		// Add action listeners
  //		jreButton.addSelectionListener(new SelectionAdapter() {
  //			public void widgetSelected(SelectionEvent e) {
  //				String currentVM = jreCombo.getText();
  //				if (showPreferencePage()) {
  //					updateJREs();
  //					jreCombo.setItems(jreNames);
  //					jreCombo.setText(currentVM);
  //					if (jreCombo.getSelectionIndex() == -1)
  //						jreCombo.select(defaultVMIndex);
  //				}
  //			}
  //		});
  //
  //		jreCombo.addSelectionListener(new SelectionListener() {
  //			public void widgetDefaultSelected(SelectionEvent e) {
  //				updatePage(CONFIG_CHANGED);
  //			}
  //
  //			public void widgetSelected(SelectionEvent e) {
  //				updatePage(CONFIG_CHANGED);
  //			} 
  //		} );
  		
  		// Set Layout Data
  		FormData labelData = new FormData();
  		FormData comboData = new FormData();
  		
  		labelData.left = new FormAttachment(0,5);
  		labelData.top = new FormAttachment(0, 7);
  		installedJRELabel.setLayoutData(labelData);
  		
  		
  		comboData.left = new FormAttachment(installedJRELabel, 5);
  		comboData.right = new FormAttachment(60, -5);
  		comboData.top = new FormAttachment(homeDirComposite, 5);
  		jreCombo.setLayoutData(comboData);
  		
  //		buttonData.top = new FormAttachment(installedJRELabel, 5);
  //		buttonData.right = new FormAttachment(100, 0);
  //		jreButton.setLayoutData(buttonData);
  
  	}
  	private void createConfigurationComposite(Composite main) {
  		configComposite = new Composite(main, SWT.NONE);
  		
  		FormData cData = new FormData();
  		cData.left = new FormAttachment(0,5);
  		cData.right = new FormAttachment(100,-5);
  		cData.top = new FormAttachment(g, 10);
  		configComposite.setLayoutData(cData);
  
  		configComposite.setLayout(new FormLayout());
  		
  		
  		configLabel = new Label(configComposite, SWT.NONE);
  		configLabel.setText(Messages.wizardFragmentConfigLabel);
  
  		configurations = new JBossConfigurationTableViewer(configComposite, 
  				SWT.BORDER | SWT.SINGLE);
  		
  		FormData labelData = new FormData();
  		labelData.left = new FormAttachment(0,5);
  		configLabel.setLayoutData(labelData);
  		
  		FormData viewerData = new FormData();
  		viewerData.left = new FormAttachment(0, 5);
  		viewerData.right = new FormAttachment(100, -5);
  		viewerData.top = new FormAttachment(configLabel, 5);
  		configurations.getTable().setLayoutData(viewerData);
  		
  		configurations.getTable().addSelectionListener(new SelectionListener() {
  
  			public void widgetDefaultSelected(SelectionEvent e) {
  				updatePage(CONFIG_CHANGED);
  			}
  
  			public void widgetSelected(SelectionEvent e) {
  				updatePage(CONFIG_CHANGED);
  			} 
  			
  		} );
  
  	}
  
  	private void updatePage(int changed) {
  		switch( changed ) {
  			case NAME_CHANGED:
  				updateErrorMessage(SEVERITY_MAJOR);
  				break;
  			case HOME_CHANGED:
  				if (! new File(homeDirText.getText()).exists()) {
  					configurations.getControl().setEnabled(false);
  				} else {
  					// No errors, clear the message and update the available configurations
  					configurations.setJBossHome(homeDirText.getText());
  					configurations.setDefaultConfiguration("default");
  
  					// update config variable
  					int index = configurations.getTable().getSelectionIndex();
  					config = configurations.getTable().getItem(index).getText();
  				}
  				updateErrorMessage(SEVERITY_MAJOR);
  
  				break;
  			case JRE_CHANGED:
  				int sel = jreCombo.getSelectionIndex();
  				selectedVM = (IVMInstall) installedJREs.get(sel);
  				break;
  			case CONFIG_CHANGED:
  				int index = configurations.getTable().getSelectionIndex();
  				config = configurations.getTable().getItem(index).getText();
  				break;
  			default:
  				break;
  		}
  	}
  
  	private void updateErrorMessage(int severity) {
  		String error = getErrorString(severity);
  		if( error == null ) {
  			handle.setMessage(null, IMessageProvider.NONE);
  			return;
  		}
  
  		handle.setMessage(error, IMessageProvider.ERROR);
  		
  	}
  	
  	private String getErrorString(int severity) {
  		if( getJbossServerFolder(nameText.getText()) != null && getJbossServerFolder(nameText.getText()).exists() ) {
  			return Messages.serverNameInUse;
  		}
  		
  		if ( !new File(homeDirText.getText()).exists()) {
  			return Messages.invalidDirectory;
  		}
  		
  		if( severity == SEVERITY_MAJOR ) return null;
  		
  		// now give minor warnings
  		if( nameText.getText().trim().equals("")) 
  			return Messages.nameTextBlank;
  
  		if( homeDirText.getText().trim().equals("")) 
  			return Messages.homeDirBlank;
  
  
  		return null;
  
  	}
  
  	
  //	private void browseHomeDirClicked() {
  //		File file = new File(homeDirText.getText());
  //		if (! file.exists()) {
  //			file = null;
  //		}
  //		
  //		File directory = getDirectory(file, homeDirComposite.getShell());
  //		if (directory == null) {
  //			return;
  //		}
  //		
  //		homeDirText.setText(directory.getAbsolutePath());
  //	}
  	
  	protected File getDirectory(File startingDirectory, Shell shell) {
  		DirectoryDialog fileDialog = new DirectoryDialog(shell, SWT.OPEN);
  		if (startingDirectory != null) {
  			fileDialog.setFilterPath(startingDirectory.getPath());
  		}
  		
  		String dir = fileDialog.open();
  		if (dir != null) {
  			dir = dir.trim();
  			if (dir.length() > 0) {
  				return new File(dir);
  			}
  		}
  		return null;
  	}
  	
  	// Other
  	protected boolean showPreferencePage() {
  		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
  		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
  		PreferenceManager manager2 = new PreferenceManager();
  		manager2.addToRoot(node);
  		final PreferenceDialog dialog = new PreferenceDialog(jreButton.getShell(), manager2);
  		final boolean[] result = new boolean[] { false };
  		BusyIndicator.showWhile(jreButton.getDisplay(), new Runnable() {
  			public void run() {
  				dialog.create();
  				if (dialog.open() == Window.OK)
  					result[0] = true;
  			}
  		});
  		return result[0];
  	}
  	
  	
  	// JRE methods
  	protected void updateJREs() {
  		// get all installed JVMs
  		installedJREs = new ArrayList();
  		IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
  		int size = vmInstallTypes.length;
  		for (int i = 0; i < size; i++) {
  			IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls();
  			int size2 = vmInstalls.length;
  			for (int j = 0; j < size2; j++) {
  				installedJREs.add(vmInstalls[j]);
  			}
  		}
  		
  		// get names
  		size = installedJREs.size();
  		jreNames = new String[size];
  		for (int i = 0; i < size; i++) {
  			IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
  			jreNames[i] = vmInstall.getName();
  		}
  		
  		selectedVM = JavaRuntime.getDefaultVMInstall();
  		defaultVMIndex = installedJREs.indexOf(selectedVM);
  		
  
  	}
  	
  	// WST API methods
  	public void enter() {
  		IRuntime r = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
  		IRuntimeWorkingCopy runtimeWC = r.createWorkingCopy();
  		runtime = (JBossServerRuntime) runtimeWC.loadAdapter(JBossServerRuntime.class, null);
  		
  		try {
  			homeDirText.setText(r.getLocation().toOSString());
  		} catch( Exception e ) {
  			e.printStackTrace();
  		}
  	}
  
  	public void exit() {
  		name = nameText.getText();
  		homeDir = homeDirText.getText();
  		jre = jreCombo.getText();
  	}
  
  	public void performFinish(IProgressMonitor monitor) throws CoreException {
  		IServerWorkingCopy serverWC = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
  		
  		IFolder folder = getJbossServerFolder(name);
  		if( !folder.exists()) {
  			folder.create(true,true, new NullProgressMonitor());
  		}
  		serverWC.setServerConfiguration(folder);
  		serverWC.setName(name);
  
  
  		server = (JBossServer) serverWC.getAdapter(JBossServer.class);
  		if( server == null ) {
  			server = (JBossServer) serverWC.loadAdapter(JBossServer.class, new NullProgressMonitor());
  		}
  
  		ServerAttributeHelper helper = new ServerAttributeHelper(server, serverWC);
  		//helper.setServerHome(homeDir);
  		helper.setJbossConfiguration(config);
  		
  		try {
  			server.setRuntime(runtime);
  			//runtime.setVMInstall(selectedVM);
  		} catch( Exception e ) {
  //			System.out.println("DYING HERE");
  			e.printStackTrace();
  		}
  		
  	}
  
  	public boolean isComplete() {
  		String s = getErrorString(SEVERITY_ALL);
  		return s == null ? true : false;
  	}
  
  	//protected abstract ImageDescriptor getImageDescriptor();
  
  	public boolean hasComposite() {
  		return true;
  	}
  
  
  	
  	private IFolder getJbossServerFolder(String serverName) {
  		try {
  			return ServerType.getServerProject().getFolder(serverName);
  		} catch( Exception e) {
  			return null;
  		}
  	}
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list