You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2015/01/04 19:12:53 UTC
[2/2] incubator-tamaya git commit: Removed non core functionality,
adaptedd tests.
Removed non core functionality, adaptedd tests.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/b5731e09
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/b5731e09
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/b5731e09
Branch: refs/heads/master
Commit: b5731e091ff1f7923dcbfe6fa9000b9db3d26308
Parents: 64a6af7
Author: anatole <an...@apache.org>
Authored: Sun Jan 4 19:12:42 2015 +0100
Committer: anatole <an...@apache.org>
Committed: Sun Jan 4 19:12:42 2015 +0100
----------------------------------------------------------------------
.../core/PathBasedPropertySourceProvider.java | 93 ----------
.../core/ResourcePropertySourceProvider.java | 102 -----------
.../core/formats/ConfigurationFormat.java | 53 ------
.../tamaya/core/formats/PropertiesFormat.java | 114 ------------
.../core/formats/PropertiesXmlFormat.java | 115 ------------
.../internal/resource/ClassPathResource.java | 178 -------------------
.../resource/DefaultResourceLoader.java | 93 ----------
.../core/internal/resource/FileResource.java | 162 -----------------
.../internal/resource/InputStreamResource.java | 117 ------------
.../core/internal/resource/UrlResource.java | 135 --------------
.../core/propertysource/BasePropertySource.java | 6 +-
.../core/propertysource/DefaultOrdinal.java | 2 +
.../EnvironmentPropertySource.java | 2 +-
.../propertysource/SystemPropertySource.java | 6 +-
.../core/resources/InputStreamSupplier.java | 37 ----
.../apache/tamaya/core/resources/Resource.java | 114 ------------
.../tamaya/core/resources/ResourceLoader.java | 90 ----------
....apache.tamaya.core.resources.ResourceLoader | 2 +-
.../propertysource/BasePropertySourceTest.java | 4 +-
.../testdata/TestPropertyDefaultSource.java | 51 ++++++
.../TestPropertyDefaultSourceProvider.java | 32 ----
.../testdata/TestPropertySourceProvider.java | 51 +++++-
.../org.apache.tamaya.spi.PropertySource | 19 ++
...org.apache.tamaya.spi.PropertySourceProvider | 1 -
.../resources/cfg/defaults/test1.properties | 20 ---
.../cfg/final/anotherTestFile.properties | 22 ---
.../tamaya/format/ConfigurationFormat.java | 53 ++++++
.../apache/tamaya/format/PropertiesFormat.java | 114 ++++++++++++
.../tamaya/format/PropertiesXmlFormat.java | 115 ++++++++++++
.../tamaya/resource/InputStreamSupplier.java | 37 ++++
.../PathBasedPropertySourceProvider.java | 93 ++++++++++
.../org/apache/tamaya/resource/Resource.java | 114 ++++++++++++
.../apache/tamaya/resource/ResourceLoader.java | 90 ++++++++++
.../ResourcePropertySourceProvider.java | 102 +++++++++++
.../resource/internal/ClassPathResource.java | 178 +++++++++++++++++++
.../internal/DefaultResourceLoader.java | 93 ++++++++++
.../tamaya/resource/internal/FileResource.java | 162 +++++++++++++++++
.../resource/internal/InputStreamResource.java | 117 ++++++++++++
.../tamaya/resource/internal/UrlResource.java | 135 ++++++++++++++
39 files changed, 1530 insertions(+), 1494 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/PathBasedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/PathBasedPropertySourceProvider.java b/core/src/main/java/org/apache/tamaya/core/PathBasedPropertySourceProvider.java
deleted file mode 100644
index 31dbf4b..0000000
--- a/core/src/main/java/org/apache/tamaya/core/PathBasedPropertySourceProvider.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core;
-
-import org.apache.tamaya.core.formats.ConfigurationFormat;
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.core.resources.ResourceLoader;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.ServiceContext;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of a {@link PropertySourceProvider} that reads configuration from some given resource paths
- * and using the given formats. The resource path are resolved using the current
- * {@link org.apache.tamaya.core.resources.ResourceLoader} active.
- */
-public class PathBasedPropertySourceProvider implements PropertySourceProvider {
- /** The logger used. */
- private static final Logger LOG = Logger.getLogger(PathBasedPropertySourceProvider.class.getName());
- /** The property source base name, will be used for creating a useful name of the
- * {@link org.apache.tamaya.spi.PropertySource} created. */
- private String sourceName;
- /** The config formats supported for the given location/resource paths. */
- private List<ConfigurationFormat> configFormats = new ArrayList<>();
- /** The paths to be evaluated. */
- private List<String> paths = new ArrayList<>();
-
- /**
- * Creates a new instance.
- * @param sourceName the base name of the configuration, used for creating PropertySource child names.
- * @param formats the formats to be used, not null, not empty.
- * @param paths the paths to be resolved, not null, not empty.
- */
- public PathBasedPropertySourceProvider(String sourceName, List<ConfigurationFormat> formats, String... paths) {
- this.sourceName = Objects.requireNonNull(sourceName);
- this.configFormats.addAll(Objects.requireNonNull(formats));
- this.paths.addAll(Arrays.asList(Objects.requireNonNull(paths)));
- }
-
- /**
- * Creates a new instance.
- * @param sourceName the base name of the configuration, used for creating PropertySource child names.
- * @param format the format to be used.
- * @param paths the paths to be resolved, not null, not empty.
- */
- public PathBasedPropertySourceProvider(String sourceName, ConfigurationFormat format, String... paths) {
- this.sourceName = Objects.requireNonNull(sourceName);
- this.configFormats.add(Objects.requireNonNull(format));
- this.paths.addAll(Arrays.asList(Objects.requireNonNull(paths)));
- }
-
- @Override
- public Collection<PropertySource> getPropertySources() {
- List<PropertySource> propertySources = new ArrayList<>();
- paths.forEach((path) -> {
- for (Resource res : ServiceContext.getInstance().getService(ResourceLoader.class).get().getResources(path)) {
- try {
- for (ConfigurationFormat format : configFormats) {
- propertySources.addAll(format.readConfiguration(sourceName, res));
- }
- } catch (Exception e) {
- LOG.log(Level.WARNING, "Failed to add resource based config: " + res.getName(), e);
- }
- }
- });
- return propertySources;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/ResourcePropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/ResourcePropertySourceProvider.java b/core/src/main/java/org/apache/tamaya/core/ResourcePropertySourceProvider.java
deleted file mode 100644
index de6b578..0000000
--- a/core/src/main/java/org/apache/tamaya/core/ResourcePropertySourceProvider.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core;
-
-import org.apache.tamaya.core.formats.ConfigurationFormat;
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-import java.util.logging.Logger;
-
-/**
- * Implementation of a {@link org.apache.tamaya.spi.PropertySourceProvider} that is based on a single resource
- * and a number of formats.
- */
-public class ResourcePropertySourceProvider implements PropertySourceProvider {
- /** The logger used. */
- private static final Logger LOG = Logger.getLogger(ResourcePropertySourceProvider.class.getName());
- /** The supported formats. */
- private List<ConfigurationFormat> formats = new ArrayList<>();
- /** The resource. */
- private Resource resource;
- /** The source name used for creating the PropertySource names. */
- private String sourceName;
-
- /**
- * Creates a new instance.
- * @param resource the {@link org.apache.tamaya.core.resources.Resource}, not null.
- * @param formats the supported formats, not empty.
- */
- public ResourcePropertySourceProvider(String sourceName, Resource resource, ConfigurationFormat... formats) {
- this(sourceName, resource, Arrays.asList(formats));
- }
-
- /**
- * Creates a new instance.
- * @param resource the {@link org.apache.tamaya.core.resources.Resource}, not null.
- * @param formats the supported formats, not empty.
- */
- public ResourcePropertySourceProvider(String sourceName, Resource resource, List<ConfigurationFormat> formats) {
- this.resource = Objects.requireNonNull(resource);
- this.sourceName = Objects.requireNonNull(sourceName);
- if(formats.size()==0){
- throw new IllegalArgumentException("Format required.");
- }
- this.formats.addAll(formats);
- }
-
-
- /**
- * Get the underlying resource.
- *
- * @return the underlying resource, never null.
- */
- public Resource getResource() {
- return this.resource;
- }
-
-
- @Override
- public String toString() {
- return "ResourcePropertySourceProvider{" +
- "resource=" + resource +
- ", formats=+" + formats +
- '}';
- }
-
- @Override
- public Collection<PropertySource> getPropertySources() {
- List<PropertySource> propertySources = new ArrayList<>();
- for (ConfigurationFormat format : formats) {
- try {
- propertySources.addAll(format.readConfiguration(sourceName, resource));
- } catch (Exception e) {
- LOG.info(() -> "Format was not matching: " + format + " for resource: " + resource.getName());
- }
- }
- return propertySources;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/formats/ConfigurationFormat.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/formats/ConfigurationFormat.java b/core/src/main/java/org/apache/tamaya/core/formats/ConfigurationFormat.java
deleted file mode 100644
index 5d289bb..0000000
--- a/core/src/main/java/org/apache/tamaya/core/formats/ConfigurationFormat.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.formats;
-
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.io.IOException;
-import java.util.Collection;
-
-/**
- * Implementations current this class encapsulate the mechanism how to read a
- * resource including interpreting the format correctly (e.g. xml vs.
- * properties). In most cases file only contains entries of the same priority, which would then
- * result in only one {@link PropertySource}. Complex file formats, hoiwever, may contain entries
- * of different priorities. In this cases, each ordinal type found must be returned as a separate
- * {@link PropertySource} instance.
- */
-@FunctionalInterface
-public interface ConfigurationFormat {
-
- /**
- * Reads a list {@link org.apache.tamaya.spi.PropertySource} instances from a resource, using this format.
- * If the configuration format only contains entries of one ordinal type, normally only one single
- * instance of PropertySource is returned. Nevertheless custom formats may contain different sections or parts,
- * where each part maps to a different target rdinal (eg defaults, domain config and app config). In the
- * ladder case multiple PropertySources can be returned, each one with its own ordinal and the corresponding
- * entries.
- *
- * @param sourceName name to be used for constructing a useful name for the created
- * {@link org.apache.tamaya.spi.PropertySource} instances.
- * @param resource the configuration resource, not null
- * @return the corresponding {@link org.apache.tamaya.spi.PropertySource} instances, never {@code null}.
- */
- Collection<PropertySource> readConfiguration(String sourceName, Resource resource) throws IOException;
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/formats/PropertiesFormat.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/formats/PropertiesFormat.java b/core/src/main/java/org/apache/tamaya/core/formats/PropertiesFormat.java
deleted file mode 100644
index 3584f8e..0000000
--- a/core/src/main/java/org/apache/tamaya/core/formats/PropertiesFormat.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.formats;
-
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of a {@link org.apache.tamaya.core.formats.ConfigurationFormat} for -properties files.
- *
- * @see java.util.Properties#load(java.io.InputStream)
- */
-public class PropertiesFormat implements ConfigurationFormat {
- /**
- * The logger.
- */
- private final static Logger LOG = Logger.getLogger(PropertiesFormat.class.getName());
-
- /**
- * The target ordinal.
- */
- private int ordinal;
-
- /**
- * Creates a new format instance, hereby producing entries with the given ordinal, if not overridden by the
- * configuration itself.
- * TODO document and implement override feature
- * @param ordinal the target ordinal.
- */
- public PropertiesFormat(int ordinal) {
- this.ordinal = ordinal;
- }
-
- /**
- * Get the target ordinal, produced by this format.
- *
- * @return the target ordinal
- */
- public int getOrdinal() {
- return ordinal;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Collection<PropertySource> readConfiguration(String baseName, Resource resource) {
- final String sourceName = (baseName==null?"Properties:":baseName) + resource.getName();
- if (resource.exists()) {
- List<PropertySource> propertySources = new ArrayList<>();
- try (InputStream is = resource.getInputStream()) {
- final Properties p = new Properties();
- p.load(is);
- propertySources.add(new PropertySource() {
- @Override
- public int getOrdinal() {
- return ordinal;
- }
-
- @Override
- public String getName() {
- return sourceName;
- }
-
- @Override
- public Optional<String> get(String key) {
- return Optional.ofNullable(p.getProperty(key));
- }
-
- @Override
- public Map<String, String> getProperties() {
- return Map.class.cast(p);
- }
- });
- return propertySources;
- } catch (Exception e) {
- LOG.log(Level.FINEST, e, () -> "Failed to read config from resource: " + resource);
- }
- }
- return Collections.emptyList();
- }
-
- @Override
- public String toString() {
- return "PropertiesFormat{" +
- "ordinal=" + ordinal +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/formats/PropertiesXmlFormat.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/formats/PropertiesXmlFormat.java b/core/src/main/java/org/apache/tamaya/core/formats/PropertiesXmlFormat.java
deleted file mode 100644
index 3f77810..0000000
--- a/core/src/main/java/org/apache/tamaya/core/formats/PropertiesXmlFormat.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.formats;
-
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of a {@link org.apache.tamaya.core.formats.ConfigurationFormat} for xml property
- * files.
- *
- * @see java.util.Properties#loadFromXML(java.io.InputStream)
- */
-public class PropertiesXmlFormat implements ConfigurationFormat {
- /**
- * The logger.
- */
- private final static Logger LOG = Logger.getLogger(PropertiesXmlFormat.class.getName());
-
- /**
- * The target ordinal.
- */
- private int ordinal;
-
- /**
- * Creates a new format instance, producing entries for the given ordinal, if not overridden by a
- * config entry itself.
- * TODO document and implement override feature
- * @param ordinal the target ordinal.
- */
- public PropertiesXmlFormat(int ordinal) {
- this.ordinal = ordinal;
- }
-
- /**
- * Get the target ordinal, produced by this format.
- *
- * @return the target ordinal
- */
- public int getOrdinal() {
- return ordinal;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Collection<PropertySource> readConfiguration(String baseName, Resource resource) {
- if (resource.exists()) {
- final String sourceName = (baseName==null?"Properties:":baseName) + resource.getName();
- List<PropertySource> propertySources = new ArrayList<>();
- try (InputStream is = resource.getInputStream()) {
- final Properties p = new Properties();
- p.loadFromXML(is);
- propertySources.add(new PropertySource() {
- @Override
- public int getOrdinal() {
- return ordinal;
- }
-
- @Override
- public String getName() {
- return sourceName;
- }
-
- @Override
- public Optional<String> get(String key) {
- return Optional.ofNullable(p.getProperty(key));
- }
-
- @Override
- public Map<String, String> getProperties() {
- return Map.class.cast(p);
- }
- });
- return propertySources;
- } catch (Exception e) {
- LOG.log(Level.FINEST, e, () -> "Failed to read config from resource: " + resource);
- }
- }
- return Collections.emptyList();
- }
-
- @Override
- public String toString() {
- return "PropertiesXmlFormat{" +
- "ordinal=" + ordinal +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/internal/resource/ClassPathResource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/internal/resource/ClassPathResource.java b/core/src/main/java/org/apache/tamaya/core/internal/resource/ClassPathResource.java
deleted file mode 100644
index 21806cd..0000000
--- a/core/src/main/java/org/apache/tamaya/core/internal/resource/ClassPathResource.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.internal.resource;
-
-import org.apache.tamaya.core.resources.Resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Objects;
-
-/**
- * Implementation of {@link Resource} to be loaded from the classpath.
- */
-public class ClassPathResource implements Resource {
-
- private final String path;
-
- private ClassLoader classLoader;
-
-
- /**
- * Create a new resource using the current context class loader.
- *
- * @param path the resource path, not null
- * @see java.lang.ClassLoader#getResourceAsStream(String)
- */
- public ClassPathResource(String path) {
- this(path, (ClassLoader) null);
- }
-
- /**
- * Create a new resource using the given class loader.
- *
- * @param path the resource path, not null
- * @param classLoader the class loader to load the resource with,
- * or {@code null} for the current context class loader
- * @see ClassLoader#getResourceAsStream(String)
- */
- public ClassPathResource(String path, ClassLoader classLoader) {
- Objects.requireNonNull(path, "Path null");
- if (path.startsWith("/")) {
- path = path.substring(1);
- }
- this.path = path.trim();
- if(classLoader==null){
- classLoader = Thread.currentThread().getContextClassLoader();
- }
- if(classLoader==null){
- classLoader = getClass().getClassLoader();
- }
- this.classLoader = classLoader;
- }
-
- /**
- * @return the path for this resource.
- */
- public final String getPath() {
- return this.path;
- }
-
- /**
- * @return the ClassLoader that this resource will be accessed from.
- */
- public final ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
-
- /**
- * Checks if the given resource is resolvable from the configured classloader.
- *
- * @see java.lang.ClassLoader#getResource(String)
- */
- @Override
- public boolean exists() {
- return (resolveURL() != null);
- }
-
- /**
- * Resolves a URL for the underlying class path resource.
- *
- * @return the resolved URL, or {@code null}
- */
- protected URL resolveURL() {
- return this.classLoader.getResource(this.path);
- }
-
- /**
- * This implementation opens an InputStream for the given class path resource.
- *
- * @see java.lang.ClassLoader#getResourceAsStream(String)
- * @see java.lang.Class#getResourceAsStream(String)
- */
- @Override
- public InputStream getInputStream() throws IOException {
- InputStream is = this.classLoader.getResourceAsStream(this.path);
- if (is == null) {
- throw new IOException(getName() + " does not exist");
- }
- return is;
- }
-
- @Override
- public URI toURI() throws IOException {
- try {
- return resolveURL().toURI();
- } catch (URISyntaxException e) {
- throw new IOException(e);
- }
- }
-
- @Override
- public long lastModified() throws IOException {
- return 0;
- }
-
- /**
- * This implementation returns the name current the file that this class path
- * resource refers to.
- */
- @Override
- public String getName() {
- return "classpath:"+path;
- }
-
- /**
- * This implementation returns a description that includes the class path location.
- */
- @Override
- public String toString() {
- return "ClassPathResource[" + path + ']';
- }
-
- /**
- * This implementation compares the underlying class path locations.
- */
- @Override
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- }
- if (obj instanceof ClassPathResource) {
- ClassPathResource otherRes = (ClassPathResource) obj;
- return (this.path.equals(otherRes.path) &&
- Objects.equals(this.classLoader, otherRes.classLoader));
- }
- return false;
- }
-
- /**
- * This implementation returns the hash code current the underlying
- * class path location.
- */
- @Override
- public int hashCode() {
- return getName().hashCode();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/internal/resource/DefaultResourceLoader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/internal/resource/DefaultResourceLoader.java b/core/src/main/java/org/apache/tamaya/core/internal/resource/DefaultResourceLoader.java
deleted file mode 100644
index 5198717..0000000
--- a/core/src/main/java/org/apache/tamaya/core/internal/resource/DefaultResourceLoader.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.internal.resource;
-
-import org.apache.tamaya.core.resources.Resource;
-import org.apache.tamaya.core.resources.ResourceLoader;
-
-import javax.annotation.Priority;
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Simple default implementation of the resource loader, which does only support direct references to files.
- */
-@Priority(0)
-public class DefaultResourceLoader implements ResourceLoader {
-
- private static final Logger LOG = Logger.getLogger(DefaultResourceLoader.class.getName());
-
- @Override
- public List<Resource> getResources(ClassLoader classLoader, Collection<String> expressions) {
- List<Resource> resources = new ArrayList<>();
- for (String expression : expressions) {
- if (tryClassPath(classLoader, expression, resources) || tryFile(expression, resources) ||
- tryURL(expression, resources)) {
- continue;
- }
- LOG.warning("Failed to resolve resource: " + expression);
- }
- return resources;
- }
-
- private boolean tryClassPath(ClassLoader classLoader, String expression, List<Resource> resources) {
- try {
- Enumeration<URL> urls = classLoader.getResources(expression);
- while (urls.hasMoreElements()) {
- URL url = urls.nextElement();
- resources.add(new UrlResource(url));
- }
- return !resources.isEmpty();
- } catch (Exception e) {
- LOG.finest(() -> "Failed to load resource from CP: " + expression);
- }
- return false;
- }
-
- private boolean tryFile(String expression, List<Resource> resources) {
- try {
- File file = new File(expression);
- if (file.exists()) {
- resources.add(new FileResource(file));
- return true;
- }
- } catch (Exception e) {
- LOG.finest(() -> "Failed to load resource from file: " + expression);
- }
- return false;
- }
-
- private boolean tryURL(String expression, List<Resource> resources) {
- try {
- URL url = new URL(expression);
- resources.add(new UrlResource(url));
- return true;
- } catch (Exception e) {
- LOG.finest(() -> "Failed to load resource from file: " + expression);
- }
- return false;
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/internal/resource/FileResource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/internal/resource/FileResource.java b/core/src/main/java/org/apache/tamaya/core/internal/resource/FileResource.java
deleted file mode 100644
index e0096e5..0000000
--- a/core/src/main/java/org/apache/tamaya/core/internal/resource/FileResource.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.internal.resource;
-
-import org.apache.tamaya.core.resources.Resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.Objects;
-
-/**
- * Implementation of {@link org.apache.tamaya.core.resources.Resource} to be loaded from a file.
- * @see java.io.File
- */
-public class FileResource implements Resource {
-
- private final File file;
-
- /**
- * Creates a new instance.
- *
- * @param file a File, not null.
- */
- public FileResource(File file) {
- this.file = Objects.requireNonNull(file, "File must not be null");
- }
-
- /**
- * Crreates a new instance.
- *
- * @param filePath a file path
- */
- public FileResource(String filePath) {
- Objects.requireNonNull(filePath, "Path must not be null");
- this.file = new File(filePath);
- }
-
-
- /**
- * Get the file path for this resource.
- */
- public final String getPath() {
- return this.file.getPath();
- }
-
-
- /**
- * This implementation returns whether the underlying file exists.
- *
- * @see java.io.File#exists()
- */
- @Override
- public boolean exists() {
- return this.file.exists();
- }
-
- /**
- * This implementation checks whether the underlying file is marked as readable
- * (and corresponds to an actual file with content, not to a directory).
- *
- * @see java.io.File#canRead()
- * @see java.io.File#isDirectory()
- */
- @Override
- public boolean isAccessible() {
- return (this.file.canRead() && !this.file.isDirectory());
- }
-
- /**
- * This implementation opens a FileInputStream for the underlying file.
- *
- * @see java.io.FileInputStream
- */
- @Override
- public InputStream getInputStream() throws IOException {
- return new FileInputStream(this.file);
- }
-
- /**
- * This implementation returns a URI for the underlying file.
- *
- * @see java.io.File#toURI()
- */
- @Override
- public URI toURI() throws IOException {
- return this.file.toURI();
- }
-
- /**
- * Returns the underlying File's length.
- */
- @Override
- public long length() throws IOException {
- return this.file.length();
- }
-
- @Override
- public long lastModified() throws IOException {
- return file.lastModified();
- }
-
- /**
- * Returns the name of the current file.
- *
- * @see java.io.File#getName()
- */
- @Override
- public String getName() {
- return this.file.getName();
- }
-
- /**
- * Returns a description that includes the absolute
- * path of the current file.
- *
- * @see java.io.File#getAbsolutePath()
- */
- @Override
- public String toString() {
- return "File [" + this.file.getAbsolutePath() + "]";
- }
-
-
- // implementation current WritableResource
-
- /**
- * Compares the underlying Files.
- */
- @Override
- public boolean equals(Object obj) {
- return (obj == this ||
- (obj instanceof FileResource && this.file.equals(((FileResource) obj).file)));
- }
-
- /**
- * Returns hash code current the underlying File reference.
- */
- @Override
- public int hashCode() {
- return this.file.hashCode();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/internal/resource/InputStreamResource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/internal/resource/InputStreamResource.java b/core/src/main/java/org/apache/tamaya/core/internal/resource/InputStreamResource.java
deleted file mode 100644
index 09510b4..0000000
--- a/core/src/main/java/org/apache/tamaya/core/internal/resource/InputStreamResource.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.internal.resource;
-
-import org.apache.tamaya.core.resources.Resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.Objects;
-
-/**
- * Simple Resource encapsulating an InputStream.
- */
-public class InputStreamResource implements Resource {
-
- /** The InputStream. */
- private final InputStream inputStream;
- /** The read flag. */
- private boolean read = false;
- /** The name of the resource. */
- private String name;
-
-
- /**
- * Create a new InputStreamResource.
- *
- * @param inputStream the InputStream to use
- */
- public InputStreamResource(InputStream inputStream) {
- this(inputStream, "InputStream:");
- }
-
- /**
- * Create a new InputStreamResource.
- *
- * @param inputStream the InputStream to use
- * @param name where the InputStream comes from
- */
- public InputStreamResource(InputStream inputStream, String name) {
- this.inputStream = Objects.requireNonNull(inputStream);
- this.name = (name != null ? name : "InputStream");
- }
-
-
- /**
- * This implementation always returns {@code true}.
- */
- @Override
- public boolean exists() {
- return true;
- }
-
- @Override
- public URI toURI() throws IOException {
- throw new IOException("URI not available.");
- }
-
- @Override
- public long lastModified() throws IOException {
- throw new IOException("lastModified not available.");
- }
-
- /**
- * Accesses the input stream. Hereby the input stream can only accessed once.
- */
- @Override
- public InputStream getInputStream() throws IOException {
- if (this.read) {
- throw new IllegalStateException("InputStream can only be read once!");
- }
- this.read = true;
- return this.inputStream;
- }
-
- /**
- * This implementation returns the passed-in description, if any.
- */
- public String toString() {
- return this.name != null ? this.name : super.toString();
- }
-
-
- /**
- * Compares the underlying InputStream.
- */
- @Override
- public boolean equals(Object obj) {
- return (obj == this ||
- (obj instanceof InputStreamResource && ((InputStreamResource) obj).inputStream.equals(this.inputStream)));
- }
-
- /**
- * This implementation returns the hash code current the underlying InputStream.
- */
- @Override
- public int hashCode() {
- return this.inputStream.hashCode();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/internal/resource/UrlResource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/internal/resource/UrlResource.java b/core/src/main/java/org/apache/tamaya/core/internal/resource/UrlResource.java
deleted file mode 100644
index 3a74608..0000000
--- a/core/src/main/java/org/apache/tamaya/core/internal/resource/UrlResource.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.internal.resource;
-
-import org.apache.tamaya.core.resources.Resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Objects;
-
-/**
- * Implementation of a resource based on a {@code java.net.URL}.
- */
-public class UrlResource implements Resource {
-
- /**
- * Original URL, used for actual access.
- */
- private final URL url;
-
- /**
- * Create a new instance based on the given URL.
- *
- * @param url a URL
- */
- public UrlResource(URL url) {
- this.url = Objects.requireNonNull(url, "URL null");
- }
-
- /**
- * Create a new URLResource based on a URL path.
- *
- * @param path a URL path
- * @throws MalformedURLException if the given URL path is not valid
- * @see java.net.URL#URL(String)
- */
- public UrlResource(String path) throws MalformedURLException {
- Objects.requireNonNull(path, "Path must not be null");
- this.url = new URL(path);
- }
-
-
- /**
- * This implementation opens an InputStream for the given URL.
- *
- * @see java.net.URL#openConnection()
- * @see java.net.URLConnection#setUseCaches(boolean)
- * @see java.net.URLConnection#getInputStream()
- */
- @Override
- public InputStream getInputStream() throws IOException {
- URLConnection con = null;
- try {
- con = this.url.openConnection();
- useCachesIfNecessary(con);
- return con.getInputStream();
- } catch (IOException e) {
- if (con instanceof HttpURLConnection) {
- ((HttpURLConnection) con).disconnect();
- }
- throw e;
- }
- }
-
- @Override
- public URI toURI() throws IOException {
- try {
- return this.url.toURI();
- } catch (URISyntaxException e) {
- throw new IOException("Failed to create URI from " + url);
- }
- }
-
- @Override
- public String getName() {
- return this.url.toString();
- }
-
- @Override
- public String toString() {
- return "URL [" + this.url + "]";
- }
-
- /**
- * Compares the underlying URL references.
- */
- @Override
- public boolean equals(Object obj) {
- return (obj == this ||
- (obj instanceof UrlResource && this.url.equals(((UrlResource) obj).url)));
- }
-
- /**
- * This implementation returns the hash code current the underlying URL reference.
- */
- @Override
- public int hashCode() {
- return this.url.hashCode();
- }
-
- /**
- * Set the {@link URLConnection#setUseCaches "useCaches"} flag on the
- * given connection, preferring {@code false} but leaving the
- * flag at {@code true} for JNLP based resources.
- *
- * @param con the URLConnection to set the flag on
- */
- private void useCachesIfNecessary(URLConnection con) {
- con.setUseCaches(con.getClass().getSimpleName().startsWith("JNLP"));
- }
-
-}
-
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java b/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
index 2a0107c..e58be54 100644
--- a/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
+++ b/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
@@ -26,7 +26,9 @@ import java.util.logging.Level;
import java.util.logging.Logger;
/**
- * Base class for {@link PropertySource}s
+ * A base class for {@link PropertySource}s. It provides a {@link #initializeOrdinal(int)} method that
+ * reads the ordinal from the config source itself, allowing the ordinal to be "self-configured" by
+ * the configuration read.
*/
public abstract class BasePropertySource implements PropertySource {
@@ -57,7 +59,7 @@ public abstract class BasePropertySource implements PropertySource {
*
* @param defaultOrdinal of the {@link PropertySource}
*/
- protected void initialzeOrdinal(final int defaultOrdinal) {
+ protected void initializeOrdinal(final int defaultOrdinal) {
this.ordinal = defaultOrdinal;
Optional<String> ordinal = get(PropertySource.TAMAYA_ORDINAL);
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/propertysource/DefaultOrdinal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/propertysource/DefaultOrdinal.java b/core/src/main/java/org/apache/tamaya/core/propertysource/DefaultOrdinal.java
index 38ec905..9e5d5dc 100644
--- a/core/src/main/java/org/apache/tamaya/core/propertysource/DefaultOrdinal.java
+++ b/core/src/main/java/org/apache/tamaya/core/propertysource/DefaultOrdinal.java
@@ -36,6 +36,8 @@ public final class DefaultOrdinal {
*/
public static final int PROPERTY_SOURCE = 1000;
+ //X TODO disuss default ordinal of SystemProperties
+
/**
* default ordinal for {@link org.apache.tamaya.core.propertysource.SystemPropertySource}
*/
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java b/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
index d1a00f4..596ea73 100644
--- a/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
+++ b/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
@@ -29,7 +29,7 @@ import java.util.Map;
public class EnvironmentPropertySource extends BasePropertySource {
public EnvironmentPropertySource() {
- initialzeOrdinal(DefaultOrdinal.ENVIRONMENT_PROPERTIES);
+ initializeOrdinal(DefaultOrdinal.ENVIRONMENT_PROPERTIES);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java b/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
index afd9f93..e06e185 100644
--- a/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
+++ b/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
@@ -28,10 +28,6 @@ import java.util.Properties;
*/
public class SystemPropertySource extends BasePropertySource {
-
- //X TODO disuss default ordinal of SystemProperties
-
-
/**
* cashed System.getProperties() filled in our Map
*/
@@ -45,7 +41,7 @@ public class SystemPropertySource extends BasePropertySource {
public SystemPropertySource() {
- initialzeOrdinal(DefaultOrdinal.SYSTEM_PROPERTIES);
+ initializeOrdinal(DefaultOrdinal.SYSTEM_PROPERTIES);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/resources/InputStreamSupplier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/resources/InputStreamSupplier.java b/core/src/main/java/org/apache/tamaya/core/resources/InputStreamSupplier.java
deleted file mode 100644
index 4da6c53..0000000
--- a/core/src/main/java/org/apache/tamaya/core/resources/InputStreamSupplier.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.resources;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Simple interface for a component that provides data based on an InputStream.
- */
-@FunctionalInterface
-public interface InputStreamSupplier {
-
- /**
- * Access the input stream.
- * @return the input stream for use.
- * @throws IOException i the input stream could not be obtained.
- */
- InputStream getInputStream() throws IOException;
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/resources/Resource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/resources/Resource.java b/core/src/main/java/org/apache/tamaya/core/resources/Resource.java
deleted file mode 100644
index 7e17d1b..0000000
--- a/core/src/main/java/org/apache/tamaya/core/resources/Resource.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.resources;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.Objects;
-
-/**
- * Interface for an abstract resource. The effective resource implementation can be completely arbitrary.
- * By default files, classpath resources and URLs are supported, but alternate implementations are possible.
- *
- * @see #getInputStream()
- * @see #toURI()
- */
-public interface Resource extends InputStreamSupplier {
-
- /**
- * Return whether this resource actually exists. Depending on the resource this can delegate to
- * {@link java.io.File#exists()} or whatever may be appropriate to check accessibility of the resource.
- */
- default boolean exists() {
- // Try to open a file first, if that fails try to open the stream...
- try {
- return new File(toURI()).exists();
- } catch (IOException ex) {
- // Fallback
- try {
- InputStream is = getInputStream();
- is.close();
- return true;
- } catch (Exception e) {
- // ignore, just return false for non existing
- return false;
- }
- }
- }
-
- /**
- * Checks whether the resource is accessible, meaning {@link #getInputStream()} should return a InputStream for reading the
- * resource's content.
- *
- * @see #getInputStream()
- */
- default boolean isAccessible() {
- return true;
- }
-
- /**
- * Returns the resource as an URI.
- *
- * @throws IOException if the resource cannot be resolved as URI.
- */
- URI toURI() throws IOException;
-
- /**
- * Determines the length for this resource.
- *
- * @throws IOException if the resource is not readable.
- */
- default long length() throws IOException {
- try(InputStream is = this.getInputStream();) {
- Objects.requireNonNull(is, "resource not available");
- long length = 0;
- byte[] buf = new byte[256];
- int bytesRead;
- while ((bytesRead = is.read(buf)) > 0) {
- length += bytesRead;
- }
- return length;
- }
- }
-
- /**
- * Determine the last-modified timestamp for a resource, as UTC ms timestamp
- *
- * @throws IOException if the resource is not accessible.
- */
- default long lastModified() throws IOException{
- return new File(toURI()).lastModified();
- }
-
- /**
- * Get a name for the resource. The name should be identifying the resource and also
- * never change, so it must be eligible for hashcode/equals implementations.
- */
- default String getName() {
- try {
- return toURI().toString();
- } catch (Exception e) {
- return toString();
- }
- }
-
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/java/org/apache/tamaya/core/resources/ResourceLoader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/resources/ResourceLoader.java b/core/src/main/java/org/apache/tamaya/core/resources/ResourceLoader.java
deleted file mode 100644
index 0f33201..0000000
--- a/core/src/main/java/org/apache/tamaya/core/resources/ResourceLoader.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.resources;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Interface to be implemented by modules. By default only direct file/resource resolution is supported, whereas
- * extension modules may add functionality to perform ant styled pattern resolution of resources.
- */
-public interface ResourceLoader {
-
- /**
- * Resolves resource expressions to a list of {@link org.apache.tamaya.core.resources.Resource}s. Hereby
- * the ordering of resources matches the input of the resolved expressions. Nevertheless be aware that
- * there is no determined ordering of resources located within a classloader.
- *
- * @param expressions the expressions to be resolved, not empty.
- * @return the corresponding collection of current {@link org.apache.tamaya.core.resources.Resource}s found, never
- * null.
- * .
- */
- default Collection<Resource> getResources(Collection<String> expressions) {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if (cl == null) {
- cl = getClass().getClassLoader();
- }
- return getResources(cl, expressions);
- }
-
- /**
- * Resolves resource expressions to a list of {@link org.apache.tamaya.core.resources.Resource}s. Hereby
- * the ordering of resources matches the input of the resolved expressions. Nevertheless be aware that
- * there is no determined ordering of resources located within a classloader.
- *
- * @param expressions the expressions to be resolved, not empty.
- * @return the corresponding collection of current {@link org.apache.tamaya.core.resources.Resource}s found, never
- * null.
- * .
- */
- default Collection<Resource> getResources(String... expressions) {
- return getResources(Arrays.asList(expressions));
- }
-
- /**
- * Resolves resource expressions to a list of {@link org.apache.tamaya.core.resources.Resource}s, considerubg
- * the given classloader for classloader dependent resources. Hereby
- * the ordering of resources matches the input of the resolved expressions. Nevertheless be aware that
- * there is no determined ordering of resources located within a classloader.
- *
- * @param expressions the expressions to be resolved, not empty.
- * @return the corresponding collection of current {@link org.apache.tamaya.core.resources.Resource}s found, never
- * null.
- * .
- */
- default Collection<Resource> getResources(ClassLoader classLoader, String... expressions){
- return getResources(classLoader, Arrays.asList(expressions));
- }
-
- /**
- * Resolves resource expressions to a list of {@link org.apache.tamaya.core.resources.Resource}s, considerubg
- * the given classloader for classloader dependent resources. Hereby
- * the ordering of resources matches the input of the resolved expressions. Nevertheless be aware that
- * there is no determined ordering of resources located within a classloader.
- *
- * @param expressions the expressions to be resolved, not empty.
- * @return the corresponding collection of current {@link org.apache.tamaya.core.resources.Resource}s found, never
- * null.
- * .
- */
- Collection<Resource> getResources(ClassLoader classLoader, Collection<String> expressions);
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/main/resources/META-INF/services/org.apache.tamaya.core.resources.ResourceLoader
----------------------------------------------------------------------
diff --git a/core/src/main/resources/META-INF/services/org.apache.tamaya.core.resources.ResourceLoader b/core/src/main/resources/META-INF/services/org.apache.tamaya.core.resources.ResourceLoader
index d3242e4..a964d3c 100644
--- a/core/src/main/resources/META-INF/services/org.apache.tamaya.core.resources.ResourceLoader
+++ b/core/src/main/resources/META-INF/services/org.apache.tamaya.core.resources.ResourceLoader
@@ -16,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.tamaya.core.internal.resource.DefaultResourceLoader
+org.apache.tamaya.resource.internal.DefaultResourceLoader
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/java/org/apache/tamaya/core/test/propertysource/BasePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/tamaya/core/test/propertysource/BasePropertySourceTest.java b/core/src/test/java/org/apache/tamaya/core/test/propertysource/BasePropertySourceTest.java
index 357a262..d6dc867 100644
--- a/core/src/test/java/org/apache/tamaya/core/test/propertysource/BasePropertySourceTest.java
+++ b/core/src/test/java/org/apache/tamaya/core/test/propertysource/BasePropertySourceTest.java
@@ -67,7 +67,7 @@ public class BasePropertySourceTest {
private static class OverriddenOrdinalPropertySource extends BasePropertySource {
private OverriddenOrdinalPropertySource() {
- initialzeOrdinal(250);
+ initializeOrdinal(250);
}
@Override
@@ -86,7 +86,7 @@ public class BasePropertySourceTest {
private static class OverriddenInvalidOrdinalPropertySource extends BasePropertySource {
private OverriddenInvalidOrdinalPropertySource() {
- initialzeOrdinal(1);
+ initializeOrdinal(1);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSource.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSource.java b/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSource.java
new file mode 100644
index 0000000..b67d17e
--- /dev/null
+++ b/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSource.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.testdata;
+
+import org.apache.tamaya.core.propertysource.BasePropertySource;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Test provider reading properties from classpath:cfg/defaults/**.properties.
+ */
+public class TestPropertyDefaultSource extends BasePropertySource{
+
+ private Map<String,String> properties = new HashMap<>();
+
+ public TestPropertyDefaultSource() {
+ initializeOrdinal(100);
+ properties.put("name","Anatole");
+ properties.put("name2","Sabine");
+ properties = Collections.unmodifiableMap(properties);
+ }
+
+ @Override
+ public String getName() {
+ return "default-testdata-properties";
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSourceProvider.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSourceProvider.java b/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSourceProvider.java
deleted file mode 100644
index dffe67d..0000000
--- a/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyDefaultSourceProvider.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License 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 org.apache.tamaya.core.testdata;
-
-import org.apache.tamaya.core.PathBasedPropertySourceProvider;
-import org.apache.tamaya.core.formats.PropertiesFormat;
-
-/**
- * Test provider reading properties from classpath:cfg/defaults/**.properties.
- */
-public class TestPropertyDefaultSourceProvider extends PathBasedPropertySourceProvider{
-
- public TestPropertyDefaultSourceProvider() {
- super("default-testdata-properties", new PropertiesFormat(100), "cfg/defaults/test1.properties");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertySourceProvider.java b/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertySourceProvider.java
index 718aaae..902027b 100644
--- a/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertySourceProvider.java
+++ b/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertySourceProvider.java
@@ -18,15 +18,56 @@
*/
package org.apache.tamaya.core.testdata;
-import org.apache.tamaya.core.PathBasedPropertySourceProvider;
-import org.apache.tamaya.core.formats.PropertiesFormat;
+import org.apache.tamaya.core.propertysource.BasePropertySource;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* Test provider reading properties from classpath:cfg/final/**.properties.
*/
-public class TestPropertySourceProvider extends PathBasedPropertySourceProvider{
+public class TestPropertySourceProvider implements PropertySourceProvider {
+
+ private List<PropertySource> list = new ArrayList<>();
+
+ public TestPropertySourceProvider(){
+ list.add(new MyPropertySource());
+ list = Collections.unmodifiableList(list);
+ }
- public TestPropertySourceProvider() {
- super("final-testdata-properties", new PropertiesFormat(200), "cfg/final/anotherTestFile.properties");
+ @Override
+ public Collection<PropertySource> getPropertySources() {
+ return list;
}
+
+ private static class MyPropertySource extends BasePropertySource {
+
+ private Map<String, String> properties = new HashMap<>();
+
+ public MyPropertySource() {
+ initializeOrdinal(200);
+ properties.put("name", "Robin");
+ properties.put("name3", "Lukas");
+ properties.put("name4", "Sereina");
+ properties.put("name5", "Benjamin");
+ properties = Collections.unmodifiableMap(properties);
+ }
+
+ @Override
+ public String getName() {
+ return "final-testdata-properties";
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
new file mode 100644
index 0000000..2b774a9
--- /dev/null
+++ b/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy current the License 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.
+#
+org.apache.tamaya.core.testdata.TestPropertyDefaultSource
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
index 9db0ef4..c45e07c 100644
--- a/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ b/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -16,5 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.tamaya.core.testdata.TestPropertyDefaultSourceProvider
org.apache.tamaya.core.testdata.TestPropertySourceProvider
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/resources/cfg/defaults/test1.properties
----------------------------------------------------------------------
diff --git a/core/src/test/resources/cfg/defaults/test1.properties b/core/src/test/resources/cfg/defaults/test1.properties
deleted file mode 100644
index 17a854d..0000000
--- a/core/src/test/resources/cfg/defaults/test1.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy current the License 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.
-#
-name=Anatole
-name2=Sabine
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/core/src/test/resources/cfg/final/anotherTestFile.properties
----------------------------------------------------------------------
diff --git a/core/src/test/resources/cfg/final/anotherTestFile.properties b/core/src/test/resources/cfg/final/anotherTestFile.properties
deleted file mode 100644
index 9e405f6..0000000
--- a/core/src/test/resources/cfg/final/anotherTestFile.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy current the License 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.
-#
-name=Robin
-name3=Lukas
-name4=Sereina
-name5=Benjamin
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/modules/formats/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
----------------------------------------------------------------------
diff --git a/modules/formats/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java b/modules/formats/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
new file mode 100644
index 0000000..46865b0
--- /dev/null
+++ b/modules/formats/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License 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 org.apache.tamaya.format;
+
+import org.apache.tamaya.core.resources.Resource;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * Implementations current this class encapsulate the mechanism how to read a
+ * resource including interpreting the format correctly (e.g. xml vs.
+ * properties). In most cases file only contains entries of the same priority, which would then
+ * result in only one {@link PropertySource}. Complex file formats, hoiwever, may contain entries
+ * of different priorities. In this cases, each ordinal type found must be returned as a separate
+ * {@link PropertySource} instance.
+ */
+@FunctionalInterface
+public interface ConfigurationFormat {
+
+ /**
+ * Reads a list {@link org.apache.tamaya.spi.PropertySource} instances from a resource, using this format.
+ * If the configuration format only contains entries of one ordinal type, normally only one single
+ * instance of PropertySource is returned. Nevertheless custom formats may contain different sections or parts,
+ * where each part maps to a different target rdinal (eg defaults, domain config and app config). In the
+ * ladder case multiple PropertySources can be returned, each one with its own ordinal and the corresponding
+ * entries.
+ *
+ * @param sourceName name to be used for constructing a useful name for the created
+ * {@link org.apache.tamaya.spi.PropertySource} instances.
+ * @param resource the configuration resource, not null
+ * @return the corresponding {@link org.apache.tamaya.spi.PropertySource} instances, never {@code null}.
+ */
+ Collection<PropertySource> readConfiguration(String sourceName, Resource resource) throws IOException;
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesFormat.java
----------------------------------------------------------------------
diff --git a/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesFormat.java b/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesFormat.java
new file mode 100644
index 0000000..22f2325
--- /dev/null
+++ b/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesFormat.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License 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 org.apache.tamaya.format;
+
+import org.apache.tamaya.core.resources.Resource;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Implementation of a {@link ConfigurationFormat} for -properties files.
+ *
+ * @see java.util.Properties#load(java.io.InputStream)
+ */
+public class PropertiesFormat implements ConfigurationFormat {
+ /**
+ * The logger.
+ */
+ private final static Logger LOG = Logger.getLogger(PropertiesFormat.class.getName());
+
+ /**
+ * The target ordinal.
+ */
+ private int ordinal;
+
+ /**
+ * Creates a new format instance, hereby producing entries with the given ordinal, if not overridden by the
+ * configuration itself.
+ * TODO document and implement override feature
+ * @param ordinal the target ordinal.
+ */
+ public PropertiesFormat(int ordinal) {
+ this.ordinal = ordinal;
+ }
+
+ /**
+ * Get the target ordinal, produced by this format.
+ *
+ * @return the target ordinal
+ */
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Collection<PropertySource> readConfiguration(String baseName, Resource resource) {
+ final String sourceName = (baseName==null?"Properties:":baseName) + resource.getName();
+ if (resource.exists()) {
+ List<PropertySource> propertySources = new ArrayList<>();
+ try (InputStream is = resource.getInputStream()) {
+ final Properties p = new Properties();
+ p.load(is);
+ propertySources.add(new PropertySource() {
+ @Override
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ @Override
+ public String getName() {
+ return sourceName;
+ }
+
+ @Override
+ public Optional<String> get(String key) {
+ return Optional.ofNullable(p.getProperty(key));
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ return Map.class.cast(p);
+ }
+ });
+ return propertySources;
+ } catch (Exception e) {
+ LOG.log(Level.FINEST, e, () -> "Failed to read config from resource: " + resource);
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String toString() {
+ return "PropertiesFormat{" +
+ "ordinal=" + ordinal +
+ '}';
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b5731e09/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesXmlFormat.java
----------------------------------------------------------------------
diff --git a/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesXmlFormat.java b/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesXmlFormat.java
new file mode 100644
index 0000000..e042e32
--- /dev/null
+++ b/modules/formats/src/main/java/org/apache/tamaya/format/PropertiesXmlFormat.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License 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 org.apache.tamaya.format;
+
+import org.apache.tamaya.core.resources.Resource;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Implementation of a {@link ConfigurationFormat} for xml property
+ * files.
+ *
+ * @see java.util.Properties#loadFromXML(java.io.InputStream)
+ */
+public class PropertiesXmlFormat implements ConfigurationFormat {
+ /**
+ * The logger.
+ */
+ private final static Logger LOG = Logger.getLogger(PropertiesXmlFormat.class.getName());
+
+ /**
+ * The target ordinal.
+ */
+ private int ordinal;
+
+ /**
+ * Creates a new format instance, producing entries for the given ordinal, if not overridden by a
+ * config entry itself.
+ * TODO document and implement override feature
+ * @param ordinal the target ordinal.
+ */
+ public PropertiesXmlFormat(int ordinal) {
+ this.ordinal = ordinal;
+ }
+
+ /**
+ * Get the target ordinal, produced by this format.
+ *
+ * @return the target ordinal
+ */
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Collection<PropertySource> readConfiguration(String baseName, Resource resource) {
+ if (resource.exists()) {
+ final String sourceName = (baseName==null?"Properties:":baseName) + resource.getName();
+ List<PropertySource> propertySources = new ArrayList<>();
+ try (InputStream is = resource.getInputStream()) {
+ final Properties p = new Properties();
+ p.loadFromXML(is);
+ propertySources.add(new PropertySource() {
+ @Override
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ @Override
+ public String getName() {
+ return sourceName;
+ }
+
+ @Override
+ public Optional<String> get(String key) {
+ return Optional.ofNullable(p.getProperty(key));
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ return Map.class.cast(p);
+ }
+ });
+ return propertySources;
+ } catch (Exception e) {
+ LOG.log(Level.FINEST, e, () -> "Failed to read config from resource: " + resource);
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String toString() {
+ return "PropertiesXmlFormat{" +
+ "ordinal=" + ordinal +
+ '}';
+ }
+}