NativeKeyAccessFactoryModule.java

/*
 * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.controller.config.yang.tcpmd5.jni.cfg;

import java.nio.channels.Channel;

import org.opendaylight.tcpmd5.api.KeyAccess;
import org.opendaylight.tcpmd5.api.KeyAccessFactory;
import org.opendaylight.tcpmd5.jni.NativeKeyAccessFactory;
import org.opendaylight.tcpmd5.jni.NativeSupportUnavailableException;

/**
 * Service representing a way for accessing key information.
 */
public class NativeKeyAccessFactoryModule extends
        org.opendaylight.controller.config.yang.tcpmd5.jni.cfg.AbstractNativeKeyAccessFactoryModule {
    private KeyAccessFactory kaf;

    public NativeKeyAccessFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
            final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
        super(identifier, dependencyResolver);
    }

    public NativeKeyAccessFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
            final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
            final org.opendaylight.controller.config.yang.tcpmd5.jni.cfg.NativeKeyAccessFactoryModule oldModule,
            final java.lang.AutoCloseable oldInstance) {
        super(identifier, dependencyResolver, oldModule, oldInstance);
    }

    @Override
    public void customValidation() {
        try {
            kaf = NativeKeyAccessFactory.getInstance();
        } catch (NativeSupportUnavailableException e) {
            throw new UnsupportedOperationException("Native support is not available", e);
        }
    }

    @Override
    public java.lang.AutoCloseable createInstance() {
        final KeyAccessFactory f = this.kaf;

        final class CloseableNativeKeyAccessFactory implements AutoCloseable, KeyAccessFactory {
            @Override
            public KeyAccess getKeyAccess(final Channel channel) {
                return f.getKeyAccess(channel);
            }

            @Override
            public boolean canHandleChannelClass(final Class<? extends Channel> clazz) {
                return f.canHandleChannelClass(clazz);
            }

            @Override
            public void close() {
                // Nothing to do
            }
        }

        return new CloseableNativeKeyAccessFactory();
    }
}