zcommon/src/main/java/org/zkoss/util/resource/XMLResourcesLocator.java

Summary

Maintainability
A
40 mins
Test Coverage
/* XMLResourcesLocator.java

    Purpose:
        
    Description:
        
    History:
        Tue Mar 23 15:47:23 TST 2010, Created by tomyeh

Copyright (C) 2010 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.util.resource;

import java.util.Enumeration;
import java.util.List;
import java.io.IOException;
import java.net.URL;

import org.zkoss.idom.Document;

/**
 * Represents a locator used to locate XML resources.
 *
 * @author tomyeh
 * @since 6.0.0
 */
public interface XMLResourcesLocator extends Locator {
    /** Returns an enumeration of resources.
     * Unlike {@link #getDependentXMLResources}, it doesn't resolve the dependence
     * among the resources.
     *
     * @param name the resource name, such as "metainfo/config.xml".
     */
    public Enumeration<URL> getResources(String name) throws IOException;
    /** Returns a list of resources ({@link Resource}) after resolving
     * the dependence.
     * The resource is returned in the format of {@link Resource}
     *
     * <p>To resolve the dependence, it assumes each resource has two
     * element whose name is identified by elName and elDepends.
     * The elName element specifies the unique name of each resource.
     * The elDepends element specifies a list of names of resources
     * that this resource depends on. If not found, it assumes it could
     * be loaded first.
     *
     * @param name the resource name, such as "metainfo/config.xml".
     * @param elName the element used to specify the name.
     * @param elDepends the element used to specify the dependence.
     * @return a list of {@link Resource} of the specified name.
     */
    public List<Resource> getDependentXMLResources(String name, String elName,
    String elDepends) throws IOException;

    /** An item of the list returned by {@link XMLResourcesLocator#getDependentXMLResources}.
     * @since 6.0.0
     */
    public static class Resource {
        /** The URL of the resource. */
        public final URL url;
        /** The content of the resource. */
        public final Document document;

        public Resource(URL url, Document document) {
            this.url = url;
            this.document = document;
        }
        //Object//
        public int hashCode() {
            return url.hashCode() ^ document.hashCode();
        }
        public boolean equals(Object o) {
            if (this == o) return true;
            return o instanceof Resource && ((Resource)o).url.equals(url)
                && ((Resource)o).document.equals(document);
        }
        public String toString() {
            return "[res: " + url + ']';
        }
    }
}