/*
 * Copyright 2015-present Open Networking 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.onosproject.yms.app.ynh;

import org.onosproject.event.ListenerService;
import org.onosproject.yms.ynh.YangNotificationService;

/**
 * Abstraction of an entity which provides interfaces to YANG extended notification
 * service. It provides extended interfaces required by YMS internal modules.
 * Application registers their schema with YMSM, YMSM delegates the registration
 * request to YSR. YSR then looks for the presence of notification in application
 * schema, presence of notification will trigger YSR to ask YANG extended notification
 * service to register it as a listener to that application events.
 */
public interface YangNotificationExtendedService extends YangNotificationService {

    /**
     * Registers as listener with application. This is called by YSR when it
     * detects notification presence in application YANG file at the time when
     * application registers it's schema with YMS.
     *
     * @param appObject application object
     */
    void registerAsListener(ListenerService appObject);

    // TODO handle scenario when multiple services are implemented by single manager.
}
