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
|
#end
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
#end
|
#end
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.product</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -143,7 +143,7 @@
|
|||||||
<executables>bin/*.sh, bin/wrapper-*</executables>
|
<executables>bin/*.sh, bin/wrapper-*</executables>
|
||||||
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
||||||
<moduleClass>${package}.PluginModule</moduleClass>
|
<moduleClass>${package}.PluginModule</moduleClass>
|
||||||
<aggregation>true</aggregation>
|
<aggregation>false</aggregation>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@ -1,20 +1,29 @@
|
|||||||
package ${package};
|
package ${package};
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.servlet.DispatcherType;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.bio.SocketConnector;
|
import org.eclipse.jetty.server.bio.SocketConnector;
|
||||||
|
import org.eclipse.jetty.servlet.FilterHolder;
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.apache.wicket.protocol.http.WicketServlet;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.pmease.commons.bootstrap.Bootstrap;
|
import com.pmease.commons.bootstrap.Bootstrap;
|
||||||
import com.pmease.commons.hibernate.AbstractEntity;
|
import com.pmease.commons.hibernate.AbstractEntity;
|
||||||
|
import com.pmease.commons.hibernate.HibernateFilter;
|
||||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||||
import com.pmease.commons.jetty.JettyUtils;
|
import com.pmease.commons.jetty.JettyUtils;
|
||||||
import com.pmease.commons.jetty.extensionpoints.ServerConfigurator;
|
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 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"));
|
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, "/images/*");
|
||||||
context.addServlet(servletHolder, "/scripts/*");
|
context.addServlet(servletHolder, "/scripts/*");
|
||||||
context.addServlet(servletHolder, "/styles/*");
|
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 org.apache.wicket.protocol.http.WebApplication;
|
||||||
|
|
||||||
import com.google.inject.name.Names;
|
|
||||||
import com.pmease.commons.bootstrap.Bootstrap;
|
import com.pmease.commons.bootstrap.Bootstrap;
|
||||||
import com.pmease.commons.loader.AbstractPlugin;
|
import com.pmease.commons.loader.AbstractPlugin;
|
||||||
import com.pmease.commons.loader.AbstractPluginModule;
|
import com.pmease.commons.loader.AbstractPluginModule;
|
||||||
import com.pmease.commons.util.FileUtils;
|
import com.pmease.commons.util.FileUtils;
|
||||||
|
import com.pmease.commons.hibernate.Hibernate;
|
||||||
|
|
||||||
public class PluginModule extends AbstractPluginModule {
|
public class PluginModule extends AbstractPluginModule {
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ public class PluginModule extends AbstractPluginModule {
|
|||||||
|
|
||||||
Properties hibernateProps = FileUtils.loadProperties(
|
Properties hibernateProps = FileUtils.loadProperties(
|
||||||
new File(Bootstrap.installDir, "conf/hibernate.properties"));
|
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);
|
bind(WebApplication.class).to(WicketConfig.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,19 @@ package ${package};
|
|||||||
import org.apache.wicket.Page;
|
import org.apache.wicket.Page;
|
||||||
|
|
||||||
import com.pmease.commons.wicket.AbstractWicketConfig;
|
import com.pmease.commons.wicket.AbstractWicketConfig;
|
||||||
|
|
||||||
|
import ${package}.web.ErrorPage404;
|
||||||
import ${package}.web.HomePage;
|
import ${package}.web.HomePage;
|
||||||
|
|
||||||
public class WicketConfig extends AbstractWicketConfig {
|
public class WicketConfig extends AbstractWicketConfig {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void init() {
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
mountPage("/404", ErrorPage404.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends Page> getHomePage() {
|
public Class<? extends Page> getHomePage() {
|
||||||
return HomePage.class;
|
return HomePage.class;
|
||||||
|
|||||||
@ -2,17 +2,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<title>Hello World</title>
|
<title>Page Not Found</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
Sorry we can not find the page you requested.
|
||||||
<img src="/images/ok.gif"></img>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h1>It Works!</h1>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<a wicket:id="addUser">add user</a>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</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
|
#end
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
<module>../commons.jetty</module>
|
<module>../commons.jetty</module>
|
||||||
<module>../commons.hibernate</module>
|
<module>../commons.hibernate</module>
|
||||||
<module>../commons.wicket</module>
|
<module>../commons.wicket</module>
|
||||||
|
<module>../commons.tapestry</module>
|
||||||
</modules>
|
</modules>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<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();
|
ClassLoader originClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(appClassLoader);
|
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">
|
<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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|||||||
@ -36,9 +36,8 @@ public abstract class AbstractEntity implements Serializable {
|
|||||||
AbstractEntity otherEntity = (AbstractEntity) other;
|
AbstractEntity otherEntity = (AbstractEntity) other;
|
||||||
if (getId() == null && otherEntity.getId() == null)
|
if (getId() == null && otherEntity.getId() == null)
|
||||||
return super.equals(other);
|
return super.equals(other);
|
||||||
else
|
else
|
||||||
return new EqualsBuilder().append(getId(), otherEntity.getId())
|
return new EqualsBuilder().append(getId(), otherEntity.getId()).isEquals();
|
||||||
.isEquals();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int hashCode() {
|
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;
|
package com.pmease.commons.hibernate;
|
||||||
|
|
||||||
import java.util.Collection;
|
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.google.inject.Inject;
|
||||||
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
|
||||||
import com.pmease.commons.loader.AbstractPlugin;
|
import com.pmease.commons.loader.AbstractPlugin;
|
||||||
|
|
||||||
public class HibernatePlugin extends AbstractPlugin {
|
public class HibernatePlugin extends AbstractPlugin {
|
||||||
|
|
||||||
private final PersistService persistService;
|
private final PersistService persistService;
|
||||||
|
|
||||||
private final HibernateFilter persistFilter;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public HibernatePlugin(PersistService persistService, HibernateFilter persistFilter) {
|
public HibernatePlugin(PersistService persistService) {
|
||||||
this.persistService = persistService;
|
this.persistService = persistService;
|
||||||
this.persistFilter = persistFilter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -37,14 +26,7 @@ public class HibernatePlugin extends AbstractPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<?> getExtensions() {
|
public Collection<?> getExtensions() {
|
||||||
return ImmutableList.of(new ServletContextConfigurator() {
|
return null;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void configure(ServletContextHandler context) {
|
|
||||||
FilterHolder filterHolder = new FilterHolder(persistFilter);
|
|
||||||
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import com.google.common.base.Preconditions;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.name.Named;
|
|
||||||
import com.pmease.commons.bootstrap.Bootstrap;
|
import com.pmease.commons.bootstrap.Bootstrap;
|
||||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||||
import com.pmease.commons.loader.PluginManager;
|
import com.pmease.commons.loader.PluginManager;
|
||||||
@ -33,7 +32,7 @@ public class PersistServiceImpl implements PersistService, Provider<SessionFacto
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public PersistServiceImpl(PluginManager pluginManager, NamingStrategy namingStrategy,
|
public PersistServiceImpl(PluginManager pluginManager, NamingStrategy namingStrategy,
|
||||||
@Named("hibernate") Properties hibernateProperties) {
|
@Hibernate Properties hibernateProperties) {
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
this.namingStrategy = namingStrategy;
|
this.namingStrategy = namingStrategy;
|
||||||
this.hibernateProperties = hibernateProperties;
|
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">
|
<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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|||||||
@ -29,6 +29,8 @@ public class JettyPlugin extends AbstractPlugin {
|
|||||||
|
|
||||||
private Server server;
|
private Server server;
|
||||||
|
|
||||||
|
private ServletContextHandler context;
|
||||||
|
|
||||||
public final PluginManager pluginManager;
|
public final PluginManager pluginManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@ -55,11 +57,15 @@ public class JettyPlugin extends AbstractPlugin {
|
|||||||
throw BootstrapUtils.unchecked(e);
|
throw BootstrapUtils.unchecked(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ServletContextHandler getContext() {
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
private Server createServer() {
|
private Server createServer() {
|
||||||
server = new Server();
|
server = new Server();
|
||||||
|
|
||||||
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
context = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
||||||
context.setClassLoader(JettyPlugin.class.getClassLoader());
|
context.setClassLoader(JettyPlugin.class.getClassLoader());
|
||||||
|
|
||||||
context.setContextPath("/");
|
context.setContextPath("/");
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public class AppLoader implements Lifecycle {
|
|||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(AppLoader.class);
|
private static final Logger logger = LoggerFactory.getLogger(AppLoader.class);
|
||||||
|
|
||||||
private static Injector injector;
|
public static Injector injector;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
@ -100,4 +100,5 @@ public class AppLoader implements Lifecycle {
|
|||||||
public static <T> T getInstance(Class<T> type) {
|
public static <T> T getInstance(Class<T> type) {
|
||||||
return injector.getInstance(type);
|
return injector.getInstance(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package com.pmease.commons.loader;
|
package com.pmease.commons.loader;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.pmease.commons.bootstrap.Lifecycle;
|
import com.pmease.commons.bootstrap.Lifecycle;
|
||||||
|
|
||||||
@ -9,5 +8,9 @@ public interface PluginManager extends Lifecycle {
|
|||||||
|
|
||||||
<T> Collection<T> getExtensions(Class<T> extensionPoint);
|
<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
|
@Override
|
||||||
public Map<String, AbstractPlugin> getPluginMap() {
|
public Collection<AbstractPlugin> getPlugins() {
|
||||||
return Collections.unmodifiableMap(pluginMap);
|
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>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.product</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -109,8 +109,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>commons.wicket</artifactId>
|
<artifactId>commons.tapestry</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
@ -136,7 +136,7 @@
|
|||||||
<executables>bin/*.sh, bin/wrapper-*</executables>
|
<executables>bin/*.sh, bin/wrapper-*</executables>
|
||||||
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
<bootstrapClass>com.pmease.commons.bootstrap.Bootstrap</bootstrapClass>
|
||||||
<moduleClass>com.pmease.commons.product.PluginModule</moduleClass>
|
<moduleClass>com.pmease.commons.product.PluginModule</moduleClass>
|
||||||
<aggregation>true</aggregation>
|
<aggregation>false</aggregation>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</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.io.File;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Properties;
|
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.Server;
|
||||||
import org.eclipse.jetty.server.bio.SocketConnector;
|
import org.eclipse.jetty.server.bio.SocketConnector;
|
||||||
|
import org.eclipse.jetty.servlet.FilterHolder;
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.pmease.commons.bootstrap.Bootstrap;
|
import com.pmease.commons.bootstrap.Bootstrap;
|
||||||
import com.pmease.commons.hibernate.AbstractEntity;
|
import com.pmease.commons.hibernate.AbstractEntity;
|
||||||
|
import com.pmease.commons.hibernate.HibernateFilter;
|
||||||
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
import com.pmease.commons.hibernate.extensionpoints.ModelContribution;
|
||||||
import com.pmease.commons.jetty.JettyUtils;
|
import com.pmease.commons.jetty.JettyUtils;
|
||||||
import com.pmease.commons.jetty.extensionpoints.ServerConfigurator;
|
import com.pmease.commons.jetty.extensionpoints.ServerConfigurator;
|
||||||
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
import com.pmease.commons.jetty.extensionpoints.ServletContextConfigurator;
|
||||||
import com.pmease.commons.loader.AbstractPlugin;
|
import com.pmease.commons.loader.AbstractPlugin;
|
||||||
|
import com.pmease.commons.product.model.User;
|
||||||
import com.pmease.commons.util.ClassUtils;
|
import com.pmease.commons.util.ClassUtils;
|
||||||
import com.pmease.commons.util.FileUtils;
|
import com.pmease.commons.util.FileUtils;
|
||||||
import com.pmease.commons.product.model.User;
|
|
||||||
|
|
||||||
public class Plugin extends AbstractPlugin {
|
public class Plugin extends AbstractPlugin {
|
||||||
|
|
||||||
@ -30,7 +37,14 @@ public class Plugin extends AbstractPlugin {
|
|||||||
|
|
||||||
private Properties serverProps;
|
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"));
|
serverProps = FileUtils.loadProperties(new File(Bootstrap.getConfDir(), "server.properties"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,13 +66,25 @@ public class Plugin extends AbstractPlugin {
|
|||||||
public void configure(ServletContextHandler context) {
|
public void configure(ServletContextHandler context) {
|
||||||
context.getSessionHandler().getSessionManager()
|
context.getSessionHandler().getSessionManager()
|
||||||
.setMaxInactiveInterval(Integer.parseInt(serverProps.getProperty("sessionTimeout")));
|
.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();
|
||||||
|
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));
|
||||||
|
|
||||||
ServletHolder servletHolder = JettyUtils.createResourceServletHolder();
|
filterHolder = new FilterHolder(tapestryFilter);
|
||||||
Preconditions.checkNotNull(servletHolder);
|
filterHolder.setName("app");
|
||||||
context.addServlet(servletHolder, "/images/*");
|
context.setInitParameter(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, Plugin.class.getPackage().getName());
|
||||||
context.addServlet(servletHolder, "/scripts/*");
|
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||||
context.addServlet(servletHolder, "/styles/*");
|
|
||||||
|
context.addServlet(DownloadServlet.class, "/download/*");
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3,10 +3,8 @@ package com.pmease.commons.product;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Properties;
|
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.bootstrap.Bootstrap;
|
||||||
|
import com.pmease.commons.hibernate.Hibernate;
|
||||||
import com.pmease.commons.loader.AbstractPlugin;
|
import com.pmease.commons.loader.AbstractPlugin;
|
||||||
import com.pmease.commons.loader.AbstractPluginModule;
|
import com.pmease.commons.loader.AbstractPluginModule;
|
||||||
import com.pmease.commons.util.FileUtils;
|
import com.pmease.commons.util.FileUtils;
|
||||||
@ -19,9 +17,7 @@ public class PluginModule extends AbstractPluginModule {
|
|||||||
|
|
||||||
Properties hibernateProps = FileUtils.loadProperties(
|
Properties hibernateProps = FileUtils.loadProperties(
|
||||||
new File(Bootstrap.installDir, "conf/hibernate.properties"));
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
#end
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.pmease</groupId>
|
<groupId>com.pmease</groupId>
|
||||||
<artifactId>parent.plugin</artifactId>
|
<artifactId>parent.general</artifactId>
|
||||||
<version>1.0.5</version>
|
<version>1.0.5</version>
|
||||||
</parent>
|
</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;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class WebFilter extends WicketFilter {
|
public class CustomWicketFilter extends WicketFilter {
|
||||||
|
|
||||||
private final WebApplication webApplication;
|
private final WebApplication webApplication;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public WebFilter(WebApplication webApplication) {
|
public CustomWicketFilter(WebApplication webApplication) {
|
||||||
this.webApplication = webApplication;
|
this.webApplication = webApplication;
|
||||||
setFilterPath("");
|
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() {
|
protected void configure() {
|
||||||
super.configure();
|
super.configure();
|
||||||
|
|
||||||
bind(WicketServlet.class).to(WebServlet.class);
|
bind(WicketServlet.class).to(WicketServlet.class);
|
||||||
bind(WicketFilter.class).to(WebFilter.class);
|
bind(WicketFilter.class).to(CustomWicketFilter.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -2,40 +2,13 @@ package com.pmease.commons.wicket;
|
|||||||
|
|
||||||
import java.util.Collection;
|
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;
|
import com.pmease.commons.loader.AbstractPlugin;
|
||||||
|
|
||||||
public class WicketPlugin extends AbstractPlugin {
|
public class WicketPlugin extends AbstractPlugin {
|
||||||
|
|
||||||
private final WicketServlet wicketServlet;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public WicketPlugin(WicketServlet wicketServlet) {
|
|
||||||
this.wicketServlet = wicketServlet;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<?> getExtensions() {
|
public Collection<?> getExtensions() {
|
||||||
return ImmutableList.of(new ServletContextConfigurator() {
|
return null;
|
||||||
|
|
||||||
@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, "/");
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -178,6 +178,27 @@
|
|||||||
<goal>package-artifact</goal>
|
<goal>package-artifact</goal>
|
||||||
</goals>
|
</goals>
|
||||||
</execution>
|
</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>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
<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,7 +45,17 @@ public class CreateProductSandboxMojo extends AbstractMojo {
|
|||||||
*/
|
*/
|
||||||
private RepositorySystem repoSystem;
|
private RepositorySystem repoSystem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @parameter default-value="${executables}"
|
||||||
|
*/
|
||||||
|
private String executables;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @parameter default-value="${moduleClass}"
|
||||||
|
*/
|
||||||
|
private String moduleClass;
|
||||||
|
|
||||||
|
/**
|
||||||
* The current repository/network configuration of Maven.
|
* The current repository/network configuration of Maven.
|
||||||
*
|
*
|
||||||
* @parameter default-value="${repositorySystemSession}"
|
* @parameter default-value="${repositorySystemSession}"
|
||||||
@ -67,6 +77,9 @@ public class CreateProductSandboxMojo extends AbstractMojo {
|
|||||||
private ArchiverManager archiverManager;
|
private ArchiverManager archiverManager;
|
||||||
|
|
||||||
public void execute() throws MojoExecutionException {
|
public void execute() throws MojoExecutionException {
|
||||||
|
if (moduleClass == null || executables != null)
|
||||||
|
return;
|
||||||
|
|
||||||
PluginUtils.checkResolvedArtifacts(project, true);
|
PluginUtils.checkResolvedArtifacts(project, true);
|
||||||
|
|
||||||
for (Artifact artifact: project.getArtifacts()) {
|
for (Artifact artifact: project.getArtifacts()) {
|
||||||
|
|||||||
@ -24,11 +24,13 @@ public class GeneratePluginResourcesMojo extends AbstractMojo {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @parameter default-value="${moduleClass}"
|
* @parameter default-value="${moduleClass}"
|
||||||
* @required
|
|
||||||
*/
|
*/
|
||||||
private String moduleClass;
|
private String moduleClass;
|
||||||
|
|
||||||
public void execute() throws MojoExecutionException {
|
public void execute() throws MojoExecutionException {
|
||||||
|
if (moduleClass == null)
|
||||||
|
return;
|
||||||
|
|
||||||
PluginUtils.checkResolvedArtifacts(project, true);
|
PluginUtils.checkResolvedArtifacts(project, true);
|
||||||
|
|
||||||
File outputDir = new File(project.getBuild().getOutputDirectory());
|
File outputDir = new File(project.getBuild().getOutputDirectory());
|
||||||
|
|||||||
@ -29,7 +29,6 @@ public class GenerateProductResourcesMojo extends AbstractMojo {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @parameter default-value="${executables}"
|
* @parameter default-value="${executables}"
|
||||||
* @required
|
|
||||||
*/
|
*/
|
||||||
private String executables;
|
private String executables;
|
||||||
|
|
||||||
@ -57,6 +56,9 @@ public class GenerateProductResourcesMojo extends AbstractMojo {
|
|||||||
private List<RemoteRepository> remoteRepos;
|
private List<RemoteRepository> remoteRepos;
|
||||||
|
|
||||||
public void execute() throws MojoExecutionException {
|
public void execute() throws MojoExecutionException {
|
||||||
|
if (executables == null)
|
||||||
|
return;
|
||||||
|
|
||||||
PluginUtils.checkResolvedArtifacts(project, true);
|
PluginUtils.checkResolvedArtifacts(project, true);
|
||||||
|
|
||||||
File binDir = new File(project.getBuild().getDirectory(), PluginConstants.SANDBOX + "/bin");
|
File binDir = new File(project.getBuild().getDirectory(), PluginConstants.SANDBOX + "/bin");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user