/*
 * Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
 *
 * 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.opencord.aaa.impl;

import org.onosproject.net.device.DeviceService;
import org.opencord.sadis.BaseInformationService;
import org.opencord.sadis.SubscriberAndDeviceInformation;

/**
 * Info required to do customization to packets.
 */
public class CustomizationInfo {

    private DeviceService devService;

    private BaseInformationService<SubscriberAndDeviceInformation> subscriberService;

    public CustomizationInfo(BaseInformationService<SubscriberAndDeviceInformation> subsService,
                             DeviceService devService) {
        this.subscriberService = subsService;
        this.devService = devService;
    }

    public void updateSubscriberService(BaseInformationService<SubscriberAndDeviceInformation> subscriberService) {
        this.subscriberService = subscriberService;
    }

    public DeviceService deviceService() {
        return devService;
    }

    public BaseInformationService<SubscriberAndDeviceInformation> subscriberService() {
        return subscriberService;
    }
}
