/*
 * 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.vtnweb.web;

import org.onosproject.codec.CodecContext;
import org.onosproject.codec.CodecService;
import org.onosproject.codec.JsonCodec;
import org.onosproject.codec.impl.CodecManager;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Mock codec context for use in codec unit tests.
 */
public class SfcCodecContext implements CodecContext {

    private final ObjectMapper mapper = new ObjectMapper();
    private final CodecManager codecManager = new CodecManager();
    private final VtnCodecRegistrator manager = new VtnCodecRegistrator();

    /**
     * Constructs a new mock codec context.
     */
    public SfcCodecContext() {
        codecManager.activate();
        manager.codecService = codecManager;
        manager.activate();
    }

    @Override
    public ObjectMapper mapper() {
        return mapper;
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T> T getService(Class<T> serviceClass) {
        // TODO
        return null;
    }

    @Override
    public <T> JsonCodec<T> codec(Class<T> entityClass) {
        return codecManager.getCodec(entityClass);
    }

    /**
     * Get the codec manager.
     *
     * @return instance of codec manager
     */
    public CodecService codecManager() {
        return codecManager;
    }
}
