CQMetaDataUtil.java
4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
* 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;
}
}