1 /*
2 * ModeShape (http://www.modeshape.org)
3 * See the COPYRIGHT.txt file distributed with this work for information
4 * regarding copyright ownership. Some portions may be licensed
5 * to Red Hat, Inc. under one or more contributor license agreements.
6 * See the AUTHORS.txt file in the distribution for a full listing of
7 * individual contributors.
8 *
9 * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
10 * is licensed to you under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation; either version 2.1 of
12 * the License, or (at your option) any later version.
13 *
14 * ModeShape is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this software; if not, write to the Free
21 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
23 */
24 package org.modeshape.graph.property;
25
26 import java.math.BigDecimal;
27 import java.net.URI;
28 import net.jcip.annotations.ThreadSafe;
29 import org.modeshape.graph.query.model.TypeSystem;
30
31 /**
32 * The set of standard {@link ValueFactory} instances.
33 */
34 @ThreadSafe
35 public interface ValueFactories extends Iterable<ValueFactory<?>> {
36
37 /**
38 * Get the type system associated with these factories.
39 *
40 * @return the type system; never null
41 */
42 TypeSystem getTypeSystem();
43
44 /**
45 * Get the value factory that creates values of the supplied {@link PropertyType type}.
46 *
47 * @param type the type for the values
48 * @return the factory; never null
49 * @throws IllegalArgumentException if the property type is null
50 */
51 ValueFactory<?> getValueFactory( PropertyType type );
52
53 /**
54 * Get the value factory that is best able to create values with the most natural type given by the supplied value.
55 *
56 * @param prototype the value that should be used to determine the best value factory
57 * @return the factory; never null
58 * @throws IllegalArgumentException if the prototype value is null
59 */
60 ValueFactory<?> getValueFactory( Object prototype );
61
62 /**
63 * Get the value factory for {@link PropertyType#STRING string} properties.
64 *
65 * @return the factory; never null
66 */
67 ValueFactory<String> getStringFactory();
68
69 /**
70 * Get the value factory for {@link PropertyType#BINARY binary} properties.
71 *
72 * @return the factory; never null
73 */
74 BinaryFactory getBinaryFactory();
75
76 /**
77 * Get the value factory for {@link PropertyType#LONG long} properties.
78 *
79 * @return the factory; never null
80 */
81 ValueFactory<Long> getLongFactory();
82
83 /**
84 * Get the value factory for {@link PropertyType#DOUBLE double} properties.
85 *
86 * @return the factory; never null
87 */
88 ValueFactory<Double> getDoubleFactory();
89
90 /**
91 * Get the value factory for {@link PropertyType#DECIMAL decimal} properties.
92 *
93 * @return the factory; never null
94 */
95 ValueFactory<BigDecimal> getDecimalFactory();
96
97 /**
98 * Get the value factory for {@link PropertyType#DATE date} properties.
99 *
100 * @return the factory; never null
101 */
102 DateTimeFactory getDateFactory();
103
104 /**
105 * Get the value factory for {@link PropertyType#BOOLEAN boolean} properties.
106 *
107 * @return the factory; never null
108 */
109 ValueFactory<Boolean> getBooleanFactory();
110
111 /**
112 * Get the value factory for {@link PropertyType#NAME name} properties.
113 *
114 * @return the factory; never null
115 */
116 NameFactory getNameFactory();
117
118 /**
119 * Get the value factory for {@link PropertyType#REFERENCE reference} properties.
120 *
121 * @return the factory; never null
122 */
123 ReferenceFactory getReferenceFactory();
124
125 /**
126 * Get the value factory for {@link PropertyType#REFERENCE reference} properties.
127 *
128 * @return the factory; never null
129 */
130 ReferenceFactory getWeakReferenceFactory();
131
132 /**
133 * Get the value factory for {@link PropertyType#PATH path} properties.
134 *
135 * @return the factory; never null
136 */
137 PathFactory getPathFactory();
138
139 /**
140 * Get the value factory for {@link PropertyType#URI URI} properties.
141 *
142 * @return the factory; never null
143 */
144 ValueFactory<URI> getUriFactory();
145
146 /**
147 * Get the value factory for {@link PropertyType#UUID UUID} properties.
148 *
149 * @return the factory; never null
150 */
151 UuidFactory getUuidFactory();
152
153 /**
154 * Get the value factory for {@link PropertyType#OBJECT object} properties.
155 *
156 * @return the factory; never null
157 */
158 ValueFactory<Object> getObjectFactory();
159
160 }