CQMetaDataUtil.java 4.18 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.workflow.metadata.MetaDataMap
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Value
 *  org.apache.jackrabbit.value.BooleanValue
 *  org.apache.jackrabbit.value.DateValue
 *  org.apache.jackrabbit.value.DoubleValue
 *  org.apache.jackrabbit.value.LongValue
 *  org.apache.jackrabbit.value.StringValue
 */
package com.day.cq.workflow.impl.metadata;

import com.day.cq.workflow.metadata.MetaDataMap;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Set;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import org.apache.jackrabbit.value.BooleanValue;
import org.apache.jackrabbit.value.DateValue;
import org.apache.jackrabbit.value.DoubleValue;
import org.apache.jackrabbit.value.LongValue;
import org.apache.jackrabbit.value.StringValue;

public class CQMetaDataUtil {
    private static final String UNSTRUCTURED_NODE_TYPE = "nt:unstructured";

    public static void addMetaDataNode(Node rootNode, MetaDataMap metaData) throws RepositoryException {
        Node metaDataNode = rootNode.addNode("metaData", "nt:unstructured");
        for (String key : metaData.keySet()) {
            Object value = metaData.get((Object)key);
            CQMetaDataUtil.setMetaDataProperty(metaDataNode, key, value);
        }
    }

    public static Value convertToValue(Object value) {
        if (value == null) {
            return null;
        }
        Value convertedValue = null;
        if (Value.class.isAssignableFrom(value.getClass())) {
            convertedValue = (Value)value;
        } else if (value instanceof String) {
            convertedValue = new StringValue((String)value);
        } else if (value instanceof Double) {
            convertedValue = new DoubleValue((Double)value);
        } else if (value instanceof Long) {
            convertedValue = new LongValue((Long)value);
        } else if (value instanceof Number) {
            convertedValue = new DoubleValue(((Number)value).doubleValue());
        } else if (value instanceof Boolean) {
            convertedValue = new BooleanValue((Boolean)value);
        } else if (value instanceof Calendar) {
            convertedValue = new DateValue((Calendar)value);
        } else if (value instanceof Date) {
            GregorianCalendar cal = new GregorianCalendar();
            cal.setTime((Date)value);
            convertedValue = new DateValue((Calendar)cal);
        }
        return convertedValue;
    }

    public static Value[] convertToValues(Object[] values) {
        ArrayList<Value> valueList = new ArrayList<Value>();
        for (Object value : values) {
            Value convertedValue = CQMetaDataUtil.convertToValue(value);
            if (convertedValue == null) continue;
            valueList.add(convertedValue);
        }
        return valueList.toArray((T[])new Value[valueList.size()]);
    }

    public static void setMetaDataProperty(Node metaDataNode, String key, Object value) throws RepositoryException {
        if (metaDataNode != null && key != null && value != null) {
            if (value.getClass().isArray()) {
                Value[] convertedValues = CQMetaDataUtil.convertToValues((Object[])value);
                if (convertedValues != null) {
                    metaDataNode.setProperty(key, convertedValues);
                }
            } else {
                Value convertedValue = CQMetaDataUtil.convertToValue(value);
                if (convertedValue != null) {
                    metaDataNode.setProperty(key, convertedValue);
                }
            }
        }
    }

    public static Object convertToStringMap(MetaDataMap metaDataMap) {
        HashMap<String, String> stringMap = new HashMap<String, String>();
        if (metaDataMap != null) {
            for (String key : metaDataMap.keySet()) {
                String value = (String)metaDataMap.get(key, String.class);
                if (value == null) continue;
                stringMap.put(key, value);
            }
        }
        return stringMap;
    }
}