blob: f18db618269a1fc2e2ffa53c9cb793488db88e3e [file] [log] [blame]
/****************************************************************
* 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.hupa.server.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* Enumeration of valid configuration properties
*/
public enum ConfigurationProperties {
// Mandatory configuration properties
IMAP_SERVER_ADDRESS("IMAPServerAddress", true, null),
SMTP_SERVER_ADDRESS("SMTPServerAddress", true, null),
IMAP_SERVER_PORT("IMAPServerPort", false, "143"),
SMTP_SERVER_PORT("SMTPServerPort", false, "25"),
// Optional configuration properties
IMAP_CONNECTION_POOL_SIZE("IMAPConnectionPoolSize", false, "4"),
IMAP_CONNECTION_POOL_TIMEOUT("IMAPConnectionPoolTimeout", false, "300000"),
IMAPS("IMAPS", false, "false"),
TRUST_STORE("TrustStore", false, ""),
TRUST_STORE_PASSWORD("TrustStorePassword", false, ""),
DEFAULT_SENT_FOLDER("DefaultSentFolder", false, "\\Sent"),
DEFAULT_TRASH_FOLDER("DefaultTrashFolder", false, "\\Trash"),
DEFAULT_DRAFTS_FOLDER("DefaultDraftsFolder", false, "\\Drafts"),
DEFAULT_INBOX_FOLDER("DefaultInboxFolder", false, "INBOX"),
POST_FETCH_MESSAGE_COUNT("PostFetchMessageCount", false, "0"),
SESSION_DEBUG("SessionDebug", false, "false"),
SMTP_AUTH("SMTPAuth", false, "true"),
SMTPS("SMTPS", false, "false"),
TRUST_SSL("TrustSSL", false, "false"),
// Used only in demo mode
USERNAME("Username", false, null),
PASSWORD("Password", false, null);
private String property;
private boolean mandatory;
private String propValue;
private ConfigurationProperties (String property, boolean mandatory, String propValue) {
this.property = property;
this.mandatory = mandatory;
this.propValue = propValue;
}
/**
* Return a ConfigurationProperties enumeration that matches the passed command.
*
* @param property
* The property to use for lookup.
* @return the ConfigurationProperties enumeration that matches the passed property, or null
* if not found.
*/
public static ConfigurationProperties lookup(String property) {
if (property != null) {
for (ConfigurationProperties confProp : values())
if (confProp.getProperty().equalsIgnoreCase(property))
return confProp;
}
return null;
}
/**
* Return the name of property.
*
* @return the name of property.
*/
public String getProperty() {
return this.property;
}
/**
* Return if property is mandatory
*
* @return true if mandatory else false.
*/
public boolean isMandatory() {
return this.mandatory;
}
/**
* Return the value of the property.
*
* @return the value of the property.
*/
public String getPropValue() {
return this.propValue;
}
/**
* Test for mandatory properties, complete with default values when
* missing, and avoid unknown properties.
*/
public static void validateProperties(Properties properties) {
List<String> errors = new ArrayList<String>();
// Test for mandatory and complete properties with default values when
// missing
for (ConfigurationProperties confProps : ConfigurationProperties.values()) {
String propName = confProps.getProperty();
String propValue = confProps.getPropValue();
Object value = properties.get(propName);
if (confProps.isMandatory()) {
if (value == null) {
errors.add("The mandatory Property '"
+ confProps.getProperty() + "' is not set.");
}
} else if (value == null && propValue != null) {
properties.setProperty(propName, propValue);
}
}
// Test for unknown properties set in configuration
for (Object key : properties.keySet()) {
if (ConfigurationProperties.lookup((String) key) == null) {
errors.add("The Property '" + key
+ "' is unknown");
}
}
if (!errors.isEmpty()) {
throw new IllegalArgumentException("Error validating configuration : \n" + properties + "\n" + errors.toString());
}
}
/**
* Loads and validate a properties file.
*
* @param configDir
* @param name
* @return
*/
public static Properties loadProperties(String name) {
if (name == null)
return null;
Properties properties = null;
File file = new File(name);
if (file.exists()) {
FileInputStream fis = null;
try {
properties = new Properties();
fis = new FileInputStream(file);
properties.load(fis);
} catch (Exception e) {
properties = null;
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// Empty on purpose
}
}
}
}
return properties;
}
}