blob: 7dbab0ca0a1b994e73fc40844ac2d9b3240dc99a [file] [log] [blame]
/**
* 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
*
* 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 org.apache.ambari.server.controller.internal;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* Simple resource implementation.
*/
public class ResourceImpl implements Resource {
/**
* The resource type.
*/
private final Type type;
/**
* The map of property maps keyed by property category.
*/
private final Map<String, Map<String, Object>> propertiesMap = new TreeMap<String, Map<String, Object>>();
// ----- Constructors ------------------------------------------------------
/**
* Create a resource of the given type.
*
* @param type the resource type
*/
public ResourceImpl(Type type) {
this.type = type;
}
/**
* Copy constructor
*
* @param resource the resource to copy
*/
public ResourceImpl(Resource resource) {
this.type = resource.getType();
for (Map.Entry<String, Map<String, Object>> categoryEntry : resource.getPropertiesMap().entrySet()) {
String category = categoryEntry.getKey();
Map<String, Object> propertyMap = categoryEntry.getValue();
if (propertyMap != null) {
for (Map.Entry<String, Object> propertyEntry : propertyMap.entrySet()) {
String propertyId = PropertyHelper.getPropertyId(category, propertyEntry.getKey());
Object propertyValue = propertyEntry.getValue();
setProperty(propertyId, propertyValue);
}
}
}
}
// ----- Resource ----------------------------------------------------------
@Override
public Type getType() {
return type;
}
@Override
public Map<String, Map<String, Object>> getPropertiesMap() {
return propertiesMap;
}
@Override
public void setProperty(String id, Object value) {
String categoryKey = getCategoryKey(PropertyHelper.getPropertyCategory(id));
Map<String, Object> properties = propertiesMap.get(categoryKey);
if (properties == null) {
properties = new TreeMap<String, Object>();
propertiesMap.put(categoryKey, properties);
}
properties.put(PropertyHelper.getPropertyName(id), value);
}
@Override
public void addCategory(String id) {
String categoryKey = getCategoryKey(id);
if (!propertiesMap.containsKey(categoryKey)) {
propertiesMap.put(categoryKey, new HashMap<String, Object>());
}
}
@Override
public Object getPropertyValue(String id) {
String categoryKey = getCategoryKey(PropertyHelper.getPropertyCategory(id));
Map<String, Object> properties = propertiesMap.get(categoryKey);
return properties == null ?
null : properties.get(PropertyHelper.getPropertyName(id));
}
// ----- Object overrides --------------------------------------------------
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Resource : ").append(type).append("\n");
sb.append("Properties:\n");
sb.append(propertiesMap);
return sb.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ResourceImpl resource = (ResourceImpl) o;
return type == resource.type &&
!(propertiesMap != null ? !propertiesMap.equals(resource.propertiesMap) : resource.propertiesMap != null);
}
@Override
public int hashCode() {
int result = 31 * type.hashCode() + (propertiesMap != null ? propertiesMap.hashCode() : 0);
return result;
}
// ----- utility methods ---------------------------------------------------
private String getCategoryKey(String category) {
return category == null ? "" : category;
}
}