/*
 * Copyright 2015-present Open Networking Laboratory
 *
 * 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.onosproject.cord.gui.model;

import java.util.Set;

/**
 * Defines a bundle of {@link XosFunctionDescriptor XOS functions}.
 */
public interface BundleDescriptor {

    /**
     * Bundle internal identifier.
     *
     * @return bundle identifier
     */
    String id();

    /**
     * Bundle display name.
     *
     * @return display name
     */
    String displayName();

    /**
     * Textual description of this bundle.
     *
     * @return description
     */
    String description();

    /**
     * The set of functions in this bundle instance.
     *
     * @return the functions
     */
    Set<XosFunctionDescriptor> functions();
}
