[maven-release-plugin] copy for tag blueprint-maven-plugin-spi-1.0.0

git-svn-id: https://svn.apache.org/repos/asf/aries/tags/blueprint-maven-plugin-spi-1.0.0@1772031 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f7333e7
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,35 @@
+<?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>
+        <groupId>org.apache.aries</groupId>
+        <artifactId>parent</artifactId>
+        <version>2.0.1</version>
+        <relativePath>../../../parent/pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.aries.blueprint</groupId>
+    <artifactId>blueprint-maven-plugin-spi</artifactId>
+    <version>1.0.0</version>
+
+    <scm>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/aries/tags/blueprint-maven-plugin-spi-1.0.0</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/tags/blueprint-maven-plugin-spi-1.0.0</developerConnection>
+        <url>http://svn.apache.org/viewvc/aries/tags/blueprint-maven-plugin-spi-1.0.0</url>
+    </scm>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <target>1.7</target>
+                    <source>1.7</source>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <name>Apache Aries Blueprint Plugin Spi</name>
+</project>
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/Activation.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/Activation.java
new file mode 100644
index 0000000..0b5f7b1
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/Activation.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+/**
+ * Activation mode for bean
+ */
+public enum Activation {
+    EAGER,
+    LAZY;
+
+    @Override
+    public String toString() {
+        return name().toLowerCase();
+    }
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/AnnotationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/AnnotationHandler.java
new file mode 100644
index 0000000..4a7346a
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/AnnotationHandler.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Base annotation handler interface
+ */
+public interface AnnotationHandler<A extends Annotation> {
+    /**
+     * @return annotation class
+     */
+    Class<A> getAnnotation();
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java
new file mode 100644
index 0000000..a0690de
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+/**
+ * Annotation A allows for enriching blueprint XML or add new bean to context when bean class or factory method is marked with such annotation
+ */
+public interface BeanAnnotationHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * Handle annotation A on bean or factory method
+     * @param annotatedElement bean class or factory method
+     * @param id id of bean
+     * @param contextEnricher context enricher
+     */
+    void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java
new file mode 100644
index 0000000..60ff955
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+/**
+ * Interface allows for adding custom XML or adding attributes to bean element
+ * Instance of this interface is provided by plugin.
+ */
+public interface BeanEnricher {
+    /**
+     * Add attribute to bean element
+     * @param key name of attribute
+     * @param value value of attribute
+     */
+    void addAttribute(String key, String value);
+
+    /**
+     * Add custom XML inside bean element
+     * @param id identifier of writer instance (should be unique)
+     * @param blueprintWriter callback used to write custom XML
+     */
+    void addBeanContentWriter(String id, XmlWriter blueprintWriter);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanFinder.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanFinder.java
new file mode 100644
index 0000000..56f95dd
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanFinder.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Annotation A on class generates bean from this class
+ */
+public interface BeanFinder<A extends Annotation> extends AnnotationHandler<A> {
+
+    /**
+     * @return true if bean annotated with A should be generated in singleton scope, false otherwise
+     */
+    boolean isSingleton();
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintConfiguration.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintConfiguration.java
new file mode 100644
index 0000000..fdc8924
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintConfiguration.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Blueprint plugin configuration from pom.xml
+ */
+public interface BlueprintConfiguration {
+    /**
+     * @return values of namespaces parameter
+     */
+    Set<String> getNamespaces();
+
+    /**
+     * @return value of default activation parameter
+     */
+    Activation getDefaultActivation();
+
+    /**
+     * @return custom parameters
+     */
+    Map<String, String> getCustomParameters();
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java
new file mode 100644
index 0000000..82b0eba
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+/**
+ * Interface allows for adding custom XML or adding beans to bean search context
+ * Instance of this interface is provided by plugin.
+ */
+public interface ContextEnricher {
+    /**
+     * Add bean to search context (id should be unique)
+     * @param id name of bean
+     * @param clazz class of bean
+     */
+    void addBean(String id, Class<?> clazz);
+
+    /**
+     * Add custom XML to blueprint
+     * @param id identifier of writer instance (should be unique)
+     * @param blueprintWriter callback used to write custom XML
+     */
+    void addBlueprintContentWriter(String id, XmlWriter blueprintWriter);
+
+    /**
+     * @return plugin configuration from pom.xml
+     */
+    BlueprintConfiguration getBlueprintConfiguration();
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextInitializationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextInitializationHandler.java
new file mode 100644
index 0000000..55728a4
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextInitializationHandler.java
@@ -0,0 +1,12 @@
+package org.apache.aries.blueprint.plugin.spi;
+
+/**
+ * Handler called at the beginning of blueprint XML creation
+ */
+public interface ContextInitializationHandler {
+    /**
+     * Add custom XML or add bean to context
+     * @param contextEnricher context enricher
+     */
+    void initContext(ContextEnricher contextEnricher);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java
new file mode 100644
index 0000000..be51f32
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+/**
+ * Annotation A allows for enriching blueprint XML or add new bean to context when injecting bean, e. g. for generating in bean which could be injected
+ */
+public interface CustomDependencyAnnotationHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * @param annotatedElement field or setter method
+     * @param name name of bean to inject (null if bean name is not provided)
+     * @param contextEnricher context enricher
+     * @return name of generated bean which should be injected or null
+     */
+    String handleDependencyAnnotation(AnnotatedElement annotatedElement, String name, ContextEnricher contextEnricher);
+
+    /**
+     * @param clazz class of constructor parameter or setter parameter
+     * @param annotation instance of annotation A
+     * @param name name of bean to inject (null if bean name is not provided)
+     * @param contextEnricher context enricher
+     * @return name of generated bean which should be injected or null
+     */
+    String handleDependencyAnnotation(Class<?> clazz, A annotation, String name, ContextEnricher contextEnricher);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/FactoryMethodFinder.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/FactoryMethodFinder.java
new file mode 100644
index 0000000..d79d369
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/FactoryMethodFinder.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Annotation A on method marks this method as factory method
+ */
+public interface FactoryMethodFinder<A extends Annotation> extends AnnotationHandler<A> {
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/FieldAnnotationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/FieldAnnotationHandler.java
new file mode 100644
index 0000000..8a3022d
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/FieldAnnotationHandler.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.List;
+
+/**
+ * Annotation A on field could write custom XML in blueprint or add bean to blueprint context
+ */
+public interface FieldAnnotationHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * Handle annotations A on methods
+     * @param clazz class which contains annotated fields\
+     * @param fields fields annotated with annotation A
+     * @param contextEnricher context enricher
+     * @param beanEnricher bean enricher
+     */
+    void handleFieldAnnotation(Class<?> clazz, List<Field> fields, ContextEnricher contextEnricher, BeanEnricher beanEnricher);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/InjectLikeHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/InjectLikeHandler.java
new file mode 100644
index 0000000..ed2b196
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/InjectLikeHandler.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Annotation A on constructor, setter or field adds inject beans into annotated element.
+ */
+public interface InjectLikeHandler<A extends Annotation> extends AnnotationHandler<A> {
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java
new file mode 100644
index 0000000..6566b80
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * Annotation A on method could write custom XML in blueprint or add bean to blueprint context
+ */
+public interface MethodAnnotationHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * Handle annotations A on methods
+     * @param clazz class which contains annotated methods
+     * @param methods methods annotated with annotation A
+     * @param contextEnricher context enricher
+     * @param beanEnricher bean enricher
+     */
+    void handleMethodAnnotation(Class<?> clazz, List<Method> methods, ContextEnricher contextEnricher, BeanEnricher beanEnricher);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/NamedLikeHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/NamedLikeHandler.java
new file mode 100644
index 0000000..587009c
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/NamedLikeHandler.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+/**
+ * Annotation A on class provides id of bean in blueprint XML created from this class. Annotation could be also used to inject bean with provided id in constructor, setter or field.
+ */
+public interface NamedLikeHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * @param clazz depends on annotated element - if it is class then clazz is class itself, if setter then class of method argument and if field then class of field
+     * @param annotatedElement class, method, field annotated with A
+     * @return name of bean
+     */
+    String getName(Class clazz, AnnotatedElement annotatedElement);
+
+    /**
+     * Using to get name of bean based only on annotation when:
+     * - inject via constructor
+     * - inject via setter
+     * @param annotation instance of A annotation
+     * @return name of bean
+     */
+    String getName(Object annotation);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/QualifingAnnotationFinder.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/QualifingAnnotationFinder.java
new file mode 100644
index 0000000..235800c
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/QualifingAnnotationFinder.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Annotation A is qualifying another annotation, so such marked annotation could be used to inject beans which class are also annotated with this annotation
+ */
+public interface QualifingAnnotationFinder<A extends Annotation> extends AnnotationHandler<A> {
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/ValueInjectionHandler.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/ValueInjectionHandler.java
new file mode 100644
index 0000000..4d3968f
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/ValueInjectionHandler.java
@@ -0,0 +1,34 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin.spi;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Annotation on field, setter or constructor argument is used to generate argument or property elements with value attribute inside bean
+ */
+public interface ValueInjectionHandler<A extends Annotation> extends AnnotationHandler<A> {
+    /**
+     * Interpret annotation instance and create value of argument's or property's value attribute
+     *
+     * @param annotation instance of annotation A
+     * @return value of
+     */
+    String getValue(Object annotation);
+}
diff --git a/src/main/java/org/apache/aries/blueprint/plugin/spi/XmlWriter.java b/src/main/java/org/apache/aries/blueprint/plugin/spi/XmlWriter.java
new file mode 100644
index 0000000..534bf8c
--- /dev/null
+++ b/src/main/java/org/apache/aries/blueprint/plugin/spi/XmlWriter.java
@@ -0,0 +1,16 @@
+package org.apache.aries.blueprint.plugin.spi;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+/**
+ * Write custom part of blueprint XML depends on context (inside bean or blueprint element)
+ */
+public interface XmlWriter {
+    /**
+     * Write custom XML
+     * @param xmlStreamWriter xml writer provided by plugin
+     * @throws XMLStreamException when exception occurred during writing XML
+     */
+    void write(XMLStreamWriter xmlStreamWriter) throws XMLStreamException;
+}