*** empty log message ***
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/internal/ui/GenericServerRuntimeWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/internal/ui/GenericServerRuntimeWizardFragment.java
new file mode 100644
index 0000000..7fd8a7d
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/internal/ui/GenericServerRuntimeWizardFragment.java
@@ -0,0 +1,235 @@
+/*******************************************************************************
+ * Copyright (c) 2004 Eteration Bilisim A.S.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Gorkem Ercan - initial API and implementation
+ * Naci M. Dai
+ *
+ * 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 APACHE SOFTWARE FOUNDATION 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 Eteration Bilisim A.S. For more
+ * information on eteration, please see
+ * <http://www.eteration.com/>.
+ ***************************************************************************/
+package org.eclipse.jst.server.generic.internal.ui;
+
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.server.generic.internal.core.GenericServerRuntime;
+import org.eclipse.jst.server.generic.internal.xml.ServerTypeDefinition;
+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.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wst.server.core.IElement;
+import org.eclipse.wst.server.core.IResourceManager;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.ITaskModel;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+
+/**
+ * A serverDefinitionType aware wizard for defining runtimes.
+ *
+ * @author Gorkem Ercan
+ */
+public class GenericServerRuntimeWizardFragment extends ServerDefinitionTypeAwareWizardFragment {
+
+ private Group selectionBar;
+ private Combo fServerCombo;
+ private ServerTypeDefinitionGroup fServerPanel;
+ private IRuntimeWorkingCopy fRuntimeWC;
+
+ /**
+ * Constructor
+ */
+ public GenericServerRuntimeWizardFragment() {
+ super();
+ }
+ /* (non-Javadoc)
+ * @see com.ibm.wtp.server.ui.wizard.IWizardFragment#isComplete()
+ */
+ public boolean isComplete() {
+ IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(ITaskModel.TASK_RUNTIME);
+ if (runtime == null)
+ return false;
+ IStatus status = runtime.validate();
+ return (status != null && status.isOK());
+ }
+
+ public void createContent(Composite parent, IWizardHandle handle) {
+ fRuntimeWC=null;
+ createSelectionBar(parent);
+ createServerDefinitionTypeComposite(parent);
+ }
+
+
+ private void swapBody()
+ {
+ String selected = fServerCombo == null ? null : fServerCombo
+ .getItem(fServerCombo.getSelectionIndex());
+ if (getServerDefinitionId() != null)
+ selected = getServerDefinitionId();
+ Map properties = null;
+ if (getRuntimeWorkingCopy() != null)
+ properties = getRuntimeWorkingCopy()
+ .getAttribute(
+ GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,
+ (Map) null);
+ ServerTypeDefinition definition = getServerTypeDefinition(selected,
+ properties);
+
+ fServerPanel.reset(definition,
+ ServerTypeDefinitionGroup.CONTEXT_RUNTIME, properties);
+ }
+ /**
+ * @param selected
+ */
+ private void createServerDefinitionTypeComposite(Composite parent) {
+ String selected = fServerCombo==null?null:fServerCombo.getItem(fServerCombo.getSelectionIndex());
+ if(getServerDefinitionId()!=null)
+ selected=getServerDefinitionId();
+ Map properties= null;
+ if(getRuntimeWorkingCopy()!=null)
+ properties = getRuntimeWorkingCopy().getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,(Map)null);
+ ServerTypeDefinition definition = getServerTypeDefinition(selected,properties);
+ fServerPanel = new ServerTypeDefinitionGroup(definition,ServerTypeDefinitionGroup.CONTEXT_RUNTIME,properties,parent,SWT.NONE);
+ }
+ private void createSelectionBar(Composite content) {
+ selectionBar = new Group(content, SWT.SHADOW_ETCHED_IN);
+ selectionBar.setLayout(new GridLayout(2,false));
+ selectionBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ Label label = new Label(selectionBar, SWT.NONE);
+ label.setText("Server types:");
+ label.setLayoutData(new GridData());
+ fServerCombo = new Combo(selectionBar, SWT.BORDER |SWT.READ_ONLY);
+ ServerTypeDefinition[] servers = getAllServerDefinitionTypes();
+ for(int i=0; i<servers.length; i++){
+ fServerCombo.add(servers[i].getName());
+ }
+ fServerCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
+ if(fServerCombo.getItemCount()>0)
+ fServerCombo.select(0);
+
+ fServerCombo.addSelectionListener(
+ new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ swapBody();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {}
+ }
+ );
+ }
+
+
+ private String getServerDefinitionId()
+ {
+ String currentDefinition= null;
+ if(getRuntimeWorkingCopy()!=null)
+ currentDefinition = getRuntimeWorkingCopy().getAttribute(GenericServerRuntime.SERVER_DEFINITION_ID,"");
+ if(currentDefinition!= null && currentDefinition.length()>0)
+ {
+ return currentDefinition;
+ }
+ return null;
+ }
+
+ private void selectServerDefinition()
+ {
+ String currentDefinition = getServerDefinitionId();
+ int selectIndex = 0;
+ if(currentDefinition != null)
+ {
+ selectIndex = fServerCombo.indexOf(currentDefinition);
+ if(selectIndex<0)
+ selectIndex =0;
+ }
+ fServerCombo.select(selectIndex);
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#enter()
+ */
+ public void enter() {
+ String serverDefinition = getServerDefinitionId();
+ if(serverDefinition!=null && serverDefinition.length()>0)
+ {
+ selectServerDefinition();
+ swapBody();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#exit()
+ */
+ public void exit() {
+ String selected = fServerCombo.getItem(fServerCombo.getSelectionIndex());
+ Map properties = fServerPanel.getProperties();
+ IRuntimeWorkingCopy wc = getRuntimeWorkingCopy();
+
+ wc.setAttribute(GenericServerRuntime.SERVER_DEFINITION_ID, selected);
+ wc.setAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,properties);
+ wc.setName(createName());
+ fRuntimeWC=null;
+ }
+ private String createName()
+ {
+ String selected = fServerCombo.getItem(fServerCombo.getSelectionIndex());
+ IRuntimeWorkingCopy wc = getRuntimeWorkingCopy();
+ IRuntimeType runtimeType = wc.getRuntimeType();
+ String name = selected+" ("+runtimeType.getName()+")";
+
+ IResourceManager rm = ServerCore.getResourceManager();
+ List list = rm.getRuntimes(runtimeType);
+ Iterator iterator = list.iterator();
+ int suffix = 1;
+ String suffixName=name;
+ while(iterator.hasNext())
+ {
+
+ IElement el = (IElement)iterator.next();
+ if(el.getName().equals(name)|| el.getName().equals(suffixName))
+ suffix++;
+ suffixName= name+" "+suffix;
+ }
+
+ if(suffix>1)
+ return suffixName;
+ return name;
+ }
+
+ private IRuntimeWorkingCopy getRuntimeWorkingCopy()
+ {
+ if(fRuntimeWC == null)
+ fRuntimeWC = (IRuntimeWorkingCopy)getTaskModel().getObject(ITaskModel.TASK_RUNTIME);
+ return fRuntimeWC;
+ }
+}