All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.shakiba.guiceconfig.PropsModule Maven / Gradle / Ivy

The newest version!
package me.shakiba.guiceconfig;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Enumeration;
import java.util.Properties;

import com.google.inject.AbstractModule;
import com.google.inject.Provider;
import com.google.inject.name.Names;

public class PropsModule extends AbstractModule {

    private final Properties props;

    public PropsModule(Properties props) {
        this.props = props;
    }

    public PropsModule(File file) throws FileNotFoundException, IOException {
        Properties properties = new Properties();
        properties.load(new FileReader(file));
        this.props = properties;
    }

    public PropsModule(InputStream in) throws IOException {
        Properties properties = new Properties();
        properties.load(in);
        this.props = properties;
    }

    public PropsModule(Reader reader) throws IOException {
        Properties properties = new Properties();
        properties.load(reader);
        this.props = properties;
    }

    @Override
    protected void configure() {
        for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
            String key = (String) e.nextElement();
            bind(String.class).annotatedWith(Names.named(key)).toProvider(
                    new StringProvider(key));
            // TODO: verify if applicable
            bind(Integer.class).annotatedWith(Names.named(key)).toProvider(
                    new IntProvider(key));
            bind(Long.class).annotatedWith(Names.named(key)).toProvider(
                    new LongProvider(key));
            bind(Float.class).annotatedWith(Names.named(key)).toProvider(
                    new FloatProvider(key));
            bind(Double.class).annotatedWith(Names.named(key)).toProvider(
                    new DoubleProvider(key));
            bind(Boolean.class).annotatedWith(Names.named(key)).toProvider(
                    new BooleanProvider(key));
        }
    }

    public class StringProvider implements Provider {
        private final String key;

        public StringProvider(String key) {
            this.key = key;
        }

        @Override
        public String get() {
            return props.getProperty(key, null);
        }
    }

    public class IntProvider implements Provider {
        private final String key;

        public IntProvider(String key) {
            this.key = key;
        }

        @Override
        public Integer get() {
            String value = props.getProperty(key, "0");
            if (value.isEmpty()) {
                value = "0";
            }
            return Integer.parseInt(value);
        }
    }

    public class LongProvider implements Provider {
        private final String key;

        public LongProvider(String key) {
            this.key = key;
        }

        @Override
        public Long get() {
            String value = props.getProperty(key, "0");
            if (value.isEmpty()) {
                value = "0";
            }
            return Long.parseLong(value);
        }
    }

    public class FloatProvider implements Provider {
        private final String key;

        public FloatProvider(String key) {
            this.key = key;
        }

        @Override
        public Float get() {
            String value = props.getProperty(key, "0");
            if (value.isEmpty()) {
                value = "0";
            }
            return Float.parseFloat(value);
        }
    }

    public class DoubleProvider implements Provider {
        private final String key;

        public DoubleProvider(String key) {
            this.key = key;
        }

        @Override
        public Double get() {
            String value = props.getProperty(key, "0");
            if (value.isEmpty()) {
                value = "0";
            }
            return Double.parseDouble(value);
        }
    }

    public class BooleanProvider implements Provider {
        private final String key;

        public BooleanProvider(String key) {
            this.key = key;
        }

        @Override
        public Boolean get() {
            String value = props.getProperty(key, "0");
            if (value.isEmpty()) {
                value = "false";
            }
            return Boolean.parseBoolean(value);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy