com.opensymphony.webwork.util.ContainUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.opensymphony.webwork.util.ContainUtil.java

Source

    /*
     * Copyright (c) 2002-2003 by OpenSymphony
     * All rights reserved.
     */

import java.lang.reflect.Array;
    import java.util.Collection;
    import java.util.Map;

    /**
     * <code>ContainUtil</code> 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 <code>obj2</code> exists in <code>obj1</code>.
           *
           * <table borer="1">
           *  <tr>
           *      <td>Type Of obj1</td>
           *      <td>Comparison type</td>
           *  </tr>
           *  <tr>
           *      <td>null<td>
           *      <td>always return false</td>
           *  </tr>
           *  <tr>
           *      <td>Map</td>
           *      <td>Map containsKey(obj2)</td>
           *  </tr>
           *  <tr>
           *      <td>Collection</td>
           *      <td>Collection contains(obj2)</td>
           *  </tr>
           *  <tr>
           *      <td>Array</td>
           *      <td>there's an array element (e) where e.equals(obj2)</td>
           *  </tr>
           *  <tr>
           *      <td>Object</td>
           *      <td>obj1.equals(obj2)</td>
           *  </tr>
           * </table>
           *
           *
           * @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;

            }
        }
    }