You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2017/06/04 10:20:31 UTC
[4/4] polygene-java git commit: Configuration default back to System
Properties and Environment variables.
Configuration default back to System Properties and Environment variables.
Signed-off-by: niclas <ni...@hedhman.org>
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/05ddab16
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/05ddab16
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/05ddab16
Branch: refs/heads/develop
Commit: 05ddab16a0108b46ac71dd0f05f327f50dd81c1b
Parents: c782f07
Author: niclas <ni...@hedhman.org>
Authored: Sun Jun 4 18:14:54 2017 +0800
Committer: niclas <ni...@hedhman.org>
Committed: Sun Jun 4 18:14:54 2017 +0800
----------------------------------------------------------------------
.../polygene/api/composite/PropertyMapper.java | 2 +-
.../api/configuration/Configuration.java | 68 ++++++++++++++++----
.../ConfigurationInstantiationTest.java | 31 ++++++++-
3 files changed, 85 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/05ddab16/core/api/src/main/java/org/apache/polygene/api/composite/PropertyMapper.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/composite/PropertyMapper.java b/core/api/src/main/java/org/apache/polygene/api/composite/PropertyMapper.java
index acff127..59e1f67 100644
--- a/core/api/src/main/java/org/apache/polygene/api/composite/PropertyMapper.java
+++ b/core/api/src/main/java/org/apache/polygene/api/composite/PropertyMapper.java
@@ -114,7 +114,7 @@ public final class PropertyMapper
}
catch( NoSuchMethodException e )
{
- throw new IllegalArgumentException( "Could not find any property named " + objectObjectEntry.getKey() );
+// throw new IllegalArgumentException( "Could not find any property named " + objectObjectEntry.getKey() );
}
catch( IllegalAccessException e )
{
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/05ddab16/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java b/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
index a47719f..bca886f 100644
--- a/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
+++ b/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
@@ -23,7 +23,10 @@ package org.apache.polygene.api.configuration;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.util.Map;
import java.util.Objects;
+import java.util.Properties;
+import java.util.stream.Stream;
import org.apache.polygene.api.PolygeneAPI;
import org.apache.polygene.api.composite.Composite;
import org.apache.polygene.api.composite.PropertyMapper;
@@ -285,15 +288,19 @@ public interface Configuration<T>
config = tryLoadXmlFile( buildUow, entityDescriptor, identity );
if( config == null )
{
- try
+ config = tryLoadSystemProperties( buildUow, entityDescriptor, identity );
+ if( config == null )
{
- EntityBuilder<V> configBuilder = buildUow.newEntityBuilder(
- serviceModel.<V>configurationType(), identity );
- configBuilder.newInstance();
- }
- catch( ConstraintViolationException e )
- {
- throw new NoSuchConfigurationException( configType, identity, e );
+ try
+ {
+ EntityBuilder<V> configBuilder =
+ buildUow.newEntityBuilder( serviceModel.<V>configurationType(), identity );
+ configBuilder.newInstance();
+ }
+ catch( ConstraintViolationException e )
+ {
+ throw new NoSuchConfigurationException( configType, identity, e );
+ }
}
}
}
@@ -317,10 +324,47 @@ public interface Configuration<T>
}
}
- private <V> V tryLoadPropertiesFile( UnitOfWork buildUow,
- EntityDescriptor configType,
- Identity identity
- )
+ private <V> V tryLoadSystemProperties( UnitOfWork buildUow, EntityDescriptor configType, Identity identity )
+ throws InstantiationException
+ {
+ @SuppressWarnings( "unchecked" )
+ EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( (Class<V>) configType.primaryType(), identity );
+ PropertyMapper.map( systemProperties(), (Composite) configBuilder.instance() );
+ return configBuilder.newInstance();
+ }
+
+ private Properties systemProperties()
+ {
+ Stream<Map.Entry<?, ?>> allProps =
+ Stream.concat( System.getenv().entrySet().stream(), System.getProperties().entrySet().stream() );
+ Properties props = new Properties();
+ allProps.forEach( entry -> props.put( transform( (String) entry.getKey() ), entry.getValue() ) );
+ return props;
+ }
+
+ private String transform( String text )
+ {
+ boolean upper = false;
+ StringBuilder builder = new StringBuilder();
+ for( int i = 0; i < text.length(); i++ )
+ {
+ char ch = Character.toLowerCase( text.charAt( i ) );
+ if( ch == '.' )
+ {
+ upper = true;
+ continue;
+ }
+ if( upper )
+ {
+ ch = Character.toUpperCase( ch );
+ upper = false;
+ }
+ builder.append( ch );
+ }
+ return builder.toString();
+ }
+
+ private <V> V tryLoadPropertiesFile( UnitOfWork buildUow, EntityDescriptor configType, Identity identity )
throws InstantiationException
{
@SuppressWarnings( "unchecked" )
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/05ddab16/core/runtime/src/test/java/org/apache/polygene/runtime/instantiation/ConfigurationInstantiationTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/runtime/instantiation/ConfigurationInstantiationTest.java b/core/runtime/src/test/java/org/apache/polygene/runtime/instantiation/ConfigurationInstantiationTest.java
index 404f793..59b6880 100644
--- a/core/runtime/src/test/java/org/apache/polygene/runtime/instantiation/ConfigurationInstantiationTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/runtime/instantiation/ConfigurationInstantiationTest.java
@@ -44,20 +44,29 @@ public class ConfigurationInstantiationTest extends AbstractPolygeneTest
module.services( MemoryEntityStoreService.class );
module.services( MyService.class ).instantiateOnStartup();
module.configurations( MyConfig.class );
+ System.setProperty( "path", "fakepath" );
}
@Test
public void givenSpecialInitializableWhenStartingExpectOsNameToBeSet()
{
MyService myService = serviceFinder.findService( MyService.class ).get();
- assertThat( myService.osName(), equalTo(System.getProperty( "os.name" )));
+ assertThat( myService.osName(), equalTo( System.getProperty( "os.name" ) ) );
+ if( myService.osName().equalsIgnoreCase( "Linux" ) )
+ {
+ assertThat( myService.home(), equalTo( System.getProperty( "user.home" ) ) );
+ }
+ assertThat( myService.path(), equalTo( System.getProperty( "path" ) ) );
}
-
- @Mixins( MyMixin.class)
+ @Mixins( MyMixin.class )
public interface MyService
{
String osName();
+
+ String home();
+
+ String path();
}
public class MyMixin
@@ -73,6 +82,18 @@ public class ConfigurationInstantiationTest extends AbstractPolygeneTest
}
@Override
+ public String home()
+ {
+ return config.get().home().get();
+ }
+
+ @Override
+ public String path()
+ {
+ return config.get().path().get();
+ }
+
+ @Override
public void create()
throws Exception
{
@@ -90,5 +111,9 @@ public class ConfigurationInstantiationTest extends AbstractPolygeneTest
public interface MyConfig
{
Property<String> osName();
+
+ Property<String> home();
+
+ Property<String> path();
}
}