/*******************************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you 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
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * 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.sling.hapi;

import java.util.Collection;

public interface HApiTypesCollection extends Collection<HApiType> {
    /**
     * The name of this type collection
     * @return
     */
    String getName();


    /**
     * The description of this type collection
     * @return
     */
    String getDescription();

    /**
     * The Resource path of this type collection
     * @return
     */
    String getPath();

    /**
     * The external URL of the type collection
     * @return
     */
    String getUrl();

    /**
     * The fully qualified domain name of this type collection
     * @return
     */
    String getFqdn();

}
