Package org.apache.webdav.lib.properties

Source Code of org.apache.webdav.lib.properties.PropertyFactory

/*
* $Header: /home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/properties/PropertyFactory.java,v 1.1.2.2 2004/10/08 15:04:36 luetzkendorf Exp $
* $Revision: 1.1.2.2 $
* $Date: 2004/10/08 15:04:36 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.webdav.lib.properties;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;

import org.apache.webdav.lib.BaseProperty;
import org.apache.webdav.lib.Property;
import org.apache.webdav.lib.ResponseEntity;
import org.apache.webdav.lib.WebdavException;
import org.w3c.dom.Element;


/**
* Factory for instanciating {@link org.apache.webdav.lib.Property}s.
*/
public class PropertyFactory
{
    private static final Class[] CTOR_PARAMS = { ResponseEntity.class, Element.class };
   
    /**
     * Maps namespace URIs to maps, that map names to constructors.
     */
    private static Map propertyClasses = new HashMap();
   
    static {
        try {
            PropertyFactory.register("DAV:", AclProperty.TAG_NAME, AclProperty.class);
            PropertyFactory.register("DAV:", CheckedinProperty.TAG_NAME, CheckedinProperty.class);
            PropertyFactory.register("DAV:", CheckedoutProperty.TAG_NAME, CheckedoutProperty.class);
            PropertyFactory.register("DAV:", CreationDateProperty.TAG_NAME, CreationDateProperty.class);
            PropertyFactory.register("DAV:", CurrentUserPrivilegeSetProperty.TAG_NAME, CurrentUserPrivilegeSetProperty.class);
            PropertyFactory.register("DAV:", GetContentLengthProperty.TAG_NAME, GetContentLengthProperty.class);
            PropertyFactory.register("DAV:", GetLastModifiedProperty.TAG_NAME, GetLastModifiedProperty.class);
            PropertyFactory.register("DAV:", LockDiscoveryProperty.TAG_NAME, LockDiscoveryProperty.class);
            PropertyFactory.register("DAV:", ModificationDateProperty.TAG_NAME, ModificationDateProperty.class);
            PropertyFactory.register("DAV:", OwnerProperty.TAG_NAME, OwnerProperty.class);
            PropertyFactory.register("DAV:", PrincipalCollectionSetProperty.TAG_NAME, PrincipalCollectionSetProperty.class);
            PropertyFactory.register("DAV:", ResourceTypeProperty.TAG_NAME, ResourceTypeProperty.class);
            PropertyFactory.register("DAV:", SupportedLockProperty.TAG_NAME, SupportedLockProperty.class);
        } catch (Exception e) {
            throw new WebdavException(e);
        }
    }
   
    /**
     * Creates a new property from an xml element provided in an WebDAV response.
     *
     * <p>If no property class was registered a {@link BaseProperty} will returned.
     *
     * @see Property
     * @see BaseProperty
     */
    public static Property create(ResponseEntity response, Element element)
    {
        // look for the namespace
        Map nsMap = (Map)propertyClasses.get(element.getNamespaceURI());
        if (nsMap != null) {
            // look up for name
            Constructor ctor = (Constructor)nsMap.get(element.getLocalName());
            if (ctor != null) {
                try {
                    // try to create
                    Object[] params = {response, element};
                    return (Property)ctor.newInstance(params);
                } catch (Exception e) {
                    throw new WebdavException(e);
                }
            }
        }
       
        return new BaseProperty(response, element);
    };
   
    /**
     * Registers a new property.
     *
     * @param namespaceUri namespace of the property
     * @param elmentName name of the property
     * @param cls class that implements the property. Must have a constructor that
     * takes two parameters of type ResponseEntity and Element.
     *
     * @throws NoSuchMethodException if cls does not implement the required ctor.
     */
    public static void register(String namespaceUri, String elementName, Class cls)
        throws NoSuchMethodException, SecurityException
    {
        Constructor ctor = cls.getConstructor(CTOR_PARAMS);
       
        Map nsMap = (Map)propertyClasses.get(namespaceUri);
        if (nsMap == null) {
            nsMap = new HashMap();
            propertyClasses.put(namespaceUri, nsMap);
        }
        nsMap.put(elementName, ctor);
    }
}
TOP

Related Classes of org.apache.webdav.lib.properties.PropertyFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.