unico 2004/07/20 04:24:36
Modified: src/stores/org/apache/slide/store/impl/rdbms
RDBMSComparableResourcesPool.java
Log:
fix NPE when using <allprop> within select as reported by Guido Casper
Revision Changes Path
1.7 +70 -6
jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/RDBMSComparableResourcesPool.java
Index: RDBMSComparableResourcesPool.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/RDBMSComparableResourcesPool.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RDBMSComparableResourcesPool.java 14 Jul 2004 19:19:48 -0000 1.6
+++ RDBMSComparableResourcesPool.java 20 Jul 2004 11:24:35 -0000 1.7
@@ -34,6 +34,7 @@
import java.util.Map;
import java.util.Set;
+import org.apache.slide.common.PropertyName;
import org.apache.slide.common.RequestedProperties;
import org.apache.slide.common.RequestedProperty;
import org.apache.slide.common.RequestedPropertyImpl;
@@ -64,7 +65,7 @@
private final SearchToken _token;
private final QueryScope _scope;
private final Map _selectProperties;
- private PropertyProvider _provider;
+ private final PropertyProvider _provider;
private Set _pool;
@@ -303,7 +304,8 @@
}
public Iterator getSupportedPropertiesNames(String resourceUri) throws
SlideException {
- return null;
+ return new PropertyNamesIterator(_selectProperties.keySet().iterator(),
+ _propertyProvider.getSupportedPropertiesNames(resourceUri));
}
public NodeProperty getProperty(String resourceUri, String propertyName,
String propertyNamespace) throws SlideException {
@@ -315,8 +317,70 @@
}
public Iterator getSupportedProperties(String resourceUri) throws
SlideException {
- return null;
+ return new NodePropertiesIterator(
+ resourceUri,
+ _selectProperties.values().iterator(),
+ _propertyProvider.getSupportedProperties(resourceUri));
+ }
+
+ private static class PropertyNamesIterator implements Iterator {
+
+ private final Iterator _selectedProperties;
+ private final Iterator _providedProperties;
+
+ private PropertyNamesIterator(Iterator selectedProperties, Iterator
providedProperties) {
+ _selectedProperties = selectedProperties;
+ _providedProperties = providedProperties;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasNext() {
+ return _selectedProperties.hasNext() ||
_providedProperties.hasNext();
+ }
+
+ public Object next() {
+ if (_selectedProperties.hasNext()) {
+ RequestedProperty property = (RequestedProperty)
_selectedProperties.next();
+ return new PropertyName(property.getName(),
property.getNamespace());
+ }
+ return _providedProperties.next();
+ }
+
+ }
+
+ private static class NodePropertiesIterator implements Iterator {
+
+ private String _resourceUri;
+ private Iterator _selectedProperties;
+ private Iterator _providedProperties;
+
+ private NodePropertiesIterator(String resourceUri, Iterator
selectedProperties, Iterator providedProperties) {
+ _resourceUri = resourceUri;
+ _selectedProperties = selectedProperties;
+ _providedProperties = providedProperties;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasNext() {
+ return _selectedProperties.hasNext() ||
_providedProperties.hasNext();
+ }
+
+ public Object next() {
+ if (_selectedProperties.hasNext()) {
+ Map properties = (Map) _selectedProperties.next();
+ return (NodeProperty) properties.get(_resourceUri);
+ }
+ return _providedProperties.next();
+ }
+
}
}
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]