001    /*
002     * Created on Oct 2, 2009
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005     * in compliance with the License. You may obtain a copy of the License at
006     *
007     * http://www.apache.org/licenses/LICENSE-2.0
008     *
009     * Unless required by applicable law or agreed to in writing, software distributed under the License
010     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011     * or implied. See the License for the specific language governing permissions and limitations under
012     * the License.
013     *
014     * Copyright @2009 the original author or authors.
015     */
016    package org.fest.assertions;
017    
018    import static java.lang.reflect.Array.get;
019    import static java.lang.reflect.Array.getLength;
020    
021    import java.util.ArrayList;
022    import java.util.List;
023    
024    /**
025     * Understands utility methods for arrays.
026     *
027     * @author Alex Ruiz
028     *
029     * @since 1.2
030     */
031    public final class ArrayInspection {
032    
033      /**
034       * Copies the contents of the given array into a list.
035       * @param array the array to copy.
036       * @return a list containing the contents of the array.
037       * @throws NullPointerException if the given array is <code>null</code>.
038       * @throws IllegalArgumentException if the given object is not an array.
039       */
040      public static List<Object> copy(Object array) {
041        int length = sizeOf(array);
042        List<Object> copy = new ArrayList<Object>(length);
043        for (int i = 0; i < length; i++) copy.add(get(array, i));
044        return copy;
045      }
046    
047      /**
048       * Returns the size of the given array.
049       * @param array the array.
050       * @return the size of the given array.
051       * @throws NullPointerException if the given array is <code>null</code>.
052       * @throws IllegalArgumentException if the given object is not an array.
053       */
054      public static int sizeOf(Object array) {
055        validateIsArray(array);
056        return getLength(array);
057      }
058    
059      private static void validateIsArray(Object array) {
060        if (array == null) throw new NullPointerException("The array should not be null");
061        if (!array.getClass().isArray()) throw new IllegalArgumentException("The given object is not an array");
062      }
063    
064      private ArrayInspection() {}
065    }