001    /*
002     * JBoss DNA (http://www.jboss.org/dna)
003     * See the COPYRIGHT.txt file distributed with this work for information
004     * regarding copyright ownership.  Some portions may be licensed
005     * to Red Hat, Inc. under one or more contributor license agreements.
006     * See the AUTHORS.txt file in the distribution for a full listing of 
007     * individual contributors. 
008     *
009     * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010     * is licensed to you under the terms of the GNU Lesser General Public License as
011     * published by the Free Software Foundation; either version 2.1 of
012     * the License, or (at your option) any later version.
013     *
014     * JBoss DNA is distributed in the hope that it will be useful,
015     * but WITHOUT ANY WARRANTY; without even the implied warranty of
016     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017     * Lesser General Public License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this software; if not, write to the Free
021     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023     */
024    package org.jboss.dna.graph.property;
025    
026    import java.math.BigDecimal;
027    import java.net.URI;
028    
029    /**
030     * The set of standard {@link ValueFactory} instances.
031     * 
032     * @author Randall Hauch
033     */
034    public interface ValueFactories extends Iterable<ValueFactory<?>> {
035    
036        /**
037         * Get the value factory that creates values of the supplied {@link PropertyType type}.
038         * 
039         * @param type the type for the values
040         * @return the factory; never null
041         * @throws IllegalArgumentException if the property type is null
042         */
043        ValueFactory<?> getValueFactory( PropertyType type );
044    
045        /**
046         * Get the value factory that is best able to create values with the most natural type given by the supplied value.
047         * 
048         * @param prototype the value that should be used to determine the best value factory
049         * @return the factory; never null
050         * @throws IllegalArgumentException if the prototype value is null
051         */
052        ValueFactory<?> getValueFactory( Object prototype );
053    
054        /**
055         * Get the value factory for {@link PropertyType#STRING string} properties.
056         * 
057         * @return the factory; never null
058         */
059        ValueFactory<String> getStringFactory();
060    
061        /**
062         * Get the value factory for {@link PropertyType#BINARY binary} properties.
063         * 
064         * @return the factory; never null
065         */
066        BinaryFactory getBinaryFactory();
067    
068        /**
069         * Get the value factory for {@link PropertyType#LONG long} properties.
070         * 
071         * @return the factory; never null
072         */
073        ValueFactory<Long> getLongFactory();
074    
075        /**
076         * Get the value factory for {@link PropertyType#DOUBLE double} properties.
077         * 
078         * @return the factory; never null
079         */
080        ValueFactory<Double> getDoubleFactory();
081    
082        /**
083         * Get the value factory for {@link PropertyType#DECIMAL decimal} properties.
084         * 
085         * @return the factory; never null
086         */
087        ValueFactory<BigDecimal> getDecimalFactory();
088    
089        /**
090         * Get the value factory for {@link PropertyType#DATE date} properties.
091         * 
092         * @return the factory; never null
093         */
094        DateTimeFactory getDateFactory();
095    
096        /**
097         * Get the value factory for {@link PropertyType#BOOLEAN boolean} properties.
098         * 
099         * @return the factory; never null
100         */
101        ValueFactory<Boolean> getBooleanFactory();
102    
103        /**
104         * Get the value factory for {@link PropertyType#NAME name} properties.
105         * 
106         * @return the factory; never null
107         */
108        NameFactory getNameFactory();
109    
110        /**
111         * Get the value factory for {@link PropertyType#REFERENCE reference} properties.
112         * 
113         * @return the factory; never null
114         */
115        ValueFactory<Reference> getReferenceFactory();
116    
117        /**
118         * Get the value factory for {@link PropertyType#PATH path} properties.
119         * 
120         * @return the factory; never null
121         */
122        PathFactory getPathFactory();
123    
124        /**
125         * Get the value factory for {@link PropertyType#URI URI} properties.
126         * 
127         * @return the factory; never null
128         */
129        ValueFactory<URI> getUriFactory();
130    
131        /**
132         * Get the value factory for {@link PropertyType#UUID UUID} properties.
133         * 
134         * @return the factory; never null
135         */
136        UuidFactory getUuidFactory();
137    
138        /**
139         * Get the value factory for {@link PropertyType#OBJECT object} properties.
140         * 
141         * @return the factory; never null
142         */
143        ValueFactory<Object> getObjectFactory();
144    
145    }