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]

Reply via email to