1 17 package org.alfresco.jcr.query; 18 19 import java.io.Serializable ; 20 import java.util.Map ; 21 22 import javax.jcr.ItemNotFoundException; 23 import javax.jcr.Node; 24 import javax.jcr.PropertyType; 25 import javax.jcr.RepositoryException; 26 import javax.jcr.Value; 27 import javax.jcr.nodetype.PropertyDefinition; 28 import javax.jcr.query.Row; 29 30 import org.alfresco.jcr.item.NodeImpl; 31 import org.alfresco.jcr.item.ValueImpl; 32 import org.alfresco.jcr.session.SessionImpl; 33 import org.alfresco.service.cmr.repository.NodeRef; 34 import org.alfresco.service.namespace.QName; 35 36 37 42 public class PropertyMapRowImpl implements Row 43 { 44 private SessionImpl session; 45 private Map <QName, PropertyDefinition> columns; 46 private NodeRef nodeRef; 47 private Map <QName, Serializable > properties; 48 49 50 57 public PropertyMapRowImpl(SessionImpl session, Map <QName, PropertyDefinition> columns, NodeRef nodeRef, Map <QName, Serializable > properties) 58 { 59 this.session = session; 60 this.columns = columns; 61 this.nodeRef = nodeRef; 62 this.properties = properties; 63 } 64 65 68 public Value[] getValues() throws RepositoryException 69 { 70 Value[] values = new Value[columns.size() + 2]; 71 72 int i = 0; 73 for (QName propertyName : columns.keySet()) 74 { 75 values[i++] = createValue(propertyName); 76 } 77 return values; 78 } 79 80 83 public Value getValue(String propertyName) throws ItemNotFoundException, RepositoryException 84 { 85 QName propertyQName = QName.createQName(propertyName, session.getNamespaceResolver()); 86 if (!columns.containsKey(propertyQName)) 87 { 88 throw new ItemNotFoundException("Column " + propertyName + " does not exist"); 89 } 90 return createValue(propertyQName); 91 } 92 93 100 private Value createValue(QName propertyName) 101 throws RepositoryException 102 { 103 Value value = null; 104 if (propertyName.equals(QueryManagerImpl.JCRPATH_COLUMN)) 105 { 106 Node node = new NodeImpl(session, nodeRef).getProxy(); 108 value = new ValueImpl(session, PropertyType.STRING, node.getPath()); 109 } 110 else if (propertyName.equals(QueryManagerImpl.JCRSCORE_COLUMN)) 111 { 112 value = new ValueImpl(session, PropertyType.LONG, (long)0); 115 } 116 else 117 { 118 Object objValue = properties.get(propertyName); 120 if (objValue != null) 121 { 122 PropertyDefinition propDef = columns.get(propertyName); 123 value = new ValueImpl(session, propDef.getRequiredType(), objValue); 124 } 125 } 126 return value; 127 } 128 129 } 130 | Popular Tags |