mirror of
https://github.com/theonedev/onedev.git
synced 2025-12-08 18:26:30 +00:00
1. add tapestry support
2. enhance wicket support 3. merge parent.plugin, parent.product with parent.general
This commit is contained in:
parent
3dc8a7d31c
commit
e54cea564b
@ -10,7 +10,7 @@
|
||||
#end
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
#end
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.product</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
@ -143,7 +143,7 @@
|
||||
<executables>bin/*.sh, bin/wrapper-*</executables>
|
||||
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
||||
<moduleClass>${package}.PluginModule</moduleClass>
|
||||
<aggregation>true</aggregation>
|
||||
<aggregation>false</aggregation>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
@ -1,20 +1,29 @@
|
||||
package ${package};
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.bio.SocketConnector;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.apache.wicket.protocol.http.WicketServlet;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.commons.hibernate.HibernateFilter;
|
||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||
import com.pmease.commons.jetty.JettyUtils;
|
||||
import com.pmease.commons.jetty.extensionpoints.ServerConfigurator;
|
||||
@ -28,9 +37,16 @@ public class Plugin extends AbstractPlugin {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(Plugin.class);
|
||||
|
||||
private Properties serverProps;
|
||||
private final Properties serverProps;
|
||||
|
||||
public Plugin() {
|
||||
private final HibernateFilter hibernateFilter;
|
||||
|
||||
private final WicketServlet wicketServlet;
|
||||
|
||||
@Inject
|
||||
public Plugin(HibernateFilter hibernateFilter, WicketServlet wicketServlet) {
|
||||
this.hibernateFilter = hibernateFilter;
|
||||
this.wicketServlet = wicketServlet;
|
||||
serverProps = FileUtils.loadProperties(new File(Bootstrap.getConfDir(), "server.properties"));
|
||||
}
|
||||
|
||||
@ -59,6 +75,21 @@ public class Plugin extends AbstractPlugin {
|
||||
context.addServlet(servletHolder, "/images/*");
|
||||
context.addServlet(servletHolder, "/scripts/*");
|
||||
context.addServlet(servletHolder, "/styles/*");
|
||||
|
||||
FilterHolder filterHolder = new FilterHolder(hibernateFilter);
|
||||
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
|
||||
servletHolder = new ServletHolder(wicketServlet);
|
||||
|
||||
/*
|
||||
* Add wicket servlet as the default servlet which will serve all requests failed to
|
||||
* match a path pattern
|
||||
*/
|
||||
context.addServlet(servletHolder, "/");
|
||||
|
||||
ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
|
||||
errorHandler.addErrorPage(HttpServletResponse.SC_NOT_FOUND, "/404");
|
||||
context.setErrorHandler(errorHandler);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
@ -5,11 +5,11 @@ import java.util.Properties;
|
||||
|
||||
import org.apache.wicket.protocol.http.WebApplication;
|
||||
|
||||
import com.google.inject.name.Names;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
import com.pmease.commons.loader.AbstractPluginModule;
|
||||
import com.pmease.commons.util.FileUtils;
|
||||
import com.pmease.commons.hibernate.Hibernate;
|
||||
|
||||
public class PluginModule extends AbstractPluginModule {
|
||||
|
||||
@ -19,7 +19,7 @@ public class PluginModule extends AbstractPluginModule {
|
||||
|
||||
Properties hibernateProps = FileUtils.loadProperties(
|
||||
new File(Bootstrap.installDir, "conf/hibernate.properties"));
|
||||
bind(Properties.class).annotatedWith(Names.named("hibernate")).toInstance(hibernateProps);
|
||||
bind(Properties.class).annotatedWith(Hibernate.class).toInstance(hibernateProps);
|
||||
|
||||
bind(WebApplication.class).to(WicketConfig.class);
|
||||
}
|
||||
|
||||
@ -3,10 +3,19 @@ package ${package};
|
||||
import org.apache.wicket.Page;
|
||||
|
||||
import com.pmease.commons.wicket.AbstractWicketConfig;
|
||||
|
||||
import ${package}.web.ErrorPage404;
|
||||
import ${package}.web.HomePage;
|
||||
|
||||
public class WicketConfig extends AbstractWicketConfig {
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
|
||||
mountPage("/404", ErrorPage404.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Page> getHomePage() {
|
||||
return HomePage.class;
|
||||
|
||||
@ -2,17 +2,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Hello World</title>
|
||||
<title>Page Not Found</title>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<img src="/images/ok.gif"></img>
|
||||
</div>
|
||||
<div>
|
||||
<h1>It Works!</h1>
|
||||
</div>
|
||||
<div>
|
||||
<a wicket:id="addUser">add user</a>
|
||||
</div>
|
||||
Sorry we can not find the page you requested.
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,9 @@
|
||||
package ${package}.web;
|
||||
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class ErrorPage404 extends WebPage {
|
||||
public ErrorPage404() {
|
||||
}
|
||||
}
|
||||
@ -10,7 +10,7 @@
|
||||
#end
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
<module>../commons.jetty</module>
|
||||
<module>../commons.hibernate</module>
|
||||
<module>../commons.wicket</module>
|
||||
<module>../commons.tapestry</module>
|
||||
</modules>
|
||||
<repositories>
|
||||
<repository>
|
||||
|
||||
@ -137,7 +137,24 @@ public class Bootstrap {
|
||||
}
|
||||
}
|
||||
|
||||
ClassLoader appClassLoader = new URLClassLoader(urls.toArray(new URL[0]), Bootstrap.class.getClassLoader());
|
||||
ClassLoader appClassLoader = new URLClassLoader(urls.toArray(new URL[0]), Bootstrap.class.getClassLoader()) {
|
||||
|
||||
@Override
|
||||
protected Class<?> findClass(String name) throws ClassNotFoundException {
|
||||
return super.findClass(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||
return super.loadClass(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public URL findResource(String name) {
|
||||
return super.findResource(name);
|
||||
}
|
||||
|
||||
};
|
||||
ClassLoader originClassLoader = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(appClassLoader);
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<groupId>com.pmease</groupId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
@ -37,8 +37,7 @@ public abstract class AbstractEntity implements Serializable {
|
||||
if (getId() == null && otherEntity.getId() == null)
|
||||
return super.equals(other);
|
||||
else
|
||||
return new EqualsBuilder().append(getId(), otherEntity.getId())
|
||||
.isEquals();
|
||||
return new EqualsBuilder().append(getId(), otherEntity.getId()).isEquals();
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
package com.pmease.commons.hibernate;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import com.google.inject.BindingAnnotation;
|
||||
|
||||
@Retention(RUNTIME)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@BindingAnnotation
|
||||
public @interface Hibernate {
|
||||
|
||||
}
|
||||
@ -1,28 +1,17 @@
|
||||
package com.pmease.commons.hibernate;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Inject;
|
||||
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
|
||||
public class HibernatePlugin extends AbstractPlugin {
|
||||
|
||||
private final PersistService persistService;
|
||||
|
||||
private final HibernateFilter persistFilter;
|
||||
|
||||
@Inject
|
||||
public HibernatePlugin(PersistService persistService, HibernateFilter persistFilter) {
|
||||
public HibernatePlugin(PersistService persistService) {
|
||||
this.persistService = persistService;
|
||||
this.persistFilter = persistFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -37,14 +26,7 @@ public class HibernatePlugin extends AbstractPlugin {
|
||||
|
||||
@Override
|
||||
public Collection<?> getExtensions() {
|
||||
return ImmutableList.of(new ServletContextConfigurator() {
|
||||
|
||||
@Override
|
||||
public void configure(ServletContextHandler context) {
|
||||
FilterHolder filterHolder = new FilterHolder(persistFilter);
|
||||
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
}
|
||||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ import com.google.common.base.Preconditions;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.name.Named;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||
import com.pmease.commons.loader.PluginManager;
|
||||
@ -33,7 +32,7 @@ public class PersistServiceImpl implements PersistService, Provider<SessionFacto
|
||||
|
||||
@Inject
|
||||
public PersistServiceImpl(PluginManager pluginManager, NamingStrategy namingStrategy,
|
||||
@Named("hibernate") Properties hibernateProperties) {
|
||||
@Hibernate Properties hibernateProperties) {
|
||||
this.pluginManager = pluginManager;
|
||||
this.namingStrategy = namingStrategy;
|
||||
this.hibernateProperties = hibernateProperties;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<groupId>com.pmease</groupId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
@ -29,6 +29,8 @@ public class JettyPlugin extends AbstractPlugin {
|
||||
|
||||
private Server server;
|
||||
|
||||
private ServletContextHandler context;
|
||||
|
||||
public final PluginManager pluginManager;
|
||||
|
||||
@Inject
|
||||
@ -56,10 +58,14 @@ public class JettyPlugin extends AbstractPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
public ServletContextHandler getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
private Server createServer() {
|
||||
server = new Server();
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
||||
context = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
||||
context.setClassLoader(JettyPlugin.class.getClassLoader());
|
||||
|
||||
context.setContextPath("/");
|
||||
|
||||
@ -26,7 +26,7 @@ public class AppLoader implements Lifecycle {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AppLoader.class);
|
||||
|
||||
private static Injector injector;
|
||||
public static Injector injector;
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
@ -100,4 +100,5 @@ public class AppLoader implements Lifecycle {
|
||||
public static <T> T getInstance(Class<T> type) {
|
||||
return injector.getInstance(type);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.pmease.commons.loader;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.pmease.commons.bootstrap.Lifecycle;
|
||||
|
||||
@ -9,5 +8,9 @@ public interface PluginManager extends Lifecycle {
|
||||
|
||||
<T> Collection<T> getExtensions(Class<T> extensionPoint);
|
||||
|
||||
Map<String, AbstractPlugin> getPluginMap();
|
||||
Collection<AbstractPlugin> getPlugins();
|
||||
|
||||
<T extends AbstractPlugin> T getPlugin(Class<T> pluginClass);
|
||||
|
||||
AbstractPlugin getPlugin(String pluginId);
|
||||
}
|
||||
|
||||
@ -82,8 +82,25 @@ public class PluginManagerImpl implements PluginManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, AbstractPlugin> getPluginMap() {
|
||||
return Collections.unmodifiableMap(pluginMap);
|
||||
public Collection<AbstractPlugin> getPlugins() {
|
||||
return Collections.unmodifiableCollection(pluginMap.values());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends AbstractPlugin> T getPlugin(Class<T> pluginClass) {
|
||||
for (AbstractPlugin plugin: pluginMap.values()) {
|
||||
if (plugin.getClass() == pluginClass)
|
||||
return (T) plugin;
|
||||
}
|
||||
throw new RuntimeException("Unable to find plugin with class '" + pluginClass + "'.");
|
||||
}
|
||||
|
||||
public AbstractPlugin getPlugin(String pluginId) {
|
||||
if (pluginMap.containsKey(pluginId))
|
||||
return pluginMap.get(pluginId);
|
||||
else
|
||||
throw new RuntimeException("Unable to find plugin with id '" + pluginId + "'.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.product</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
@ -109,8 +109,8 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>commons.wicket</artifactId>
|
||||
<version>1.0.5</version>
|
||||
<artifactId>commons.tapestry</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@ -136,7 +136,7 @@
|
||||
<executables>bin/*.sh, bin/wrapper-*</executables>
|
||||
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
||||
<moduleClass>com.pmease.commons.product.PluginModule</moduleClass>
|
||||
<aggregation>true</aggregation>
|
||||
<aggregation>false</aggregation>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,18 @@
|
||||
package com.pmease.commons.product;
|
||||
|
||||
public class Counter {
|
||||
|
||||
private int value;
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public void increase() {
|
||||
value++;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package com.pmease.commons.product;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class DownloadServlet extends HttpServlet {
|
||||
|
||||
@Override
|
||||
protected void service(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
resp.getOutputStream().println("hello world");
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,27 +2,34 @@ package com.pmease.commons.product;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.DispatcherType;
|
||||
|
||||
import org.apache.tapestry5.TapestryFilter;
|
||||
import org.apache.tapestry5.internal.InternalConstants;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.bio.SocketConnector;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.commons.hibernate.HibernateFilter;
|
||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||
import com.pmease.commons.jetty.JettyUtils;
|
||||
import com.pmease.commons.jetty.extensionpoints.ServerConfigurator;
|
||||
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
import com.pmease.commons.product.model.User;
|
||||
import com.pmease.commons.util.ClassUtils;
|
||||
import com.pmease.commons.util.FileUtils;
|
||||
import com.pmease.commons.product.model.User;
|
||||
|
||||
public class Plugin extends AbstractPlugin {
|
||||
|
||||
@ -30,7 +37,14 @@ public class Plugin extends AbstractPlugin {
|
||||
|
||||
private Properties serverProps;
|
||||
|
||||
public Plugin() {
|
||||
private final HibernateFilter hibernateFilter;
|
||||
|
||||
private final TapestryFilter tapestryFilter;
|
||||
|
||||
@Inject
|
||||
public Plugin(HibernateFilter hibernateFilter, TapestryFilter tapestryFilter) {
|
||||
this.hibernateFilter = hibernateFilter;
|
||||
this.tapestryFilter = tapestryFilter;
|
||||
serverProps = FileUtils.loadProperties(new File(Bootstrap.getConfDir(), "server.properties"));
|
||||
}
|
||||
|
||||
@ -52,13 +66,25 @@ public class Plugin extends AbstractPlugin {
|
||||
public void configure(ServletContextHandler context) {
|
||||
context.getSessionHandler().getSessionManager()
|
||||
.setMaxInactiveInterval(Integer.parseInt(serverProps.getProperty("sessionTimeout")));
|
||||
context.setResourceBase(new File(Bootstrap.installDir, "resource").getAbsolutePath());
|
||||
|
||||
File resourceDir = new File(Bootstrap.installDir, "resource");
|
||||
context.setResourceBase(resourceDir.getAbsolutePath());
|
||||
|
||||
ServletHolder servletHolder = JettyUtils.createResourceServletHolder();
|
||||
Preconditions.checkNotNull(servletHolder);
|
||||
context.addServlet(servletHolder, "/images/*");
|
||||
context.addServlet(servletHolder, "/scripts/*");
|
||||
context.addServlet(servletHolder, "/styles/*");
|
||||
for (String path: resourceDir.list())
|
||||
context.addServlet(servletHolder, "/" + path);
|
||||
|
||||
context.addServlet(JettyUtils.createResourceServletHolder(), "/");
|
||||
|
||||
FilterHolder filterHolder = new FilterHolder(hibernateFilter);
|
||||
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
|
||||
filterHolder = new FilterHolder(tapestryFilter);
|
||||
filterHolder.setName("app");
|
||||
context.setInitParameter(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, Plugin.class.getPackage().getName());
|
||||
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
|
||||
context.addServlet(DownloadServlet.class, "/download/*");
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
@ -3,10 +3,8 @@ package com.pmease.commons.product;
|
||||
import java.io.File;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.wicket.protocol.http.WebApplication;
|
||||
|
||||
import com.google.inject.name.Names;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.hibernate.Hibernate;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
import com.pmease.commons.loader.AbstractPluginModule;
|
||||
import com.pmease.commons.util.FileUtils;
|
||||
@ -19,9 +17,7 @@ public class PluginModule extends AbstractPluginModule {
|
||||
|
||||
Properties hibernateProps = FileUtils.loadProperties(
|
||||
new File(Bootstrap.installDir, "conf/hibernate.properties"));
|
||||
bind(Properties.class).annotatedWith(Names.named("hibernate")).toInstance(hibernateProps);
|
||||
|
||||
bind(WebApplication.class).to(WicketConfig.class);
|
||||
bind(Properties.class).annotatedWith(Hibernate.class).toInstance(hibernateProps);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
package com.pmease.commons.product;
|
||||
|
||||
import org.apache.wicket.Page;
|
||||
|
||||
import com.pmease.commons.wicket.AbstractWicketConfig;
|
||||
import com.pmease.commons.product.web.HomePage;
|
||||
|
||||
public class WicketConfig extends AbstractWicketConfig {
|
||||
|
||||
@Override
|
||||
public Class<? extends Page> getHomePage() {
|
||||
return HomePage.class;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.pmease.commons.product.pages;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class AnotherPage {
|
||||
|
||||
public List getElements() {
|
||||
return ImmutableList.of("4", "5", "6");
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
|
||||
<t:commons.viewer elements="elements" value="var:value">${var:value}</t:commons.viewer>
|
||||
</t:container>
|
||||
@ -0,0 +1,53 @@
|
||||
package com.pmease.commons.product.pages;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.tapestry5.annotations.InjectComponent;
|
||||
import org.apache.tapestry5.annotations.Persist;
|
||||
import org.apache.tapestry5.annotations.Property;
|
||||
import org.apache.tapestry5.corelib.components.Zone;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.commons.product.Counter;
|
||||
import com.pmease.commons.product.model.User;
|
||||
|
||||
public class Index {
|
||||
|
||||
@Persist
|
||||
@Property
|
||||
private List<Counter> counters;
|
||||
|
||||
@InjectComponent
|
||||
private Zone zone;
|
||||
|
||||
@Property
|
||||
private Counter counter;
|
||||
|
||||
@Inject
|
||||
private GeneralDao dao;
|
||||
|
||||
void setupRender() {
|
||||
if (counters == null) {
|
||||
counters = new ArrayList<Counter>();
|
||||
counters.add(new Counter());
|
||||
counters.add(new Counter());
|
||||
}
|
||||
}
|
||||
|
||||
void onActionFromModify() {
|
||||
System.out.println(dao.getReference(User.class, 1L).getEmail());
|
||||
}
|
||||
|
||||
Object onActionFromIncrease(int index) {
|
||||
counter = counters.get(index);
|
||||
counter.increase();
|
||||
return zone;
|
||||
}
|
||||
|
||||
public String getZoneId() {
|
||||
return zone.getClientId();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
|
||||
<body>
|
||||
<t:loop source="counters" value="counter" index="var:index">
|
||||
<t:zone t:id="zone">${counter.value}</t:zone>
|
||||
<t:actionlink t:id="increase" t:zone="prop:zoneId" t:context="var:index">increase</t:actionlink>
|
||||
</t:loop>
|
||||
<img src="${asset:ok.gif}"></img>
|
||||
<t:actionlink t:id="modify">modify</t:actionlink>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
@ -0,0 +1,18 @@
|
||||
package com.pmease.commons.product.services;
|
||||
|
||||
import org.apache.tapestry5.SymbolConstants;
|
||||
import org.apache.tapestry5.ioc.MappedConfiguration;
|
||||
|
||||
import com.pmease.commons.loader.PluginManager;
|
||||
import com.pmease.commons.product.Plugin;
|
||||
|
||||
public class AppModule {
|
||||
|
||||
public static void contributeFactoryDefaults(
|
||||
MappedConfiguration<String, Object> configuration, PluginManager pluginManager) {
|
||||
configuration.override(
|
||||
SymbolConstants.APPLICATION_VERSION,
|
||||
pluginManager.getPlugin(Plugin.class).getVersion());
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package com.pmease.commons.product.web;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
import org.apache.wicket.markup.html.link.Link;
|
||||
import org.hibernate.criterion.Criterion;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.commons.loader.AppLoader;
|
||||
import com.pmease.commons.product.model.User;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class HomePage extends WebPage {
|
||||
public HomePage() {
|
||||
add(new Link<Void>("addUser") {
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
GeneralDao generalDao = AppLoader.getInstance(GeneralDao.class);
|
||||
Collection<User> result = generalDao.search(User.class,
|
||||
new Criterion[]{Restrictions.eq("name", "robin")}, null, 0, 0);
|
||||
if (result.isEmpty()) {
|
||||
User user = new User();
|
||||
user.setName("robin");
|
||||
user.setEmail("robin@example.com");
|
||||
generalDao.save(user);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -10,7 +10,7 @@
|
||||
#end
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
|
||||
3
commons.product/system/resource/scripts/viewer.js
Normal file
3
commons.product/system/resource/scripts/viewer.js
Normal file
@ -0,0 +1,3 @@
|
||||
function test(msg) {
|
||||
alert(msg);
|
||||
}
|
||||
101
commons.tapestry/pom.xml
Normal file
101
commons.tapestry/pom.xml
Normal file
@ -0,0 +1,101 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>commons.tapestry</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>plugin.maven</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>commons.loader</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>commons.jetty</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tapestry</groupId>
|
||||
<artifactId>tapestry-core</artifactId>
|
||||
<version>5.3.3</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<!-- dependency>
|
||||
<groupId>org.apache.tapestry</groupId>
|
||||
<artifactId>tapestry-hibernate</artifactId>
|
||||
<version>5.3.3</version>
|
||||
</dependency-->
|
||||
<dependency>
|
||||
<groupId>org.got5</groupId>
|
||||
<artifactId>tapestry5-jquery</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>devlab722-repo</id>
|
||||
<url>http://nexus.devlab722.net/nexus/content/repositories/releases</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>devlab722-snapshot-repo</id>
|
||||
<url>http://nexus.devlab722.net/nexus/content/repositories/snapshots</url>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>pmeaseRepo</id>
|
||||
<name>PMEase Repository</name>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>never</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<url>http://artifact.pmease.com/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<properties>
|
||||
<moduleClass>com.pmease.commons.tapestry.TapestryModule</moduleClass>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,33 @@
|
||||
package com.pmease.commons.tapestry;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.tapestry5.TapestryFilter;
|
||||
|
||||
import com.pmease.commons.loader.PluginManager;
|
||||
import com.pmease.commons.tapestry.extensionpoints.TapestryConfiguratorProvider;
|
||||
import com.pmease.commons.tapestry.services.AppModule;
|
||||
|
||||
@Singleton
|
||||
public class CustomTapestryFilter extends TapestryFilter {
|
||||
|
||||
@Inject
|
||||
private PluginManager pluginManager;
|
||||
|
||||
@Override
|
||||
protected Class<?>[] provideExtraModuleClasses(ServletContext context) {
|
||||
List<Class<?>> moduleClasses = new ArrayList<Class<?>>();
|
||||
|
||||
moduleClasses.add(AppModule.class);
|
||||
for (TapestryConfiguratorProvider each : pluginManager
|
||||
.getExtensions(TapestryConfiguratorProvider.class))
|
||||
moduleClasses.add(each.getTapestryConfigurator());
|
||||
return moduleClasses.toArray(new Class<?>[0]);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package com.pmease.commons.tapestry;
|
||||
|
||||
import org.apache.tapestry5.ioc.ObjectLocator;
|
||||
import org.apache.tapestry5.model.MutableComponentModel;
|
||||
import org.apache.tapestry5.plastic.PlasticField;
|
||||
import org.apache.tapestry5.services.transform.InjectionProvider2;
|
||||
|
||||
public class DisabledInjectionProvider implements InjectionProvider2 {
|
||||
|
||||
@Override
|
||||
public boolean provideInjection(PlasticField field, ObjectLocator locator,
|
||||
MutableComponentModel componentModel) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package com.pmease.commons.tapestry;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.tapestry5.ioc.AnnotationProvider;
|
||||
import org.apache.tapestry5.ioc.ObjectLocator;
|
||||
import org.apache.tapestry5.ioc.ObjectProvider;
|
||||
|
||||
import com.google.inject.Binding;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
public class GuiceObjectProvider implements ObjectProvider {
|
||||
|
||||
private Injector injector;
|
||||
|
||||
public GuiceObjectProvider(Injector injector) {
|
||||
this.injector = injector;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T provide(Class<T> objectType, AnnotationProvider annotationProvider, ObjectLocator locator) {
|
||||
TypeLiteral<?> type = TypeLiteral.get(objectType);
|
||||
final List<?> bindings = injector.findBindingsByType(type);
|
||||
if (bindings.size() == 1)
|
||||
return injector.getInstance(objectType);
|
||||
|
||||
for (int i = 0; i < bindings.size(); ++i) {
|
||||
Binding<?> binding = (Binding<?>) bindings.get(i);
|
||||
Class<? extends Annotation> annotationType = binding.getKey().getAnnotationType();
|
||||
if (annotationType != null) {
|
||||
Annotation annotation = annotationProvider.getAnnotation(annotationType);
|
||||
if (annotation == null && annotationType == com.google.inject.name.Named.class)
|
||||
annotation = annotationProvider.getAnnotation(javax.inject.Named.class);
|
||||
if (annotation != null) {
|
||||
if (annotation instanceof com.google.inject.name.Named) {
|
||||
com.google.inject.name.Named providedNamed = (com.google.inject.name.Named) annotation;
|
||||
com.google.inject.name.Named bindingNamed = (com.google.inject.name.Named) binding.getKey().getAnnotation();
|
||||
if (providedNamed.value().equals(bindingNamed.value()))
|
||||
return (T) injector.getInstance(binding.getKey());
|
||||
} else if (annotation instanceof javax.inject.Named) {
|
||||
javax.inject.Named providedNamed = (javax.inject.Named) annotation;
|
||||
com.google.inject.name.Named bindingNamed = (com.google.inject.name.Named) binding.getKey().getAnnotation();
|
||||
if (providedNamed.value().equals(bindingNamed.value()))
|
||||
return (T) injector.getInstance(binding.getKey());
|
||||
} else {
|
||||
return (T) injector.getInstance(binding.getKey());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (T) injector.getInstance(binding.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package com.pmease.commons.tapestry;
|
||||
|
||||
import org.apache.tapestry5.TapestryFilter;
|
||||
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
import com.pmease.commons.loader.AbstractPluginModule;
|
||||
|
||||
/**
|
||||
* NOTE: Do not forget to rename moduleClass property defined in the pom if you've renamed this class.
|
||||
*
|
||||
*/
|
||||
public class TapestryModule extends AbstractPluginModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
bind(TapestryFilter.class).to(CustomTapestryFilter.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends AbstractPlugin> getPluginClass() {
|
||||
return TapestryPlugin.class;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.pmease.commons.tapestry;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
|
||||
public class TapestryPlugin extends AbstractPlugin {
|
||||
|
||||
@Override
|
||||
public Collection<?> getExtensions() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,99 @@
|
||||
package com.pmease.commons.tapestry.components;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.apache.tapestry5.annotations.Import;
|
||||
import org.apache.tapestry5.annotations.Parameter;
|
||||
import org.apache.tapestry5.annotations.Property;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Import(library="context:scripts/viewer.js")
|
||||
public class Viewer {
|
||||
|
||||
@Parameter(required=true)
|
||||
private List elements;
|
||||
|
||||
@Property
|
||||
private Stack<Context> stack = new Stack<Context>();
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Parameter(required=true)
|
||||
private String value;
|
||||
|
||||
public Object getCurrent() {
|
||||
return stack.peek().getCurrent();
|
||||
}
|
||||
|
||||
void setupRender() {
|
||||
if (stack.isEmpty())
|
||||
stack.push(new Context(elements, 0));
|
||||
else
|
||||
stack.push(new Context((List) stack.peek().getCurrent(), 0));
|
||||
}
|
||||
|
||||
void cleanupRender() {
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
Object beginRender() {
|
||||
if (stack.peek().getCurrent() instanceof List)
|
||||
return this;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean beforeRenderTemplate() {
|
||||
Context context = stack.peek();
|
||||
Object current = context.getCurrent();
|
||||
if (current instanceof String) {
|
||||
value = (String) current;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean afterRender() {
|
||||
stack.peek().setPosition(stack.peek().getPosition() + 1);
|
||||
return stack.peek().getCurrent() == null;
|
||||
}
|
||||
|
||||
public static class Context implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List elements;
|
||||
|
||||
private int position;
|
||||
|
||||
public Context(List elements, int position) {
|
||||
this.elements = elements;
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
public List getElements() {
|
||||
return elements;
|
||||
}
|
||||
|
||||
public void setElements(List elements) {
|
||||
this.elements = elements;
|
||||
}
|
||||
|
||||
public int getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
public void setPosition(int position) {
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
public Object getCurrent() {
|
||||
if (position < elements.size())
|
||||
return elements.get(position);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
<div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
|
||||
<t:loop source="stack"> </t:loop><t:body></t:body>
|
||||
<script type="text/javascript">
|
||||
test(${current});
|
||||
</script>
|
||||
</div>
|
||||
@ -0,0 +1,5 @@
|
||||
package com.pmease.commons.tapestry.extensionpoints;
|
||||
|
||||
public interface TapestryConfiguratorProvider {
|
||||
Class<?> getTapestryConfigurator();
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
package com.pmease.commons.tapestry.services;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.tapestry5.SymbolConstants;
|
||||
import org.apache.tapestry5.ioc.Configuration;
|
||||
import org.apache.tapestry5.ioc.MappedConfiguration;
|
||||
import org.apache.tapestry5.ioc.ObjectProvider;
|
||||
import org.apache.tapestry5.ioc.OrderedConfiguration;
|
||||
import org.apache.tapestry5.ioc.annotations.Local;
|
||||
import org.apache.tapestry5.ioc.services.SymbolSource;
|
||||
import org.apache.tapestry5.services.AssetSource;
|
||||
import org.apache.tapestry5.services.LibraryMapping;
|
||||
import org.apache.tapestry5.services.transform.InjectionProvider2;
|
||||
import org.eclipse.jetty.servlet.ServletMapping;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import com.pmease.commons.bootstrap.Bootstrap;
|
||||
import com.pmease.commons.jetty.JettyPlugin;
|
||||
import com.pmease.commons.loader.AppLoader;
|
||||
import com.pmease.commons.loader.PluginManager;
|
||||
import com.pmease.commons.tapestry.DisabledInjectionProvider;
|
||||
import com.pmease.commons.tapestry.GuiceObjectProvider;
|
||||
import com.pmease.commons.tapestry.TapestryModule;
|
||||
|
||||
public class AppModule {
|
||||
|
||||
public static void contributeApplicationDefaults(MappedConfiguration<String, Object> configuration) {
|
||||
configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");
|
||||
|
||||
configuration.add(SymbolConstants.PRODUCTION_MODE, !Bootstrap.isSandboxMode() || Bootstrap.isProdMode());
|
||||
}
|
||||
|
||||
public static Injector buildGuiceInjector() {
|
||||
return AppLoader.injector;
|
||||
}
|
||||
|
||||
public static void contributeMasterObjectProvider(@Local Injector injector,
|
||||
OrderedConfiguration<ObjectProvider> configuration) {
|
||||
configuration.add("guiceProvider", new GuiceObjectProvider(injector), "after:*");
|
||||
}
|
||||
|
||||
public static void contributeInjectionProvider(OrderedConfiguration<InjectionProvider2> configuration,
|
||||
SymbolSource symbolSource, AssetSource assetSource) {
|
||||
configuration.overrideInstance("Named", DisabledInjectionProvider.class);
|
||||
}
|
||||
|
||||
public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration,
|
||||
PluginManager pluginManager) {
|
||||
configuration.add(new LibraryMapping("commons", TapestryModule.class.getPackage().getName()));
|
||||
for (LibraryMapping mapping: pluginManager.getExtensions(LibraryMapping.class))
|
||||
configuration.add(mapping);
|
||||
}
|
||||
|
||||
public static void contributeIgnoredPathsFilter(Configuration<String> configuration, PluginManager pluginManager) {
|
||||
JettyPlugin jettyPlugin = pluginManager.getPlugin(JettyPlugin.class);
|
||||
for (ServletMapping mapping: jettyPlugin.getContext().getServletHandler().getServletMappings()) {
|
||||
for (String pathSpec: mapping.getPathSpecs()) {
|
||||
if (!pathSpec.equals("/") && !pathSpec.equals("/*")) {
|
||||
pathSpec = pathSpec.replace(".", "\\.");
|
||||
if (pathSpec.endsWith("/*")) {
|
||||
pathSpec = StringUtils.stripEnd(pathSpec, "/*");
|
||||
configuration.add(pathSpec);
|
||||
configuration.add(pathSpec + "/.*");
|
||||
} else {
|
||||
pathSpec = pathSpec.replace("*", ".*");
|
||||
configuration.add(pathSpec);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archetype-descriptor name="archetype.plugin">
|
||||
<fileSets>
|
||||
<fileSet filtered="true" packaged="true">
|
||||
<directory>src/main/java</directory>
|
||||
</fileSet>
|
||||
<fileSet filtered="false" packaged="false">
|
||||
<directory>src/main/resources</directory>
|
||||
</fileSet>
|
||||
<fileSet filtered="false" packaged="false">
|
||||
<directory>src/test/java</directory>
|
||||
</fileSet>
|
||||
<fileSet filtered="false" packaged="false">
|
||||
<directory>src/test/resources</directory>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</archetype-descriptor>
|
||||
@ -0,0 +1,62 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
#if (\${groupId} != "com.pmease")
|
||||
<groupId>\${groupId}</groupId>
|
||||
#end
|
||||
<artifactId>\${artifactId}</artifactId>
|
||||
#if (\${version} != "1.0.5")
|
||||
<version>\${version}</version>
|
||||
#end
|
||||
<parent>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>plugin.maven</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>${project.artifactId}</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>pmeaseRepo</id>
|
||||
<name>PMEase Repository</name>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>never</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<url>http://artifact.pmease.com/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<properties>
|
||||
<moduleClass>\${package}.PluginModule</moduleClass>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,13 @@
|
||||
package ${package};
|
||||
|
||||
import java.util.Collection;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
|
||||
public class Plugin extends AbstractPlugin {
|
||||
|
||||
@Override
|
||||
public Collection<?> getExtensions() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package ${package};
|
||||
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
import com.pmease.commons.loader.AbstractPluginModule;
|
||||
|
||||
/**
|
||||
* NOTE: Do not forget to rename moduleClass property defined in the pom if you've renamed this class.
|
||||
*
|
||||
*/
|
||||
public class PluginModule extends AbstractPluginModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
|
||||
// put your guice bindings here
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends AbstractPlugin> getPluginClass() {
|
||||
return Plugin.class;
|
||||
}
|
||||
|
||||
}
|
||||
@ -8,12 +8,12 @@ import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class WebFilter extends WicketFilter {
|
||||
public class CustomWicketFilter extends WicketFilter {
|
||||
|
||||
private final WebApplication webApplication;
|
||||
|
||||
@Inject
|
||||
public WebFilter(WebApplication webApplication) {
|
||||
public CustomWicketFilter(WebApplication webApplication) {
|
||||
this.webApplication = webApplication;
|
||||
setFilterPath("");
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
package com.pmease.commons.wicket;
|
||||
|
||||
import org.apache.wicket.protocol.http.WicketFilter;
|
||||
import org.apache.wicket.protocol.http.WicketServlet;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Singleton
|
||||
public class WebServlet extends WicketServlet {
|
||||
|
||||
private final WicketFilter wicketFilter;
|
||||
|
||||
@Inject
|
||||
public WebServlet(WicketFilter wicketFilter) {
|
||||
this.wicketFilter = wicketFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServletName() {
|
||||
return "wicket";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected WicketFilter newWicketFilter() {
|
||||
return wicketFilter;
|
||||
}
|
||||
|
||||
}
|
||||
@ -12,8 +12,8 @@ public class WicketModule extends AbstractPluginModule {
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
|
||||
bind(WicketServlet.class).to(WebServlet.class);
|
||||
bind(WicketFilter.class).to(WebFilter.class);
|
||||
bind(WicketServlet.class).to(WicketServlet.class);
|
||||
bind(WicketFilter.class).to(CustomWicketFilter.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -2,40 +2,13 @@ package com.pmease.commons.wicket;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.wicket.protocol.http.WicketServlet;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Inject;
|
||||
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
||||
import com.pmease.commons.loader.AbstractPlugin;
|
||||
|
||||
public class WicketPlugin extends AbstractPlugin {
|
||||
|
||||
private final WicketServlet wicketServlet;
|
||||
|
||||
@Inject
|
||||
public WicketPlugin(WicketServlet wicketServlet) {
|
||||
this.wicketServlet = wicketServlet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<?> getExtensions() {
|
||||
return ImmutableList.of(new ServletContextConfigurator() {
|
||||
|
||||
@Override
|
||||
public void configure(ServletContextHandler context) {
|
||||
ServletHolder servletHolder = new ServletHolder(wicketServlet);
|
||||
|
||||
/*
|
||||
* Add wicket servlet as the default servlet which will serve all requests failed to
|
||||
* match a path pattern
|
||||
*/
|
||||
context.addServlet(servletHolder, "/");
|
||||
}
|
||||
|
||||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -178,6 +178,27 @@
|
||||
<goal>package-artifact</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>generate-plugin-resources</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate-plugin-resources</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>generate-product-resources</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate-product-resources</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>create-product-sandbox</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>create-product-sandbox</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<groupId>com.pmease</groupId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
<artifactId>parent.plugin</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>plugin.maven</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-plugin-resources</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate-plugin-resources</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>create-product-sandbox</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>create-product-sandbox</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>pmeaseRepo</id>
|
||||
<name>PMEase Repository</name>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>never</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<url>http://artifact.pmease.com/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
</project>
|
||||
@ -1,55 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>parent.general</artifactId>
|
||||
<groupId>com.pmease</groupId>
|
||||
<version>1.0.5</version>
|
||||
</parent>
|
||||
<artifactId>parent.product</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.pmease</groupId>
|
||||
<artifactId>plugin.maven</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-plugin-resources</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate-plugin-resources</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>generate-product-resources</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate-product-resources</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>pmeaseRepo</id>
|
||||
<name>PMEase Repository</name>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>never</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
<checksumPolicy>fail</checksumPolicy>
|
||||
</snapshots>
|
||||
<url>http://artifact.pmease.com/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
</project>
|
||||
@ -45,6 +45,16 @@ public class CreateProductSandboxMojo extends AbstractMojo {
|
||||
*/
|
||||
private RepositorySystem repoSystem;
|
||||
|
||||
/**
|
||||
* @parameter default-value="${executables}"
|
||||
*/
|
||||
private String executables;
|
||||
|
||||
/**
|
||||
* @parameter default-value="${moduleClass}"
|
||||
*/
|
||||
private String moduleClass;
|
||||
|
||||
/**
|
||||
* The current repository/network configuration of Maven.
|
||||
*
|
||||
@ -67,6 +77,9 @@ public class CreateProductSandboxMojo extends AbstractMojo {
|
||||
private ArchiverManager archiverManager;
|
||||
|
||||
public void execute() throws MojoExecutionException {
|
||||
if (moduleClass == null || executables != null)
|
||||
return;
|
||||
|
||||
PluginUtils.checkResolvedArtifacts(project, true);
|
||||
|
||||
for (Artifact artifact: project.getArtifacts()) {
|
||||
|
||||
@ -24,11 +24,13 @@ public class GeneratePluginResourcesMojo extends AbstractMojo {
|
||||
|
||||
/**
|
||||
* @parameter default-value="${moduleClass}"
|
||||
* @required
|
||||
*/
|
||||
private String moduleClass;
|
||||
|
||||
public void execute() throws MojoExecutionException {
|
||||
if (moduleClass == null)
|
||||
return;
|
||||
|
||||
PluginUtils.checkResolvedArtifacts(project, true);
|
||||
|
||||
File outputDir = new File(project.getBuild().getOutputDirectory());
|
||||
|
||||
@ -29,7 +29,6 @@ public class GenerateProductResourcesMojo extends AbstractMojo {
|
||||
|
||||
/**
|
||||
* @parameter default-value="${executables}"
|
||||
* @required
|
||||
*/
|
||||
private String executables;
|
||||
|
||||
@ -57,6 +56,9 @@ public class GenerateProductResourcesMojo extends AbstractMojo {
|
||||
private List<RemoteRepository> remoteRepos;
|
||||
|
||||
public void execute() throws MojoExecutionException {
|
||||
if (executables == null)
|
||||
return;
|
||||
|
||||
PluginUtils.checkResolvedArtifacts(project, true);
|
||||
|
||||
File binDir = new File(project.getBuild().getDirectory(), PluginConstants.SANDBOX + "/bin");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user