1 17 package org.alfresco.jcr.item; 18 19 import java.io.InputStream ; 20 import java.util.Calendar ; 21 import java.util.Date ; 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 44 public class ValueFactoryImpl implements ValueFactory 45 { 46 private SessionImpl session; 47 private ValueFactory proxy = null; 48 49 54 public ValueFactoryImpl(SessionImpl session) 55 { 56 this.session = session; 57 } 58 59 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 76 public Value createValue(String 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 .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 throw new ValueFormatException("Failed to create value " + value + " of type " + type, e); 121 } 122 return createdValue; 123 } 124 125 128 public Value createValue(String value) 129 { 130 return new ValueImpl(session, PropertyType.STRING, value); 131 } 132 133 136 public Value createValue(long value) 137 { 138 return new ValueImpl(session, PropertyType.LONG, value); 139 } 140 141 144 public Value createValue(double value) 145 { 146 return new ValueImpl(session, PropertyType.DOUBLE, value); 147 } 148 149 152 public Value createValue(boolean value) 153 { 154 return new ValueImpl(session, PropertyType.BOOLEAN, value); 155 } 156 157 160 public Value createValue(Calendar value) 161 { 162 return new ValueImpl(session, PropertyType.DATE, value.getTime()); 163 } 164 165 168 public Value createValue(InputStream value) 169 { 170 return new ValueImpl(session, PropertyType.BINARY, value); 171 } 172 173 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 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 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 |