diff --git a/.gitignore b/.gitignore index a44b3d1..8584b26 100644 --- a/.gitignore +++ b/.gitignore @@ -15,10 +15,14 @@ bin/ ## GRADLE ## .gradle/ build/ +gradle/ +gradlew +gradlew.bat ## MAVEN ## target/ ## OTHER ## lib/ +felix-cache/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..bc9da14 --- /dev/null +++ b/build.gradle @@ -0,0 +1,20 @@ +subprojects { + apply plugin: 'java' + + repositories { + mavenCentral() + } + + ext { + slf4jVersion = '1.7.21' + } + + dependencies { + compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion + } + + compileJava { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } +} diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 0000000..a18c4f7 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,23 @@ +group = 'asys' +version = '0.0-SNAPSHOT' + +apply plugin: 'application' + +mainClassName = "asys.core.Main" + +jar { + manifest { + attributes 'Implementation-Title': 'ASys Core', + 'Implementation-Version': version, + 'Main-Class': mainClassName + } + baseName = project.group + '.' + project.name + from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } +} + +dependencies { + runtime group: 'org.slf4j', name: 'slf4j-simple', version: slf4jVersion + + compile group: 'org.apache.felix', name: 'org.apache.felix.framework', version: '5.6.1' + compile group: 'com.google.guava', name: 'guava', version: '21.0' +} diff --git a/src/main/java/asys/core/Core.java b/core/src/main/java/asys/core/Core.java similarity index 84% rename from src/main/java/asys/core/Core.java rename to core/src/main/java/asys/core/Core.java index 0043f8e..1b13129 100644 --- a/src/main/java/asys/core/Core.java +++ b/core/src/main/java/asys/core/Core.java @@ -13,10 +13,7 @@ import org.slf4j.LoggerFactory; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static org.apache.felix.framework.util.FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP; @@ -24,14 +21,19 @@ public class Core { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private Felix felix; private BundleActivator hostActivator; + private Properties properties; public Core() { logger.trace("core created"); } + public void setProperties(Properties properties) { + this.properties = properties; + } + @PostConstruct public void start() { - hostActivator = new HostActivator(); + hostActivator = new HostActivator(properties.getProperty("asys.bundles.dir")); startFelix(); } @@ -53,6 +55,7 @@ public class Core { config.put("felix.fileinstall.poll", 250); config.put("felix.fileinstall.log.level", 2); config.put("felix.fileinstall.noInitialDelay", true); + config.put("org.osgi.framework.system.packages.extra", "com.sun.net.httpserver"); return ImmutableMap.newInstance(config); } diff --git a/core/src/main/java/asys/core/HostActivator.java b/core/src/main/java/asys/core/HostActivator.java new file mode 100644 index 0000000..7a3f90f --- /dev/null +++ b/core/src/main/java/asys/core/HostActivator.java @@ -0,0 +1,59 @@ +/* + * DmitriyMX + * 2017-03-02 + */ +package asys.core; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +public class HostActivator implements BundleActivator { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final Path BUNDLES_DIR; + + public HostActivator(String bundlesDir) { + this.BUNDLES_DIR = Paths.get(bundlesDir); + } + + @Override + public void start(BundleContext bundleContext) throws Exception { + logger.trace("call [HostActivator.start(BundleContext)]"); + List bundleList = new ArrayList<>(); + + Files.list(BUNDLES_DIR).forEach(path -> { + try { + InputStream inputStream = Files.newInputStream(path); + if (inputStream != null) { + bundleList.add(bundleContext.installBundle(path.toUri().toString(), inputStream)); + } + } catch (IOException | BundleException e) { + e.printStackTrace(); + } + }); + + for (Bundle bundle : bundleList) { + logger.trace("{} | {} | State: {}", bundle.getBundleId(), + bundle.getSymbolicName(), bundle.getState()); + if (bundle.getState() == Bundle.INSTALLED) { + logger.trace("\tStarted"); + } + } + } + + @Override + public void stop(BundleContext bundleContext) throws Exception { + logger.trace("call [HostActivator.stop(BundleContext)]"); + } +} diff --git a/core/src/main/java/asys/core/Main.java b/core/src/main/java/asys/core/Main.java new file mode 100644 index 0000000..dd86d25 --- /dev/null +++ b/core/src/main/java/asys/core/Main.java @@ -0,0 +1,23 @@ +/* + * DmitriyMX + * 2017-03-02 + */ +package asys.core; + +import java.io.IOException; +import java.util.Properties; + +public class Main { + public static void main(String[] args) { + Properties asysProperties = new Properties(); + try { + asysProperties.load(Main.class.getResourceAsStream("/asys.properties")); + } catch (IOException e) { + throw new RuntimeException(e); + } + + Core asysCore = new Core(); + asysCore.setProperties(asysProperties); + asysCore.start(); + } +} diff --git a/core/src/main/resources/asys.properties b/core/src/main/resources/asys.properties new file mode 100644 index 0000000..92b3b63 --- /dev/null +++ b/core/src/main/resources/asys.properties @@ -0,0 +1 @@ +asys.bundles.dir = modules \ No newline at end of file diff --git a/pom.xml b/pom.xml deleted file mode 100644 index e34ebff..0000000 --- a/pom.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - 4.0.0 - ASys Core - - asys - asys-core - jar - 0.0-SNAPSHOT - - - - DmitriyMX - dimon550@gmail.com - - - - - UTF-8 - 1.8 - 1.7.21 - - - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - - org.apache.felix - org.apache.felix.framework - 5.6.1 - - - com.google.guava - guava - 21.0 - - - - - ${project.artifactId}-${project.version} - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - ${java.version} - ${java.version} - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.15 - - -Dfile.encoding=${project.build.sourceEncoding} - - - - - diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..b3d8a7e --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'asys' +include 'core' \ No newline at end of file diff --git a/src/main/java/asys/core/HostActivator.java b/src/main/java/asys/core/HostActivator.java deleted file mode 100644 index 3b2a9b2..0000000 --- a/src/main/java/asys/core/HostActivator.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * DmitriyMX - * 2017-03-02 - */ -package asys.core; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class HostActivator implements BundleActivator { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Override - public void start(BundleContext bundleContext) throws Exception { - logger.trace("call [HostActivator.start(BundleContext)]"); - } - - @Override - public void stop(BundleContext bundleContext) throws Exception { - logger.trace("call [HostActivator.stop(BundleContext)]"); - } -} diff --git a/src/main/java/asys/core/Main.java b/src/main/java/asys/core/Main.java deleted file mode 100644 index cfdd230..0000000 --- a/src/main/java/asys/core/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * DmitriyMX - * 2017-03-02 - */ -package asys.core; - -public class Main { - public static void main(String[] args) { - Core asysCore = new Core(); - asysCore.start(); - } -}