| 
001 /*002  * Copyright 2008-2015 the original author or authors.
 003  *
 004  * Licensed under the Apache License, Version 2.0 (the "License");
 005  * you may not use this file except in compliance with the License.
 006  * You may obtain a copy of the License at
 007  *
 008  *     http://www.apache.org/licenses/LICENSE-2.0
 009  *
 010  * Unless required by applicable law or agreed to in writing, software
 011  * distributed under the License is distributed on an "AS IS" BASIS,
 012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 013  * See the License for the specific language governing permissions and
 014  * limitations under the License.
 015  */
 016 package griffon.core.env;
 017
 018 import org.slf4j.Logger;
 019 import org.slf4j.LoggerFactory;
 020
 021 import javax.annotation.Nonnull;
 022 import java.io.File;
 023 import java.io.FileInputStream;
 024 import java.io.IOException;
 025 import java.io.InputStream;
 026 import java.net.URL;
 027 import java.util.Collections;
 028 import java.util.LinkedHashSet;
 029 import java.util.Properties;
 030 import java.util.Set;
 031
 032 import static griffon.util.GriffonNameUtils.requireNonBlank;
 033 import static java.util.Objects.requireNonNull;
 034
 035 /**
 036  * Represents the application Metadata
 037  *
 038  * @author Andres Almiray
 039  * @since 2.0.0
 040  */
 041 public class Metadata {
 042     public static final String FILENAME = "application.properties";
 043     public static final String APPLICATION_VERSION = "application.version";
 044     public static final String APPLICATION_NAME = "application.name";
 045     private static final Logger LOG = LoggerFactory.getLogger(Metadata.class);
 046
 047     private final Properties properties = new Properties();
 048
 049     public Metadata(@Nonnull String path) {
 050         requireNonBlank(path, "Argument 'path' must not be blank");
 051         loadProperties(path);
 052     }
 053
 054     public Metadata(@Nonnull File file) {
 055         requireNonNull(file, "Argument 'file' must not be null");
 056         loadProperties(file);
 057     }
 058
 059     public Metadata(@Nonnull InputStream in) {
 060         requireNonNull(in, "Argument 'in' must not be null");
 061         try {
 062             loadProperties(in);
 063         } catch (IOException e) {
 064             LOG.warn("Could not load application metadata from inpustream.", e);
 065         }
 066     }
 067
 068     private void loadProperties(String path) {
 069         URL url = Metadata.class.getClassLoader().getResource(path);
 070         if (url != null) {
 071             try {
 072                 loadProperties(url.openStream());
 073             } catch (IOException e) {
 074                 LOG.warn("Could not load application metadata from " + path, e);
 075             }
 076         }
 077     }
 078
 079     private void loadProperties(File file) {
 080         try {
 081             loadProperties(new FileInputStream(file));
 082         } catch (IOException e) {
 083             LOG.warn("Could not load application metadata from " + file.getAbsolutePath(), e);
 084         }
 085     }
 086
 087     private void loadProperties(InputStream in) throws IOException {
 088         properties.load(in);
 089     }
 090
 091     /**
 092      * @return The application version
 093      */
 094     public String getApplicationVersion() {
 095         return get(APPLICATION_VERSION);
 096     }
 097
 098     /**
 099      * @return The environment the application expects to run in
 100      */
 101     public String getEnvironment() {
 102         return get(Environment.KEY);
 103     }
 104
 105     public String getRunMode() {
 106         return get(RunMode.KEY);
 107     }
 108
 109     /**
 110      * @return The application name
 111      */
 112     public String getApplicationName() {
 113         return get(APPLICATION_NAME);
 114     }
 115
 116     public String get(@Nonnull String key) {
 117         return properties.getProperty(requireNonBlank(key, "Argument 'key' must not be blank"));
 118     }
 119
 120     @Nonnull
 121     public Set<String> keySet() {
 122         Set<String> keys = new LinkedHashSet<>();
 123
 124         return Collections.unmodifiableSet(keys);
 125     }
 126 }
 |