/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.coordinator.common.impl; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Map.Entry; import com.emc.storageos.coordinator.common.Configuration; import com.emc.storageos.coordinator.exceptions.CoordinatorException; /** * Default configuration implementation * */ public class ConfigurationImpl implements Configuration { private static final char RESERVED_CHAR = '_'; private static final String KIND_KEY = "_kind"; private static final String ID_KEY = "_id"; private Properties _map = new Properties(); @Override public String getKind() { return _map.getProperty(KIND_KEY); } public void setKind(String kind) { _map.setProperty(KIND_KEY, kind); } @Override public String getId() { return _map.getProperty(ID_KEY); } public void setId(String id) { _map.setProperty(ID_KEY, id); } @Override public String getConfig(String key) { return _map.getProperty(key); } @Override public Map<String, String> getAllConfigs(boolean customOnly) { Map<String, String> toReturn = new HashMap<String, String>(); for (Entry<Object, Object> e : _map.entrySet()) { String k = (String) e.getKey(); String v = (String) e.getValue(); if (!customOnly || (customOnly && !k.equals(KIND_KEY) && !k.equals(ID_KEY))) { toReturn.put(k, v); } } return toReturn; } @Override public void setConfig(String key, String val) { if (key == null || key.length() == 0 || key.charAt(0) == RESERVED_CHAR) { throw CoordinatorException.fatals.invalidKey(); } _map.setProperty(key, val); } @Override public void removeConfig(String key) { if (key == null || key.length() == 0 || key.charAt(0) == RESERVED_CHAR) { throw CoordinatorException.fatals.invalidKey(); } _map.remove(key); } /** * Deserializes configuration object * * @param content * @return */ public static Configuration parse(byte[] content) { try { Properties p = new Properties(); p.load(new ByteArrayInputStream(content)); ConfigurationImpl config = new ConfigurationImpl(); config._map = p; return config; } catch (IOException e) { throw CoordinatorException.fatals.invalidProperties(e); } } @Override public byte[] serialize() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); _map.store(out, null); return out.toByteArray(); } }