package org.aksw.jena_sparql_api.beans.model;
import java.util.AbstractMap;
import java.util.HashSet;
import java.util.Set;
/**
* Wrapper to treat a Java object as a map with a set of predefined keys.
* Note: As this breaks the map contract (similar to some cache implementations),
* it may be better introduce a separate interface which is similar to map yet different.
*
* @author raven
*
*/
public class MapEntityOps
extends AbstractMap<String, Object>
{
protected EntityOps entityOps;
protected Object entity;
public MapEntityOps(EntityOps entityOps, Object entity) {
this.entityOps = entityOps;
this.entity = entity;
}
public EntityOps getEntityOps() {
return entityOps;
}
public Object getEntity() {
return entity;
}
@Override
public Object get(Object key) {
Object result = null;
if(key instanceof String) {
PropertyOps propertyOps = entityOps.getProperty((String)key);
if(propertyOps != null) {
result = propertyOps.getValue(entity);
}
}
return result;
}
@Override
public Object put(String key, Object value) {
PropertyOps propertyOps = entityOps.getProperty(key);
if(propertyOps == null) {
throw new RuntimeException("Cannot set value of non-existent property " + key);
}
propertyOps.setValue(entity, value);
return value;
}
@Override
public Set<Entry<String, Object>> entrySet() {
Set<Entry<String, Object>> result = new HashSet<>();
for(PropertyOps propertyOps : entityOps.getProperties()) {
String name = propertyOps.getName();
Object value = propertyOps.getValue(entity);
Entry<String, Object> entry = new SimpleEntry<>(name, value);
result.add(entry);
}
return result;
}
}