Browse Source

Editor config style applied

tags/release-0.10.0
Mário Franco 9 years ago
parent
commit
86a38894c2
47 changed files with 510 additions and 510 deletions
  1. 3
    3
      demo/api/pom.xml
  2. 3
    3
      demo/api/src/main/java/ro/fortsoft/pf4j/demo/api/Greeting.java
  3. 1
    1
      demo/app/src/main/assembly/assembly.xml
  4. 93
    93
      demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java
  5. 1
    1
      demo/plugins/disabled.txt
  6. 1
    1
      demo/plugins/enabled.txt
  7. 6
    6
      demo/plugins/plugin1/pom.xml
  8. 1
    1
      demo/plugins/plugin1/src/main/assembly/assembly.xml
  9. 3
    3
      demo/plugins/plugin1/src/main/java/ro/fortsoft/pf4j/demo/welcome/WelcomePlugin.java
  10. 5
    5
      demo/plugins/plugin2/pom.xml
  11. 1
    1
      demo/plugins/plugin2/src/main/assembly/assembly.xml
  12. 3
    3
      demo/plugins/plugin2/src/main/java/ro/fortsoft/pf4j/demo/hello/HelloPlugin.java
  13. 4
    4
      demo/plugins/pom.xml
  14. 1
    1
      demo/pom.xml
  15. 3
    3
      demo_gradle/api/src/main/java/ro/fortsoft/pf4j/demo/api/Greeting.java
  16. 96
    96
      demo_gradle/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java
  17. 1
    1
      demo_gradle/plugins/disabled.txt
  18. 1
    1
      demo_gradle/plugins/enabled.txt
  19. 3
    3
      demo_gradle/plugins/plugin2/src/main/java/ro/fortsoft/pf4j/demo/hello/HelloPlugin.java
  20. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/CompoundPluginRepository.java
  21. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/CyclicDependencyException.java
  22. 6
    6
      pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginDescriptorFinder.java
  23. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginRepository.java
  24. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginStatusProvider.java
  25. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java
  26. 6
    6
      pf4j/src/main/java/ro/fortsoft/pf4j/DevelopmentPluginClasspath.java
  27. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/Extension.java
  28. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionPoint.java
  29. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionWrapper.java
  30. 18
    18
      pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionsIndexer.java
  31. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/Plugin.java
  32. 5
    5
      pf4j/src/main/java/ro/fortsoft/pf4j/PluginDescriptorFinder.java
  33. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/PluginException.java
  34. 5
    5
      pf4j/src/main/java/ro/fortsoft/pf4j/PluginNotFoundException.java
  35. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/PluginRepository.java
  36. 1
    1
      pf4j/src/main/java/ro/fortsoft/pf4j/PluginStatusProvider.java
  37. 12
    12
      pf4j/src/main/java/ro/fortsoft/pf4j/RuntimeMode.java
  38. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/AndFileFilter.java
  39. 171
    171
      pf4j/src/main/java/ro/fortsoft/pf4j/util/DirectedGraph.java
  40. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/util/DirectoryFileFilter.java
  41. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/util/ExtensionFileFilter.java
  42. 4
    4
      pf4j/src/main/java/ro/fortsoft/pf4j/util/HiddenFilter.java
  43. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/JarFileFilter.java
  44. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/NotFileFilter.java
  45. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/StringUtils.java
  46. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java
  47. 3
    3
      pf4j/src/main/java/ro/fortsoft/pf4j/util/ZipFileFilter.java

+ 3
- 3
demo/api/pom.xml View File

@@ -1,6 +1,6 @@
<?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>
@@ -23,7 +23,7 @@
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>ro.fortsoft.pf4j</groupId>
@@ -32,5 +32,5 @@
<scope>provided</scope>
</dependency>
</dependencies>
</project>

+ 3
- 3
demo/api/src/main/java/ro/fortsoft/pf4j/demo/api/Greeting.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 1
- 1
demo/app/src/main/assembly/assembly.xml View File

@@ -1,6 +1,6 @@
<!--
Describes the dist
@author Decebal Suiu
@version 1.0
-->

+ 93
- 93
demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java View File

