Skip to content

Commit

Permalink
powsybl-config: move StandardPlatformConfigProvider and use a classpa…
Browse files Browse the repository at this point in the history
…th only resolution mechanism

Signed-off-by: Jon Harper <jon.harper87@gmail.com>
  • Loading branch information
jonenst committed Sep 2, 2019
1 parent c03a052 commit 31bb87f
Show file tree
Hide file tree
Showing 11 changed files with 123 additions and 69 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
/commons/target/
/computation-local/target/
/computation/target/
/config-standard/target/
/config-test/target/
/contingency/target/
/contingency/contingency-api/target/
Expand Down
6 changes: 6 additions & 0 deletions action/action-simulator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@
<artifactId>jimfs</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-config-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
6 changes: 6 additions & 0 deletions afs/afs-ws/afs-ws-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-config-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public static WebArchive createTestArchive() {
.loadPomFromFile("pom.xml")
.importRuntimeDependencies()
.resolve("org.mockito:mockito-all",
"com.powsybl:powsybl-config-test",
"com.powsybl:powsybl-afs-mapdb")
.withTransitivity()
.asFile();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
public class InMemoryPlatformConfig extends PlatformConfig {

public InMemoryPlatformConfig(FileSystem fileSystem) {
super(new InMemoryModuleConfigRepository(fileSystem), fileSystem);
super(new InMemoryModuleConfigRepository(fileSystem), fileSystem.getPath("/inmemory"));
}

public MapModuleConfig createModuleConfig(String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.ServiceLoader;
import java.util.stream.Collectors;

/**
*
Expand Down Expand Up @@ -45,42 +43,22 @@ public static synchronized void setDefaultConfig(PlatformConfig defaultConfig) {

public static synchronized PlatformConfig defaultConfig() {
if (defaultConfig == null) {
String configName = System.getProperty(KEY);
if (configName != null) {
List<PlatformConfigProvider> platformConfigProviders = Lists
.newArrayList(ServiceLoader.load(PlatformConfigProvider.class));
Optional<PlatformConfigProvider> foundProvider = platformConfigProviders.stream()
.filter(platformConfigProvider -> configName.equals(platformConfigProvider.getName()))
.findFirst();
if (!foundProvider.isPresent()) {
if (LOGGER.isErrorEnabled()) {
List<String> available = platformConfigProviders.stream().map(PlatformConfigProvider::getName)
.collect(Collectors.toList());
LOGGER.error("Requested platform configuration provider {} = {} not found; available: {}", KEY,
configName, available);
}
} else {
LOGGER.info("Using platform configuration provider {} = {}", KEY, configName);
defaultConfig = foundProvider.get().getPlatformConfig();
}
List<PlatformConfigProvider> providers = Lists.newArrayList(ServiceLoader.load(PlatformConfigProvider.class));
if (providers.size() == 0) {
LOGGER.error("Platform configuration provider not found. For tests, consider using TestPlatformConfigProvider in powsybl-config-test. Otherwise, consider using StandardPlatformConfigProvider from powsybl-config-standard.");
throw new PowsyblException("Platform configuration provider not found");
}
if (defaultConfig == null) {
LOGGER.info("Using default platform configuration provider {}",
StandardPlatformConfigProvider.class.getSimpleName());
defaultConfig = new StandardPlatformConfigProvider().getPlatformConfig();
if (providers.size() > 1) {
LOGGER.error("Multiple platform configuration providers found: {}", providers);
throw new PowsyblException("Multiple platform configuration providers found");
}
PlatformConfigProvider p = providers.get(0);
LOGGER.info("Using platform configuration provider {}", p.getName());
defaultConfig = p.getPlatformConfig();
}
return defaultConfig;
}

public PlatformConfig(ModuleConfigRepository repository) {
this(repository, FileSystems.getDefault());
}

public PlatformConfig(ModuleConfigRepository repository, FileSystem fileSystem) {
this(repository, StandardPlatformConfigProvider.getDefaultConfigDir(fileSystem));
}

public PlatformConfig(ModuleConfigRepository repository, Path configDir) {
this.repository = Objects.requireNonNull(repository);
this.configDir = FileUtil.createDirectory(configDir);
Expand All @@ -101,4 +79,26 @@ public ModuleConfig getModuleConfig(String name) {
public Optional<ModuleConfig> getOptionalModuleConfig(String name) {
return repository.getModuleConfig(name);
}

/**
* Loads a {@link ModuleConfigRepository} from a single directory.
* Reads from yaml file if it exists, else from xml file, else from properties file.
*/
public static ModuleConfigRepository loadModuleRepository(Path configDir, String configName) {
Path yamlConfigFile = configDir.resolve(configName + ".yml");
if (Files.exists(yamlConfigFile)) {
LOGGER.info("Platform configuration defined by YAML file {}", yamlConfigFile);
return new YamlModuleConfigRepository(yamlConfigFile);
} else {
Path xmlConfigFile = configDir.resolve(configName + ".xml");
if (Files.exists(xmlConfigFile)) {
LOGGER.info("Platform configuration defined by XML file {}", xmlConfigFile);
return new XmlModuleConfigRepository(xmlConfigFile);
} else {
LOGGER.info("Platform configuration defined by .properties files of directory {}", configDir);
return new PropertiesModuleConfigRepository(configDir);
}
}
}

}
58 changes: 58 additions & 0 deletions config-standard/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2016, All partners of the iTesla project (http://www.itesla-project.eu/consortium)
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.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">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-core</artifactId>
<version>3.0.0-SNAPSHOT</version>
</parent>

<artifactId>powsybl-config-standard</artifactId>
<name>Config Standard</name>
<description>Standard Config Provider</description>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Automatic-Module-Name>com.powsybl.config-standard</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<!-- Compilation dependencies -->
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-commons</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,24 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.powsybl.commons.config;
package com.powsybl.configstandard;

import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import com.powsybl.commons.config.ModuleConfigRepository;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.config.PlatformConfigProvider;
import com.powsybl.commons.config.PlatformEnv;
import com.powsybl.commons.config.EnvironmentModuleConfigRepository;
import com.powsybl.commons.config.StackedModuleConfigRepository;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -77,35 +83,14 @@ private static Path getDefaultConfigDir(Path[] configDirs) {
*/
private static ModuleConfigRepository loadModuleRepository(Path[] configDirs, String configName) {
List<ModuleConfigRepository> repositoriesFromPath = Arrays.stream(configDirs)
.map(configDir -> loadModuleRepository(configDir, configName))
.map(configDir -> PlatformConfig.loadModuleRepository(configDir, configName))
.collect(Collectors.toList());
List<ModuleConfigRepository> repositories = new ArrayList<>();
repositories.add(new EnvironmentModuleConfigRepository(System.getenv(), FileSystems.getDefault()));
repositories.addAll(repositoriesFromPath);
return new StackedModuleConfigRepository(repositories);
}

/**
* Loads a {@link ModuleConfigRepository} from a single directory.
* Reads from yaml file if it exists, else from xml file, else from properties file.
*/
public static ModuleConfigRepository loadModuleRepository(Path configDir, String configName) {
Path yamlConfigFile = configDir.resolve(configName + ".yml");
if (Files.exists(yamlConfigFile)) {
LOGGER.info("Platform configuration defined by YAML file {}", yamlConfigFile);
return new YamlModuleConfigRepository(yamlConfigFile);
} else {
Path xmlConfigFile = configDir.resolve(configName + ".xml");
if (Files.exists(xmlConfigFile)) {
LOGGER.info("Platform configuration defined by XML file {}", xmlConfigFile);
return new XmlModuleConfigRepository(xmlConfigFile);
} else {
LOGGER.info("Platform configuration defined by .properties files of directory {}", configDir);
return new PropertiesModuleConfigRepository(configDir);
}
}
}

private static ModuleConfigRepository getDefaultModuleRepository(Path[] configDirs) {
String configName = System.getProperty("powsybl.config.name", System.getProperty("itools.config.name", "config"));
return loadModuleRepository(configDirs, configName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.google.common.jimfs.Jimfs;

import com.powsybl.commons.config.ModuleConfigRepository;
import com.powsybl.commons.config.StandardPlatformConfigProvider;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.config.PlatformConfigProvider;

Expand Down Expand Up @@ -72,7 +71,7 @@ public PlatformConfig getPlatformConfig() {
} catch (IOException e) {
throw new UncheckedIOException("Failed to initialize test config", e);
}
ModuleConfigRepository repository = StandardPlatformConfigProvider.loadModuleRepository(cfgDir, CONFIG_NAME);
ModuleConfigRepository repository = PlatformConfig.loadModuleRepository(cfgDir, CONFIG_NAME);
return new PlatformConfig(repository, cfgDir);
}

Expand Down
10 changes: 1 addition & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
<module>computation</module>
<module>computation-local</module>
<module>config-test</module>
<module>config-standard</module>
<module>contingency</module>
<module>distribution-core</module>
<module>dsl</module>
Expand Down Expand Up @@ -223,15 +224,6 @@
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<powsybl.config.provider>test</powsybl.config.provider>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
Expand Down
6 changes: 6 additions & 0 deletions sensitivity-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@
<artifactId>jimfs</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-config-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down

0 comments on commit 31bb87f

Please sign in to comment.