blob: 922ac38ec06d05396d7471da768fd096854384c3 [file] [log] [blame]
/***************************************************************************************************
* Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
*
**************************************************************************************************/
package org.eclipse.jst.server.generic.pde.internal;
import java.net.URL;
import java.util.ResourceBundle;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jst.server.generic.pde.ServerPdePlugin;
import org.eclipse.pde.core.plugin.IPluginBase;
import org.eclipse.pde.core.plugin.IPluginElement;
import org.eclipse.pde.core.plugin.IPluginExtension;
import org.eclipse.pde.core.plugin.IPluginModelFactory;
import org.eclipse.pde.core.plugin.IPluginReference;
import org.eclipse.pde.internal.ui.wizards.templates.PluginReference;
import org.eclipse.pde.ui.templates.OptionTemplateSection;
import org.eclipse.pde.ui.templates.TemplateOption;
/**
* Simple generic server plug-in template
*
* @author Gorkem Ercan
*
*/
public class GenericServerTemplate extends OptionTemplateSection {
private static final String KEY_SERVER_VERSION = "server_version"; //$NON-NLS-1$
private static final String KEY_SERVER_START_BEFORE_PUBLISH = "server_start_before_publish"; //$NON-NLS-1$
private static final String KEY_SERVER_LAUNCHTYPE = "server_launchtype"; //$NON-NLS-1$
private static final String KEY_SERVER_VENDOR = "server_vendor"; //$NON-NLS-1$
private static final String KEY_SERVER_DESCRIPTION = "server_description"; //$NON-NLS-1$
private static final String KEY_SERVER_NAME = "server_name"; //$NON-NLS-1$
private static final String[][] launchOpts = {{"java",Messages.labelJavaLaunchConfiguration},{"external",Messages.labelExternalLaunchConfiguration}}; //$NON-NLS-1$ //$NON-NLS-3$
private TemplateOption fServerNameOption;
private TemplateOption fServerDescriptionOption;
private TemplateOption fServerVendorOption;
private TemplateOption fServerVersionOption;
private TemplateOption fLaunchTypeOption;
private TemplateOption fStartBeforPublishOption;
public GenericServerTemplate() {
setPageCount(1);
createOptions();
}
private void createOptions(){
fServerNameOption= addOption(KEY_SERVER_NAME,Messages.labelServerName,"your server's name",0); //$NON-NLS-2$
fServerDescriptionOption = addOption(KEY_SERVER_DESCRIPTION,"Description","User description of your server",0); //$NON-NLS-1$ //$NON-NLS-2$
fServerVendorOption= addOption(KEY_SERVER_VENDOR,Messages.labelServerVendor,"Server vendor' s name",0); //$NON-NLS-2$
fServerVersionOption= addOption(KEY_SERVER_VERSION,Messages.labelServerVesion,"0",0); //$NON-NLS-2$
fLaunchTypeOption= addOption(KEY_SERVER_LAUNCHTYPE,Messages.labelLaunchType,launchOpts,"java",0); //$NON-NLS-2$
fStartBeforPublishOption= addOption(KEY_SERVER_START_BEFORE_PUBLISH,Messages.labelStartBeforePublish,false,0);
fServerNameOption.setRequired(true);
fServerDescriptionOption.setRequired(true);
fServerVendorOption.setRequired(true);
fServerVersionOption.setRequired(true);
}
public String getSectionId() {
return "genericserver"; //$NON-NLS-1$
}
protected void updateModel(IProgressMonitor monitor) throws CoreException{
IPluginBase plugin = model.getPluginBase();
IPluginModelFactory factory = model.getPluginFactory();
addRuntimeType(plugin, factory);
addServerType(plugin, factory);
addWizardFragment(plugin, factory);
addServerImage(plugin, factory);
addRuntimeTargetHandler(plugin, factory);
addServerDefinition(plugin, factory);
}
private void addServerDefinition(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension definitionExtension = createExtension("org.eclipse.jst.server.generic.core.serverdefinition",true); //$NON-NLS-1$
IPluginElement serverDef = factory.createElement(definitionExtension);
serverDef.setName("serverdefinition"); //$NON-NLS-1$
serverDef.setAttribute("id",getRuntimeId()); //$NON-NLS-1$
serverDef.setAttribute("definitionfile","/servers/"+getStringOption(KEY_SERVER_NAME)+".serverdef"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
definitionExtension.add(serverDef);
if(!definitionExtension.isInTheModel())
plugin.add(definitionExtension);
}
private void addRuntimeTargetHandler(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension handlerExtension = createExtension("org.eclipse.wst.server.core.runtimeTargetHandlers",true); //$NON-NLS-1$
IPluginElement handler= factory.createElement(handlerExtension);
handler.setName("runtimeTargetHandler"); //$NON-NLS-1$
handler.setAttribute("id",getNamespace()+".runtimeTarget"); //$NON-NLS-1$ //$NON-NLS-2$
handler.setAttribute("runtimeTypeIds",getRuntimeId()); //$NON-NLS-1$
handler.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"); //$NON-NLS-1$ //$NON-NLS-2$
handlerExtension.add(handler);
if(!handlerExtension.isInTheModel())
plugin.add(handlerExtension);
}
private void addServerImage(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension imageExtension = createExtension("org.eclipse.wst.server.ui.serverImages",true); //$NON-NLS-1$
IPluginElement serverImage = factory.createElement(imageExtension);
serverImage.setName("image"); //$NON-NLS-1$
serverImage.setAttribute("id",getNamespace()+".serverImage"); //$NON-NLS-1$ //$NON-NLS-2$
serverImage.setAttribute("icon","icons/server.gif"); //$NON-NLS-1$ //$NON-NLS-2$
serverImage.setAttribute("typeIds",getServerId()); //$NON-NLS-1$
imageExtension.add(serverImage);
IPluginElement runtimeImage = factory.createElement(imageExtension);
runtimeImage.setName("image"); //$NON-NLS-1$
runtimeImage.setAttribute("id",getNamespace()+".runtimeImage"); //$NON-NLS-1$ //$NON-NLS-2$
runtimeImage.setAttribute("icon","icons/server.gif"); //$NON-NLS-1$ //$NON-NLS-2$
runtimeImage.setAttribute("typeIds",getRuntimeId()); //$NON-NLS-1$
imageExtension.add(runtimeImage);
if(!imageExtension.isInTheModel())
plugin.add(imageExtension);
}
private void addWizardFragment(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension wizardExtension = createExtension("org.eclipse.wst.server.ui.wizardFragments",true); //$NON-NLS-1$
IPluginElement runtimeWiz = factory.createElement(wizardExtension);
runtimeWiz.setName("fragment"); //$NON-NLS-1$
runtimeWiz.setAttribute("id",getNamespace()+".runtimeWizard"); //$NON-NLS-1$ //$NON-NLS-2$
runtimeWiz.setAttribute("class","org.eclipse.jst.server.generic.ui.internal.GenericServerRuntimeWizardFragment"); //$NON-NLS-1$ //$NON-NLS-2$
runtimeWiz.setAttribute("typeIds",getRuntimeId()); //$NON-NLS-1$
wizardExtension.add(runtimeWiz);
if(!wizardExtension.isInTheModel())
plugin.add(wizardExtension);
IPluginElement serverWiz = factory.createElement(wizardExtension);
serverWiz.setName("fragment"); //$NON-NLS-1$
serverWiz.setAttribute("id",getNamespace()+".serverWizard"); //$NON-NLS-1$ //$NON-NLS-2$
serverWiz.setAttribute("class","org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment"); //$NON-NLS-1$ //$NON-NLS-2$
serverWiz.setAttribute("typeIds",getServerId()); //$NON-NLS-1$
wizardExtension.add(serverWiz);
}
private void addServerType(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension serverExtension =createExtension("org.eclipse.wst.server.core.serverTypes",true); //$NON-NLS-1$
IPluginElement serverType = factory.createElement(serverExtension);
serverType.setName("serverType"); //$NON-NLS-1$
serverType.setAttribute("runtime","true"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServer"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("id",getServerId()); //$NON-NLS-1$
serverType.setAttribute("initialState","stopped"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("supportsRemoteHosts","false"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("runtimeTypeId",getRuntimeId()); //$NON-NLS-1$
serverType.setAttribute("description",getStringOption(KEY_SERVER_DESCRIPTION)); //$NON-NLS-1$
serverType.setAttribute("launchConfigId",getSelectedConfigType()); //$NON-NLS-1$
serverType.setAttribute("behaviourClass",getSelectedBehaviourClass()); //$NON-NLS-1$
serverType.setAttribute("name",getStringOption(KEY_SERVER_NAME)); //$NON-NLS-1$
serverType.setAttribute("startTimeout","75000"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("stopTimeout","30000"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("hasConfiguration","false"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("launchModes","run,debug"); //$NON-NLS-1$ //$NON-NLS-2$
serverType.setAttribute("startBeforePublish", Boolean.toString(getBooleanOption(KEY_SERVER_START_BEFORE_PUBLISH))); //$NON-NLS-1$
serverExtension.add(serverType);
if(!serverExtension.isInTheModel())
plugin.add(serverExtension);
}
private void addRuntimeType(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
IPluginExtension extension =createExtension("org.eclipse.wst.server.core.runtimeTypes",true); //$NON-NLS-1$
IPluginElement runtimeType = factory.createElement(extension);
runtimeType.setName("runtimeType"); //$NON-NLS-1$
runtimeType.setAttribute("id",getRuntimeId()); //$NON-NLS-1$
runtimeType.setAttribute("name",getStringOption(KEY_SERVER_NAME)); //$NON-NLS-1$
runtimeType.setAttribute("description",getStringOption(KEY_SERVER_DESCRIPTION)); //$NON-NLS-1$
runtimeType.setAttribute("vendor",getStringOption(KEY_SERVER_VENDOR)); //$NON-NLS-1$
runtimeType.setAttribute("version",getStringOption(KEY_SERVER_VERSION)); //$NON-NLS-1$
runtimeType.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServerRuntime"); //$NON-NLS-1$ //$NON-NLS-2$
IPluginElement moduleType = factory.createElement(runtimeType);
moduleType.setName("moduleType"); //$NON-NLS-1$
moduleType.setAttribute("types","jst.web"); //$NON-NLS-1$ //$NON-NLS-2$
moduleType.setAttribute("versions","1.2, 1.3"); //$NON-NLS-1$ //$NON-NLS-2$
runtimeType.add(moduleType);
extension.add(runtimeType);
if(!extension.isInTheModel())
plugin.add(extension);
}
private String getRuntimeId(){
return getNamespace()+".runtime"; //$NON-NLS-1$
}
private String getServerId(){
return getNamespace()+".server"; //$NON-NLS-1$
}
private String getNamespace()
{
return model.getPluginBase().getId();
}
private String getSelectedBehaviourClass() {
if(isExternalSelected())
return "org.eclipse.jst.server.generic.core.internal.ExternalServerBehaviour"; //$NON-NLS-1$
return "org.eclipse.jst.server.generic.core.internal.GenericServerBehaviour"; //$NON-NLS-1$
}
private boolean isExternalSelected(){
String selectedType = getStringOption(KEY_SERVER_LAUNCHTYPE);
return "external".equals(selectedType); //$NON-NLS-1$
}
private String getSelectedConfigType(){
if(isExternalSelected())
return "org.eclipse.jst.server.generic.core.ExternalLaunchConfigurationType"; //$NON-NLS-1$
return "org.eclipse.jst.server.generic.core.launchConfigurationType"; //$NON-NLS-1$
}
protected ResourceBundle getPluginResourceBundle(){
return null;
}
public String[] getNewFiles(){
return new String[]{"icons/", "server/","buildfiles/"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public String getUsedExtensionPoint(){
return null;
}
public void validateOptions(TemplateOption changed){
if(changed.isRequired() && changed.isEmpty()){
flagMissingRequiredOption(changed);
return;
}
TemplateOption[] options = getOptions(0);
for (int i = 0; i < options.length; i++) {
if(options[i].isRequired() && options[i].isEmpty()){
flagMissingRequiredOption(options[i]);
return;
}
}
resetPageState();
}
public void addPages(Wizard wizard) {
WizardPage page = createPage(0);
page.setTitle(Messages.pageTitle);
page.setDescription(Messages.pageDescription);
wizard.addPage(page);
markPagesAdded();
}
protected URL getInstallURL() {
return ServerPdePlugin.getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
*/
public IPluginReference[] getDependencies(String schemaVersion) {
IPluginReference[] dep = new IPluginReference[4];
dep[0] = new PluginReference("org.eclipse.core.runtime", null, 0); //$NON-NLS-1$
dep[1] = new PluginReference("org.eclipse.ui", null, 0); //$NON-NLS-1$
dep[2] = new PluginReference("org.eclipse.jst.server.generic.core", null, 0); //$NON-NLS-1$
dep[3] = new PluginReference("org.eclipse.jst.server.generic.ui", null, 0); //$NON-NLS-1$
return dep;
}
public Object getValue(String variable) {
return super.getValue(variable);
}
}