/*
* Copyright (c) 2002-2003 by OpenSymphony
* All rights reserved.
*/
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
/**
* ContainUtil
will check if object 1 contains object 2.
* Object 1 may be an Object, array, Collection, or a Map
*
* @author Matt Baldree (matt@smallleap.com)
* @version $Revision: 2737 $
*/
public class ContainUtil {
/**
* Determine if obj2
exists in obj1
.
*
*
*
* Type Of obj1
* Comparison type
*
*
* null
* always return false
*
*
* Map
* Map containsKey(obj2)
*
*
* Collection
* Collection contains(obj2)
*
*
* Array
* there's an array element (e) where e.equals(obj2)
*
*
* Object
* obj1.equals(obj2)
*
*
*
*
* @param obj1
* @param obj2
* @return
*/
public static boolean contains(Object obj1, Object obj2) {
if ((obj1 == null) || (obj2 == null)) {
//log.debug("obj1 or obj2 are null.");
return false;
}
if (obj1 instanceof Map) {
if (((Map) obj1).containsKey(obj2)) {
//log.debug("obj1 is a map and contains obj2");
return true;
}
} else if (obj1 instanceof Collection) {
if (((Collection) obj1).contains(obj2)) {
//log.debug("obj1 is a collection and contains obj2");
return true;
}
} else if (obj1.getClass().isArray()) {
for (int i = 0; i < Array.getLength(obj1); i++) {
Object value = null;
value = Array.get(obj1, i);
if (value.equals(obj2)) {
//log.debug("obj1 is an array and contains obj2");
return true;
}
}
} else if (obj1.equals(obj2)) {
//log.debug("obj1 is an object and equals obj2");
return true;
}
//log.debug("obj1 does not contain obj2: " + obj1 + ", " + obj2);
return false;
}
}
////////////////
package com.opensymphony.webwork.util;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
import com.opensymphony.webwork.util.ContainUtil;
public class ContainUtilTest extends TestCase {
public void testNull() throws Exception {
assertFalse(ContainUtil.contains(null, null));
assertFalse(ContainUtil.contains(new Object(), null));
assertFalse(ContainUtil.contains(null, new Object()));
}
public void testSimpleList() throws Exception {
List l = new ArrayList();
l.add("one");
l.add("two");
assertFalse(ContainUtil.contains(l, "three"));
assertTrue(ContainUtil.contains(l, "one"));
assertTrue(ContainUtil.contains(l, "two"));
}
public void testSimpleSet() throws Exception {
Set s = new LinkedHashSet();
s.add("one");
s.add("two");
assertFalse(ContainUtil.contains(s, "thre"));
assertTrue(ContainUtil.contains(s, "one"));
assertTrue(ContainUtil.contains(s, "two"));
}
public void testComplexList() throws Exception {
List l = new ArrayList();
l.add(new MyObject("tm_jee", Integer.valueOf("20")));
l.add(new MyObject("jenny", Integer.valueOf("22")));
assertFalse(ContainUtil.contains(l, new MyObject("paul", Integer.valueOf("50"))));
assertFalse(ContainUtil.contains(l, new MyObject("tm_jee", Integer.valueOf("44"))));
assertTrue(ContainUtil.contains(l, new MyObject("tm_jee", Integer.valueOf("20"))));
assertTrue(ContainUtil.contains(l, new MyObject("jenny", Integer.valueOf("22"))));
}
public void testComplexMap() throws Exception {
Set s = new LinkedHashSet();
s.add(new MyObject("tm_jee", Integer.valueOf("20")));
s.add(new MyObject("jenny", Integer.valueOf("22")));
assertFalse(ContainUtil.contains(s, new MyObject("paul", Integer.valueOf("50"))));
assertFalse(ContainUtil.contains(s, new MyObject("tm_jee", Integer.valueOf("44"))));
assertTrue(ContainUtil.contains(s, new MyObject("tm_jee", Integer.valueOf("20"))));
assertTrue(ContainUtil.contains(s, new MyObject("jenny", Integer.valueOf("22"))));
}
public void testObject() throws Exception {
assertFalse(ContainUtil.contains("aaa", "bbb"));
assertFalse(ContainUtil.contains(new MyObject("tm_jee", Integer.valueOf("22")), new MyObject("tmjee", Integer.valueOf("22"))));
assertTrue(ContainUtil.contains("apple", "apple"));
assertTrue(ContainUtil.contains(new MyObject("tm_jee", Integer.valueOf("22")), new MyObject("tm_jee", Integer.valueOf("22"))));
}
public static class MyObject {
private String name;
private Integer age;
public MyObject(String name, Integer age) {
this.name = name;
this.age = age;
}
public int hashCode() {
return this.name.hashCode();
}
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (! (obj instanceof MyObject)) { return false; }
MyObject tmp = (MyObject) obj;
if (
tmp.name.equals(this.name) &&
tmp.age.equals(this.age)
) {
return true;
}
return false;
}
}
}