/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.common.impl.internal.config;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceCreationException;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class GlobalConfigMapper {
public static void map(String filename, Element topLevel, GlobalConfigHolder dst) throws ServiceCreationException {
if (topLevel == null) {
return;
}
Element monitorConfig = DomParseUtils.getSingleElement(filename, topLevel, "monitor-config");
if (monitorConfig != null) {
mapMonitorConfig(filename, monitorConfig, dst);
}
Element localBindingThreadPool =
DomParseUtils.getSingleElement(filename, topLevel, "local-binding-thread-pool");
if (localBindingThreadPool != null) {
mapLocalBindingThreadPool(filename, localBindingThreadPool, dst);
}
Element serviceLayerConfig = DomParseUtils.getSingleElement(filename, topLevel, "service-layer-config");
mapServiceLayerConfig(filename, serviceLayerConfig, dst);
}
public static void mapMonitorConfig(String filename, Element monitorConfig, GlobalConfigHolder dst) throws ServiceCreationException {
NodeList storageProviders = DomParseUtils.getImmediateChildrenByTagName(monitorConfig, "storage-provider");
Map<String, StorageProviderConfig> providersMapOut = new HashMap<String, StorageProviderConfig>();
for (int i = 0; i < storageProviders.getLength(); i++) {
Element storageProvider = (Element) storageProviders.item(i);
String name = DomParseUtils.getRequiredAttribute(filename, storageProvider, "name");
String classname = DomParseUtils.getElementText(filename, storageProvider, "class-name");
StorageProviderConfig providerOut = new StorageProviderConfig();
providerOut.setClassname(classname);
providerOut.setName(name);
Map<String, String> optionsMap = providerOut.getOptions();
OptionList options = DomParseUtils.getOptionList(filename, storageProvider, "storage-options");
DomParseUtils.storeNVListToHashMap(filename, options, optionsMap);
// DomParseUtils.mapOptions(filename, storageProvider, "storage-options", optionsMap);
providersMapOut.put(name, providerOut);
}
dst.setStorageProviders(providersMapOut);
Integer snapshotInterval = DomParseUtils.getElementInteger(filename, monitorConfig, "snapshot-interval");
dst.setMonitorSnapshotInterval(snapshotInterval);
}
public static void mapServiceLayerConfig(String filename, Element serviceLayerConfig, GlobalConfigHolder dst) throws ServiceCreationException {
if (serviceLayerConfig != null) {
List<String> serviceLayers = DomParseUtils.getStringList(filename, serviceLayerConfig, "layer-name");
dst.setServiceLayerNames(serviceLayers);
}
}
private static void mapLocalBindingThreadPool(final String filename,
final Element localBindingThreadPool,
final GlobalConfigHolder dst)
throws ServiceCreationException
{
if (localBindingThreadPool != null) {
Long keepAliveTimeInSecs =
DomParseUtils.getElementLong(filename, localBindingThreadPool, "keep-alive-time-in-secs");
dst.setThreadKeepAliveTimeInSec(keepAliveTimeInSecs);
}
}
}