Moved project to SpringSource.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
.springBeans
|
||||
target/
|
||||
@@ -1,13 +1,14 @@
|
||||
<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>org.synyx.hera.core</artifactId>
|
||||
|
||||
<artifactId>spring-plugin-core</artifactId>
|
||||
|
||||
<name>Hera Core</name>
|
||||
<name>Spring Plugin Core</name>
|
||||
<description>Core plugin infrastructure</description>
|
||||
|
||||
<parent>
|
||||
<artifactId>org.synyx.hera</artifactId>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<groupId>org.springframework.plugin</groupId>
|
||||
<artifactId>spring-plugin</artifactId>
|
||||
<version>0.8.0.BUILD-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<chapter>
|
||||
<title>Core</title>
|
||||
|
||||
@@ -80,13 +82,13 @@ public class HostImpl implements Host {
|
||||
<title>Collecting Spring beans dynamically</title>
|
||||
|
||||
<para>With the <classname>BeanListBeanFactory</classname>
|
||||
<productname>Hera</productname> provides a Spring container extension,
|
||||
that allows to lookup beans of a given type in the current
|
||||
<productname>Spring Plugin</productname> provides a Spring container
|
||||
extension, that allows to lookup beans of a given type in the current
|
||||
<interfacename>ApplicationContext</interfacename> and register them as
|
||||
list under a given name. Take a look at the configuration now:</para>
|
||||
|
||||
<example>
|
||||
<title>Host and plugin configuration with Hera support</title>
|
||||
<title>Host and plugin configuration with Spring Plugin support</title>
|
||||
|
||||
<programlisting lang="" language="xml"><import resource="classpath*:com/acme/**/plugins.xml" />
|
||||
|
||||
@@ -94,7 +96,7 @@ public class HostImpl implements Host {
|
||||
<property name="plugins" ref="plugins" />
|
||||
</bean>
|
||||
|
||||
<bean class="org.synyx.hera.plugin.support.BeanListBeanFactory">
|
||||
<bean class="org.springframework.plugin.support.BeanListBeanFactory">
|
||||
<property name="lists">
|
||||
<map>
|
||||
<entry key="plugins" value="org.acme.MyPluginInterface" />
|
||||
@@ -141,10 +143,10 @@ public class HostImpl implements Host {
|
||||
<title>Host configuration using the plugin namespace</title>
|
||||
|
||||
<programlisting language="xml"><beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:plugin="http://schemas.synyx.org/hera"
|
||||
xmlns:plugin="http://www.springframework.org/schema/plugin"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://schemas.synyx.org/hera http://schemas.synyx.org/hera/hera.xsd">
|
||||
http://www.springframework.org/schema/plugin http://www.springframework.org/schema/plugin/spring-plugin.xsd">
|
||||
|
||||
<import resource="classpath*:com/acme/**/plugins.xml" />
|
||||
|
||||
@@ -237,7 +239,7 @@ public interface ProductProcessor extends Plugin<ProductType> {
|
||||
<para>Using a <interfacename>List</interfacename> as plugin container as
|
||||
well as the <interfacename>Plugin</interfacename> interface you can now
|
||||
select plugins supporting the given delimiter. To not reimplement the
|
||||
lookup logic for common cases Hera provides a
|
||||
lookup logic for common cases Spring Plugin provides a
|
||||
<classname>PluginRegistry<T extends Plugin<S>,
|
||||
S></classname> interface that provides sophisticated methods to
|
||||
access certain plugins:</para>
|
||||
@@ -268,9 +270,9 @@ registry.getPluginsFor(ProductType.HARDWARE, new MyException("Damn!");</programl
|
||||
<title>Configuration and namespace</title>
|
||||
|
||||
<para>Similar to the <classname>BeanListBeanFactory</classname>
|
||||
described in <xref linkend="core.collecting-beans" /> Hera provides a
|
||||
<classname>PluginRegistryBeanFactory</classname> to automatically lookup
|
||||
beans of a dedicated type to be aggregated in a
|
||||
described in <xref linkend="core.collecting-beans" /> Spring Plugin
|
||||
provides a <classname>PluginRegistryBeanFactory</classname> to
|
||||
automatically lookup beans of a dedicated type to be aggregated in a
|
||||
<classname>PluginRegistry</classname>. Note that the type has to be
|
||||
assignable to <interfacename>Plugin</interfacename> to let the registry
|
||||
work as expected.</para>
|
||||
@@ -305,11 +307,11 @@ registry.getPluginsFor(ProductType.HARDWARE, new MyException("Damn!");</programl
|
||||
the <ulink url="???">section on this topic in the Spring reference
|
||||
documentation</ulink>.</para>
|
||||
|
||||
<para>Using the Hera namespace you will get a
|
||||
<para>Using the Spring Plugin namespace you will get a
|
||||
<interfacename>PluginRegistry</interfacename> instance that is capable
|
||||
of preserving the order defined by the mentioned means. Using Hera
|
||||
programatically use
|
||||
of preserving the order defined by the mentioned means. Using Spring
|
||||
Plugin programatically use
|
||||
<classname>OrderAwarePluginRegistry</classname>.</para>
|
||||
</simplesect>
|
||||
</section>
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
/**
|
||||
* Extension of {@link PluginRegistry} with additional methods to modify the registry.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -142,7 +142,7 @@ public class OrderAwarePluginRegistry<T extends Plugin<S>, S> extends SimplePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.SimplePluginRegistry#addPlugin(org.synyx.hera.core.Plugin)
|
||||
* @see org.springframework.plugin.core.SimplePluginRegistry#addPlugin(org.springframework.plugin.core.Plugin)
|
||||
*/
|
||||
@Override
|
||||
public OrderAwarePluginRegistry<T, S> addPlugin(T plugin) {
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
/**
|
||||
* Central interface for plugins for the system. This interface is meant to be extended by concrete plugin interfaces.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -66,7 +66,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.MutablePluginRegistry#addPlugin(org.synyx.hera.core.Plugin)
|
||||
* @see org.springframework.plugin.core.MutablePluginRegistry#addPlugin(org.springframework.plugin.core.Plugin)
|
||||
*/
|
||||
public SimplePluginRegistry<T, S> addPlugin(T plugin) {
|
||||
|
||||
@@ -79,7 +79,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.MutablePluginRegistry#removePlugin(org.synyx.hera.core.Plugin)
|
||||
* @see org.springframework.plugin.core.MutablePluginRegistry#removePlugin(org.springframework.plugin.core.Plugin)
|
||||
*/
|
||||
public boolean removePlugin(T plugin) {
|
||||
|
||||
@@ -88,7 +88,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginFor(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginFor(java.lang.Object)
|
||||
*/
|
||||
public T getPluginFor(S delimiter) {
|
||||
|
||||
@@ -103,7 +103,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginsFor(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginsFor(java.lang.Object)
|
||||
*/
|
||||
public List<T> getPluginsFor(S delimiter) {
|
||||
|
||||
@@ -120,7 +120,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginFor(java.lang.Object, java.lang.Exception)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginFor(java.lang.Object, java.lang.Exception)
|
||||
*/
|
||||
public <E extends Exception> T getPluginFor(S delimiter, E ex) throws E {
|
||||
|
||||
@@ -135,7 +135,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginsFor(java.lang.Object, java.lang.Exception)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginsFor(java.lang.Object, java.lang.Exception)
|
||||
*/
|
||||
public <E extends Exception> List<T> getPluginsFor(S delimiter, E ex) throws E {
|
||||
|
||||
@@ -150,7 +150,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginFor(java.lang.Object, org.synyx.hera.core.Plugin)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginFor(java.lang.Object, org.springframework.plugin.core.Plugin)
|
||||
*/
|
||||
public T getPluginFor(S delimiter, T plugin) {
|
||||
|
||||
@@ -161,7 +161,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#getPluginsFor(java.lang.Object, java.util.List)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#getPluginsFor(java.lang.Object, java.util.List)
|
||||
*/
|
||||
public List<T> getPluginsFor(S delimiter, List<? extends T> plugins) {
|
||||
|
||||
@@ -172,7 +172,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#countPlugins()
|
||||
* @see org.springframework.plugin.core.PluginRegistry#countPlugins()
|
||||
*/
|
||||
public int countPlugins() {
|
||||
|
||||
@@ -192,7 +192,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#contains(org.synyx.hera.core.Plugin)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#contains(org.springframework.plugin.core.Plugin)
|
||||
*/
|
||||
public boolean contains(T plugin) {
|
||||
return this.plugins.contains(plugin);
|
||||
@@ -200,7 +200,7 @@ public class SimplePluginRegistry<T extends Plugin<S>, S> implements MutablePlug
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.PluginRegistry#hasPluginFor(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.PluginRegistry#hasPluginFor(java.lang.Object)
|
||||
*/
|
||||
public boolean hasPluginFor(S delimter) {
|
||||
return null != getPluginFor(delimter);
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.config;
|
||||
package org.springframework.plugin.core.config;
|
||||
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
@@ -28,7 +28,7 @@ import org.w3c.dom.Element;
|
||||
*/
|
||||
public class PluginListDefinitionParser extends AbstractBeanDefinitionParser {
|
||||
|
||||
protected static final String PACKAGE = "org.synyx.hera.core.support.";
|
||||
protected static final String PACKAGE = "org.springframework.plugin.core.support.";
|
||||
|
||||
/**
|
||||
* Returns the name of the {@link org.springframework.beans.factory.config.BeanFactoryPostProcessor} to be registered.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.config;
|
||||
package org.springframework.plugin.core.config;
|
||||
|
||||
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.config;
|
||||
package org.springframework.plugin.core.config;
|
||||
|
||||
|
||||
/**
|
||||
@@ -26,7 +26,7 @@ public class PluginRegistryDefinitionParser extends PluginListDefinitionParser {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.config.PluginListDefinitionParser#getPostProcessorName()
|
||||
* @see org.springframework.plugin.core.config.PluginListDefinitionParser#getPostProcessorName()
|
||||
*/
|
||||
@Override
|
||||
protected String getPostProcessorName() {
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* This package contains configuration support classes to ease registry configuration with Spring namespaces.
|
||||
*/
|
||||
package org.synyx.hera.core.config;
|
||||
package org.springframework.plugin.core.config;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* This package contains the core plugin API. It allows other modules implementing components that extend functionality defined by a plugin interface. Plugin clients can be equipped with plugin implementations.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.support;
|
||||
package org.springframework.plugin.core.support;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -13,7 +13,7 @@
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
package org.synyx.hera.core.support;
|
||||
package org.springframework.plugin.core.support;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@@ -13,12 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.support;
|
||||
package org.springframework.plugin.core.support;
|
||||
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.synyx.hera.core.OrderAwarePluginRegistry;
|
||||
import org.synyx.hera.core.Plugin;
|
||||
import org.synyx.hera.core.PluginRegistry;
|
||||
import org.springframework.plugin.core.OrderAwarePluginRegistry;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
|
||||
/**
|
||||
* {@link FactoryBean} to create {@link PluginRegistry} instances. Wraps a {@link BeanListFactoryBean}.
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* This package contains support classes to create bean lists or plugin registry instances out of beans implementing a certain interface.
|
||||
*/
|
||||
package org.synyx.hera.core.support;
|
||||
package org.springframework.plugin.core.support;
|
||||
|
||||
@@ -1 +1 @@
|
||||
http\://schemas.synyx.org/hera=org.synyx.hera.core.config.PluginNamespaceHandler
|
||||
http\://www.springframework.org/schema/plugin=org.springframework.plugin.core.config.PluginNamespaceHandler
|
||||
@@ -1 +1 @@
|
||||
http\://schemas.synyx.org/hera/hera.xsd=org/synyx/hera/core/config/hera.xsd
|
||||
http\://www.springframework.org/schema/plugin/spring-plugin.xsd=org/springframework/plugin/core/config/spring-plugin.xsd
|
||||
@@ -1,4 +1,4 @@
|
||||
# Tooling related information for the Hera namespace
|
||||
http\://schemas.synyx.org/hera@name=Hera Namespace
|
||||
http\://schemas.synyx.org/hera@prefix=hera
|
||||
http\://schemas.synyx.org/hera@icon=org/springframework/beans/factory/xml/spring-beans.gif
|
||||
# Tooling related information for the Spring Plugin namespace
|
||||
http\://www.springframework.org/schema/plugin@name=Spring Plugin Namespace
|
||||
http\://www.springframework.org/schema/plugin@prefix=plugin
|
||||
http\://www.springframework.org/schema/plugin@icon=org/springframework/beans/factory/xml/spring-beans.gif
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<xsd:schema xmlns="http://schemas.synyx.org/hera" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
<xsd:schema xmlns="http://www.springframework.org/schema/plugin" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
xmlns:tool="http://www.springframework.org/schema/tool"
|
||||
targetNamespace="http://schemas.synyx.org/hera" elementFormDefault="qualified"
|
||||
targetNamespace="http://www.springframework.org/schema/plugin" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:import namespace="http://www.springframework.org/schema/tool" />
|
||||
@@ -13,12 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.plugin.core.MutablePluginRegistry;
|
||||
|
||||
/**
|
||||
* Unit test for implementations of {@link MutablePluginRegistry}.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
@@ -25,6 +25,10 @@ import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.plugin.core.MutablePluginRegistry;
|
||||
import org.springframework.plugin.core.OrderAwarePluginRegistry;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
|
||||
/**
|
||||
* Unit test for {@link OrderAwarePluginRegistry} that especially concentrates on testing ordering functionality.
|
||||
@@ -104,7 +108,7 @@ public class OrderAwarePluginRegistryUnitTest extends SimplePluginRegistryUnitTe
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
|
||||
@@ -118,7 +122,7 @@ public class OrderAwarePluginRegistryUnitTest extends SimplePluginRegistryUnitTe
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
@@ -13,7 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
import org.springframework.plugin.core.SimplePluginRegistry;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
@@ -22,7 +22,7 @@ public class SamplePluginImplementation implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
return "FOO".equals(delimiter);
|
||||
@@ -30,7 +30,7 @@ public class SamplePluginImplementation implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.SamplePlugin#pluginMethod()
|
||||
* @see org.springframework.plugin.core.SamplePlugin#pluginMethod()
|
||||
*/
|
||||
public void pluginMethod() {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.synyx.hera.core;
|
||||
package org.springframework.plugin.core;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
@@ -24,6 +24,9 @@ import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.plugin.core.MutablePluginRegistry;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
import org.springframework.plugin.core.SimplePluginRegistry;
|
||||
|
||||
/**
|
||||
* Unit test for {@link SimplePluginRegistry}.
|
||||
@@ -48,7 +51,7 @@ public class SimplePluginRegistryUnitTest extends AbstractMutablePluginRegistryU
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.AbstractMutablePluginRegistryUnitTest#getRegistry()
|
||||
* @see org.springframework.plugin.core.AbstractMutablePluginRegistryUnitTest#getRegistry()
|
||||
*/
|
||||
@Override
|
||||
protected MutablePluginRegistry<SamplePlugin, String> getRegistry() {
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.config;
|
||||
package org.springframework.plugin.core.config;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -23,11 +23,11 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
import org.springframework.plugin.core.SamplePlugin;
|
||||
import org.springframework.plugin.core.SamplePluginHost;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.synyx.hera.core.PluginRegistry;
|
||||
import org.synyx.hera.core.SamplePlugin;
|
||||
import org.synyx.hera.core.SamplePluginHost;
|
||||
|
||||
/**
|
||||
* Integration test to simply check if the configuration gets parsed correctly.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.core.support;
|
||||
package org.springframework.plugin.core.support;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
@@ -29,6 +29,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.plugin.core.support.BeanListFactoryBean;
|
||||
|
||||
/**
|
||||
* Unit test for {@link BeanListFactoryBean}.
|
||||
@@ -1,23 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:plugin="http://schemas.synyx.org/hera"
|
||||
xmlns:plugin="http://www.springframework.org/schema/plugin"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://schemas.synyx.org/hera http://schemas.synyx.org/hera/hera.xsd">
|
||||
http://www.springframework.org/schema/plugin http://www.springframework.org/schema/plugin/spring-plugin.xsd">
|
||||
|
||||
<plugin:list id="foo" class="org.synyx.hera.core.SamplePlugin" />
|
||||
<plugin:list id="foo" class="org.springframework.plugin.core.SamplePlugin" />
|
||||
|
||||
<plugin:registry id="bar" class="org.synyx.hera.core.SamplePlugin" />
|
||||
<plugin:registry id="bar" class="org.springframework.plugin.core.SamplePlugin" />
|
||||
|
||||
<bean class="org.synyx.hera.core.SamplePluginImplementation" />
|
||||
<bean class="org.springframework.plugin.core.SamplePluginImplementation" />
|
||||
|
||||
<bean id="host" class="org.synyx.hera.core.SamplePluginHost">
|
||||
<bean id="host" class="org.springframework.plugin.core.SamplePluginHost">
|
||||
<property name="registry" ref="bar" />
|
||||
</bean>
|
||||
|
||||
<bean id="otherHost" class="org.synyx.hera.core.SamplePluginHost">
|
||||
<bean id="otherHost" class="org.springframework.plugin.core.SamplePluginHost">
|
||||
<property name="registry">
|
||||
<plugin:registry id="tadaa" class="org.synyx.hera.core.SamplePlugin" />
|
||||
<plugin:registry id="tadaa" class="org.springframework.plugin.core.SamplePlugin" />
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
|
||||
@@ -9,4 +9,4 @@ log4j.rootLogger=WARN, stdout
|
||||
|
||||
# Hibernate logging options (INFO only shows startup messages)
|
||||
log4j.logger.org.springframework=INFO
|
||||
log4j.logger.org.synyx.hera=DEBUG
|
||||
log4j.logger.org.springframework.plugin=DEBUG
|
||||
@@ -1,11 +1,11 @@
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-SymbolicName: ${project.artifactId}
|
||||
Bundle-Name: ${project.name}
|
||||
Bundle-Vendor: Synyx GmbH & Co. KG
|
||||
Bundle-Vendor: SpringSource, a division of VMware
|
||||
Bundle-Version: ${project.version}
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.6
|
||||
Export-Template:
|
||||
${project.artifactId}.*;version="${project.version}"
|
||||
org.springframework.plugin.core.*;version="${project.version}"
|
||||
Import-Template:
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+2.0.0)}",
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+1.0.0)}",
|
||||
org.w3c.dom.*;version="0.0.0"
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<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>org.synyx.hera</artifactId>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<groupId>org.springframework.plugin</groupId>
|
||||
<artifactId>spring-plugin</artifactId>
|
||||
<version>0.8.0.BUILD-SNAPSHOT</version>
|
||||
</parent>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<artifactId>org.synyx.hera.si</artifactId>
|
||||
<version>0.8.0.BUILD-SNAPSHOT</version>
|
||||
<name>Hera Spring Integration integration</name>
|
||||
|
||||
<artifactId>spring-plugin-si</artifactId>
|
||||
|
||||
<name>Spring Plugin Spring Integration integration</name>
|
||||
|
||||
<properties>
|
||||
<spring.integration.version>2.0.5.RELEASE</spring.integration.version>
|
||||
@@ -17,7 +18,7 @@
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>org.synyx.hera.core</artifactId>
|
||||
<artifactId>spring-plugin-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si;
|
||||
package org.springframework.plugin.integration;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
@@ -32,13 +32,13 @@ import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
|
||||
import org.springframework.plugin.core.OrderAwarePluginRegistry;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.synyx.hera.core.OrderAwarePluginRegistry;
|
||||
import org.synyx.hera.core.Plugin;
|
||||
import org.synyx.hera.core.PluginRegistry;
|
||||
|
||||
/**
|
||||
* Dynamic service activator that uses a {@link PluginRegistry} to delegate execution to one or more plugins matching a
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.config;
|
||||
package org.springframework.plugin.integration.config;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
@@ -21,9 +21,9 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.integration.config.xml.AbstractConsumerEndpointParser;
|
||||
import org.springframework.plugin.core.support.PluginRegistryFactoryBean;
|
||||
import org.springframework.plugin.integration.PluginRegistryAwareMessageHandler;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.synyx.hera.core.support.PluginRegistryFactoryBean;
|
||||
import org.synyx.hera.si.PluginRegistryAwareMessageHandler;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.config;
|
||||
package org.springframework.plugin.integration.config;
|
||||
|
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.NamespaceHandler;
|
||||
@@ -24,7 +24,7 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class HeraSpringIntegrationNamespaceHandler extends NamespaceHandlerSupport {
|
||||
public class SpringPluginSpringIntegrationNamespaceHandler extends NamespaceHandlerSupport {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
1
integration/src/main/resources/META-INF/spring.handlers
Normal file
1
integration/src/main/resources/META-INF/spring.handlers
Normal file
@@ -0,0 +1 @@
|
||||
http\://www.springframework.org/schema/plugin/integration=org.springframework.plugin.integration.config.SpringPluginSpringIntegrationNamespaceHandler
|
||||
1
integration/src/main/resources/META-INF/spring.schemas
Normal file
1
integration/src/main/resources/META-INF/spring.schemas
Normal file
@@ -0,0 +1 @@
|
||||
http\://www.springframework.org/schema/plugin/integration/spring-plugin-integration.xsd=org/springframework/plugin/integration/config/spring-plugin-integration.xsd
|
||||
4
integration/src/main/resources/META-INF/spring.tooling
Normal file
4
integration/src/main/resources/META-INF/spring.tooling
Normal file
@@ -0,0 +1,4 @@
|
||||
# Tooling related information for the Spring Plugin Integration namespace
|
||||
http\://www.springframework.org/schema/plugin/integration@name=Spring Plugin Spring Integration Namespace
|
||||
http\://www.springframework.org/schema/plugin/integration@prefix=int-plugin
|
||||
http\://www.springframework.org/schema/plugin/integration@icon=org/springframework/beans/factory/xml/spring-beans.gif
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<xsd:schema xmlns="http://schemas.synyx.org/hera/si" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
<xsd:schema xmlns="http://www.springframework.org/schema/plugin/integration" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
xmlns:tool="http://www.springframework.org/schema/tool"
|
||||
targetNamespace="http://schemas.synyx.org/hera/si" elementFormDefault="qualified"
|
||||
targetNamespace="http://www.springframework.org/schema/plugin/integration" elementFormDefault="qualified"
|
||||
attributeFormDefault="unqualified">
|
||||
|
||||
<xsd:import namespace="http://www.springframework.org/schema/tool" />
|
||||
@@ -15,7 +15,7 @@
|
||||
allows dynamic invocation of Spring beans implementing the plugin
|
||||
interface defined in "plugin-type". We will dynamically pick up all
|
||||
Spring beans implementing that interface and create a PluginRegistry
|
||||
of those. See org.synyx.hera.si.PluginRegistryAwareMessageHandler for
|
||||
of those. See org.springframework.plugin.integration.PluginRegistryAwareMessageHandler for
|
||||
details.
|
||||
</xsd:documentation>
|
||||
</xsd:appinfo>
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si;
|
||||
package org.springframework.plugin.integration;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
@@ -32,11 +32,12 @@ import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageChannel;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.synyx.hera.core.OrderAwarePluginRegistry;
|
||||
import org.synyx.hera.core.PluginRegistry;
|
||||
import org.synyx.hera.si.sample.FirstSamplePluginImpl;
|
||||
import org.synyx.hera.si.sample.SamplePlugin;
|
||||
import org.synyx.hera.si.sample.SecondSamplePluginImpl;
|
||||
import org.springframework.plugin.core.OrderAwarePluginRegistry;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
import org.springframework.plugin.integration.PluginRegistryAwareMessageHandler;
|
||||
import org.springframework.plugin.integration.sample.FirstSamplePluginImpl;
|
||||
import org.springframework.plugin.integration.sample.SamplePlugin;
|
||||
import org.springframework.plugin.integration.sample.SecondSamplePluginImpl;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link PluginRegistryAwareMessageHandler}.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.config;
|
||||
package org.springframework.plugin.integration.config;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.sample;
|
||||
package org.springframework.plugin.integration.sample;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
@@ -22,7 +22,7 @@ public class FirstSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
return "FOO".equals(delimiter);
|
||||
@@ -30,7 +30,7 @@ public class FirstSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.si.sample.SamplePlugin#myBusinessMethod()
|
||||
* @see org.springframework.plugin.integration.sample.SamplePlugin#myBusinessMethod()
|
||||
*/
|
||||
public String myBusinessMethod(String message) {
|
||||
System.out.println("First plugin invoked! " + message);
|
||||
@@ -13,9 +13,9 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.sample;
|
||||
package org.springframework.plugin.integration.sample;
|
||||
|
||||
import org.synyx.hera.core.Plugin;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.sample;
|
||||
package org.springframework.plugin.integration.sample;
|
||||
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class SecondSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
return "BAR".equals(delimiter);
|
||||
@@ -35,7 +35,7 @@ public class SecondSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.si.sample.SamplePlugin#myBusinessMethod()
|
||||
* @see org.springframework.plugin.integration.sample.SamplePlugin#myBusinessMethod()
|
||||
*/
|
||||
public String myBusinessMethod(String message) {
|
||||
System.out.println("Second plugin invoked! " + message);
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.si.sample;
|
||||
package org.springframework.plugin.integration.sample;
|
||||
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
@@ -27,7 +27,7 @@ class ThirdSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(String delimiter) {
|
||||
return "BAR".equals(delimiter);
|
||||
@@ -35,7 +35,7 @@ class ThirdSamplePluginImpl implements SamplePlugin {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.si.sample.SamplePlugin#myBusinessMethod()
|
||||
* @see org.springframework.plugin.integration.sample.SamplePlugin#myBusinessMethod()
|
||||
*/
|
||||
public String myBusinessMethod(String message) {
|
||||
System.out.println("Second plugin invoked! " + message);
|
||||
@@ -2,18 +2,18 @@
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:int="http://www.springframework.org/schema/integration"
|
||||
xmlns:int-hera="http://schemas.synyx.org/hera/si"
|
||||
xmlns:int-plugin="http://www.springframework.org/schema/plugin/integration"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.0.xsd
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://schemas.synyx.org/hera/si http://schemas.synyx.org/hera/si/hera-si.xsd">
|
||||
http://www.springframework.org/schema/plugin/integration http://www.springframework.org/schema/plugin/integration/spring-plugin-integration.xsd">
|
||||
|
||||
<bean class="org.synyx.hera.si.sample.FirstSamplePluginImpl" />
|
||||
<bean class="org.synyx.hera.si.sample.SecondSamplePluginImpl" />
|
||||
<bean class="org.springframework.plugin.integration.sample.FirstSamplePluginImpl" />
|
||||
<bean class="org.springframework.plugin.integration.sample.SecondSamplePluginImpl" />
|
||||
|
||||
<int-hera:dynamic-service-activator
|
||||
<int-plugin:dynamic-service-activator
|
||||
input-channel="sampleChannel"
|
||||
output-channel="foo"
|
||||
plugin-type="org.synyx.hera.si.sample.SamplePlugin"
|
||||
plugin-type="org.springframework.plugin.integration.sample.SamplePlugin"
|
||||
method="myBusinessMethod"
|
||||
delimiter="payload"
|
||||
invocation-arguments="payload" />
|
||||
@@ -1,14 +1,14 @@
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-SymbolicName: ${project.artifactId}
|
||||
Bundle-Name: ${project.name}
|
||||
Bundle-Vendor: Synyx GmbH & Co. KG
|
||||
Bundle-Vendor: SpringSource, a division of VMware
|
||||
Bundle-Version: ${project.version}
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.6
|
||||
Export-Template:
|
||||
${project.artifactId}.*;version="${project.version}"
|
||||
org.springframework.plugin.integration.*;version="${project.version}"
|
||||
Import-Template:
|
||||
org.apache.commons.logging.*;version="[1.1.0,2.0.0)",
|
||||
org.synyx.hera.core.*;version="${project.version:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+2.0.0)}",
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.integration.*;version="${spring.integration.version:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.plugin.core.*;version="${project.version:[=.=.=.=,+1.0.0)}",
|
||||
org.w3c.dom.*;version="0"
|
||||
@@ -1,20 +1,20 @@
|
||||
<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>org.synyx.hera.metadata</artifactId>
|
||||
<artifactId>spring-plugin-metadata</artifactId>
|
||||
|
||||
<name>Hera Metadata Extension</name>
|
||||
<name>Spring Plugin Metadata Extension</name>
|
||||
<description>Extension package for metadata based plugins</description>
|
||||
|
||||
<parent>
|
||||
<artifactId>org.synyx.hera</artifactId>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<groupId>org.springframework.plugin</groupId>
|
||||
<artifactId>spring-plugin</artifactId>
|
||||
<version>0.8.0.BUILD-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<artifactId>org.synyx.hera.core</artifactId>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>spring-plugin-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<chapter id="metadata">
|
||||
<title>Metadata</title>
|
||||
|
||||
<para>For plugin architectures it is essential to capture metadata
|
||||
information about plugin instances. A very core set of metadata (name,
|
||||
version) also serves as identifier of a plugin and thus can be used. The
|
||||
Hera metadata module provides support to capture metadata.</para>
|
||||
Spring Plugin metadata module provides support to capture metadata.</para>
|
||||
|
||||
<section id="metadata.core-concepts">
|
||||
<title>Core concepts</title>
|
||||
@@ -34,11 +36,11 @@ public interface MetadataProvider {
|
||||
<para>The <interfacename>PluginMetadata</interfacename> interface captures
|
||||
the required properties to define an identifyable plugin. This means, that
|
||||
implementations should ensure uniqueness through these two properties.
|
||||
With <classname>SimplePluginMetadata</classname> Hera provides a Java bean
|
||||
style class to capture metadata. Of course applications can and should
|
||||
provide extended metadata information according to their needs. The very
|
||||
narrow interface is only targeted at integrating the metadata concept with
|
||||
the <classname>PluginRegistry</classname> (see <xref
|
||||
With <classname>SimplePluginMetadata</classname> Spring Plugin provides a
|
||||
Java bean style class to capture metadata. Of course applications can and
|
||||
should provide extended metadata information according to their needs. The
|
||||
very narrow interface is only targeted at integrating the metadata concept
|
||||
with the <classname>PluginRegistry</classname> (see <xref
|
||||
linkend="core.plugin-registry" />) without bothering developers with too
|
||||
much information required.</para>
|
||||
|
||||
@@ -52,4 +54,4 @@ public interface MetadataProvider {
|
||||
could store the metadata in user specific configuration files and use this
|
||||
to select a distinct plugin specific to a given user.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path:
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.metadata;
|
||||
package org.springframework.plugin.metadata;
|
||||
|
||||
import org.synyx.hera.core.Plugin;
|
||||
import org.synyx.hera.core.PluginRegistry;
|
||||
import org.springframework.plugin.core.Plugin;
|
||||
import org.springframework.plugin.core.PluginRegistry;
|
||||
|
||||
/**
|
||||
* Abstract base class for plugins based on {@link PluginMetadata}. Plugins based on this class can be selected from the
|
||||
@@ -41,7 +41,7 @@ public abstract class AbstractMetadataBasedPlugin implements Plugin<PluginMetada
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.core.Plugin#supports(java.lang.Object)
|
||||
* @see org.springframework.plugin.core.Plugin#supports(java.lang.Object)
|
||||
*/
|
||||
public boolean supports(PluginMetadata delimiter) {
|
||||
return getMetadata().equals(delimiter);
|
||||
@@ -49,7 +49,7 @@ public abstract class AbstractMetadataBasedPlugin implements Plugin<PluginMetada
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.metadata.MetadataProvider#getMetadata()
|
||||
* @see org.springframework.plugin.metadata.MetadataProvider#getMetadata()
|
||||
*/
|
||||
public PluginMetadata getMetadata() {
|
||||
return metadata;
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.synyx.hera.metadata;
|
||||
package org.springframework.plugin.metadata;
|
||||
|
||||
/**
|
||||
* Interface for plugins providing metadata information. Usually the plugins will implement this interface themselves.
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.synyx.hera.metadata;
|
||||
package org.springframework.plugin.metadata;
|
||||
|
||||
/**
|
||||
* Basic interface to define a set of metadata information for plugins.
|
||||
@@ -14,7 +14,7 @@
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package org.synyx.hera.metadata;
|
||||
package org.springframework.plugin.metadata;
|
||||
|
||||
import static org.springframework.util.ObjectUtils.*;
|
||||
|
||||
@@ -47,7 +47,7 @@ public class SimplePluginMetadata implements PluginMetadata {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.metadata.PluginMetadata#getName()
|
||||
* @see org.springframework.plugin.metadata.PluginMetadata#getName()
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
@@ -55,7 +55,7 @@ public class SimplePluginMetadata implements PluginMetadata {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.synyx.hera.metadata.PluginMetadata#getVersion()
|
||||
* @see org.springframework.plugin.metadata.PluginMetadata#getVersion()
|
||||
*/
|
||||
public String getVersion() {
|
||||
return version;
|
||||
@@ -1,11 +1,11 @@
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-SymbolicName: ${project.artifactId}
|
||||
Bundle-Name: ${project.name}
|
||||
Bundle-Vendor: Synyx GmbH & Co. KG
|
||||
Bundle-Vendor: SpringSource, a division of VMware
|
||||
Bundle-Version: ${project.version}
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.6
|
||||
Export-Template:
|
||||
${project.artifactId}.*;version="${project.version}"
|
||||
org.springframework.plugin.metadata.*;version="${project.version}"
|
||||
Import-Template:
|
||||
org.synyx.hera.core.*;version="${project.version:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+2.0.0)}"
|
||||
org.springframework.*;version="${spring.version:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.plugin.core.*;version="${project.version:[=.=.=.=,+1.0.0)}"
|
||||
|
||||
98
pom.xml
98
pom.xml
@@ -1,18 +1,18 @@
|
||||
<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>
|
||||
<groupId>org.synyx.hera</groupId>
|
||||
<artifactId>org.synyx.hera</artifactId>
|
||||
<groupId>org.springframework.plugin</groupId>
|
||||
<artifactId>spring-plugin</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<name>Hera</name>
|
||||
<name>Spring Plugin</name>
|
||||
<version>0.8.0.BUILD-SNAPSHOT</version>
|
||||
<description>Simple plugin infrastructure</description>
|
||||
|
||||
<organization>
|
||||
<name>Synyx GmbH & Co. KG</name>
|
||||
<url>http://www.synyx.org</url>
|
||||
<name>SpringSource, a division of VMware</name>
|
||||
<url>http://www.springsource.org</url>
|
||||
</organization>
|
||||
<inceptionYear>2008</inceptionYear>
|
||||
<url>http://hera.synyx.org</url>
|
||||
<url>https://github.com/SpringSource/spring-plugin</url>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
@@ -40,11 +40,11 @@
|
||||
<modules>
|
||||
<module>core</module>
|
||||
<module>metadata</module>
|
||||
<module>si</module>
|
||||
<module>integration</module>
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
<spring.version>3.0.6.RELEASE</spring.version>
|
||||
<spring.version>3.0.7.RELEASE</spring.version>
|
||||
</properties>
|
||||
|
||||
<developers>
|
||||
@@ -82,7 +82,6 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
@@ -149,41 +148,6 @@
|
||||
<htmlStylesheet>resources/styles.css</htmlStylesheet>
|
||||
<chunkedOutput>true</chunkedOutput>
|
||||
|
||||
<fonts>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>normal</style>
|
||||
<weight>normal</weight>
|
||||
<embedFile>${basedir}/src/doc/layout/pdf/fonts/SteLiR__.ttf</embedFile>
|
||||
<metricsFile>${basedir}/src/doc/layout/pdf/fonts/SteLiR__.xml</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>italic</style>
|
||||
<weight>normal</weight>
|
||||
<embedFile>${basedir}/src/doc/layout/pdf/fonts/SteLiI__.ttf</embedFile>
|
||||
<metricsFile>${basedir}/src/doc/layout/pdf/fonts/SteLiI__.xml</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>normal</style>
|
||||
<weight>bold</weight>
|
||||
<embedFile>${basedir}/src/doc/layout/pdf/fonts/SteLiB__.ttf</embedFile>
|
||||
<metricsFile>${basedir}/src/doc/layout/pdf/fonts/SteLiB__.xml</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>italic</style>
|
||||
<weight>bold</weight>
|
||||
<embedFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiBI_.ttf
|
||||
</embedFile>
|
||||
<metricsFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiBI_.xml
|
||||
</metricsFile>
|
||||
</font>
|
||||
</fonts>
|
||||
|
||||
<preProcess>
|
||||
<copy todir="${basedir}/target/doc/images">
|
||||
<!-- Copy layout images -->
|
||||
@@ -327,48 +291,22 @@
|
||||
</reporting>
|
||||
|
||||
<scm>
|
||||
<url>http://svn.synyx.org/synyx/opensource/hera</url>
|
||||
<connection>scm:svn:http://svn.synyx.org/synyx/opensource/hera</connection>
|
||||
<developerConnection>scm:svn:https://svn.synyx.de/svn/synyx/opensource/hera</developerConnection>
|
||||
<url>https://github.com/SpringSource/spring-plugin</url>
|
||||
</scm>
|
||||
|
||||
<ciManagement>
|
||||
<system>Hudson</system>
|
||||
<system>Bamboo</system>
|
||||
</ciManagement>
|
||||
|
||||
<issueManagement>
|
||||
<system>Redmine</system>
|
||||
<url>http://hera.synyx.org</url>
|
||||
<system>Github</system>
|
||||
<url>https://github.com/SpringSource/spring-plugin/issues</url>
|
||||
</issueManagement>
|
||||
|
||||
<distributionManagement>
|
||||
<site>
|
||||
<id>static.synyx.org</id>
|
||||
<url>scp://static.synyx.org/home/public/public_html/hera/site</url>
|
||||
</site>
|
||||
<repository>
|
||||
<id>sonatype</id>
|
||||
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>sonatype</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>com.springsource.repository.bundles.release</id>
|
||||
<name>SpringSource Enterprise Bundle Repository - Release Bundles</name>
|
||||
<url>http://repository.springsource.com/maven/bundles/release</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>com.springsource.repository.bundles.external</id>
|
||||
<name>SpringSource Enterprise Bundle Repository - External Bundles</name>
|
||||
<url>http://repository.springsource.com/maven/bundles/external</url>
|
||||
<id>spring-release</id>
|
||||
<url>http://repo.springsource.org/libs-release</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
@@ -377,9 +315,11 @@
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>com.springsource.repository.bundles.release</id>
|
||||
<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Release Bundles</name>
|
||||
<url>http://repository.springsource.com/maven/bundles/release</url>
|
||||
<id>spring-plugins</id>
|
||||
<url>http://repo.springsource.org/plugins-release</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beansProjectDescription>
|
||||
<version>1</version>
|
||||
<pluginVersion><![CDATA[2.6.0.201104111100-PATCH]]></pluginVersion>
|
||||
<configSuffixes>
|
||||
<configSuffix><![CDATA[xml]]></configSuffix>
|
||||
</configSuffixes>
|
||||
<enableImports><![CDATA[false]]></enableImports>
|
||||
<configs>
|
||||
</configs>
|
||||
<configSets>
|
||||
</configSets>
|
||||
</beansProjectDescription>
|
||||
@@ -1 +0,0 @@
|
||||
http\://schemas.synyx.org/hera/si=org.synyx.hera.si.config.HeraSpringIntegrationNamespaceHandler
|
||||
@@ -1 +0,0 @@
|
||||
http\://schemas.synyx.org/hera/si/hera-si.xsd=org/synyx/hera/si/config/hera-si.xsd
|
||||
@@ -1,4 +0,0 @@
|
||||
# Tooling related information for the Hera namespace
|
||||
http\://schemas.synyx.org/hera/si@name=Hera Spring Integration Namespace
|
||||
http\://schemas.synyx.org/hera/si@prefix=int-hera
|
||||
http\://schemas.synyx.org/hera/si@icon=org/springframework/beans/factory/xml/spring-beans.gif
|
||||
@@ -43,9 +43,6 @@
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell text-align="center">
|
||||
<fo:block>
|
||||
<fo:external-graphic src="file:target/doc/images/synyx-logo.tiff" width="70mm" height="auto" content-width="scale-to-fit" content-height="scale-to-fit" />
|
||||
</fo:block>
|
||||
<fo:block font-size="12pt" padding="10mm">
|
||||
<xsl:for-each select="bookinfo/authorgroup/author">
|
||||
<xsl:if test="position() > 1">
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -1,13 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE book [
|
||||
<!ENTITY core SYSTEM "../../core/src/doc/core.xml">
|
||||
<!ENTITY metadata SYSTEM "../../metadata/src/doc/metadata.xml">
|
||||
]>
|
||||
<!-- PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" -->
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<book>
|
||||
<bookinfo>
|
||||
<title>Hera</title>
|
||||
<title>Spring Plugin</title>
|
||||
|
||||
<subtitle>The smallest plugin system ever</subtitle>
|
||||
|
||||
@@ -18,25 +14,23 @@
|
||||
<surname>Gierke</surname>
|
||||
|
||||
<affiliation>
|
||||
<jobtitle>Software Architect</jobtitle>
|
||||
<jobtitle>Senior Member Technical Staff</jobtitle>
|
||||
|
||||
<orgname>Synyx GmbH & Co. KG</orgname>
|
||||
<orgname>SpringSource, a division of VMware</orgname>
|
||||
</affiliation>
|
||||
|
||||
<email>gierke@synyx.de</email>
|
||||
|
||||
<address>Karlstraße 68, 76137 Karsruhe, Germany</address>
|
||||
<email>ogierke (at) vmware.com</email>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<releaseinfo>V0.4</releaseinfo>
|
||||
<releaseinfo>V0.8</releaseinfo>
|
||||
|
||||
<pubdate>23.09.2009</pubdate>
|
||||
|
||||
<copyright>
|
||||
<year>2009</year>
|
||||
<year>2008-2012</year>
|
||||
|
||||
<holder>Synyx GmbH & Co. KG</holder>
|
||||
<holder>The original authors</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
@@ -87,6 +81,18 @@
|
||||
|
||||
<revremark>Added section on plugin ordering</revremark>
|
||||
</revision>
|
||||
|
||||
<revision>
|
||||
<date>21.02.2012</date>
|
||||
|
||||
<author>
|
||||
<firstname>Oliver</firstname>
|
||||
|
||||
<surname>Gierke</surname>
|
||||
</author>
|
||||
|
||||
<revremark>Move project to SpringSource</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</bookinfo>
|
||||
|
||||
@@ -103,13 +109,14 @@
|
||||
<glossterm><abbrev>OSGi</abbrev></glossterm> introduces a lot of
|
||||
complexity to projects.</para>
|
||||
|
||||
<para>Hera provides a more pragmatic approach to plugin development by
|
||||
providing the core flexibility of having plugin implementations
|
||||
extending a core system's functionality but of course not delivering
|
||||
core <abbrev>OSGi</abbrev> features like dynamic class loading or
|
||||
runtime installation and deployment of plugins. Although Hera thus is
|
||||
not nearly as powerful as <abbrev>OSGi</abbrev>, it servers little man's
|
||||
requirements to build a modular extensible application.</para>
|
||||
<para>Spring Plugin provides a more pragmatic approach to plugin
|
||||
development by providing the core flexibility of having plugin
|
||||
implementations extending a core system's functionality but of course
|
||||
not delivering core <abbrev>OSGi</abbrev> features like dynamic class
|
||||
loading or runtime installation and deployment of plugins. Although
|
||||
Spring Plugin thus is not nearly as powerful as <abbrev>OSGi</abbrev>,
|
||||
it servers poor man's requirements to build a modular extensible
|
||||
application.</para>
|
||||
</section>
|
||||
|
||||
<section id="preface.context">
|
||||
@@ -142,8 +149,8 @@
|
||||
</listitem>
|
||||
</itemizedlist></para>
|
||||
|
||||
<para>The last point actually is not essential although Hera gains a lot
|
||||
of momentum in collaborative use with Spring.</para>
|
||||
<para>The last point actually is not essential although Spring Plugin
|
||||
gains a lot of momentum in collaborative use with Spring.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
@@ -155,16 +162,18 @@
|
||||
<para>Spring is the defacto standard application framework for Java
|
||||
applications. Its consistent programming model, easy configuration and
|
||||
wide support for all kinds of third party libraries makes it the first
|
||||
class citizen of application frameworks. Hera tightly integrates into
|
||||
Spring's component model and extends the core container with some
|
||||
custom functionality.</para>
|
||||
class citizen of application frameworks. Spring Plugin tightly
|
||||
integrates into Spring's component model and extends the core
|
||||
container with some custom functionality.</para>
|
||||
</simplesect>
|
||||
</section>
|
||||
</preface>
|
||||
|
||||
&core;
|
||||
<xi:include href="../../core/src/doc/core.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
&metadata;
|
||||
<xi:include href="../../metadata/src/doc/metadata.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<glossary>
|
||||
<glossdiv>
|
||||
@@ -201,4 +210,4 @@
|
||||
</glossentry>
|
||||
</glossdiv>
|
||||
</glossary>
|
||||
</book>
|
||||
</book>
|
||||
Reference in New Issue
Block a user