KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > alfresco > jcr > item > ValueFactoryImpl


1 /*
2  * Copyright (C) 2005 Alfresco, Inc.
3  *
4  * Licensed under the Mozilla Public License version 1.1
5  * with a permitted attribution clause. You may obtain a
6  * copy of the License at
7  *
8  * http://www.alfresco.org/legal/license.txt
9  *
10  * Unless required by applicable law or agreed to in writing,
11  * software distributed under the License is distributed on an
12  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific
14  * language governing permissions and limitations under the
15  * License.
16  */

17 package org.alfresco.jcr.item;
18
19 import java.io.InputStream JavaDoc;
20 import java.util.Calendar JavaDoc;
21 import java.util.Date JavaDoc;
22
23 import javax.jcr.Node;
24 import javax.jcr.Property;
25 import javax.jcr.PropertyType;
26 import javax.jcr.RepositoryException;
27 import javax.jcr.Value;
28 import javax.jcr.ValueFactory;
29 import javax.jcr.ValueFormatException;
30
31 import org.alfresco.jcr.session.SessionImpl;
32 import org.alfresco.jcr.util.JCRProxyFactory;
33 import org.alfresco.service.cmr.repository.NodeRef;
34 import org.alfresco.service.cmr.repository.Path;
35 import org.alfresco.service.cmr.repository.StoreRef;
36 import org.alfresco.service.namespace.QName;
37
38 /**
39  * Alfresco implementation of JCR Value Factory
40  *
41  * @author David Caruana
42  *
43  */

44 public class ValueFactoryImpl implements ValueFactory
45 {
46     private SessionImpl session;
47     private ValueFactory proxy = null;
48
49     /**
50      * Construct
51      *
52      * @param session
53      */

54     public ValueFactoryImpl(SessionImpl session)
55     {
56         this.session = session;
57     }
58     
59     /**
60      * Get proxied JCR Value Factory
61      *
62      * @return
63      */

64     public ValueFactory getProxy()
65     {
66         if (proxy == null)
67         {
68             proxy = (ValueFactory)JCRProxyFactory.create(this, ValueFactory.class, session);
69         }
70         return proxy;
71     }
72
73     /* (non-Javadoc)
74      * @see javax.jcr.ValueFactory#createValue(java.lang.String, int)
75      */

76     public Value createValue(String JavaDoc value, int type) throws ValueFormatException
77     {
78         Value createdValue = null;
79         
80         try
81         {
82             switch(type)
83             {
84                 case PropertyType.STRING:
85                     createdValue = createValue(session.getTypeConverter().stringValue(value));
86                     break;
87                 case PropertyType.LONG:
88                     createdValue = createValue(session.getTypeConverter().longValue(value));
89                     break;
90                 case PropertyType.DOUBLE:
91                     createdValue = createValue(session.getTypeConverter().doubleValue(value));
92                     break;
93                 case PropertyType.BOOLEAN:
94                     createdValue = createValue(session.getTypeConverter().booleanValue(value));
95                     break;
96                 case PropertyType.DATE:
97                     createdValue = new ValueImpl(session, PropertyType.DATE, session.getTypeConverter().convert(Date JavaDoc.class, value));
98                     break;
99                 case PropertyType.BINARY:
100                     createdValue = createValue(session.getTypeConverter().streamValue(value));
101                     break;
102                 case PropertyType.REFERENCE:
103                     createdValue = new ValueImpl(session, PropertyType.REFERENCE, session.getTypeConverter().referenceValue(value));
104                     break;
105                 case PropertyType.NAME:
106                     QName name = session.getTypeConverter().convert(QName.class, value);
107                     createdValue = new ValueImpl(session, PropertyType.NAME, name);
108                     break;
109                 case PropertyType.PATH:
110                     Path path = session.getTypeConverter().convert(Path.class, value);
111                     createdValue = new ValueImpl(session, PropertyType.PATH, path);
112                     break;
113                 default:
114                     throw new ValueFormatException("Cannot create value of type " + type);
115             }
116         }
117         catch(RepositoryException e)
118         {
119             // Should this method also throw repository exception
120
throw new ValueFormatException("Failed to create value " + value + " of type " + type, e);
121         }
122         return createdValue;
123     }
124         
125     /* (non-Javadoc)
126      * @see javax.jcr.ValueFactory#createValue(java.lang.String)
127      */

128     public Value createValue(String JavaDoc value)
129     {
130         return new ValueImpl(session, PropertyType.STRING, value);
131     }
132
133     /* (non-Javadoc)
134      * @see javax.jcr.ValueFactory#createValue(long)
135      */

136     public Value createValue(long value)
137     {
138         return new ValueImpl(session, PropertyType.LONG, value);
139     }
140
141     /* (non-Javadoc)
142      * @see javax.jcr.ValueFactory#createValue(double)
143      */

144     public Value createValue(double value)
145     {
146         return new ValueImpl(session, PropertyType.DOUBLE, value);
147     }
148
149     /* (non-Javadoc)
150      * @see javax.jcr.ValueFactory#createValue(boolean)
151      */

152     public Value createValue(boolean value)
153     {
154         return new ValueImpl(session, PropertyType.BOOLEAN, value);
155     }
156
157     /* (non-Javadoc)
158      * @see javax.jcr.ValueFactory#createValue(java.util.Calendar)
159      */

160     public Value createValue(Calendar JavaDoc value)
161     {
162         return new ValueImpl(session, PropertyType.DATE, value.getTime());
163     }
164
165     /* (non-Javadoc)
166      * @see javax.jcr.ValueFactory#createValue(java.io.InputStream)
167      */

168     public Value createValue(InputStream JavaDoc value)
169     {
170         return new ValueImpl(session, PropertyType.BINARY, value);
171     }
172
173     /* (non-Javadoc)
174      * @see javax.jcr.ValueFactory#createValue(javax.jcr.Node)
175      */

176     public Value createValue(Node value) throws RepositoryException
177     {
178         if (value == null)
179         {
180             throw new RepositoryException("Node value must not be null");
181         }
182         
183         // TODO: refer to ContentModel Constants
184
Property protocol = value.getProperty("sys:store-protocol");
185         Property identifier = value.getProperty("sys:store-identifier");
186         Property uuid = value.getProperty("sys:node-uuid");
187
188         // construct a node reference
189
NodeRef ref = new NodeRef(new StoreRef(protocol.getString(), identifier.getString()), uuid.getString());
190         return new ValueImpl(session, PropertyType.REFERENCE, ref);
191     }
192     
193 }
194
Popular Tags