package com.bradmcevoy.http.webdav; import com.bradmcevoy.http.PropFindableResource; import com.bradmcevoy.http.Resource; import com.bradmcevoy.property.PropertySource.PropertyAccessibility; import com.bradmcevoy.property.PropertySource.PropertyMetaData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; /** * Helper class for PropertySources. Consists of a map of StandardProperty * instances, keyed by property name * * @author brad */ public class PropertyMap { private final Map<String, StandardProperty> writersMap = new HashMap<String, StandardProperty>(); private final String nameSpace; public PropertyMap( String nameSpace ) { this.nameSpace = nameSpace; } public boolean hasProperty(QName name) { if( !name.getNamespaceURI().equals( nameSpace ) ) { return false; } StandardProperty pa = writersMap.get( name.getLocalPart() ); if( pa == null ) { return false; } else { return true; } } public Object getProperty( QName name, Resource r ) { if( !name.getNamespaceURI().equals( nameSpace ) ) { return null; } StandardProperty pa = writersMap.get( name.getLocalPart() ); if( pa == null ) { return null; } if( r instanceof PropFindableResource ) { return pa.getValue( (PropFindableResource) r ); } else { return null; } } public PropertyMetaData getPropertyMetaData( QName name, Resource r ) { if( !name.getNamespaceURI().equals( nameSpace ) ) { return PropertyMetaData.UNKNOWN; } StandardProperty pa = writersMap.get( name.getLocalPart() ); if( pa == null ) { return PropertyMetaData.UNKNOWN; } else { if( r instanceof PropFindableResource ) { return new PropertyMetaData( PropertyAccessibility.READ_ONLY, pa.getValueClass() ); } else { return PropertyMetaData.UNKNOWN; } } } public List<QName> getAllPropertyNames( Resource r ) { List<QName> list = new ArrayList<QName>(); for( String nm : this.writersMap.keySet() ) { QName qname = new QName( WebDavProtocol.NS_DAV, nm ); list.add( qname ); } return list; } public void add( StandardProperty pw ) { writersMap.put( pw.fieldName(), pw ); } public interface StandardProperty<T> { String fieldName(); T getValue( PropFindableResource res ); Class getValueClass(); } }