JSONConfigInstaller.java revision 44e29ab1a81842519755c5d3b9a3403efad35354
/*
* 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
*
*
* 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.
*/
/**
* ArtifactInstaller for JSON configurations. Based on ConfigInstaller.
*/
/**
* The key in the OSGi configuration dictionary holding the complete JSON configuration string
*/
/**
* Setup logging for the {@link JSONConfigInstaller}.
*/
private final Map<String, String> pidToFile = Collections.synchronizedMap(new HashMap<String, String>());
private BundleContext context;
private final ConfigurationManager configurationManager;
}
}
}
}
// Configuration config = getConfiguration(toConfigKey(f), pid[0], pid[1], false);
// deleteConfig(artifact);
}
// Check if writing back configurations has been disabled.
}
return;
}
logger.warn("Factory router config is detected. OpenIDM prevents further processing of this config!");
return;
}
try {
dict = new Properties();
}
// Externalize OpenIDM configurations into the file "view"
if (factoryPid != null) {
unqualifiedFactoryPid = factoryPid.substring(ConfigBootstrapHelper.DEFAULT_SERVICE_RDN_PREFIX.length());
}
logger.warn("Could not write out factory configuration file, as no friendly alias is set in the configuration."
return;
}
} else {
fileName = toConfigKey(new File(confDir, unqualified + ConfigBootstrapHelper.JSON_CONFIG_FILE_EXT));
}
//TODO Do something
//config.update(dict);
}
// IF file exists, update it, if does not exist create it
synchronized(this) { // With rapid changes prevent conflicting writes to a file
boolean isUpToDate = false;
}
if (isUpToDate) {
} else {
// Note: currently only stores JSON config property, not other properties in Dictionary.
}
try {
} finally {
}
}
}
}
}
} catch (Exception e) {
}
synchronized(this) {
if (deleted) {
} else {
}
}
}
}
}
// public static ConfigurationAdmin lookupConfigAdmin(BundleContext context) {
// ConfigurationAdmin confAdmin = null;
// if (context != null) {
// ServiceReference configurationAdminReference =
// context.getServiceReference(ConfigurationAdmin.class.getName());
// if (configurationAdminReference != null) {
// confAdmin = (org.osgi.service.cm.ConfigurationAdmin) context.getService(configurationAdminReference);
// }
// }
// return confAdmin;
// }
// public ConfigurationAdmin getConfigurationAdmin() {
// // TOOD: better guarding against this service not (yet) being there.
// if (configAdmin == null) {
// this.configAdmin = lookupConfigAdmin(context);
// if (this.configAdmin != null) {
// logger.info("ConfigAdmin service detected by JSON configuration listener");
// } else {
// logger.warn("JSON Configuration listener could not find ConfigAdmin service");
// }
// }
//
// return configAdmin;
// }
/**
* Load the specified configuration file as hashtable.
*
* May also be called by other clients that want direct access to a given configuration file
* without going through the configuration admin service.
*
* @param f
* @return
* @throws java.io.IOException
*/
@SuppressWarnings("unchecked")
new FileInputStream(f), fileEncoding));
try {
char[] buf = new char[1024];
int numRead = 0;
}
} finally {
}
}
return ht;
}
/**
* Set the configuration based on the config file.
*
* @param f
* Configuration file
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
boolean updated = false;
try {
}
return updated;
}
synchronized boolean setConfig(Map configuration, final String[] pid, final File f) throws Exception {
// boolean updated = false;
// Configuration config = getConfiguration(toConfigKey(f), pid[0], pid[1], true);
return null != configurationManager.installConfiguration(pid[0], pid[1], new JsonValue(configuration));
// Dictionary props = config.buildServiceProperties();
// if (!isConfigSame(ht, props)) {
// try {
// ht = configCrypto.encrypt(pid[0], pid[1], ht);
// ht.put(DirectoryWatcher.FILENAME, toConfigKey(f));
// if (pid != null && pid[1] != null) {
// ht.put(SERVICE_FACTORY_PID_ALIAS, pid[1]);
// }
// if (config.getBundleLocation() != null) {
// config.setBundleLocation(null);
// }
// if (pid[1] == null) {
// logger.info("Loaded changed configuration for {} from {}", pid[0], f.getName());
// } else {
// logger.info("Loaded changed configuration for {} {} from {}",
// new Object[] {pid[0], pid[1], f.getName()});
// }
// config.update(ht);
// } catch (WaitForMetaData ex) {
// logger.debug("Wait for meta data for config {}-{}", pid[0], pid[1]);
// DelayedConfig delayed = new DelayedConfig();
// delayed.pidOrFactory = pid[0];
// delayed.factoryAlias = pid[1];
// delayed.file = f;
// delayed.oldConfig = props;
// delayed.newConfig = ht;
// delayed.parsedConfig = configCrypto.parse(ht, pid[0] + "-" + pid[1]);
// delayed.configInstaller = this;
// delayed.configCrypto = configCrypto;
// delayedConfigHandler.addConfig(delayed);
// }
// updated = true;
// } else {
// logger.debug("File contents of configuration for {} from {} has not changed.", pid[1], f);
// updated = false;
// }
// return updated;
}
/**
* Remove the configuration.
*
* @param f
* File where the configuration in whas defined.
* @return
* @throws Exception
*/
// boolean deleteConfig(File f) throws Exception {
// String pid[] = parsePid(f.getName());
// Configuration config = getConfiguration(toConfigKey(f), pid[0], pid[1], false);
// config.delete();
// return true;
// }
}
}
if (n > 0) {
}
else {
}
}
/**
* Whether the JSON configuration is the same (Including formatting)
* Ignores meta-data such as whether factory pid has been assigned yet
*
* @param newCfg
* @param oldCfg
* @return true if the JSON config is the same
*/
}
}
// Configuration getConfiguration(String fileName, String pid, String factoryPid, boolean addIfNew) throws Exception {
//
// Configuration oldConfiguration = findExistingConfiguration(fileName, pid, factoryPid);
// if (oldConfiguration != null) {
// logger.debug("Updating configuration from {}", fileName);
// return oldConfiguration;
// }
// else {
// Configuration newConfiguration;
// if (factoryPid != null) {
//
// if ("org.forgerock.openidm.router".equalsIgnoreCase(pid)) {
// throw new ConfigurationException(factoryPid, "router config can not be factory config");
// }
// newConfiguration = getConfigurationAdmin().createFactoryConfiguration(pid, null);
// }
// else {
// newConfiguration = getConfigurationAdmin().getConfiguration(pid, null);
// }
// if (addIfNew) {
// pidToFile.put(newConfiguration.getPid(), fileName);
// }
// return newConfiguration;
// }
// }
//
// Configuration findExistingConfiguration(String fileName, String pid, String factoryPid) throws Exception {
//
// String filter = null;
// if (null == factoryPid) {
// filter = "(" + Constants.SERVICE_PID + "=" + pid + ")";
// } else {
// filter = "(&(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + pid + ")(config.factory-pid=" + factoryPid + "))";
// }
//
// Configuration[] configurations = getConfigurationAdmin().listConfigurations(filter);
// if (configurations != null && configurations.length > 0) {
// pidToFile.put(configurations[0].getPid(), fileName);
// return configurations[0];
// }
// else {
// return null;
// }
// }
}
/**
* A wrapper around a dictionary access it as a Map
*/
class DictionaryAsMap<U, V> extends AbstractMap<U, V> {
private Dictionary<U, V> dict;
}
return new AbstractSet<Entry<U, V>>() {
private U key;
public boolean hasNext() {
return e.hasMoreElements();
}
key = e.nextElement();
}
public void remove() {
throw new IllegalStateException();
}
}
};
}
public int size() {
}
};
}
}
private final U key;
}
public U getKey() {
return key;
}
public V getValue() {
}
}
}
}