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