moved CQ-3581 plugins to own project root

git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@1026 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
Greg Wilkins 2009-11-03 00:45:36 +00:00
parent 060cf5a91d
commit 268926b31f
42 changed files with 0 additions and 2573 deletions

View File

@ -1,12 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: OSGi HttpService provided by equinox HttpServiceServlet deployed on jetty
Bundle-SymbolicName: org.eclipse.jetty.osgi.httpservice
Bundle-Version: 7.0.1.qualifier
Bundle-Vendor: Intalio Inc
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: javax.servlet;version="2.5.0",
javax.servlet.http;version="2.5.0",
org.osgi.service.http;version="1.2.0",
org.eclipse.equinox.http.servlet
Jetty-ContextFilePath: contexts/httpservice.xml

View File

@ -1,4 +0,0 @@
source.. = src/main/java/
output.. = target/classes/
bin.includes = META-INF/,\
.

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<!--
// ========================================================================
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
-->
<Configure class="org.eclipse.jetty.servlet.ServletContextHandler">
<!-- this servlet provides the OSGi HTTP Service once it is initialized -->
<Call name="addServlet">
<Arg>org.eclipse.jetty.osgi.httpservice.HttpServiceServletX</Arg>
<Arg>/*</Arg>
</Call>
</Configure>

View File

@ -1,28 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
package org.eclipse.jetty.osgi.httpservice;
import org.eclipse.equinox.http.servlet.HttpServiceServlet;
/**
* Once this servlet is initialized, it provides the OSGi HttpService.
* Compliments of equinox. Currently has no added value.
*/
public class HttpServiceServletX extends HttpServiceServlet
{
/**
*
*/
private static final long serialVersionUID = 1L;
}

View File

@ -1,16 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Eclipse PDE Run Configuration
Bundle-SymbolicName: org.eclipse.jetty.osgi.pde.launch;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.eclipse.jetty.osgi.pde.launch.JettyOSGiPDEPlugin
Bundle-Vendor: Intalio Inc
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.debug.core;bundle-version="3.5.0",
org.eclipse.pde.ui;bundle-version="3.5.0",
org.eclipse.debug.ui;bundle-version="3.5.0",
org.eclipse.core.variables;bundle-version="3.2.200",
org.eclipse.jdt.debug.ui;bundle-version="3.4.1"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy

View File

@ -1,5 +0,0 @@
source.. = src/main/java/
output.. = target/classes/
bin.includes = META-INF/,\
.,\
plugin.xml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 B

View File

@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<!--
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
-->
<plugin>
<extension
point="org.eclipse.debug.core.launchConfigurationTypes">
<launchConfigurationType
delegate="org.eclipse.jetty.osgi.pde.launch.ui.JettyEquinoxLaunchConfiguration"
delegateDescription="Launch Jetty in OSGi"
delegateName="%PDELaunchDelegate.name"
id="org.eclipse.jetty.osgi.pde.launch.ui.jettyosgilaunch"
migrationDelegate="org.eclipse.pde.internal.ui.launcher.OSGiMigrationDelegate"
modes="run, debug"
name="Launch Jetty in OSGi"
sourceLocatorId="org.eclipse.pde.ui.launcher.PDESourceLookupDirector"
sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer">
</launchConfigurationType>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTypeImages">
<launchConfigurationTypeImage
icon="$nl$/icons/jetty.png"
configTypeID="org.eclipse.jetty.osgi.pde.launch.ui.jettyosgilaunch"
id="org.eclipse.jetty.osgi.pde.launch.jettyLaunchImage">
</launchConfigurationTypeImage>
</extension>
<extension
point="org.eclipse.debug.ui.launchShortcuts">
<shortcut
label="Jetty on OSGi"
icon="$nl$/icons/jetty.png"
modes="run, debug"
class="org.eclipse.jetty.osgi.pde.launch.ui.JettyLaunchShortcut"
id="org.eclipse.jetty.osgi.pde.launch.runjetty">
<contextualLaunch>
<enablement>
<with variable="selection">
<count value="1"/>
<iterate>
<and>
<instanceof value="org.eclipse.core.runtime.IAdaptable"/>
<test property="org.eclipse.debug.ui.projectNature" value="org.eclipse.pde.PluginNature"/>
<or>
<adapt type="org.eclipse.core.resources.IProject"/>
<test property="org.eclipse.debug.ui.matchesPattern" value="MANIFEST.MF"/>
</or>
</and>
</iterate>
</with>
</enablement>
</contextualLaunch>
<configurationType
id="org.eclipse.jetty.osgi.pde.launch.ui.jettyosgilaunch">
</configurationType>
<description
description="Lauch jetty in OSGi and deploy the OSGi webapps"
mode="run">
</description>
<description
description="Debug jetty in OSGi and the OSGi webapps"
mode="debug">
</description>
</shortcut>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTabGroups">
<launchConfigurationTabGroup
type="org.eclipse.jetty.osgi.pde.launch.ui.jettyosgilaunch"
class="org.eclipse.jetty.osgi.pde.launch.ui.JettyOSGiLauncherTabGroup"
id="org.eclipse.jetty.osgi.pde.launch.ui.EquinoxLauncherTabGroup">
<launchMode
description="Create a configuration to launch Jetty in OSGi in debug mode"
perspective="org.eclipse.debug.ui.DebugPerspective"
mode="debug">
</launchMode>
<launchMode
description="Create a configuration to launch Jetty in OSGi in run mode"
mode="run">
</launchMode>
</launchConfigurationTabGroup>
</extension>
</plugin>

View File

@ -1,28 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch;
/**
* Configuration constants.
*/
public class JettyConfigurationConstants
{
private static final String PLUGIN_ID = JettyOSGiPDEPlugin.PLUGIN_ID;
/** Points to the jetty home folder */
public static final String ATTR_JETTY_HOME = PLUGIN_ID + ".jettyhome";
public static final String JETTY_HOME_DEFAULT = "${workspace_loc}/jettyhome";
}

View File

@ -1,45 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch;
import org.eclipse.osgi.util.NLS;
/**
* NLS
*/
public class JettyLauncherMessages extends NLS
{
private static final String BUNDLE_NAME = "org.eclipse.jetty.osgi.pde.launch.JettyLauncherMessages";//$NON-NLS-1$
public static String JettyConfigurationLaunchTab_JettyConfigurationTitle;
public static String JettyConfigurationLaunchTab_VariablesButtonLabel;
public static String JettyXmlBlock_JettyConfigurationBlockTitle;
public static String JettyXmlBlock_JettyConfigurationBlockLabel;
public static String JettyXmlBlock_VariablesButtonLabel;
public static String JettyXmlEditDialog_Cancel;
public static String JettyXmlEditDialog_OK;
public static String JettyXmlEditDialog_Apply;
public static String JettyXmlEditDialog_Edit_jetty_xml;
public static String JettyXmlEditDialog_Edit_jetty_xml_title;
static {
// load message values from bundle file
NLS.initializeMessages(BUNDLE_NAME, JettyLauncherMessages.class);
}
}

