All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.almende.eve.state.memory.MemoryState Maven / Gradle / Ivy

There is a newer version: 3.1.1
Show newest version
/*
 * Copyright: Almende B.V. (2014), Rotterdam, The Netherlands
 * License: The Apache Software License, Version 2.0
 */
package com.almende.eve.state.memory;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.almende.eve.state.AbstractState;
import com.almende.eve.state.State;
import com.almende.eve.state.StateService;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * The Class MemoryState.
 * 
 * @author jos
 * @class MemoryState
 * 
 *        A state for an Eve Agent, which stores the data in memory.
 *        (After a restart of the application, the data will be gone!)
 * 
 *        The state provides general information for the agent (about itself,
 *        the environment, and the system configuration), and the agent can
 *        store its
 *        state in the state.
 *        The state extends a standard Java Map.
 * 
 *        Warning, this implementation is not thread-safe!
 * 
 *        Usage:
* AgentHost factory = AgentHost.getInstance(config);
* FileState state = new State("agentId");
* state.put("key", "value");
* System.out.println(state.get("key")); // "value"
*/ public class MemoryState extends AbstractState implements State { private static final Logger LOG = Logger.getLogger(MemoryState.class .getName()); private final Map properties = new ConcurrentHashMap(10); /** * Instantiates a new memory state. */ public MemoryState() { } /** * Instantiates a new memory state. * * @param agentId * the agent id * @param service * the service * @param params * the params */ public MemoryState(final String agentId, final StateService service, final ObjectNode params) { super(agentId, service, params); } /* * (non-Javadoc) * * @see com.almende.eve.state.State#clear() */ @Override public void clear() { properties.clear(); } /* * (non-Javadoc) * * @see com.almende.eve.state.State#keySet() */ @Override public Set keySet() { return new HashSet(properties.keySet()); } /* * (non-Javadoc) * * @see com.almende.eve.state.State#containsKey(java.lang.String) */ @Override public boolean containsKey(final String key) { return properties.containsKey(key); } /* * (non-Javadoc) * * @see com.almende.eve.state.AbstractState#get(java.lang.String) */ @Override public Serializable get(final String key) { try { return properties.get(key); } catch (final Exception e) { LOG.log(Level.WARNING, "Couldn't clone object: " + key + ", returning pointer to original object.", e); return properties.get(key); } } /** * Checks if is empty. * * @return true, if is empty */ public boolean isEmpty() { return properties.isEmpty(); } /* * (non-Javadoc) * * @see com.almende.eve.state.AbstractState#locPut(java.lang.String, * java.io.Serializable) */ @Override public Serializable locPut(final String key, final Serializable value) { return properties.put(key, value); } /* * (non-Javadoc) * * @see * com.almende.eve.state.AbstractState#locPutIfUnchanged(java.lang.String, * java.io.Serializable, java.io.Serializable) */ @Override public boolean locPutIfUnchanged(final String key, final Serializable newVal, final Serializable oldVal) { boolean result = false; if (!(oldVal == null && properties.containsKey(key) && properties .get(key) != null) || (properties.get(key) != null && properties.get(key).equals( oldVal))) { properties.put(key, newVal); result = true; } return result; } /* * (non-Javadoc) * * @see com.almende.eve.state.State#remove(java.lang.String) */ @Override public Serializable remove(final String key) { return properties.remove(key); } /* * (non-Javadoc) * * @see com.almende.eve.state.State#size() */ @Override public int size() { return properties.size(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy