package eu.dnetlib.r2d2.neo4j;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.neo4j.graphdb.Node;

public abstract class Neo4jBean {
	private static Logger logger = Logger.getLogger(Neo4jBean.class);
	
	public final static String ID = "_id";
	
	private Node node = null;
	private Map<String, Object> valueMap = new HashMap<String, Object>();
	
	public void loadValues(Node node) {
		this.node = node;
		
		logger.debug("Resetting values and loading properties from node " + node);
		
		if (node != null) {
			for (String propertyName:node.getPropertyKeys()) {
				Object value = node.getProperty(propertyName);
				
				logger.debug("property name: " + propertyName);
				
				if (propertyName.equals(ID)) {
					logger.debug("Setting id to " + value);
					
					valueMap.put(ID, node.getProperty(ID));
				} else {
					String mapPropertyName = propertyName.substring(propertyName.lastIndexOf(".") + 1);
	
					logger.debug("Setting map property " + mapPropertyName + " to " + value);
					
					valueMap.put(mapPropertyName, value);
				}
			}
		}
	}

	public void setValue(String propertyName, Object value) {
		logger.debug("setting " + propertyName + " to " + value);
		
		if (value != null)
			this.valueMap.put(propertyName, value);
		else
			this.valueMap.remove(propertyName);
	}
	
	public Object getValue(String propertyName) {
		return this.valueMap.get(propertyName);
	}
	
	public String getId() {
		return (String) valueMap.get(ID);
	}
	
	public void setId(String id) {
		this.valueMap.put(ID, id);
	}

	public Node getNode() {
		return node;
	}

	public Map<String, Object> getValueMap() {
		return valueMap;
	}

	public void setValueMap(Map<String, Object> valueMap) {
		this.valueMap = valueMap;
	}
}