View File

@ -1,24 +0,0 @@
# ========================================================================
# Copyright (c) 2009 Intalio, Inc.
# ------------------------------------------------------------------------
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# and Apache License v2.0 which accompanies this distribution.
# The Eclipse Public License is available at
# http://www.eclipse.org/legal/epl-v10.html
# The Apache License v2.0 is available at
# http://www.opensource.org/licenses/apache2.0.php
# Contributors:
# Hugues Malphettes - initial API and implementation
# You may elect to redistribute this code under either of these licenses.
# ========================================================================
JettyConfigurationLaunchTab_JettyConfigurationTitle=Jetty &Configuration
JettyConfigurationLaunchTab_VariablesButtonLabel=Var&iables...
JettyXmlBlock_JettyConfigurationBlockTitle=jetty.xml configuration file:
JettyXmlBlock_JettyConfigurationBlockLabel=jetty.xml &configuration file:
JettyXmlBlock_VariablesButtonLabel=Variable&s
JettyXmlEditDialog_Cancel=Cancel
JettyXmlEditDialog_OK=OK
JettyXmlEditDialog_Apply=Apply
JettyXmlEditDialog_Edit_jetty_xml_title=Edit jetty.xml
JettyXmlEditDialog_Edit_jetty_xml=Edit jetty.xml in ${0}

View File

@ -1,71 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class JettyOSGiPDEPlugin extends AbstractUIPlugin
{
// The plug-in ID
public static final String PLUGIN_ID = "org.eclipse.jetty.osgi.pde.core";
// The shared instance
private static JettyOSGiPDEPlugin plugin;
/**
* The constructor
*/
public JettyOSGiPDEPlugin()
{
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception
{
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception
{
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static JettyOSGiPDEPlugin getDefault()
{
return plugin;
}
}

View File

@ -1,471 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.internal;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.nio.channels.FileChannel;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.osgi.framework.Bundle;
/**
* Utility methods related to jetty home and jetty.xml.
* Default will be something like this:
* ${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch Jetty in OSGi
*/
public class JettyHomeHelper
{
/**
* Helper
* @return The bundle that is in charge of starting jetty in OSGi.
*/
private static Bundle getJettyOSGiBootBundle()
{
return Platform.getBundle("org.eclipse.jetty.osgi.boot");
}
private static String resolveVariables(String target) {
IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
try
{
return manager.performStringSubstitution(target, false);
}
catch (CoreException e)
{
}
return null;
}
/**
* Resolves strings that start with &quot;${workspace_loc:&quot;
* or &quot;${workspace}&quot;
* Useful as the default configuration area used by pde is:
* ${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/${name_of_configuration}
* @see IStringVariableManager
* @see org.eclipse.pde.internal.ui.launcher.ConfigurationTemplateBlock
* @return The container
*/
public static IContainer getContainerFromWorkspace(String path)
{
// /.../theworkspace/.metadata/.plugins/org.eclipse.pde.core/Launch Jetty in OSGi/jettyhome
if (path == null || path.trim().length() == 0)
{
return null;
}
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
if (path.startsWith("${workspace_loc:"))
{
path = resolveVariables(path);
return root.getContainerForLocation(new Path(path).makeAbsolute());
}
else if (path.startsWith("${workspace_loc}"))
{
path = path.substring("${workspace_loc}".length());
path = resolveVariables(path);
IFolder f = root.getFolder(new Path(path).makeAbsolute());
if (f.getRawLocation() == null) {
IContainer c = root.getContainerForLocation(new Path(path).makeAbsolute());
if (c != null) {
return c;
} else {
return null;
}
}
}
IResource res = root.findMember(path);
if (res instanceof IContainer)
{
return (IContainer) res;
}
return null;
}
/**
* Resolves strings and try to make it a file in the filesystem.
* @see IStringVariableManager
* @see org.eclipse.pde.internal.ui.launcher.ConfigurationTemplateBlock
* @return The container
*/
public static File getFileOutsideOfWorkspace(String path)
{
if (path == null || path.trim().length() == 0)
{
return null;
}
return new File(resolveVariables(path));
}
/**
* The current content of jettyXml
*/
public static String getCurrentJettyXml(String jettyHomePath, boolean returnNullIfJettyXmlIsNull)
{
IContainer container = JettyHomeHelper.getContainerFromWorkspace(jettyHomePath);
if (container != null)
{
IFile jettyXml = container.getFile(new Path("jettyhome/etc/jetty.xml"));
if (!jettyXml.exists()) {
//does not exist at this point:
//just read the one in the bundle directly.
return returnNullIfJettyXmlIsNull ? null : JettyHomeHelper.getJettyXmlInsideBootBundle();
} else {
//return the one that exists already.
return JettyHomeHelper.loadIFileAsString(jettyXml);
}
}
else
{
File configArea = JettyHomeHelper.getFileOutsideOfWorkspace(jettyHomePath);
File jettyXml = new File(configArea, "jettyhome/etc/jetty.xml");
if (jettyXml.exists()) {
return JettyHomeHelper.loadFileAsString(jettyXml);
} else {
//does not exist at this point:
//just read the one in the bundle directly.
return returnNullIfJettyXmlIsNull ? null : JettyHomeHelper.getJettyXmlInsideBootBundle();
}
}
}
/**
* @return The content of jetty.xml inside the boot bundle.
*/
public static String getJettyXmlInsideBootBundle()
{
Bundle b = getJettyOSGiBootBundle();
try
{
InputStream is = b.getEntry("/jettyhome/etc/jetty.xml").openStream();
return loadInputAsString(is);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* Something really straight forward to read the content of the file.
* It is just jetty.xml: no need to be really fast and optimized here.
*/
public static String loadFileAsString(File jettyXml)
{
try
{
return loadInputAsString(new FileInputStream(jettyXml));
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* Something really straight forward to read the content of the file.
* It is just jetty.xml: no need to be really fast and optimized here.
*/
public static String loadIFileAsString(IFile jettyXml)
{
try
{
return loadInputAsString(jettyXml.getContents());
}
catch (CoreException e)
{
e.printStackTrace();
}
return null;
}
/**
* Something really straight forward to read the content of the file.
* It is just jetty.xml: no need to be really fast and optimized here.
*/
public static String loadInputAsString(InputStream is)
{
StringBuilder sb = new StringBuilder();
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); //$NON-NLS-1$
String newline = System.getProperty("line.separator"); //$NON-NLS-1$
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + newline);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return sb.toString();
}
public static File resolveJettyHome(String jettyHomeInConfig) {
IContainer container = JettyHomeHelper.getContainerFromWorkspace(jettyHomeInConfig);
if (container != null)
{
URI rawURI = container.getRawLocationURI();
if (rawURI != null) {
//it is null when the folder is not inside a project.
return new File(rawURI);
}
}
return JettyHomeHelper.getFileOutsideOfWorkspace(jettyHomeInConfig);
}
/**
* Look for the jettyhome folder.
* If empty or it does not exist, extract the default one from the boot.
*
*
* @param jettyXml custom content for jetty.xml or null if we keep the default one.
* @param jettyHomePath path to jettyhome as set by the user.
*/
public static void setupJettyHomeAndJettyXML(String jettyXml, String jettyHomePath,
boolean doNothingIfJettyHomeExists)
throws IOException
{
File jettyhome = resolveJettyHome(jettyHomePath);
if (jettyhome == null)
{//we probably have a problem now.
throw new IllegalArgumentException(
"Unable to resolve jettyhome " + jettyHomePath);
}
if (!jettyhome.exists())
{
//does not exist at this point: extract the default one:
installDefaultJettyHome(jettyhome);
}
else if (doNothingIfJettyHomeExists)
{
return;
}
//check jetty.xml exists.
File jettyXmlFile = new File(jettyhome, "etc/jetty.xml");
if (!jettyXmlFile.exists())
{//we probably have a problem now.
throw new IllegalArgumentException(
"The jetty configuration file must exist: '"
+ jettyXmlFile.getAbsolutePath());
}
if (jettyXml != null) {
//override the current jettyxml:
FileOutputStream out = null;
try
{
out = new FileOutputStream(jettyXmlFile);
OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
writer.append(jettyXml);
}
finally
{
if (out != null) try { out.close(); } catch (IOException ioee) {}
}
}
}
/**
* Actually creates the jettyhome folder template in the location set
* for the user.
* Currently unzips the jettyhome folder located in the
* org.eclipse.jetty.osgi.boot bundle.
*/
public static void installDefaultJettyHome(File jettyhomeFolder) throws IOException
{
jettyhomeFolder.mkdirs();
Bundle bootBundle = getJettyOSGiBootBundle();
File bootBundleFile = FileLocator.getBundleFile(bootBundle);
if (bootBundleFile.getName().endsWith(".jar"))
{
//unzip it.
unzipJettyHomeIntoDirectory(bootBundleFile, jettyhomeFolder);
}
else
{
//copy the folders.
copyDirectory(new File(bootBundleFile, "jettyhome"), jettyhomeFolder);
}
}
/**
* @param zipFile
* The current jar file for this bundle. contains an archive of
* the default jettyhome
* @param parentOfMagicJettyHome
* The folder inside which jettyhome is created.
*/
private static void unzipJettyHomeIntoDirectory(File thisbundlejar,
File parentOfMagicJettyHome) throws IOException
{
ZipFile zipFile = null;
try
{
zipFile = new ZipFile(thisbundlejar);
Enumeration<? extends ZipEntry> files = zipFile.entries();
File f = null;
FileOutputStream fos = null;
while (files.hasMoreElements())
{
try
{
ZipEntry entry = files.nextElement();
String entryName = entry.getName();
if (!entryName.startsWith("jettyhome"))
{
continue;
}
InputStream eis = zipFile.getInputStream(entry);
byte[] buffer = new byte[1024];
int bytesRead = 0;
f = new File(parentOfMagicJettyHome,entry.getName());
if (entry.isDirectory())
{
f.mkdirs();
}
else
{
f.getParentFile().mkdirs();
f.createNewFile();
fos = new FileOutputStream(f);
while ((bytesRead = eis.read(buffer)) != -1)
{
fos.write(buffer,0,bytesRead);
}
}
}
catch (IOException e)
{
e.printStackTrace();
continue;
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (IOException e)
{
}
fos = null;
}
}
}
}
finally
{
if (zipFile != null) try { zipFile.close(); } catch (Throwable t) {}
}
}
private static void copyDirectory(File sourceFile, File destFile) throws IOException
{
if (sourceFile.isDirectory())
{
if (!destFile.exists())
{
destFile.mkdir();
}
String files[] = sourceFile.list();
for (int i = 0; i < files.length; i++)
{
copyDirectory(new File(sourceFile,files[i]),new File(destFile,files[i]));
}
}
else
{
if (!sourceFile.exists())
{
//humf
}
else
{
copyFile(sourceFile,destFile);
}
}
}
private static void copyFile(File sourceFile, File destFile) throws IOException
{
if (!destFile.exists())
{
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try
{
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source,0,source.size());
}
finally
{
if (source != null) { source.close(); }
if (destination != null) { destination.close(); }
}
}
}

View File

@ -1,29 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui;
/**
* Object that can read the value of the osgi.config.area property that will be
* used when the OSGi app is launched.
*/
public interface IConfigurationAreaSettingHolder
{
/**
* @return the string entered in the settings tab that defines the
* value o osgi.config.area.
*/
public String getConfigurationAreaLocation();
}

View File

@ -1,124 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.jetty.osgi.pde.launch.JettyConfigurationConstants;
import org.eclipse.jetty.osgi.pde.launch.JettyOSGiPDEPlugin;
import org.eclipse.jetty.osgi.pde.launch.internal.JettyHomeHelper;
import org.eclipse.pde.internal.ui.launcher.LaunchConfigurationHelper;
import org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration;
import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
/**
*
*/
public class JettyEquinoxLaunchConfiguration extends EquinoxLaunchConfiguration
{
/** The configuration type as declared in the extension point's plugin.xml */
public static final String ID = "org.eclipse.jetty.osgi.pde.launch.ui.jettyosgilaunch";
@Override
protected void preLaunchCheck(ILaunchConfiguration configuration, ILaunch launch, IProgressMonitor monitor) throws CoreException
{
if (!configuration.getAttribute(IPDELauncherConstants.DOCLEAR, false))
{
super.preLaunchCheck(configuration,launch,monitor);
//make sure jettyhome exists and set it up if it does not:
File jettyHome = resolveJettyHome(configuration);
if (jettyHome != null && !jettyHome.exists())
{
try
{
JettyHomeHelper.setupJettyHomeAndJettyXML(null, jettyHome.getAbsolutePath(), true);
}
catch (IOException e)
{
throw new CoreException(new Status(IStatus.ERROR,
JettyOSGiPDEPlugin.PLUGIN_ID,"Unable to setup jettyhome", e));
}
}
return;//nothing else to do.
}
//this will wipe the workspace if it was configured that way.
//it means we must setup jettyhome and jettyxml immediately after
//if indeed it was wiped:
String jettyHomePath = resolveJettyHome(configuration).getAbsolutePath();
String jettyXml = JettyHomeHelper.getCurrentJettyXml(jettyHomePath, true);
super.preLaunchCheck(configuration,launch,monitor);
try
{
JettyHomeHelper.setupJettyHomeAndJettyXML(jettyXml, jettyHomePath, true);
}
catch (IOException e)
{
throw new CoreException(new Status(IStatus.ERROR,
JettyOSGiPDEPlugin.PLUGIN_ID,"Unable to setup jettyhome", e));
}
}
/**
* Append -Djetty.home
*/
@Override
public String[] getVMArguments(ILaunchConfiguration configuration) throws CoreException
{
String[] args = super.getVMArguments(configuration);
for (int i = 0; i < args.length ;i++) {
String arg = args[i];
if (arg.startsWith("-Djetty.home=")) {
//overridden by the arg nothing to change (?)
return args;
}
}
String jettyHomePath = configuration.getAttribute(JettyConfigurationConstants.ATTR_JETTY_HOME, "");
File jettyHome = resolveJettyHome(configuration);
if (jettyHome == null || !jettyHome.exists())
{
//err?
System.err.println("could not resolve jettyhome; "
+ jettyHomePath + " -> " + jettyHome);
return args;
}
String[] newArgs = new String[args.length+1];
System.arraycopy(args, 0, newArgs, 0, args.length);
newArgs[args.length] = "-Djetty.home=\""+jettyHome.getAbsolutePath()+"\"";
return newArgs;
}
private File resolveJettyHome(ILaunchConfiguration configuration) throws CoreException
{
String jettyHomePath = configuration.getAttribute(JettyConfigurationConstants.ATTR_JETTY_HOME, "");
if (jettyHomePath == null || jettyHomePath.length() == 0)
{
File configArea = LaunchConfigurationHelper.getConfigurationArea(configuration);
return new File(configArea, "jettyhome");
}
else
{
return JettyHomeHelper.resolveJettyHome(jettyHomePath);
}
}
}

View File

@ -1,89 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
package org.eclipse.jetty.osgi.pde.launch.ui;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.pde.ui.launcher.AbstractLaunchShortcut;
import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
import org.eclipse.ui.IEditorPart;
/**
* Shortcut to launch Jetty on osgi.
*/
public class JettyLaunchShortcut extends AbstractLaunchShortcut
{
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection, java.lang.String)
*/
public void launch(ISelection selection, String mode)
{
launch(mode);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.ui.IEditorPart, java.lang.String)
*/
public void launch(IEditorPart editor, String mode)
{
launch(mode);
}
/**
* Returns the launch configuration type name.
*
* @return the launch configuration type name
*/
protected String getLaunchConfigurationTypeName()
{
return JettyEquinoxLaunchConfiguration.ID;
}
/**
* Initialize launch attributes on the new launch configuration. Must be overridden by subclasses.
*
* @param wc
* the launch configuration working copy to be initialize
*
* @see IPDELauncherConstants
*/
protected void initializeConfiguration(ILaunchConfigurationWorkingCopy wc)
{
JettyOSGiLaunchConfigurationInitializer confInitializer = new JettyOSGiLaunchConfigurationInitializer();
confInitializer.initialize(wc);
}
/**
* Determines whether a given launch configuration is a good match given the
* current application or framework being launched. This method must be overridden
* by subclasses. Its purpose is to add criteria on what makes a good match or not.
*
* @param configuration
* the launch configuration being evaluated
* @return <code>true</code> if the launch configuration is a good match
* for the application or framework being launched,
* <code>false</code> otherwise.
*/
protected boolean isGoodMatch(ILaunchConfiguration configuration)
{
return true;
}
}

View File

@ -1,203 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.internal.ui.launcher.BundleLauncherHelper;
import org.eclipse.pde.internal.ui.launcher.EquinoxInitializer;
import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
/**
* In charge of selecting the proper default bundles to load and to make sure
* that the jetty.osgi.boot bundle will in fact start.
* <p>
* The default behavior of OSGi run configuration is to select everything.
* This is overwhelming for the web-app developer.
* This run configuration initializer will select the minimum set of plugins to run jetty.
* </p>
*/
public class JettyOSGiLaunchConfigurationInitializer extends EquinoxInitializer
{
/** well known bundles that jetty depends on, often optional dependency. */
private static final Set<String> BUNDLE_DEPENDENCIES = new HashSet<String>();
/** well known bundles required to support headles jdt */
private static final Set<String> JDT_HEADLESS_DEPENDENCIES = new HashSet<String>();
private static final Set<String> ALL_BUNDLE_DEPS = new HashSet<String>();
/** we don't know the bundle but if we find a bundle that exports this package */
private static final Set<String> PACKAGES_DEPENDENCIES = new HashSet<String>();
private static final String JETTY_BUNDLES_PREFIX = "org.eclipse.jetty.";
private static final String JETTY_JSP_BUNDLES_PREFIX = "org.mortbay.jetty.jsp-";
static {
BUNDLE_DEPENDENCIES.add("javax.servlet");
BUNDLE_DEPENDENCIES.add("org.eclipse.osgi");
BUNDLE_DEPENDENCIES.add("org.eclipse.osgi.services");
BUNDLE_DEPENDENCIES.add("org.objectweb.asm");
PACKAGES_DEPENDENCIES.add("javax.mail");
PACKAGES_DEPENDENCIES.add("javax.transaction");
PACKAGES_DEPENDENCIES.add("javax.activation");
PACKAGES_DEPENDENCIES.add("javax.annotation");
//now add the headless jdt:
//no more ecj: we use jdt.core instead that contains ecj.
// BUNDLE_DEPENDENCIES.add("org.eclipse.jdt.core.compiler.batch");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.commands");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.contenttype");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.expressions");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.filessytem");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.jobs");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.resources");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.runtime");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.core.variables");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.debug.core");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.equinox.app");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.equinox.common");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.equinox.preferences");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.equinox.registry");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.equinox.app");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.jdt.core");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.jdt.debug");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.jdt.launching");
JDT_HEADLESS_DEPENDENCIES.add("org.eclipse.text");
ALL_BUNDLE_DEPS.addAll(JDT_HEADLESS_DEPENDENCIES);
ALL_BUNDLE_DEPS.addAll(BUNDLE_DEPENDENCIES);
}
/**
* Override the default behavior which consists of selecting every bundle.
* Here we select only the jetty and jdt-headless bundles from the platform
* By default we continue to select all the bundles located in the workspace.
*
* @param configuration the launch configuration
*/
@Override
protected void initializeBundleState(ILaunchConfigurationWorkingCopy configuration)
{
List<IPluginModelBase> bundlesInPlatform = new ArrayList<IPluginModelBase>();
List<IPluginModelBase> bundlesInWorkspace = new ArrayList<IPluginModelBase>();
selectBundles(bundlesInPlatform, bundlesInWorkspace);
configuration.setAttribute(IPDELauncherConstants.WORKSPACE_BUNDLES, createBundleList(bundlesInWorkspace));
configuration.setAttribute(IPDELauncherConstants.TARGET_BUNDLES, createBundleList(bundlesInPlatform));
configuration.setAttribute(IPDELauncherConstants.AUTOMATIC_ADD, true);
}
/**
* @return The list of bundles to install along with their start level in the format expected by
* equinox for the config.ini file. For example:
* <code>osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start</code>
*
* (As documented here: http://www.eclipse.org/equinox/documents/quickstart.php)
*/
private String createBundleList(List<IPluginModelBase> bundlesInPlatform)
{
StringBuilder bundlesInPlatformString = new StringBuilder();
String sep = "";
for (IPluginModelBase bundleModel : bundlesInPlatform)
{
String id = bundleModel.getPluginBase().getId();
bundlesInPlatformString.append(sep
+ BundleLauncherHelper.writeBundleEntry(bundleModel,
getStartLevel(id), getAutoStart(id)));
sep = ",";
}
return bundlesInPlatformString.toString();
}
/**
* This is where we are doing something else than the default OSGi launch configuration initializer.
* We select only the jetty plugins, their dependencies and the jdt-headless plugins
* if we want to launch the ability to debug the java projects too.
*
* @param bundlesInPlatformCollector Where the bundles that belong to the platform are collected.
* @param bundlesInWorkspaceCollector Where the bundles that belong to the workspace are collected.
*/
private void selectBundles(List<IPluginModelBase> bundlesInPlatformCollector,
List<IPluginModelBase> bundlesInWorkspaceCollector)
{
for (IPluginModelBase pluginModel : PluginRegistry.getActiveModels())
{
String symbName = pluginModel.getBundleDescription().getSymbolicName();
if (pluginModel.getUnderlyingResource() != null)
{
//all bundles in the workspace are added by default.
bundlesInWorkspaceCollector.add(pluginModel);
continue;
}
if (symbName.startsWith(JETTY_BUNDLES_PREFIX))
{
if (symbName.startsWith("org.eclipse.jetty.osgi.pde"))
{
// don't select the SDK PDE plugins for running jetty!
continue;
}
}
else if (symbName.startsWith(JETTY_JSP_BUNDLES_PREFIX))
{
//let's add them.
bundlesInPlatformCollector.add(pluginModel);
}
else if (!ALL_BUNDLE_DEPS.contains(symbName))
{
ExportPackageDescription[] exPacks =
pluginModel.getBundleDescription().getExportPackages();
for (int j = 0; j < exPacks.length; j++)
{
ExportPackageDescription xp = exPacks[j];
if (PACKAGES_DEPENDENCIES.contains(xp.getName()))
{
bundlesInPlatformCollector.add(pluginModel);
break;
}
}
}
}
}
/**
* Override the default behavior: we need to make sure that
* org.eclipse.jetty.osgi.boot has its autostart level set to 'true'
*/
@Override
protected String getAutoStart(String bundleID)
{
if (bundleID.equals("org.eclipse.jetty.osgi.boot"))
{
return Boolean.TRUE.toString();
}
return super.getAutoStart(bundleID);
}
}

View File

@ -1,137 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui;
import java.lang.reflect.Field;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.jetty.osgi.pde.launch.ui.tabs.JettyConfigurationLaunchTab;
import org.eclipse.pde.ui.launcher.OSGiLauncherTabGroup;
import org.eclipse.pde.ui.launcher.OSGiSettingsTab;
/**
* Customizes the OSGi configuration UI.
* <p>
* Make sure that new default configurations select all the jetty bundles
* and deselect the rest of the platform.
* </p>
* <p>
* Insert a new tab for the configuration of jetty home and the ability to edit
* jetty.xml
* </p>
*/
public class JettyOSGiLauncherTabGroup extends AbstractLaunchConfigurationTabGroup
implements IConfigurationAreaSettingHolder
{
/**
* Use the same tabs than the OSGi lauch.
* Add one first tab to give access to the jetty configuration.
* For now we will simply display the jetty.xml file in a text editor.
*/
public void createTabs(ILaunchConfigurationDialog dialog, String mode)
{
ILaunchConfigurationTab[] tabs = createOSGiLaunchTabs(dialog, mode);
ILaunchConfigurationTab[] newtabs = new ILaunchConfigurationTab[tabs.length+1];
newtabs[0] = new JettyConfigurationLaunchTab(this);
System.arraycopy(tabs, 0, newtabs, 1, tabs.length);
super.setTabs(newtabs);
}
/**
* @param dialog
* @param mode
* @return The tabs created for an OSGi Launch
*/
private ILaunchConfigurationTab[] createOSGiLaunchTabs(ILaunchConfigurationDialog dialog, String mode)
{
OSGiLauncherTabGroup osgiTabsFactory = new OSGiLauncherTabGroup();
osgiTabsFactory.createTabs(dialog, mode);
return osgiTabsFactory.getTabs();
}
/**
* Helper method to read the setting "Configuration Area" in the Settings tab
* that will become the folder pointed by the system property osgi.config.area
* when the app is run.
* <p>
* Painful to access it.
* </p>
*/
public String getConfigurationAreaLocation()
{
OSGiSettingsTab settingsTab = null;
for (ILaunchConfigurationTab t : getTabs())
{
if (t instanceof OSGiSettingsTab) {
settingsTab = (OSGiSettingsTab)t;
break;
}
}
if (settingsTab == null)
{
return null;
}
//OSGisettingsTab contains org.eclipse.pde.internal.ui.launcher.ConfigurationAreaBlock
//it is a private field called "fConfigurationBlock"
//that object contains the private string "fLastEnteredConfigArea"
//which is what we want.
//we must access it from there as we need the value "live"
return getfLastEnteredConfigArea(getfConfigurationBlock(settingsTab));
}
//introspection tricks..
private static Field fConfigurationBlock;
private static Field fLastEnteredConfigArea;
private static synchronized Object getfConfigurationBlock(OSGiSettingsTab settingsTab)
{
try
{
if (fConfigurationBlock == null)
{
fConfigurationBlock = OSGiSettingsTab.class.getDeclaredField("fConfigurationBlock");
fConfigurationBlock.setAccessible(true);
}
return fConfigurationBlock.get(settingsTab);
}
catch (Throwable t)
{
t.printStackTrace();
}
return null;
}
private static synchronized String getfLastEnteredConfigArea(Object configurationBlock)
{
try
{
if (fLastEnteredConfigArea == null)
{
fLastEnteredConfigArea = configurationBlock.getClass().getDeclaredField("fLastEnteredConfigArea");
fLastEnteredConfigArea.setAccessible(true);
}
return (String)fLastEnteredConfigArea.get(configurationBlock);
}
catch (Throwable t)
{
t.printStackTrace();
}
return null;
}
}

View File

@ -1,97 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui.tabs;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jetty.osgi.pde.launch.JettyLauncherMessages;
import org.eclipse.jetty.osgi.pde.launch.ui.IConfigurationAreaSettingHolder;
import org.eclipse.jetty.osgi.pde.launch.ui.JettyOSGiLaunchConfigurationInitializer;
import org.eclipse.pde.ui.launcher.AbstractLauncherTab;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
/**
* Choose a jetty.home.
* Edit the jetty.xml file.
* <p>
* Similar to org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab
* </p>
*/
public class JettyConfigurationLaunchTab extends AbstractLauncherTab
{
protected JettyHomeBlock _jettyHomeBlock;
public JettyConfigurationLaunchTab(IConfigurationAreaSettingHolder configAreaHolder)
{
_jettyHomeBlock = new JettyHomeBlock(configAreaHolder);
}
/**
* Currently does not do any validation.
*/
public void validateTab()
{
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite)
*/
public void createControl(Composite parent)
{
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, true);
comp.setLayout(layout);
comp.setFont(parent.getFont());
GridData gd = new GridData(GridData.FILL_BOTH);
comp.setLayoutData(gd);
setControl(comp);
_jettyHomeBlock.doCreateControl(comp);
}
public String getName()
{
return JettyLauncherMessages.JettyConfigurationLaunchTab_JettyConfigurationTitle;
}
public void initializeFrom(ILaunchConfiguration configuration)
{
_jettyHomeBlock.initializeFrom(configuration);
}
/**
*
*/
public void performApply(ILaunchConfigurationWorkingCopy configuration)
{
_jettyHomeBlock.performApply(configuration);
}
/**
* This is where we initialize the selected bundles by default.
*/
public void setDefaults(ILaunchConfigurationWorkingCopy configuration)
{
_jettyHomeBlock.setDefaults(configuration);
JettyOSGiLaunchConfigurationInitializer confInitializer =
new JettyOSGiLaunchConfigurationInitializer();
confInitializer.initialize(configuration);
}
}

View File

@ -1,189 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui.tabs;
import java.io.File;
import java.lang.reflect.Field;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.WorkingDirectoryBlock;
import org.eclipse.jetty.osgi.pde.launch.JettyConfigurationConstants;
import org.eclipse.jetty.osgi.pde.launch.internal.JettyHomeHelper;
import org.eclipse.jetty.osgi.pde.launch.ui.IConfigurationAreaSettingHolder;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
/**
* Choose the jettyhome folder. A bit of a stretch to reuse the WorkingDirectoryBlock
* but it does save us a lot of UI development.
*/
public class JettyHomeBlock extends WorkingDirectoryBlock
{
private Button _editJettyXml;
private String _editedJettyXml;
private IConfigurationAreaSettingHolder _configAreaHolder;
private boolean _initializing = true;
/**
* Constructs a new working directory block.
*/
public JettyHomeBlock(IConfigurationAreaSettingHolder configAreaHolder)
{
super(JettyConfigurationConstants.ATTR_JETTY_HOME);
_configAreaHolder = configAreaHolder;
setDirty(false);
}
/**
* @return null We don't use this in the context of a java project.
*/
protected IProject getProject(ILaunchConfiguration configuration)
throws CoreException
{
return null;
}
/**
* For now just dumpt the stack trace on the console
*/
protected void log(CoreException e)
{
e.printStackTrace();
}
/**
* Calls create control of the super (which is final)
* then go an tweak the created control so that its purpose is for jetty home
* instead of a working directory selection.
*/
protected void doCreateControl(Composite parent)
{
super.createControl(parent);
Group grp = (Group)super.getControl();
grp.setText("Jetty &Home:");
//ok now a bit painful: get the composite inside which the buttons are
//add a column to the grid layout and place a button.
Button fSysButton = getfFileSystemButton();
Composite compButtons = fSysButton.getParent();
GridLayout gLayout = (GridLayout) compButtons.getLayout();
gLayout.numColumns = gLayout.numColumns+1;
_editJettyXml = createPushButton(compButtons, "Edit jetty.xml", null);
_editJettyXml.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
//open a text editor for jetty.xml inside a popup window.
//we are using a cheap popup.
JettyXmlEditDialog diag = new JettyXmlEditDialog(_editJettyXml.getShell(),
getCurrentJettyXml());
if (diag.open() == Window.OK) {
_editedJettyXml = diag.getNewJettyXml();
setDirty(true);
}
}
public void widgetDefaultSelected(SelectionEvent e)
{
}
});
}
/**
* Sets the default value for this field: not related to the working directory.
*/
@Override
protected void setDefaultWorkingDir()
{
//the problem is that at this point, the settings tab is not configured yet...
//so we delay the configuration of this one:
getShell().getDisplay().asyncExec(new Runnable()
{
public void run()
{
setDefaultWorkingDirectoryText(
_configAreaHolder.getConfigurationAreaLocation()
+ File.separator + "jettyhome"); //$NON-NLS-1$
_initializing = false;
}
});
}
/**
* The current content of jettyXml
*/
protected String getCurrentJettyXml()
{
return JettyHomeHelper.getCurrentJettyXml(getWorkingDirectoryText(), false);
}
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration)
{
super.performApply(configuration);
String jettyHome = getWorkingDirectoryText();
if (_initializing || jettyHome == null || jettyHome.length() == 0) {
//we are only interested in the case where the user really did press on
//Apply or "Run". furthermore before the conf area is set
//we will not be able to locate the default jettyhome.
_initializing = false;
return;
}
try
{
JettyHomeHelper.setupJettyHomeAndJettyXML(
_editedJettyXml, getWorkingDirectoryText(), false);
}
catch (Throwable t)
{
t.printStackTrace();
}
}
//introspection trick to be able to insert a button.
private static Field fFileSystemButton_field;
private Button getfFileSystemButton()
{
try
{
if (fFileSystemButton_field == null)
{
fFileSystemButton_field = WorkingDirectoryBlock.class.getDeclaredField("fFileSystemButton");
fFileSystemButton_field.setAccessible(true);
}
return (Button)fFileSystemButton_field.get(this);
}
catch (Throwable t)
{
t.printStackTrace();
}
return null;
}
}

