mirror of https://github.com/pf4j/pf4j.git
Stix
10 years ago
21 changed files with 378 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||||
|
dependencies { |
||||||
|
compile 'ro.fortsoft.pf4j:pf4j:0.4' |
||||||
|
compile 'org.apache.commons:commons-lang3:3.0' |
||||||
|
testCompile group: 'junit', name: 'junit', version: '4.+' |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012 Decebal Suiu |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with |
||||||
|
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.api; |
||||||
|
|
||||||
|
import ro.fortsoft.pf4j.ExtensionPoint; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Decebal Suiu |
||||||
|
*/ |
||||||
|
public interface Greeting extends ExtensionPoint { |
||||||
|
|
||||||
|
public String getGreeting(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
dependencies { |
||||||
|
compile project(':api') |
||||||
|
compile 'ro.fortsoft.pf4j:pf4j:0.4' |
||||||
|
compile 'org.apache.commons:commons-lang3:3.0' |
||||||
|
testCompile group: 'junit', name: 'junit', version: '4.+' |
||||||
|
} |
||||||
|
|
||||||
|
jar { |
||||||
|
baseName = 'Plugin Demo' |
||||||
|
version = '0.1.0' |
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012 Decebal Suiu |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with |
||||||
|
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Set; |
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils; |
||||||
|
|
||||||
|
import ro.fortsoft.pf4j.DefaultPluginManager; |
||||||
|
import ro.fortsoft.pf4j.PluginManager; |
||||||
|
import ro.fortsoft.pf4j.PluginWrapper; |
||||||
|
import ro.fortsoft.pf4j.demo.api.Greeting; |
||||||
|
|
||||||
|
/** |
||||||
|
* A boot class that start the demo. |
||||||
|
* |
||||||
|
* @author Decebal Suiu |
||||||
|
*/ |
||||||
|
public class Boot { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
// print logo
|
||||||
|
printLogo(); |
||||||
|
|
||||||
|
// create the plugin manager
|
||||||
|
final PluginManager pluginManager = new DefaultPluginManager(); |
||||||
|
|
||||||
|
// load the plugins
|
||||||
|
pluginManager.loadPlugins(); |
||||||
|
|
||||||
|
// enable a disabled plugin
|
||||||
|
// pluginManager.enablePlugin("welcome-plugin");
|
||||||
|
|
||||||
|
// start (active/resolved) the plugins
|
||||||
|
pluginManager.startPlugins(); |
||||||
|
|
||||||
|
// retrieves the extensions for Greeting extension point
|
||||||
|
List<Greeting> greetings = pluginManager.getExtensions(Greeting.class); |
||||||
|
System.out.println(String.format("Found %d extensions for extension point '%s'", greetings.size(), Greeting.class.getName())); |
||||||
|
for (Greeting greeting : greetings) { |
||||||
|
System.out.println(">>> " + greeting.getGreeting()); |
||||||
|
} |
||||||
|
|
||||||
|
// print extensions from classpath (non plugin)
|
||||||
|
System.out.println(String.format("Extensions added by classpath:")); |
||||||
|
Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null); |
||||||
|
for (String extension : extensionClassNames) { |
||||||
|
System.out.println(" " + extension); |
||||||
|
} |
||||||
|
|
||||||
|
// print extensions for each started plugin
|
||||||
|
List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins(); |
||||||
|
for (PluginWrapper plugin : startedPlugins) { |
||||||
|
String pluginId = plugin.getDescriptor().getPluginId(); |
||||||
|
System.out.println(String.format("Extensions added by plugin '%s':", pluginId)); |
||||||
|
extensionClassNames = pluginManager.getExtensionClassNames(pluginId); |
||||||
|
for (String extension : extensionClassNames) { |
||||||
|
System.out.println(" " + extension); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// stop the plugins
|
||||||
|
pluginManager.stopPlugins(); |
||||||
|
/* |
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
pluginManager.stopPlugins(); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
*/ |
||||||
|
} |
||||||
|
|
||||||
|
private static void printLogo() { |
||||||
|
System.out.println(StringUtils.repeat("#", 40)); |
||||||
|
System.out.println(StringUtils.center("PF4J-DEMO", 40)); |
||||||
|
System.out.println(StringUtils.repeat("#", 40)); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2014 Decebal Suiu |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with |
||||||
|
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo; |
||||||
|
|
||||||
|
import ro.fortsoft.pf4j.Extension; |
||||||
|
import ro.fortsoft.pf4j.demo.api.Greeting; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Decebal Suiu |
||||||
|
*/ |
||||||
|
@Extension |
||||||
|
public class WhazzupGreeting implements Greeting { |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getGreeting() { |
||||||
|
return "Whazzup"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
log4j.rootLogger=DEBUG, Console |
||||||
|
|
||||||
|
# |
||||||
|
# PF4J log |
||||||
|
# |
||||||
|
log4j.logger.ro.fortsoft.pf4j=DEBUG, Console |
||||||
|
log4j.logger.ro.fortsoft.pf4j.PluginClassLoader=WARN, Console |
||||||
|
log4j.additivity.ro.fortsoft.pf4j=false |
||||||
|
|
||||||
|
# |
||||||
|
# Appenders |
||||||
|
# |
||||||
|
log4j.appender.Console=org.apache.log4j.ConsoleAppender |
||||||
|
log4j.appender.Console.layout=org.apache.log4j.PatternLayout |
||||||
|
#log4j.appender.Console.layout.conversionPattern=%-5p - %-32.32c{1} - %m\n |
||||||
|
log4j.appender.Console.layout.ConversionPattern=%d %p %c - %m%n |
@ -0,0 +1,13 @@ |
|||||||
|
subprojects { |
||||||
|
apply plugin: 'java' |
||||||
|
|
||||||
|
repositories { |
||||||
|
mavenLocal() |
||||||
|
mavenCentral() |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
task wrapper(type: Wrapper) { |
||||||
|
gradleVersion = '1.11' |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
######################################## |
||||||
|
# - load all plugins except these |
||||||
|
# - add one plugin id on each line |
||||||
|
# - put this file in plugins folder |
||||||
|
######################################## |
||||||
|
#welcome-plugin |
@ -0,0 +1,6 @@ |
|||||||
|
######################################## |
||||||
|
# - load only these plugins |
||||||
|
# - add one plugin id on each line |
||||||
|
# - put this file in plugins folder |
||||||
|
######################################## |
||||||
|
#welcome-plugin |
@ -0,0 +1,25 @@ |
|||||||
|
jar { |
||||||
|
baseName = 'WelcomePlugin' |
||||||
|
version = '0.1.0' |
||||||
|
manifest { |
||||||
|
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.welcome.WelcomePlugin', |
||||||
|
'Plugin-Id' : 'WelcomePlugin', |
||||||
|
'Plugin-Version' : '1.0', |
||||||
|
'Plugin-Provider' : 'Yannick Bäumer' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
task plugin(type: Jar) { |
||||||
|
baseName = 'WelcomePlugin' |
||||||
|
version = '0.1.0' |
||||||
|
into('classes') |
||||||
|
extension('zip') |
||||||
|
with jar |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
compile project(':api') |
||||||
|
compile 'ro.fortsoft.pf4j:pf4j:0.4' |
||||||
|
compile 'org.apache.commons:commons-lang3:3.0' |
||||||
|
testCompile group: 'junit', name: 'junit', version: '4.+' |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
plugin.id=welcome-plugin |
||||||
|
plugin.class=ro.fortsoft.pf4j.demo.welcome.WelcomePlugin |
||||||
|
plugin.version=0.0.1 |
||||||
|
plugin.provider=Decebal Suiu |
||||||
|
plugin.dependencies= |
@ -0,0 +1,56 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012 Decebal Suiu |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with |
||||||
|
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.welcome; |
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils; |
||||||
|
|
||||||
|
import ro.fortsoft.pf4j.Extension; |
||||||
|
import ro.fortsoft.pf4j.Plugin; |
||||||
|
import ro.fortsoft.pf4j.PluginWrapper; |
||||||
|
import ro.fortsoft.pf4j.RuntimeMode; |
||||||
|
import ro.fortsoft.pf4j.demo.api.Greeting; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Decebal Suiu |
||||||
|
*/ |
||||||
|
public class WelcomePlugin extends Plugin { |
||||||
|
|
||||||
|
public WelcomePlugin(PluginWrapper wrapper) { |
||||||
|
super(wrapper); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void start() { |
||||||
|
System.out.println("WelcomePlugin.start()"); |
||||||
|
// for testing the development mode
|
||||||
|
if (RuntimeMode.DEVELOPMENT.equals(wrapper.getRuntimeMode())) { |
||||||
|
System.out.println(StringUtils.upperCase("WelcomePlugin")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void stop() { |
||||||
|
System.out.println("WelcomePlugin.stop()"); |
||||||
|
} |
||||||
|
|
||||||
|
@Extension |
||||||
|
public static class WelcomeGreeting implements Greeting { |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getGreeting() { |
||||||
|
return "Welcome"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
jar { |
||||||
|
baseName = 'HelloPlugin' |
||||||
|
version = '0.1.0' |
||||||
|
manifest { |
||||||
|
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.welcome.HelloPlugin', |
||||||
|
'Plugin-Id' : 'HelloPlugin', |
||||||
|
'Plugin-Version' : '1.0', |
||||||
|
'Plugin-Provider' : 'Yannick Bäumer' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
task plugin(type: Jar) { |
||||||
|
baseName = 'HelloPlugin' |
||||||
|
version = '0.1.0' |
||||||
|
into('classes') |
||||||
|
extension('zip') |
||||||
|
with jar |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
compile project(':api') |
||||||
|
compile 'ro.fortsoft.pf4j:pf4j:0.4' |
||||||
|
compile 'org.apache.commons:commons-lang3:3.0' |
||||||
|
testCompile group: 'junit', name: 'junit', version: '4.+' |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
plugin.id=hello-plugin |
||||||
|
plugin.class=ro.fortsoft.pf4j.demo.hello.HelloPlugin |
||||||
|
plugin.version=0.0.1 |
||||||
|
plugin.provider=Decebal Suiu |
||||||
|
plugin.dependencies= |
@ -0,0 +1,51 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012 Decebal Suiu |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with |
||||||
|
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.hello; |
||||||
|
|
||||||
|
import ro.fortsoft.pf4j.Extension; |
||||||
|
import ro.fortsoft.pf4j.Plugin; |
||||||
|
import ro.fortsoft.pf4j.PluginWrapper; |
||||||
|
import ro.fortsoft.pf4j.demo.api.Greeting; |
||||||
|
|
||||||
|
/** |
||||||
|
* A very simple plugin. |
||||||
|
* |
||||||
|
* @author Decebal Suiu |
||||||
|
*/ |
||||||
|
public class HelloPlugin extends Plugin { |
||||||
|
|
||||||
|
public HelloPlugin(PluginWrapper wrapper) { |
||||||
|
super(wrapper); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void start() { |
||||||
|
System.out.println("HelloPlugin.start()"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void stop() { |
||||||
|
System.out.println("HelloPlugin.stop()"); |
||||||
|
} |
||||||
|
|
||||||
|
@Extension(ordinal=1) |
||||||
|
public static class HelloGreeting implements Greeting { |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getGreeting() { |
||||||
|
return "Hello"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue