1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.tika.metadata;
18
19 import java.util.Arrays;
20 import java.util.Collections;
21 import java.util.HashSet;
22 import java.util.Set;
23
24
25
26
27
28
29
30
31
32
33 public final class Property {
34
35 public static enum ValueType {
36 BOOLEAN, OPEN_CHOICE, CLOSED_CHOICE, DATE, INTEGER, LOCALE,
37 MIME_TYPE, PROPER_NAME, RATIONAL, REAL, TEXT, URI, URL, XPATH
38 }
39
40 private final String name;
41
42 private final boolean internal;
43
44 private final ValueType valueType;
45
46
47
48
49 private final Set<String> choices;
50
51 private Property(
52 String name, boolean internal,
53 ValueType valueType, String[] choices) {
54 this.name = name;
55 this.internal = internal;
56 this.valueType = valueType;
57 if (choices != null) {
58 this.choices = Collections.unmodifiableSet(
59 new HashSet<String>(Arrays.asList(choices)));
60 } else {
61 this.choices = null;
62 }
63 }
64
65 public String getName() {
66 return name;
67 }
68
69 public boolean isInternal() {
70 return internal;
71 }
72
73 public boolean isExternal() {
74 return !internal;
75 }
76
77 public ValueType getValueType() {
78 return valueType;
79 }
80
81
82
83
84
85
86
87
88 public Set<String> getChoices() {
89 return choices;
90 }
91
92 private Property( String name, boolean internal, ValueType valueType) {
93 this(name, internal, valueType, null);
94 }
95
96 public static Property internalBoolean(String name) {
97 return new Property(name, true, ValueType.BOOLEAN);
98 }
99
100 public static Property internalClosedChoise(
101 String name, String... choices) {
102 return new Property(name, true, ValueType.CLOSED_CHOICE, choices);
103 }
104
105 public static Property internalDate(String name) {
106 return new Property(name, true, ValueType.DATE);
107 }
108
109 public static Property internalInteger(String name) {
110 return new Property(name, true, ValueType.INTEGER);
111 }
112
113 public static Property internalRational(String name) {
114 return new Property(name, true, ValueType.RATIONAL);
115 }
116
117 public static Property internalOpenChoise(
118 String name, String... choices) {
119 return new Property(name, true, ValueType.OPEN_CHOICE, choices);
120 }
121 public static Property internalReal(String name) {
122 return new Property(name, true, ValueType.REAL);
123 }
124
125 public static Property internalText(String name) {
126 return new Property(name, true, ValueType.TEXT);
127 }
128
129 public static Property internalURI(String name) {
130 return new Property(name, true, ValueType.URI);
131 }
132
133 public static Property externalClosedChoise(
134 String name, String... choices) {
135 return new Property(name, false, ValueType.CLOSED_CHOICE, choices);
136 }
137
138 public static Property externalDate(String name) {
139 return new Property(name, false, ValueType.DATE);
140 }
141
142 public static Property externalInteger(String name) {
143 return new Property(name, false, ValueType.INTEGER);
144 }
145
146 public static Property externalText(String name) {
147 return new Property(name, false, ValueType.TEXT);
148 }
149
150 }