View File

@ -1,175 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.launch.ui.tabs;
import java.io.File;
import org.eclipse.jetty.osgi.pde.launch.JettyLauncherMessages;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* A dialog that displays the content of jetty.xml
* <p>
* If someone knows how to open a standard editor provided by the IDE
* inside a popup from a modal dialog please let us know:
* that would be so much better than the simple SWT Text widget!
* </p>
*/
public class JettyXmlEditDialog extends Dialog
{
/** The text area to edit the contents of jetty.xml file */
protected Text _textField;
private Button _okButton;
/** Status label. */
private Label _statusLabel;
private boolean _isDirty = false;;
private String _lastValidatedString;
private String _jettyHome;
/**
*
* @param scope The scope in which the variable is created/edited
* @param parentShell The parent shell
* @param initValue The initial name of the variable
* before the edit. Or null if it is a bran new variable.
*/
public JettyXmlEditDialog(Shell parentShell, String currentJettyXml)
{
super(parentShell);
setShellStyle(SWT.SHELL_TRIM
| getDefaultOrientation() | SWT.RESIZE);
setBlockOnOpen(true);
_lastValidatedString = currentJettyXml;
}
/**
* @return the "OK" button
*/
public Button getGoForItButton() {
return _okButton;
}
/**
* @return The new jetty.xml contents or null if there was no modification.
*/
protected String getNewJettyXml() {
return _isDirty ? _lastValidatedString : null;
}
/**
* Invoked to update UI based on user input.
*
*/
protected void validateInput() {
String text = _textField.getText();
if (text.equals(_lastValidatedString)) {
return;
}
_isDirty = true;
_lastValidatedString = text;
Button ok = getGoForItButton();
ok.setEnabled(true);
}
/**
* {@inheritDoc}
*/
protected void configureShell(Shell newShell, String jettyHome) {
super.configureShell(newShell);
_jettyHome = jettyHome;
newShell.setText(JettyLauncherMessages.JettyXmlEditDialog_Edit_jetty_xml_title);
newShell.setSize(600, 400);
}
/**
* {@inheritDoc}
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite)super.createDialogArea(parent);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 1;
composite.setLayout(gridLayout);
Label label = new Label(composite, SWT.NONE);
String msg = JettyLauncherMessages.bind(
JettyLauncherMessages.JettyXmlEditDialog_Edit_jetty_xml,
_jettyHome + File.separatorChar + "etc" + File.separatorChar + "jetty.xml");
label.setText(msg);
_textField = new Text(composite, SWT.MULTI | SWT.BORDER /*| SWT.WRAP*/ | SWT.H_SCROLL | SWT.V_SCROLL);
_textField.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
validateInput();
}
public void keyPressed(KeyEvent e) {
}
});
if (_lastValidatedString != null) {
_textField.setText(_lastValidatedString);
}
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
_textField.setLayoutData(gridData);
// _textField.setSize(500, 500);
// status label
_statusLabel = new Label(composite, SWT.NONE);
_statusLabel.setText(" "); //$NON-NLS-1$
gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
_statusLabel.setLayoutData(gridData);
return composite;
}
/**
* {@inheritDoc}
*/
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.CANCEL_ID, JettyLauncherMessages.JettyXmlEditDialog_Cancel, false);
_okButton = createButton(parent, IDialogConstants.OK_ID,
JettyLauncherMessages.JettyXmlEditDialog_OK, true);
_okButton.setEnabled(false);
//call validate input before the user has to type something.
//it will decide on the state of the create button.
validateInput();
}
// @Override
// public boolean close() {
// _text = getText();
// return super.close();
// }
}

