com.feedhenry.sdk.AppProps Maven / Gradle / Ivy
/**
* Copyright Red Hat, Inc, and individual contributors.
*
* Licensed 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 com.feedhenry.sdk;
import android.content.Context;
import com.feedhenry.sdk.utils.FHLog;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
/**
* Class represents the settings in fh.properties
*/
public class AppProps {
private static final String APP_HOST_KEY = "host";
private static final String APP_PROJECT_KEY = "projectid";
private static final String APP_CONNECTION_TAG_KEY = "connectiontag";
private static final String APP_ID_KEY = "appid";
private static final String APP_APIKEY_KEY = "appkey";
private static final String APP_MODE_KEY = "mode";
// AeroGear UnifiedPush properties
private static final String PUSH_SERVER_URL_ENDPOINT = "/api/v2/ag-push";
private static final String PUSH_SENDER_ID = "PUSH_SENDER_ID";
private static final String PUSH_VARIANT = "PUSH_VARIANT";
private static final String PUSH_SECRET = "PUSH_SECRET";
private static final String OLD_PROPERTY_FILE = "fh.properties";
private static final String NEW_PROPERTY_FILE = "fhconfig.properties";
private static final String DEBUG_PROPERTY_FILE = "fhconfig.local.properties";
private static final String LOG_TAG = "com.feedhenry.sdk.AppProps";
private final Properties mProps;
private final boolean isLocalDev;
private static AppProps mInstance;
private AppProps(Properties props, boolean isLocalDev) {
this.mProps = props;
this.isLocalDev = isLocalDev;
}
/**
* Gets the value of "host" in the fh.properties file.
*
* @return the host value
*/
public String getHost() {
return this.mProps.getProperty(APP_HOST_KEY);
}
/**
* Gets the value of "projectid" in the fh.properties file.
*
* @return the project id
*/
public String getProjectId() {
return this.mProps.getProperty(APP_PROJECT_KEY);
}
/**
* Gets the value of "appid" in the fh.properties file.
*
* @return the app id
*/
public String getAppId() {
return this.mProps.getProperty(APP_ID_KEY);
}
/**
* Gets the value of "appkey" in the fh.properties file.
*
* @return the app API key
*/
public String getAppApiKey() {
return this.mProps.getProperty(APP_APIKEY_KEY);
}
/**
* Gets the value of "connectiontag" in the fh.properties file.
*
* @return the connection tag
*/
public String getConnectionTag() {
return this.mProps.getProperty(APP_CONNECTION_TAG_KEY);
}
@Deprecated
/**
* Gets the value of "mode" in the fh.properties file.
* This is a legacy field and should not be used anymore.
* @return the legacy app mode. Can be null.
*/
public String getAppMode() {
return this.mProps.getProperty(APP_MODE_KEY);
}
/**
* Return if the app is running in local dev mode
* (i.e., if fhconfig.local.properties file is found in the assets directory).
* If true, the cloud host value returned in CloudProps will be the host value set in the property file.
*
* @return if the app is running in local dev mode
*/
public boolean isLocalDevelopment() {
return this.isLocalDev;
}
/**
* Gets the value of the UnifiedPush server URL in the fhconfig.properties file.
*
* @return UnifiedPush server URL
*/
public String getPushServerUrl() {
return this.mProps.getProperty(APP_HOST_KEY) + PUSH_SERVER_URL_ENDPOINT;
}
/**
* Gets the value of the Sender ID in the fhconfig.properties file.
*
* @return Sender ID
*/
public String getPushSenderId() {
return this.mProps.getProperty(PUSH_SENDER_ID);
}
/**
* Gets the value of the UnifiedPush variant in the fhconfig.properties file.
*
* @return UnifiedPush variant
*/
public String getPushVariant() {
return this.mProps.getProperty(PUSH_VARIANT);
}
/**
* Gets the value of the variant secret in the fhconfig.properties file.
*
* @return Variant secret
*/
public String getPushSecret() {
return this.mProps.getProperty(PUSH_SECRET);
}
/**
* A method to retrieve the singleton instance of AppProps.
*
* @return The singleton instance of AppProps
* @throws IllegalStateException if the application is not initialized.
*/
public static AppProps getInstance() {
if (mInstance == null) {
throw new IllegalStateException("AppProps is not initialised");
}
return mInstance;
}
/**
* Loads the fh.properties file.
*
* @param context Application context
* @return the AppProps after read the properties file
*/
public static AppProps load(Context context) throws IOException {
if (mInstance == null) {
List assetFiles = Arrays.asList(context.getAssets().list(""));
if(assetFiles.contains(DEBUG_PROPERTY_FILE)) {
createNewInstanceFromPropertyFile(context, DEBUG_PROPERTY_FILE, true);
} else if (assetFiles.contains(NEW_PROPERTY_FILE)) {
createNewInstanceFromPropertyFile(context, NEW_PROPERTY_FILE, false);
} else if (assetFiles.contains(OLD_PROPERTY_FILE)) {
createNewInstanceFromPropertyFile(context, OLD_PROPERTY_FILE, false);
} else {
throw new IOException("No config file was found");
}
}
return mInstance;
}
/**
*
* Attempts to open and load property file in a new AppProps instance.
*
* @param context Application context
* @param fileName Property file name to be loaded
* @param isLocalDev Flag if it's a debug (local developer) property file
* @return the AppProps after read the properties file
*/
private static AppProps createNewInstanceFromPropertyFile(Context context, String fileName,
boolean isLocalDev) throws IOException {
InputStream in = null;
try {
in = context.getAssets().open(fileName);
Properties props = new Properties();
props.load(in);
mInstance = new AppProps(props, isLocalDev);
} catch (IOException e) {
FHLog.e(LOG_TAG, "Could not find asset " + fileName, e);
throw e;
} finally {
try {
if(in != null) {
in.close();
}
} catch (IOException ex) {
FHLog.e(LOG_TAG, "Failed to close stream", ex);
throw ex;
}
}
return mInstance;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy