/*******************************************************************************
* Copyright 2012 University of Southern California
*
* 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.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California. For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/
package edu.isi.karma.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URISyntaxException;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.isi.karma.config.ModelingConfiguration;
import edu.isi.karma.config.ModelingConfigurationRegistry;
import edu.isi.karma.webserver.ContextParametersRegistry;
import edu.isi.karma.webserver.ServletContextParameterMap;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
public abstract class Preferences {
/**
* Pointer to the file where the preferences for each workspace is saved.
*/
protected File jsonFile;
/**
* Id of the workspace. Each workspace has its own view preference object.
*/
protected String preferencesId;
protected String contextId;
protected JSONObject json;
protected static Logger logger = LoggerFactory.getLogger(Preferences.class.getSimpleName());
private String defaultWorkspaceTemplate = "{ " +
"\"ViewPreferences\": { " +
" \"maxCharactersInHeader\": 10, " +
" \"maxCharactersInCell\": 200, " +
" \"maxRowsToShowInNestedTables\": 20, " +
" \"defaultRowsToShowInTopTables\":150 " +
"}" +
"}";
public Preferences(String preferencesId, String contextId) {
this.preferencesId = preferencesId;
this.contextId = contextId;
populatePreferences();
}
private void populatePreferences() {
try {
ServletContextParameterMap contextParameters = ContextParametersRegistry.getInstance().getContextParameters(contextId);
ModelingConfiguration modelingConfiguration = ModelingConfigurationRegistry.getInstance().getModelingConfiguration(contextId);
if(!modelingConfiguration.getOntologyAlignment() &&
!modelingConfiguration.getKnownModelsAlignment()) {
loadDefaultPreferences();
} else {
jsonFile = new File(contextParameters.getParameterValue(ContextParameter.USER_PREFERENCES_DIRECTORY) +
preferencesId + ".json");
if(jsonFile.exists()){
// Populate from the existing preferences JSON file
json = (JSONObject) JSONUtil.createJson(new FileReader(jsonFile));
if(json == null) {
// If error occurred with preferences file, create a new one
logger.error("Preferences file corrupt! Creating new from template.");
createNewPreferencesFileFromTemplate();
}
} else {
// Create a new JSON preference file using the template preferences file
createNewPreferencesFileFromTemplate();
}
}
} catch(FileNotFoundException f) {
logger.error("Preferences file not found! ", f);
} catch (IOException e) {
logger.error("Error occured while creating preferences file!", e);
} catch (URISyntaxException e) {
logger.error("Error occured while creating preferences file!", e);
}
}
private File loadWorkspacePrefTemplateFile() throws IOException {
ServletContextParameterMap contextParameters = ContextParametersRegistry.getInstance().getContextParameters(contextId);
File file = new File(contextParameters.getParameterValue(ContextParameter.USER_CONFIG_DIRECTORY) +
"/workspace-pref.template");
if(!file.exists()) {
JSONObject json = new JSONObject(defaultWorkspaceTemplate);
file.createNewFile();
FileUtil.writePrettyPrintedJSONObjectToFile(json, file);
}
return file;
}
private void createNewPreferencesFileFromTemplate() throws IOException, URISyntaxException {
jsonFile.createNewFile();
File templateFile = loadWorkspacePrefTemplateFile();
json = new JSONObject(FileUtil.readFileContentsToString(templateFile, "UTF-8"));
FileUtil.writePrettyPrintedJSONObjectToFile(json, jsonFile);
}
private void loadDefaultPreferences() throws IOException, URISyntaxException {
jsonFile = loadWorkspacePrefTemplateFile();
String templateStr = FileUtil.readFileContentsToString(jsonFile, "UTF-8");
json = new JSONObject(templateStr);
}
protected void savePreferences() throws JSONException, IOException {
ServletContextParameterMap contextParameters = ContextParametersRegistry.getInstance().getContextParameters(contextId);
ModelingConfiguration modelingConfiguration = ModelingConfigurationRegistry.getInstance().getModelingConfiguration(contextParameters.getKarmaHome());
if(modelingConfiguration.getOntologyAlignment() ||
modelingConfiguration.getKnownModelsAlignment()) {
FileUtil.writePrettyPrintedJSONObjectToFile(json, jsonFile);
}
}
}