View File

@ -1,14 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Projecttemplate
Bundle-SymbolicName: org.eclipse.jetty.osgi.pde.templates;singleton:=true
Bundle-Version: 7.0.0.qualifier
Bundle-Activator: org.eclipse.jetty.osgi.pde.templates.JettyProjectTemplateActivator
Bundle-Vendor: Intalio Inc
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.pde.ui;bundle-version="3.5.0",
org.eclipse.pde.ui.templates;bundle-version="3.4.100",
org.eclipse.core.resources;bundle-version="3.5.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy

View File

@ -1,7 +0,0 @@
source.. = src/main/java/
output.. = target/classes/
bin.includes = META-INF/,\
.,\
plugin.xml,\
templates_3.4/,\
icons/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 B

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<!--
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
-->
<plugin>
<extension
point="org.eclipse.pde.ui.pluginContent">
<wizard
class="org.eclipse.jetty.osgi.pde.templates.HelloRFC66WebappNewWizard"
icon="$nl$/icons/jetty.png"
id="org.eclipse.jetty.osgi.pde.templates.HelloRFC66WebappNewWizard"
java="true"
name="Hello RFC-66 Web-application"
pureOSGi="true"
rcp="false"
requiresActivator="false"
ui-content="false">
<description>
Simple web-application embedded inside an OSGi bundle.
A single servlet declared in /WEB-INF/web.xml
</description>
</wizard>
<wizard
class="org.eclipse.jetty.osgi.pde.templates.TwoWebappsOneServletHandlerNewWizard"
icon="$nl$/icons/jetty.png"
id="org.eclipse.jetty.osgi.pde.templates.TwoWebappsOneServletHandlerNewWizard"
java="true"
name="Multiple Jetty webapps embedded in an OSGi bundle"
pureOSGi="true"
rcp="false"
requiresActivator="false"
ui-content="false">
<description>
Two webapps and one servlet handler configured via 3 jetty context files.
</description>
</wizard>
</extension>
</plugin>

View File

@ -1,109 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import java.net.URL;
import java.util.ResourceBundle;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.pde.core.plugin.IPluginReference;
import org.eclipse.pde.ui.templates.OptionTemplateSection;
/**
* Simple abstract implementation of OptionTemplateSection suitable for templates defined
* in this bundle.
*/
public abstract class AbstractJettyPDETemplateSection extends OptionTemplateSection
{
public AbstractJettyPDETemplateSection()
{
super.setPageCount(getNumberOfPagesToCreateCount());
}
/**
* @return The location of the installation of this current bundle.
*/
protected URL getInstallURL() {
return JettyProjectTemplateActivator.getDefault().getBundle().getEntry("/");
}
/**
* @return The properties files for this bundle.
*/
protected ResourceBundle getPluginResourceBundle() {
return Platform.getResourceBundle(
JettyProjectTemplateActivator.getDefault().getBundle());
}
/**
* Calls internalAddPages.
* Takes care of calling markPagesAdded as required by the super implementation.
*/
public final void addPages(Wizard wizard)
{
super.markPagesAdded();
}
/**
* Actually add the pages to the wizard here.
* @param wizard
*/
protected abstract void internalAddPages(Wizard wizard);
/**
* @return the number of pages that will be added here. By default 1.
*/
protected int getNumberOfPagesToCreateCount()
{
return 1;
}
/**
* @return null By default we don't declare extension points.
* This is for OSGi bundles not eclipse plugins.
*/
public String getUsedExtensionPoint()
{
return null;
}
/**
* @return true: inherit from parent wizard
*/
public boolean isDependentOnParentWizard()
{
return true;
}
/**
* @return 1 by default we don't not do anything fancy with the progress monitors.
*/
public int getNumberOfWorkUnits()
{
return super.getNumberOfWorkUnits() + 1;
}
/**
* @return false by default we don't generate multiple projects at once right now.
*/
public IPluginReference[] getDependencies(String schemaVersion)
{
return new IPluginReference[0];
}
}

View File

@ -1,44 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
/**
* Base template wizard: set the Import-Packages header in the generated MANIFEST.MF
* to import the javax.servlet and javax.servlet.http
*/
public abstract class AbstractOSGiWebappNewWizard extends NewPluginTemplateWizard
{
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
*/
public void init(IFieldData data)
{
super.init(data);
setWindowTitle("Webapp(s) embedded in an OSGi bundle");
}
/**
* In these default examples, the only dependency are the servlet's packages.
*/
public String[] getImportPackages()
{
return new String[] {"javax.servlet;version=\"2.5.0\"", //$NON-NLS-1$
"javax.servlet.http;version=\"2.5.0\""}; //$NON-NLS-1$
}
}

View File

@ -1,41 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.ITemplateSection;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
/**
*
*/
public class HelloRFC66WebappNewWizard extends AbstractOSGiWebappNewWizard
{
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
*/
public void init(IFieldData data) {
super.init(data);
setWindowTitle("Basic webapp embedded in an OSGi bundle");
}
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
*/
public ITemplateSection[] createTemplateSections() {
return new ITemplateSection[] {new HelloRFC66WebappTemplate()};
}
}

View File

@ -1,70 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
/**
* Template to generate a simple hello wold webapp embedded in an OSGi bundle.
*/
public class HelloRFC66WebappTemplate extends AbstractJettyPDETemplateSection
{
public static final String GREETINGS = "greetings";
public static final String CONTEXT_PATH = "contextPath"; //$NON-NLS-1$
public HelloRFC66WebappTemplate()
{
addOption(GREETINGS,"Greetings message", "Howdy!",0);
addOption(CONTEXT_PATH,"Web-ContextPath","/hello",0); //$NON-NLS-1$
}
protected void internalAddPages(Wizard wizard)
{
WizardPage page = createPage(0, null);//no help for now
page.setTitle("Hello World RFC66 Webapp");
page.setDescription("Creates a webapp embedded in an OSGi bundle");
wizard.addPage(page);
}
/**
* @return 'helloRFC66Webapp' used to locate the base folder that
* contains the template files.
*/
public String getSectionId()
{
return "helloRFC66Webapp"; //$NON-NLS-1$
}
/**
* Add the Web-ContextPath to the MANIFEST.MF as required by RFC66
*/
protected void updateModel(IProgressMonitor monitor)
{
setManifestHeader("Web-ContextPath", String.valueOf(getOptions(0)[1].getValue())); //$NON-NLS-1$ //$NON-NLS-2$]
}
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.ITemplateSection#getFoldersToInclude()
*/
public String[] getNewFiles() {
return new String[] {"WEB-INF/web.xml"};
}
}

