/**
* Copyright (c) 2011-2014, OpenIoT
*
* This file is part of OpenIoT.
*
* OpenIoT is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, version 3 of the License.
*
* OpenIoT is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OpenIoT. If not, see <http://www.gnu.org/licenses/>.
*
* Contact: OpenIoT mailto: info@openiot.eu
*/
package org.openiot.cupus.artefact;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
/**
* Publication implementation using hashtable. Supports equivalence operator
* only.
*
*/
public class HashtablePublication extends Publication implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
* user-defined parameters describing the event
*/
private HashMap<String, Object> userProperties;
/**
* Should not be used, created only for WS methods
*/
public HashtablePublication() {
super();
}
public HashtablePublication(long validity, long startTime) {
super(validity, startTime);
userProperties = new HashMap<String, Object>();
}
public HashtablePublication(HashMap<String, Object> userProperties,
long validity, long startTime) {
super(validity, startTime);
this.userProperties = userProperties;
}
/**
* Returns reference to user-defined parameters.
*
* @return Returns reference to user-defined parameters.
*/
public HashMap<String, Object> getProperties() {
return userProperties;
}
/**
* Sets userProperties.
*
* @param userProperties Sets userProperties.
*/
public void setProperties(HashMap<String, Object> userProperties) {
this.userProperties = userProperties;
}
/**
* Method for adding a user-defined property. Name and Value must be
* not-null objects.
*
* @param propertyName Name of property.
* @param propertyValue Value of property.
*
*/
public void setProperty(String propertyName, Object propertyValue) {
if ((propertyName != null) && (propertyValue != null)) {
userProperties.put(propertyName, propertyValue);
}
}
@Override
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof HashtablePublication) {
HashtablePublication publication = (HashtablePublication) anObject;
return userProperties.equals(publication.getProperties());
} else {
return false;
}
}
@Override
public int hashCode() {
int result = super.hashCode();
result = (29 * result)
+ ((userProperties != null) ? userProperties.hashCode() : 0);
return result;
}
@Override
public String toString() {
Iterator<String> iterator = userProperties.keySet().iterator();
String key = iterator.next();
StringBuilder retVal = new StringBuilder("(" + key + "="
+ userProperties.get(key));
while (iterator.hasNext()) {
key = iterator.next();
retVal.append(", " + key + "=" + userProperties.get(key));
}
return retVal.append(')').toString();
}
}