/*
* Created on Jun 29, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.idega.block.datareport.business;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.idega.block.dataquery.data.QueryResult;
import com.idega.business.IBOSessionBean;
/**
* <p>
* TODO thomas Describe Type QueryResultSessionBean
* </p>
* Last modified: $Date: 2007/01/12 19:31:31 $ by $Author: idegaweb $
*
* @author <a href="mailto:thomas@idega.com">thomas</a>
* @version $Revision: 1.1.2.1 $
*/
public class QueryResultSessionBean extends IBOSessionBean implements QueryResultSession{
Map identifierValueMap = null;
QueryResult queryResult = null;
public void storeQueryResult(Map identifierValueMap, QueryResult queryResult) {
this.queryResult = queryResult;
this.identifierValueMap = identifierValueMap;
}
public QueryResult getQueryResult(Map identifierValueMap) {
if (mapsAreEqual(identifierValueMap)) {
return this.queryResult;
}
deleteQueryResult();
return null;
}
public void deleteQueryResult() {
this.identifierValueMap = null;
this.queryResult = null;
}
public void setValue(String identifier, Object value) {
if (this.identifierValueMap == null) {
this.identifierValueMap = new HashMap();
}
this.identifierValueMap.put(identifier, value);
}
public Object getValue(String identifier) {
if (this.identifierValueMap == null) {
return null;
}
return this.identifierValueMap.get(identifier);
}
private boolean mapsAreEqual(Map identifierValueMap) {
if (this.identifierValueMap == null && identifierValueMap == null) {
return true;
}
// this.identifierMap is not null
if (identifierValueMap == null) {
return false;
}
// both maps are not null
if (identifierValueMap.size() != this.identifierValueMap.size()) {
return false;
}
// both maps have the same size
// compare now the values
Iterator iterator = identifierValueMap.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
Object value = identifierValueMap.get(key);
Object previousValue = this.identifierValueMap.get(key);
if (! valuesAreEqual(previousValue, value)) {
return false;
}
}
return true;
}
private boolean valuesAreEqual(Object value1, Object value2) {
if (value1 == null && value2 == null) {
return true;
}
// value1 is not null
if (value1 instanceof String) {
return ((String) value1).equals(value2);
}
// value1 is a list
if (value2 instanceof String) {
return false;
}
// both values are lists
if (((List) value1).size() != ((List) value2).size()) {
return false;
}
// both list have the same size
int size = ((List) value1).size();
for (int i = 0; i < size; i++) {
String object1 = ((List) value1).get(i).toString();
String object2 = ((List) value2).get(i).toString();
if (! object1.equals(object2)) {
return false;
}
}
return true;
}
}