Andrea Campanella
Committed by Gerrit Code Review

ONOS-3929 Netconf Device Factory

Change-Id: I03f63dd5344f3bde8786acd0fc5de367e8e39c6e
......@@ -39,7 +39,7 @@ import static org.slf4j.LoggerFactory.getLogger;
public class NetconfConfigGetter extends AbstractHandlerBehaviour
implements ConfigGetter {
private final Logger log = getLogger(NetconfControllerConfig.class);
private final Logger log = getLogger(getClass());
//FIXME the error string should be universal for all implementations of
// ConfigGetter
......@@ -58,7 +58,7 @@ public class NetconfConfigGetter extends AbstractHandlerBehaviour
getConfig(type);
} catch (IOException e) {
log.error("Configuration could not be retrieved {}",
e.getStackTrace().toString());
e.getMessage());
}
return UNABLE_TO_READ_CONFIG;
}
......
/*
* Copyright 2016 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.netconf;
/**
* Abstract interface for the creation of a NETCONF device.
*/
public interface NetconfDeviceFactory {
/**
* Creates a new NETCONF device based on the supplied information.
* @param netconfDeviceInfo information of the device to create.
* @return Instance of NetconfDevice.
* @throws NetconfException when problems arise creating the device and establishing
* the connection.
*/
NetconfDevice createNetconfDevice(NetconfDeviceInfo netconfDeviceInfo)
throws NetconfException;
}
......@@ -21,6 +21,12 @@ package org.onosproject.netconf;
*/
public interface NetconfSessionFactory {
/**
* Creates a new NETCONF session for the specified device.
* @param netconfDeviceInfo information of the device to create the session for.
* @return Instance of NetconfSession.
* @throws NetconfException when problems arise establishing the connection.
*/
NetconfSession createNetconfSession(NetconfDeviceInfo netconfDeviceInfo)
throws NetconfException;
}
......
......@@ -27,9 +27,9 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
/**
* Implementation of a NETCONF device.
* Defautl implementation of a NETCONF device.
*/
public class NetconfDeviceImpl implements NetconfDevice {
public class DefaultNetconfDevice implements NetconfDevice {
public static final Logger log = LoggerFactory
.getLogger(NetconfSessionImpl.class);
......@@ -39,8 +39,15 @@ public class NetconfDeviceImpl implements NetconfDevice {
protected NetconfSessionFactory sessionFactory = new SshNetconfSessionFactory();
private NetconfSession netconfSession;
public NetconfDeviceImpl(NetconfDeviceInfo deviceInfo)
/**
* Creates a new default NETCONF device with the information provided.
* The device gets created only if no exception is thrwn while connecting to
* it and establishing the NETCONF session.
* @param deviceInfo information about the device to be created.
* @throws NetconfException if there are problems in creating or establishing
* the underlying NETCONF connection and session.
*/
public DefaultNetconfDevice(NetconfDeviceInfo deviceInfo)
throws NetconfException {
netconfDeviceInfo = deviceInfo;
try {
......
......@@ -24,6 +24,7 @@ import org.onlab.packet.IpAddress;
import org.onosproject.net.DeviceId;
import org.onosproject.netconf.NetconfController;
import org.onosproject.netconf.NetconfDevice;
import org.onosproject.netconf.NetconfDeviceFactory;
import org.onosproject.netconf.NetconfDeviceInfo;
import org.onosproject.netconf.NetconfDeviceListener;
import org.onosproject.netconf.NetconfException;
......@@ -49,6 +50,7 @@ public class NetconfControllerImpl implements NetconfController {
private Map<DeviceId, NetconfDevice> netconfDeviceMap = new ConcurrentHashMap<>();
protected Set<NetconfDeviceListener> netconfDeviceListeners = new CopyOnWriteArraySet<>();
protected NetconfDeviceFactory deviceFactory = new DefaultNetconfDeviceFactory();
@Activate
public void activate(ComponentContext context) {
......@@ -109,7 +111,7 @@ public class NetconfControllerImpl implements NetconfController {
}
private NetconfDevice createDevice(NetconfDeviceInfo deviceInfo) throws NetconfException {
NetconfDevice netconfDevice = new NetconfDeviceImpl(deviceInfo);
NetconfDevice netconfDevice = deviceFactory.createNetconfDevice(deviceInfo);
for (NetconfDeviceListener l : netconfDeviceListeners) {
l.deviceAdded(deviceInfo);
}
......@@ -129,4 +131,13 @@ public class NetconfControllerImpl implements NetconfController {
public Map<DeviceId, NetconfDevice> getDevicesMap() {
return netconfDeviceMap;
}
//Device factory for the specific NetconfDeviceImpl
private class DefaultNetconfDeviceFactory implements NetconfDeviceFactory {
@Override
public NetconfDevice createNetconfDevice(NetconfDeviceInfo netconfDeviceInfo) throws NetconfException {
return new DefaultNetconfDevice(netconfDeviceInfo);
}
}
}
......