From 50242ec11f089cefea79a8b71e91d262b3e5062c Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 29 Apr 2017 14:37:59 +0300 Subject: [PATCH] =?UTF-8?q?Core:=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20ASys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/build.gradle | 2 +- core/src/main/java/asys/api/Config.java | 14 ++++++ core/src/main/java/asys/core/ConfigImpl.java | 47 +++++++++++++++++++ core/src/main/java/asys/core/Core.java | 12 ++--- .../main/java/asys/core/HostActivator.java | 14 ++++-- core/src/main/java/asys/core/Main.java | 2 +- 6 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 core/src/main/java/asys/api/Config.java create mode 100644 core/src/main/java/asys/core/ConfigImpl.java diff --git a/core/build.gradle b/core/build.gradle index d29a9de..690b585 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.2-SNAPSHOT' +version = '0.3-SNAPSHOT' apply plugin: 'application' diff --git a/core/src/main/java/asys/api/Config.java b/core/src/main/java/asys/api/Config.java new file mode 100644 index 0000000..b642bfd --- /dev/null +++ b/core/src/main/java/asys/api/Config.java @@ -0,0 +1,14 @@ +/* + * DmitriyMX + * 2017-04-29 + */ +package asys.api; + +public interface Config { + String getString(String key); + String getString(String key, String defaultValue); + int getInt(String key); + int getInt(String key, int defaultValue); + long getLong(String key); + long getLong(String key, long defaultValue); +} diff --git a/core/src/main/java/asys/core/ConfigImpl.java b/core/src/main/java/asys/core/ConfigImpl.java new file mode 100644 index 0000000..c554aed --- /dev/null +++ b/core/src/main/java/asys/core/ConfigImpl.java @@ -0,0 +1,47 @@ +/* + * DmitriyMX + * 2017-04-29 + */ +package asys.core; + +import asys.api.Config; + +import java.util.Properties; + +public class ConfigImpl implements Config { + private Properties properties; + + public void loadByProperties(Properties properties) { + this.properties = properties; + } + + @Override + public String getString(String key) { + return getString(key, null); + } + + @Override + public String getString(String key, String defaultValue) { + return properties.getProperty(key, defaultValue); + } + + @Override + public int getInt(String key) { + return getInt(key, 0); + } + + @Override + public int getInt(String key, int defaultValue) { + return (int) properties.getOrDefault(key, defaultValue); + } + + @Override + public long getLong(String key) { + return getLong(key, 0L); + } + + @Override + public long getLong(String key, long defaultValue) { + return (long) properties.getOrDefault(key, defaultValue); + } +} diff --git a/core/src/main/java/asys/core/Core.java b/core/src/main/java/asys/core/Core.java index f0f2a56..a701e51 100644 --- a/core/src/main/java/asys/core/Core.java +++ b/core/src/main/java/asys/core/Core.java @@ -12,8 +12,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.org.lidalia.sysoutslf4j.context.SysOutOverSLF4J; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import java.util.*; import static org.apache.felix.framework.util.FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP; @@ -22,18 +20,20 @@ public class Core { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private Felix felix; private BundleActivator hostActivator; - private Properties properties; + private ConfigImpl config = new ConfigImpl(); public Core() { logger.trace("core created"); } - public void setProperties(Properties properties) { - this.properties = properties; + public void setConfiguration(Properties properties) { + config.loadByProperties(properties); } public void start() { - hostActivator = new HostActivator(properties.getProperty("asys.bundles.dir")); + hostActivator = new HostActivator( + config.getString("asys.bundles.dir", "modules"), + config); startFelix(); } diff --git a/core/src/main/java/asys/core/HostActivator.java b/core/src/main/java/asys/core/HostActivator.java index c7874d0..17a9dbf 100644 --- a/core/src/main/java/asys/core/HostActivator.java +++ b/core/src/main/java/asys/core/HostActivator.java @@ -4,10 +4,8 @@ */ package asys.core; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; +import asys.api.Config; +import org.osgi.framework.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,13 +20,18 @@ import java.util.List; public class HostActivator implements BundleActivator { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Path BUNDLES_DIR; + private final Config config; + private ServiceRegistration serviceConfig; - public HostActivator(String bundlesDir) { + HostActivator(String bundlesDir, Config config) { this.BUNDLES_DIR = Paths.get(bundlesDir); + this.config = config; } @Override public void start(BundleContext bundleContext) throws Exception { + serviceConfig = bundleContext.registerService(Config.class, config, null); + List bundleList = new ArrayList<>(); Files.list(BUNDLES_DIR).forEach(path -> { @@ -56,5 +59,6 @@ public class HostActivator implements BundleActivator { @Override public void stop(BundleContext bundleContext) throws Exception { logger.trace("call [HostActivator.stop(BundleContext)]"); + serviceConfig.unregister(); } } diff --git a/core/src/main/java/asys/core/Main.java b/core/src/main/java/asys/core/Main.java index cc468e4..4248200 100644 --- a/core/src/main/java/asys/core/Main.java +++ b/core/src/main/java/asys/core/Main.java @@ -15,7 +15,7 @@ public class Main { public static void main(String[] args) { Core asysCore = new Core(); - asysCore.setProperties(getProperties()); + asysCore.setConfiguration(getProperties()); asysCore.start(); }