/*******************************************************************************
 * 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 org.osgi.annotation.versioning.ProviderType;

import java.util.Collection;

@ProviderType
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();

}