@@ -1,93 +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));
}
}
/*
* 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));
}
}

+ 1
- 1
demo/plugins/disabled.txt View File

@@ -3,4 +3,4 @@
# - add one plugin id on each line
# - put this file in plugins folder
########################################
#welcome-plugin
#welcome-plugin

+ 1
- 1
demo/plugins/enabled.txt View File

@@ -3,4 +3,4 @@
# - add one plugin id on each line
# - put this file in plugins folder
########################################
#welcome-plugin
#welcome-plugin

+ 6
- 6
demo/plugins/plugin1/pom.xml View File

@@ -1,6 +1,6 @@
<?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>
@@ -19,7 +19,7 @@
<plugin.version>0.0.1</plugin.version>
<plugin.provider>Decebal Suiu</plugin.provider>
<plugin.dependencies />
</properties>
</properties>

<build>
<plugins>
@@ -43,7 +43,7 @@
</executions>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
@@ -63,7 +63,7 @@
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
@@ -110,7 +110,7 @@
</configuration>
</plugin>
</plugins>
</build>
</build>

<dependencies>
<dependency>
@@ -119,5 +119,5 @@
<version>2.6</version>
</dependency>
</dependencies>
</project>

+ 1
- 1
demo/plugins/plugin1/src/main/assembly/assembly.xml View File

@@ -1,6 +1,6 @@
<!--
Describes the plugin archive
@author Decebal Suiu
@version 1.0
-->

+ 3
- 3
demo/plugins/plugin1/src/main/java/ro/fortsoft/pf4j/demo/welcome/WelcomePlugin.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 5
- 5
demo/plugins/plugin2/pom.xml View File

@@ -1,6 +1,6 @@
<?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>
@@ -19,7 +19,7 @@
<plugin.version>0.0.1</plugin.version>
<plugin.provider>Decebal Suiu</plugin.provider>
<plugin.dependencies />
</properties>
</properties>

<build>
<plugins>
@@ -43,7 +43,7 @@
</executions>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
@@ -63,7 +63,7 @@
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
@@ -110,6 +110,6 @@
</configuration>
</plugin>
</plugins>
</build>
</build>

</project>

+ 1
- 1
demo/plugins/plugin2/src/main/assembly/assembly.xml View File

@@ -1,6 +1,6 @@
<!--
Describes the plugin archive
@author Decebal Suiu
@version 1.0
-->

+ 3
- 3
demo/plugins/plugin2/src/main/java/ro/fortsoft/pf4j/demo/hello/HelloPlugin.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 4
- 4
demo/plugins/pom.xml View File

@@ -1,6 +1,6 @@
<?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>
@@ -27,7 +27,7 @@
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
@@ -93,7 +93,7 @@
<artifactId>pf4j</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
</dependency>

<dependency>
<groupId>ro.fortsoft.pf4j.demo</groupId>
@@ -102,5 +102,5 @@
<scope>provided</scope>
</dependency>
</dependencies>
</project>

+ 1
- 1
demo/pom.xml View File

@@ -1,6 +1,6 @@
<?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>

+ 3
- 3
demo_gradle/api/src/main/java/ro/fortsoft/pf4j/demo/api/Greeting.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 96
- 96
demo_gradle/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java View File

@@ -1,96 +1,96 @@
/*
* 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));
}
}
/*
* 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));
}
}

+ 1
- 1
demo_gradle/plugins/disabled.txt View File

@@ -3,4 +3,4 @@
# - add one plugin id on each line
# - put this file in plugins folder
########################################
#welcome-plugin
#welcome-plugin

+ 1
- 1
demo_gradle/plugins/enabled.txt View File

@@ -3,4 +3,4 @@
# - add one plugin id on each line
# - put this file in plugins folder
########################################
#welcome-plugin
#welcome-plugin

+ 3
- 3
demo_gradle/plugins/plugin2/src/main/java/ro/fortsoft/pf4j/demo/hello/HelloPlugin.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/CompoundPluginRepository.java View File

@@ -18,7 +18,7 @@ import java.util.List;

/**
* @author Decebal Suiu
* @author Mário Franco
* @author Mário Franco
*/
public class CompoundPluginRepository implements PluginRepository {


+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/CyclicDependencyException.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -14,7 +14,7 @@ package ro.fortsoft.pf4j;

/**
* CyclicDependencyException will be thrown if a cyclic dependency is detected.
*
*
* @author Decebal Suiu
*/
class CyclicDependencyException extends PluginException {

+ 6
- 6
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginDescriptorFinder.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -13,9 +13,9 @@
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 {
@@ -23,5 +23,5 @@ public class DefaultPluginDescriptorFinder extends ManifestPluginDescriptorFinde
public DefaultPluginDescriptorFinder(PluginClasspath pluginClasspath) {
super(pluginClasspath);
}
}

+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginRepository.java View File

@@ -22,7 +22,7 @@ import java.util.List;

/**
* @author Decebal Suiu
* @author Mário Franco
* @author Mário Franco
*/
public class DefaultPluginRepository implements PluginRepository {


+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginStatusProvider.java View File

@@ -24,7 +24,7 @@ import ro.fortsoft.pf4j.util.FileUtils;
* The default implementation for PluginStatusProvider.
*
* @author Decebal Suiu
* @author Mário Franco
* @author Mário Franco
*/
public class DefaultPluginStatusProvider implements PluginStatusProvider {


+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -26,7 +26,7 @@ import ro.fortsoft.pf4j.util.DirectedGraph;
class DependencyResolver {

private static final Logger log = LoggerFactory.getLogger(DependencyResolver.class);
private List<PluginWrapper> plugins;

public DependencyResolver(List<PluginWrapper> plugins) {

+ 6
- 6
pf4j/src/main/java/ro/fortsoft/pf4j/DevelopmentPluginClasspath.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -14,14 +14,14 @@ package ro.fortsoft.pf4j;

/**
* 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();
}
@@ -32,5 +32,5 @@ public class DevelopmentPluginClasspath extends PluginClasspath {
libDirectories.add(DEVELOPMENT_LIB_DIRECTORY);
}

}

+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/Extension.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -28,5 +28,5 @@ import java.lang.annotation.Target;
public @interface Extension {

int ordinal() default 0;
}

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionPoint.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionWrapper.java View File

@@ -52,4 +52,4 @@ public class ExtensionWrapper<T> implements Comparable<ExtensionWrapper<T>> {
this.extensionFactory = extensionFactory;
}

}
}

+ 18
- 18
pf4j/src/main/java/ro/fortsoft/pf4j/ExtensionsIndexer.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -37,9 +37,9 @@ import javax.tools.StandardLocation;
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();
@@ -49,16 +49,16 @@ public class ExtensionsIndexer extends AbstractProcessor {
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;
@@ -69,7 +69,7 @@ public class ExtensionsIndexer extends AbstractProcessor {
processingEnv.getMessager().printMessage(Kind.NOTE, message);
extensions.add(typeElement);
}
/*
if (!roundEnv.processingOver()) {
return false;
@@ -77,17 +77,17 @@ public class ExtensionsIndexer extends AbstractProcessor {
*/

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
}
@@ -107,7 +107,7 @@ public class ExtensionsIndexer extends AbstractProcessor {
processingEnv.getMessager().printMessage(Kind.ERROR, e.toString());
}
}
private void read(Set<String> entries) {
try {
FileObject file = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, "", EXTENSIONS_RESOURCE);
@@ -119,17 +119,17 @@ public class ExtensionsIndexer extends AbstractProcessor {
// 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();
}
}

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/Plugin.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 5
- 5
pf4j/src/main/java/ro/fortsoft/pf4j/PluginDescriptorFinder.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -18,11 +18,11 @@ import java.io.File;
* 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;
}

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/PluginException.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 5
- 5
pf4j/src/main/java/ro/fortsoft/pf4j/PluginNotFoundException.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -18,12 +18,12 @@ package ro.fortsoft.pf4j;
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;
}


+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/PluginRepository.java View File

@@ -19,7 +19,7 @@ import java.util.List;
* Directory whose contents are .zip files used as plugins.
*
* @author Decebal Suiu
* @author Mário Franco
* @author Mário Franco
*/
public interface PluginRepository {


+ 1
- 1
pf4j/src/main/java/ro/fortsoft/pf4j/PluginStatusProvider.java View File

@@ -14,7 +14,7 @@ package ro.fortsoft.pf4j;

/**
* @author Decebal Suiu
* @author Mário Franco
* @author Mário Franco
*/
public interface PluginStatusProvider {


+ 12
- 12
pf4j/src/main/java/ro/fortsoft/pf4j/RuntimeMode.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -20,20 +20,20 @@ import java.util.NoSuchElementException;
* @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;
}
@@ -42,14 +42,14 @@ public enum RuntimeMode {
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'.");
}
}
}

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/AndFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 171
- 171
pf4j/src/main/java/ro/fortsoft/pf4j/util/DirectedGraph.java View File

@@ -1,171 +1,171 @@
/*
* 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.
*/
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();
}
}

+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/util/DirectoryFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -17,7 +17,7 @@ import java.io.FileFilter;

/**
* Filter accepts files that are directories.
*
*
* @author Decebal Suiu
*/
public class DirectoryFileFilter implements FileFilter {

+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/util/ExtensionFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -17,7 +17,7 @@ import java.io.FileFilter;

/**
* Filter accepts any file ending in extension. The case of the filename is ignored.
*
*
* @author Decebal Suiu
*/
public class ExtensionFileFilter implements FileFilter {

+ 4
- 4
pf4j/src/main/java/ro/fortsoft/pf4j/util/HiddenFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.
@@ -17,7 +17,7 @@ import java.io.FileFilter;

/**
* Filter that only accepts hidden files.
*
*
* @author decebal.suiu
*/
public class HiddenFilter implements FileFilter {

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/JarFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/NotFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/StringUtils.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java View File

@@ -1,11 +1,11 @@
/*
* 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.

+ 3
- 3
pf4j/src/main/java/ro/fortsoft/pf4j/util/ZipFileFilter.java View File

@@ -1,11 +1,11 @@
/*
* 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.

Loading…
Cancel
Save