ExtensionUtils.java 2.57 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.apache.sling.scripting.sightly.Record
 */
package com.adobe.cq.sightly.internal.extensions;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.sling.scripting.sightly.Record;

public class ExtensionUtils {
    private static final Set<Class<?>> PRIMITIVES = new HashSet<Class<?>>(){};

    public static String objectToString(Object obj) {
        String output = "";
        if (obj != null) {
            if (obj instanceof String) {
                output = (String)obj;
            } else if (ExtensionUtils.isPrimitive(obj)) {
                output = obj.toString();
            } else {
                Collection<Object> col = ExtensionUtils.obtainCollection(obj);
                if (col != null) {
                    output = ExtensionUtils.collectionToString(col);
                }
            }
        }
        return output;
    }

    public static boolean isPrimitive(Object obj) {
        return PRIMITIVES.contains(obj.getClass());
    }

    public static String collectionToString(Collection<?> col) {
        StringBuilder builder = new StringBuilder();
        String prefix = "";
        for (Object o : col) {
            builder.append(prefix).append(ExtensionUtils.objectToString(o));
            prefix = ",";
        }
        return builder.toString();
    }

    public static Collection<Object> obtainCollection(Object obj) {
        if (obj == null) {
            return Collections.emptyList();
        }
        if (obj instanceof Object[]) {
            return Arrays.asList((Object[])obj);
        }
        if (obj instanceof Collection) {
            return (Collection)obj;
        }
        if (obj instanceof Map) {
            return ((Map)obj).keySet();
        }
        if (obj instanceof Record) {
            return ((Record)obj).getPropertyNames();
        }
        if (obj instanceof Enumeration) {
            return Collections.list((Enumeration)obj);
        }
        if (obj instanceof Iterator) {
            return ExtensionUtils.fromIterator((Iterator)obj);
        }
        return Collections.emptyList();
    }

    public static Collection<Object> fromIterator(Iterator<Object> iterator) {
        ArrayList<Object> result = new ArrayList<Object>();
        while (iterator.hasNext()) {
            result.add(iterator.next());
        }
        return result;
    }

}