View File

@ -1,70 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class JettyProjectTemplateActivator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.eclipse.jetty.osgi.pde.projecttemplate";
// The shared instance
private static JettyProjectTemplateActivator plugin;
/**
* The constructor
*/
public JettyProjectTemplateActivator()
{
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception
{
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception
{
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static JettyProjectTemplateActivator getDefault()
{
return plugin;
}
}

View File

@ -1,40 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.ITemplateSection;
/**
*
*/
public class TwoWebappsOneServletHandlerNewWizard extends AbstractOSGiWebappNewWizard
{
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
*/
public void init(IFieldData data) {
super.init(data);
setWindowTitle("Two Webapps and one servlet embedded in an OSGi bundle");
}
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
*/
public ITemplateSection[] createTemplateSections() {
return new ITemplateSection[] {new TwoWebappsOneServletHandlerTemplate()};
}
}

View File

@ -1,78 +0,0 @@
// ========================================================================
// Copyright (c) 2009 Intalio, Inc.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// Contributors:
// Hugues Malphettes - initial API and implementation
// ========================================================================
package org.eclipse.jetty.osgi.pde.templates;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
/**
* Template that generates jetty webapps.
*/
public class TwoWebappsOneServletHandlerTemplate extends AbstractJettyPDETemplateSection
{
public static final String GREETINGS = "greetings"; //$NON-NLS-1$
public static final String CONTEXT_PATH_APP_1 = "contextPathApp1"; //$NON-NLS-1$
public static final String CONTEXT_PATH_APP_2 = "contextPathApp2"; //$NON-NLS-1$
public TwoWebappsOneServletHandlerTemplate()
{
addOption(GREETINGS,"Greetings message", "Howdy!",0);
addOption(CONTEXT_PATH_APP_1,"Webapp 1 Context Path","/app1",0); //$NON-NLS-1$
addOption(CONTEXT_PATH_APP_2,"Webapp 2 Context Path","/app2",0); //$NON-NLS-1$
}
public void internalAddPages(Wizard wizard)
{
WizardPage page = createPage(0, null);
page.setTitle("Two webapps and one servlet in an OSGi bundle");
page.setDescription("Creates multiple jetty webapps embedded in an OSGi bundle");
wizard.addPage(page);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()
*/
public String getSectionId()
{
return "twoWebappsOneServletHandler"; //$NON-NLS-1$
}
/**
* Add the Jetty-ContextFilePath to the MANIFEST.MF as required for
* jetty-osgi to be able to identify the embedded webapps.
*/
protected void updateModel(IProgressMonitor monitor)
{
setManifestHeader("Jetty-ContextFilePath",
"jettycontexts/myservlet.xml, " + //$NON-NLS-1$ //$NON-NLS-2$
"jettycontexts/app1.xml, jettycontexts/app2.xml"); //$NON-NLS-1$ //$NON-NLS-2$
}
/* (non-Javadoc)
* @see org.eclipse.pde.ui.templates.ITemplateSection#getFoldersToInclude()
*/
public String[] getNewFiles() {
return new String[] {"war1/WEB-INF/web.xml",
"war2/WEB-INF/web.xml", //$NON-NLS-1$ //$NON-NLS-2$
"jettycontexts/app1.xml", "jettycontexts/app2.xml", //$NON-NLS-1$ //$NON-NLS-2$
"jettycontexts/myservlet.xml"}; //$NON-NLS-1$
}
}

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Hello Webapp</display-name>
<servlet>
<servlet-name>theservlet</servlet-name>
<servlet-class>$packageName$.Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>theservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

View File

@ -1,24 +0,0 @@
package $packageName$;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class $activator$ implements BundleActivator {
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
System.out.println("$startMessage$");
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
System.out.println("$stopMessage$");
}
}

View File

@ -1,26 +0,0 @@
package $packageName$;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("$greetings$");
}
}

View File

@ -1,24 +0,0 @@
package $packageName$;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class $activator$ implements BundleActivator {
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
System.out.println("$startMessage$");
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
System.out.println("$stopMessage$");
}
}

View File

@ -1,29 +0,0 @@
package $packageName$;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write(req.getContextPath() + ": $greetings$");
}
}

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">$contextPathApp1$</Set>
<Set name="war"><Property name="this.bundle.install"/>/war2</Set>
</Configure>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">$contextPathApp2$</Set>
<Set name="war"><Property name="this.bundle.install"/>/war2</Set>
</Configure>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.servlet.ServletContextHandler">
<Call name="addServlet">
<Arg>$packageName$.Servlet</Arg>
<Arg>/theservlet</Arg>
</Call>
</Configure>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Hello Webapp</display-name>
<servlet>
<servlet-name>theservlet</servlet-name>
<servlet-class>$packageName$.Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>theservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Hello Webapp</display-name>
<servlet>
<servlet-name>theservlet</servlet-name>
<servlet-class>$packageName$.Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>theservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>