1 17 package org.alfresco.jcr.query; 18 19 import java.util.HashMap ; 20 import java.util.List ; 21 import java.util.Map ; 22 import java.util.Set ; 23 24 import javax.jcr.NodeIterator; 25 import javax.jcr.RepositoryException; 26 import javax.jcr.nodetype.NodeType; 27 import javax.jcr.nodetype.PropertyDefinition; 28 import javax.jcr.query.Query; 29 import javax.jcr.query.QueryResult; 30 import javax.jcr.query.RowIterator; 31 32 import org.alfresco.jcr.item.NodeRefNodeIteratorImpl; 33 import org.alfresco.jcr.session.SessionImpl; 34 import org.alfresco.jcr.util.JCRProxyFactory; 35 import org.alfresco.service.cmr.repository.NodeRef; 36 import org.alfresco.service.cmr.repository.NodeService; 37 import org.alfresco.service.namespace.QName; 38 39 40 45 public class NodeRefListQueryResultImpl implements QueryResult 46 { 47 48 private SessionImpl session; 49 50 51 private List <NodeRef> nodeRefs; 52 53 54 private NodeService nodeService; 55 56 57 private Map <QName, PropertyDefinition> columns = null; 58 59 60 private QueryResult proxy = null; 61 62 63 68 public NodeRefListQueryResultImpl(SessionImpl session, List <NodeRef> nodeRefs) 69 { 70 this.session = session; 71 this.nodeRefs = nodeRefs; 72 this.nodeService = session.getRepositoryImpl().getServiceRegistry().getNodeService(); 73 } 74 75 80 public QueryResult getProxy() 81 { 82 if (proxy == null) 83 { 84 proxy = (QueryResult)JCRProxyFactory.create(this, QueryResult.class, session); 85 } 86 return proxy; 87 } 88 89 92 public String [] getColumnNames() throws RepositoryException 93 { 94 Map <QName, PropertyDefinition> columns = getColumnDefinitions(); 95 String [] names = new String [columns.size()]; 96 int i = 0; 97 for (QName columnName : columns.keySet()) 98 { 99 names[i++] = columnName.toPrefixString(session.getNamespaceResolver()); 100 } 101 return names; 102 } 103 104 107 public RowIterator getRows() throws RepositoryException 108 { 109 return new NodeRefRowIteratorImpl(session, getColumnDefinitions(), nodeRefs).getProxy(); 110 } 111 112 115 public NodeIterator getNodes() throws RepositoryException 116 { 117 return new NodeRefNodeIteratorImpl(session, nodeRefs); 118 } 119 120 121 126 private Map <QName, PropertyDefinition> getColumnDefinitions() 127 throws RepositoryException 128 { 129 if (columns == null) 130 { 131 columns = new HashMap <QName, PropertyDefinition>(); 132 133 if (nodeRefs.size() > 0) 135 { 136 QName type = nodeService.getType(nodeRefs.get(0)); 139 NodeType nodeType = session.getTypeManager().getNodeType(type.toPrefixString(session.getNamespaceResolver())); 140 PropertyDefinition[] propDefs = nodeType.getPropertyDefinitions(); 141 for (PropertyDefinition propDef : propDefs) 142 { 143 if (!propDef.isMultiple()) 144 { 145 columns.put(QName.createQName(propDef.getName(), session.getNamespaceResolver()), propDef); 146 } 147 } 148 Set <QName>aspects = nodeService.getAspects(nodeRefs.get(0)); 149 for (QName aspect : aspects) 150 { 151 NodeType nodeAspect = session.getTypeManager().getNodeType(aspect.toPrefixString(session.getNamespaceResolver())); 152 propDefs = nodeAspect.getPropertyDefinitions(); 153 for (PropertyDefinition propDef : propDefs) 154 { 155 if (!propDef.isMultiple()) 156 { 157 columns.put(QName.createQName(propDef.getName(), session.getNamespaceResolver()), propDef); 158 } 159 } 160 } 161 } 162 163 columns.put(QueryManagerImpl.JCRPATH_COLUMN, null); 165 columns.put(QueryManagerImpl.JCRSCORE_COLUMN, null); 166 } 167 return columns; 168 } 169 170 } 171 | Popular Tags |