<?xml version="1.0"?>
<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">
-
+
<parent>
<groupId>ro.fortsoft.pf4j.demo</groupId>
<artifactId>pf4j-demo-parent</artifactId>
</plugin>
</plugins>
</build>
-
+
<dependencies>
<dependency>
<groupId>ro.fortsoft.pf4j</groupId>
<scope>provided</scope>
</dependency>
</dependencies>
-
+
</project>
/*
* 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.
<!--
Describes the dist
-
+
@author Decebal Suiu
@version 1.0
-->
-/*\r
- * Copyright 2012 Decebal Suiu\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with\r
- * the License. You may obtain a copy of the License in the LICENSE file, or at:\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on\r
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the\r
- * specific language governing permissions and limitations under the License.\r
- */\r
-package ro.fortsoft.pf4j.demo;\r
-\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
-\r
-import ro.fortsoft.pf4j.DefaultPluginManager;\r
-import ro.fortsoft.pf4j.PluginManager;\r
-import ro.fortsoft.pf4j.PluginWrapper;\r
-import ro.fortsoft.pf4j.demo.api.Greeting;\r
-\r
-/**\r
- * A boot class that start the demo.\r
- *\r
- * @author Decebal Suiu\r
- */\r
-public class Boot {\r
-\r
- public static void main(String[] args) {\r
- // print logo\r
- printLogo();\r
-\r
- // create the plugin manager\r
- final PluginManager pluginManager = new DefaultPluginManager();\r
-\r
- // load the plugins\r
- pluginManager.loadPlugins();\r
-\r
- // enable a disabled plugin\r
-// pluginManager.enablePlugin("welcome-plugin");\r
-\r
- // start (active/resolved) the plugins\r
- pluginManager.startPlugins();\r
-\r
- // retrieves the extensions for Greeting extension point\r
- List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);\r
- System.out.println(String.format("Found %d extensions for extension point '%s'", greetings.size(), Greeting.class.getName()));\r
- for (Greeting greeting : greetings) {\r
- System.out.println(">>> " + greeting.getGreeting());\r
- }\r
-\r
- // print extensions from classpath (non plugin)\r
- System.out.println(String.format("Extensions added by classpath:"));\r
- Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null);\r
- for (String extension : extensionClassNames) {\r
- System.out.println(" " + extension);\r
- }\r
-\r
- // print extensions for each started plugin\r
- List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();\r
- for (PluginWrapper plugin : startedPlugins) {\r
- String pluginId = plugin.getDescriptor().getPluginId();\r
- System.out.println(String.format("Extensions added by plugin '%s':", pluginId));\r
- extensionClassNames = pluginManager.getExtensionClassNames(pluginId);\r
- for (String extension : extensionClassNames) {\r
- System.out.println(" " + extension);\r
- }\r
- }\r
-\r
- // stop the plugins\r
- pluginManager.stopPlugins();\r
- /*\r
- Runtime.getRuntime().addShutdownHook(new Thread() {\r
-\r
- @Override\r
- public void run() {\r
- pluginManager.stopPlugins();\r
- }\r
-\r
- });\r
- */\r
- }\r
-\r
- private static void printLogo() {\r
- System.out.println(StringUtils.repeat("#", 40));\r
- System.out.println(StringUtils.center("PF4J-DEMO", 40));\r
- System.out.println(StringUtils.repeat("#", 40));\r
- }\r
-\r
-}\r
+/*
+ * 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));
+ }
+
+}
# - add one plugin id on each line
# - put this file in plugins folder
########################################
-#welcome-plugin
\ No newline at end of file
+#welcome-plugin
# - add one plugin id on each line
# - put this file in plugins folder
########################################
-#welcome-plugin
\ No newline at end of file
+#welcome-plugin
<?xml version="1.0"?>
<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">
-
+
<parent>
<groupId>ro.fortsoft.pf4j.demo</groupId>
<artifactId>pf4j-demo-plugins</artifactId>
<plugin.version>0.0.1</plugin.version>
<plugin.provider>Decebal Suiu</plugin.provider>
<plugin.dependencies />
- </properties>
+ </properties>
<build>
<plugins>
</executions>
</plugin>
-->
-
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</execution>
</executions>
</plugin>
-
+
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
</configuration>
</plugin>
</plugins>
- </build>
+ </build>
<dependencies>
<dependency>
<version>2.6</version>
</dependency>
</dependencies>
-
+
</project>
<!--
Describes the plugin archive
-
+
@author Decebal Suiu
@version 1.0
-->
/*
* 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.
<?xml version="1.0"?>
<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">
-
+
<parent>
<groupId>ro.fortsoft.pf4j.demo</groupId>
<artifactId>pf4j-demo-plugins</artifactId>
<plugin.version>0.0.1</plugin.version>
<plugin.provider>Decebal Suiu</plugin.provider>
<plugin.dependencies />
- </properties>
+ </properties>
<build>
<plugins>
</executions>
</plugin>
-->
-
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</execution>
</executions>
</plugin>
-
+
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
</configuration>
</plugin>
</plugins>
- </build>
+ </build>
</project>
<!--
Describes the plugin archive
-
+
@author Decebal Suiu
@version 1.0
-->
/*
* 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.
<?xml version="1.0"?>
<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">
-
+
<parent>
<groupId>ro.fortsoft.pf4j.demo</groupId>
<artifactId>pf4j-demo-parent</artifactId>
<directory>src/main/resources</directory>
</resource>
</resources>
-
+
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<artifactId>pf4j</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
- </dependency>
+ </dependency>
<dependency>
<groupId>ro.fortsoft.pf4j.demo</groupId>
<scope>provided</scope>
</dependency>
</dependencies>
-
+
</project>
<?xml version="1.0"?>
<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">
-
+
<parent>
<groupId>ro.fortsoft.pf4j</groupId>
<artifactId>pf4j-parent</artifactId>
/*
* 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.
-/*\r
- * Copyright 2012 Decebal Suiu\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with\r
- * the License. You may obtain a copy of the License in the LICENSE file, or at:\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on\r
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the\r
- * specific language governing permissions and limitations under the License.\r
- */\r
-package ro.fortsoft.pf4j.demo;\r
-\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.apache.commons.lang3.StringUtils;\r
-\r
-import ro.fortsoft.pf4j.DefaultPluginManager;\r
-import ro.fortsoft.pf4j.PluginManager;\r
-import ro.fortsoft.pf4j.PluginWrapper;\r
-import ro.fortsoft.pf4j.demo.api.Greeting;\r
-\r
-/**\r
- * A boot class that start the demo.\r
- *\r
- * @author Decebal Suiu\r
- */\r
-public class Boot {\r
-\r
- public static void main(String[] args) {\r
- // print logo\r
- printLogo();\r
-\r
- // create the plugin manager\r
- final PluginManager pluginManager = new DefaultPluginManager();\r
-\r
- // load the plugins\r
- pluginManager.loadPlugins();\r
-\r
- // enable a disabled plugin\r
-// pluginManager.enablePlugin("welcome-plugin");\r
-\r
- // start (active/resolved) the plugins\r
- pluginManager.startPlugins();\r
-\r
- System.out.println("Plugindirectory: ");\r
- System.out.println("\t" + System.getProperty("pf4j.pluginsDir", "plugins") + "\n");\r
-\r
- // retrieves the extensions for Greeting extension point\r
- List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);\r
- System.out.println(String.format("Found %d extensions for extension point '%s'", greetings.size(), Greeting.class.getName()));\r
- for (Greeting greeting : greetings) {\r
- System.out.println(">>> " + greeting.getGreeting());\r
- }\r
-\r
- // // print extensions from classpath (non plugin)\r
- // System.out.println(String.format("Extensions added by classpath:"));\r
- // Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null);\r
- // for (String extension : extensionClassNames) {\r
- // System.out.println(" " + extension);\r
- // }\r
-\r
- // print extensions for each started plugin\r
- List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();\r
- for (PluginWrapper plugin : startedPlugins) {\r
- String pluginId = plugin.getDescriptor().getPluginId();\r
- System.out.println(String.format("Extensions added by plugin '%s':", pluginId));\r
- // extensionClassNames = pluginManager.getExtensionClassNames(pluginId);\r
- // for (String extension : extensionClassNames) {\r
- // System.out.println(" " + extension);\r
- // }\r
- }\r
-\r
- // stop the plugins\r
- pluginManager.stopPlugins();\r
- /*\r
- Runtime.getRuntime().addShutdownHook(new Thread() {\r
-\r
- @Override\r
- public void run() {\r
- pluginManager.stopPlugins();\r
- }\r
-\r
- });\r
- */\r
- }\r
-\r
- private static void printLogo() {\r
- System.out.println(StringUtils.repeat("#", 40));\r
- System.out.println(StringUtils.center("PF4J-DEMO", 40));\r
- System.out.println(StringUtils.repeat("#", 40));\r
- }\r
-\r
-}\r
+/*
+ * 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.lang3.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();
+
+ System.out.println("Plugindirectory: ");
+ System.out.println("\t" + System.getProperty("pf4j.pluginsDir", "plugins") + "\n");
+
+ // 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));
+ }
+
+}
# - add one plugin id on each line
# - put this file in plugins folder
########################################
-#welcome-plugin
\ No newline at end of file
+#welcome-plugin
# - add one plugin id on each line
# - put this file in plugins folder
########################################
-#welcome-plugin
\ No newline at end of file
+#welcome-plugin
/*
* 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.
/**
* @author Decebal Suiu
- * @author Mário Franco
+ * @author MÃ\83¡rio Franco
*/
public class CompoundPluginRepository implements PluginRepository {
/*
* 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.
/**
* CyclicDependencyException will be thrown if a cyclic dependency is detected.
- *
+ *
* @author Decebal Suiu
*/
class CyclicDependencyException extends PluginException {
/*
* Copyright 2013 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;
/**
- * The default implementation for PluginDescriptorFinder.
+ * The default implementation for PluginDescriptorFinder.
* Now, this class it's a "link" to {@link ro.fortsoft.pf4j.ManifestPluginDescriptorFinder}.
- *
+ *
* @author Decebal Suiu
*/
public class DefaultPluginDescriptorFinder extends ManifestPluginDescriptorFinder {
public DefaultPluginDescriptorFinder(PluginClasspath pluginClasspath) {
super(pluginClasspath);
}
-
+
}
/**
* @author Decebal Suiu
- * @author Mário Franco
+ * @author MÃ\83¡rio Franco
*/
public class DefaultPluginRepository implements PluginRepository {
* The default implementation for PluginStatusProvider.
*
* @author Decebal Suiu
- * @author Mário Franco
+ * @author MÃ\83¡rio Franco
*/
public class DefaultPluginStatusProvider implements PluginStatusProvider {
/*
* 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.
class DependencyResolver {
private static final Logger log = LoggerFactory.getLogger(DependencyResolver.class);
-
+
private List<PluginWrapper> plugins;
public DependencyResolver(List<PluginWrapper> plugins) {
/*
* Copyright 2013 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.
/**
* Overwrite classes directories to "target/classes" and lib directories to "target/lib".
- *
+ *
* @author Decebal Suiu
*/
public class DevelopmentPluginClasspath extends PluginClasspath {
private static final String DEVELOPMENT_CLASSES_DIRECTORY = "target/classes";
private static final String DEVELOPMENT_LIB_DIRECTORY = "target/lib";
-
+
public DevelopmentPluginClasspath() {
super();
}
libDirectories.add(DEVELOPMENT_LIB_DIRECTORY);
}
-
+
}
/*
* 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.
public @interface Extension {
int ordinal() default 0;
-
+
}
/*
* 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.
this.extensionFactory = extensionFactory;
}
-}
\ No newline at end of file
+}
/*
* Copyright 2013 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.
public class ExtensionsIndexer extends AbstractProcessor {
public static final String EXTENSIONS_RESOURCE = "META-INF/extensions.idx";
-
+
private List<TypeElement> extensions = new ArrayList<TypeElement>();
-
+
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
public Set<String> getSupportedAnnotationTypes() {
Set<String> annotationTypes = new HashSet<String>();
annotationTypes.add(Extension.class.getName());
-
+
return annotationTypes;
}
-
+
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (roundEnv.processingOver()) {
return false;
}
-
+
for (Element element : roundEnv.getElementsAnnotatedWith(Extension.class)) {
if (!(element instanceof TypeElement)) {
continue;
processingEnv.getMessager().printMessage(Kind.NOTE, message);
extensions.add(typeElement);
}
-
+
/*
if (!roundEnv.processingOver()) {
return false;
*/
write();
-
+
return false;
// return true; // no further processing of this annotation type
}
-
+
private void write() {
Set<String> entries = new HashSet<String>();
for (TypeElement typeElement : extensions) {
entries.add(processingEnv.getElementUtils().getBinaryName(typeElement).toString());
}
-
+
read(entries); // read old entries
write(entries); // write entries
}
processingEnv.getMessager().printMessage(Kind.ERROR, e.toString());
}
}
-
+
private void read(Set<String> entries) {
try {
FileObject file = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, "", EXTENSIONS_RESOURCE);
// java6 does not support reading old index files
}
}
-
+
public static void readIndex(Reader reader, Set<String> entries) throws IOException {
BufferedReader bufferedReader = new BufferedReader(reader);
-
+
String line;
while ((line = bufferedReader.readLine()) != null) {
entries.add(line);
}
-
+
reader.close();
}
-
+
}
-
\ No newline at end of file
+
/*
* 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.
/*
* 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.
* Find a plugin descriptor in a directory (plugin repository).
* You can find in manifest file @see DefaultPluginDescriptorFinder,
* xml file, properties file, java services (with ServiceLoader), etc.
- *
+ *
* @author Decebal Suiu
*/
public interface PluginDescriptorFinder {
public PluginDescriptor find(File pluginRepository) throws PluginException;
-
+
}
/*
* 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.
/*
* 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.
class PluginNotFoundException extends PluginException {
private static final long serialVersionUID = 1L;
-
+
private String pluginId;
public PluginNotFoundException(String pluginId) {
super("Plugin '" + pluginId + "' not found.");
-
+
this.pluginId = pluginId;
}
* Directory whose contents are .zip files used as plugins.
*
* @author Decebal Suiu
- * @author Mário Franco
+ * @author MÃ\83¡rio Franco
*/
public interface PluginRepository {
/**
* @author Decebal Suiu
- * @author Mário Franco
+ * @author MÃ\83¡rio Franco
*/
public interface PluginStatusProvider {
/*
* Copyright 2013 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.
* @author Decebal Suiu
*/
public enum RuntimeMode {
-
+
DEVELOPMENT("development"), // development
- DEPLOYMENT("deployment"); // deployment
+ DEPLOYMENT("deployment"); // deployment
private final String name;
-
+
private static final Map<String, RuntimeMode> map = new HashMap<String, RuntimeMode>();
-
+
static {
for (RuntimeMode mode : RuntimeMode.values()) {
map.put(mode.name, mode);
}
}
-
+
private RuntimeMode(final String name) {
this.name = name;
}
public String toString() {
return name;
}
-
+
public static RuntimeMode byName(String name) {
if (map.containsKey(name)) {
return map.get(name);
}
- throw new NoSuchElementException("Cannot found PF4J runtime mode with name '" + name +
+ throw new NoSuchElementException("Cannot found PF4J runtime mode with name '" + name +
"'. Must be 'development' or 'deployment'.");
}
-
-}
\ No newline at end of file
+
+}
/*
* Copyright 2013 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.
-/*\r
- * Copyright 2012 Decebal Suiu\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with\r
- * the License. You may obtain a copy of the License in the LICENSE file, or at:\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on\r
- * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the\r
- * specific language governing permissions and limitations under the License.\r
- */\r
-package ro.fortsoft.pf4j.util;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Stack;\r
-\r
-/**\r
- * @author Decebal Suiu\r
- */\r
-public class DirectedGraph<V> {\r
-\r
- /**\r
- * The implementation here is basically an adjacency list, but instead\r
- * of an array of lists, a Map is used to map each vertex to its list of\r
- * adjacent vertices.\r
- */\r
- private Map<V, List<V>> neighbors = new HashMap<V, List<V>>();\r
-\r
- /**\r
- * Add a vertex to the graph. Nothing happens if vertex is already in graph.\r
- */\r
- public void addVertex(V vertex) {\r
- if (neighbors.containsKey(vertex)) {\r
- return;\r
- }\r
- neighbors.put(vertex, new ArrayList<V>());\r
- }\r
-\r
- /**\r
- * True if graph contains vertex.\r
- */\r
- public boolean containsVertex(V vertex) {\r
- return neighbors.containsKey(vertex);\r
- }\r
-\r
- /**\r
- * Add an edge to the graph; if either vertex does not exist, it's added.\r
- * This implementation allows the creation of multi-edges and self-loops.\r
- */\r
- public void addEdge(V from, V to) {\r
- this.addVertex(from);\r
- this.addVertex(to);\r
- neighbors.get(from).add(to);\r
- }\r
-\r
- /**\r
- * Remove an edge from the graph. Nothing happens if no such edge.\r
- * @throws IllegalArgumentException if either vertex doesn't exist.\r
- */\r
- public void remove(V from, V to) {\r
- if (!(this.containsVertex(from) && this.containsVertex(to))) {\r
- throw new IllegalArgumentException("Nonexistent vertex");\r
- }\r
- neighbors.get(from).remove(to);\r
- }\r
-\r
- /**\r
- * Report (as a Map) the out-degree of each vertex.\r
- */\r
- public Map<V, Integer> outDegree() {\r
- Map<V, Integer> result = new HashMap<V, Integer>();\r
- for (V vertex : neighbors.keySet()) {\r
- result.put(vertex, neighbors.get(vertex).size());\r
- }\r
-\r
- return result;\r
- }\r
-\r
- /**\r
- * Report (as a Map) the in-degree of each vertex.\r
- */\r
- public Map<V,Integer> inDegree() {\r
- Map<V, Integer> result = new HashMap<V, Integer>();\r
- for (V vertex : neighbors.keySet()) {\r
- result.put(vertex, 0); // all in-degrees are 0\r
- }\r
- for (V from : neighbors.keySet()) {\r
- for (V to : neighbors.get(from)) {\r
- result.put(to, result.get(to) + 1); // increment in-degree\r
- }\r
- }\r
-\r
- return result;\r
- }\r
-\r
- /**\r
- * Report (as a List) the topological sort of the vertices; null for no such sort.\r
- */\r
- public List<V> topologicalSort() {\r
- Map<V, Integer> degree = inDegree();\r
-\r
- // determine all vertices with zero in-degree\r
- Stack<V> zeroVertices = new Stack<V>(); // stack as good as any here\r
- for (V v : degree.keySet()) {\r
- if (degree.get(v) == 0) {\r
- zeroVertices.push(v);\r
- }\r
- }\r
-\r
- // determine the topological order\r
- List<V> result = new ArrayList<V>();\r
- while (!zeroVertices.isEmpty()) {\r
- V vertex = zeroVertices.pop(); // choose a vertex with zero in-degree\r
- result.add(vertex); // vertex 'v' is next in topological order\r
- // "remove" vertex 'v' by updating its neighbors\r
- for (V neighbor : neighbors.get(vertex)) {\r
- degree.put(neighbor, degree.get(neighbor) - 1);\r
- // remember any vertices that now have zero in-degree\r
- if (degree.get(neighbor) == 0) {\r
- zeroVertices.push(neighbor);\r
- }\r
- }\r
- }\r
-\r
- // check that we have used the entire graph (if not, there was a cycle)\r
- if (result.size() != neighbors.size()) {\r
- return null;\r
- }\r
-\r
- return result;\r
- }\r
-\r
- /**\r
- * Report (as a List) the reverse topological sort of the vertices; null for no such sort.\r
- */\r
- public List<V> reverseTopologicalSort() {\r
- List<V> list = topologicalSort();\r
- if (list == null) {\r
- return null;\r
- }\r
- Collections.reverse(list);\r
-\r
- return list;\r
- }\r
-\r
- /**\r
- * True if graph is a dag (directed acyclic graph).\r
- */\r
- public boolean isDag () {\r
- return topologicalSort() != null;\r
- }\r
-\r
- /**\r
- * String representation of graph.\r
- */\r
- @Override\r
- public String toString() {\r
- StringBuffer sb = new StringBuffer();\r
- for (V vertex : neighbors.keySet()) {\r
- sb.append("\n " + vertex + " -> " + neighbors.get(vertex));\r
- }\r
-\r
- return sb.toString();\r
- }\r
-\r
-}\r
+/*
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+/**
+ * @author Decebal Suiu
+ */
+public class DirectedGraph<V> {
+
+ /**
+ * The implementation here is basically an adjacency list, but instead
+ * of an array of lists, a Map is used to map each vertex to its list of
+ * adjacent vertices.
+ */
+ private Map<V, List<V>> neighbors = new HashMap<V, List<V>>();
+
+ /**
+ * Add a vertex to the graph. Nothing happens if vertex is already in graph.
+ */
+ public void addVertex(V vertex) {
+ if (neighbors.containsKey(vertex)) {
+ return;
+ }
+ neighbors.put(vertex, new ArrayList<V>());
+ }
+
+ /**
+ * True if graph contains vertex.
+ */
+ public boolean containsVertex(V vertex) {
+ return neighbors.containsKey(vertex);
+ }
+
+ /**
+ * Add an edge to the graph; if either vertex does not exist, it's added.
+ * This implementation allows the creation of multi-edges and self-loops.
+ */
+ public void addEdge(V from, V to) {
+ this.addVertex(from);
+ this.addVertex(to);
+ neighbors.get(from).add(to);
+ }
+
+ /**
+ * Remove an edge from the graph. Nothing happens if no such edge.
+ * @throws IllegalArgumentException if either vertex doesn't exist.
+ */
+ public void remove(V from, V to) {
+ if (!(this.containsVertex(from) && this.containsVertex(to))) {
+ throw new IllegalArgumentException("Nonexistent vertex");
+ }
+ neighbors.get(from).remove(to);
+ }
+
+ /**
+ * Report (as a Map) the out-degree of each vertex.
+ */
+ public Map<V, Integer> outDegree() {
+ Map<V, Integer> result = new HashMap<V, Integer>();
+ for (V vertex : neighbors.keySet()) {
+ result.put(vertex, neighbors.get(vertex).size());
+ }
+
+ return result;
+ }
+
+ /**
+ * Report (as a Map) the in-degree of each vertex.
+ */
+ public Map<V,Integer> inDegree() {
+ Map<V, Integer> result = new HashMap<V, Integer>();
+ for (V vertex : neighbors.keySet()) {
+ result.put(vertex, 0); // all in-degrees are 0
+ }
+ for (V from : neighbors.keySet()) {
+ for (V to : neighbors.get(from)) {
+ result.put(to, result.get(to) + 1); // increment in-degree
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Report (as a List) the topological sort of the vertices; null for no such sort.
+ */
+ public List<V> topologicalSort() {
+ Map<V, Integer> degree = inDegree();
+
+ // determine all vertices with zero in-degree
+ Stack<V> zeroVertices = new Stack<V>(); // stack as good as any here
+ for (V v : degree.keySet()) {
+ if (degree.get(v) == 0) {
+ zeroVertices.push(v);
+ }
+ }
+
+ // determine the topological order
+ List<V> result = new ArrayList<V>();
+ while (!zeroVertices.isEmpty()) {
+ V vertex = zeroVertices.pop(); // choose a vertex with zero in-degree
+ result.add(vertex); // vertex 'v' is next in topological order
+ // "remove" vertex 'v' by updating its neighbors
+ for (V neighbor : neighbors.get(vertex)) {
+ degree.put(neighbor, degree.get(neighbor) - 1);
+ // remember any vertices that now have zero in-degree
+ if (degree.get(neighbor) == 0) {
+ zeroVertices.push(neighbor);
+ }
+ }
+ }
+
+ // check that we have used the entire graph (if not, there was a cycle)
+ if (result.size() != neighbors.size()) {
+ return null;
+ }
+
+ return result;
+ }
+
+ /**
+ * Report (as a List) the reverse topological sort of the vertices; null for no such sort.
+ */
+ public List<V> reverseTopologicalSort() {
+ List<V> list = topologicalSort();
+ if (list == null) {
+ return null;
+ }
+ Collections.reverse(list);
+
+ return list;
+ }
+
+ /**
+ * True if graph is a dag (directed acyclic graph).
+ */
+ public boolean isDag () {
+ return topologicalSort() != null;
+ }
+
+ /**
+ * String representation of graph.
+ */
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ for (V vertex : neighbors.keySet()) {
+ sb.append("\n " + vertex + " -> " + neighbors.get(vertex));
+ }
+
+ return sb.toString();
+ }
+
+}
/*
* 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.
/**
* Filter accepts files that are directories.
- *
+ *
* @author Decebal Suiu
*/
public class DirectoryFileFilter implements FileFilter {
/*
* 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.
/**
* Filter accepts any file ending in extension. The case of the filename is ignored.
- *
+ *
* @author Decebal Suiu
*/
public class ExtensionFileFilter implements FileFilter {
/*
* Copyright 2013 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.
/**
* Filter that only accepts hidden files.
- *
+ *
* @author decebal.suiu
*/
public class HiddenFilter implements FileFilter {
/*
* 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.
/*
* Copyright 2013 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.
/*
* 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.
/*
* 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.
/*
* 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.