// Path: server/src/main/java/io/pne/veth/server/handlers/dao/IEndpointDao.java
// public interface IEndpointDao {
// 
//     void addEndpoint(TEndpoint aEndpoint);
// 
//     TEndpoint findEndPoint(String aEndpointId);
// 
//     void removeEndpoint(String aEndpointId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/INetworkDao.java
// public interface INetworkDao {
// 
//     void addNetwork(TNetwork aNetwork);
// 
//     TNetwork findNetwork(String aNetworkId);
// 
//     void removeNetwork(String aNetworkId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/TEndpoint.java
// public class TEndpoint {
// 
//     public final String id;
//     public final String ipAddress;
//     public final String macAddress;
//     public final String device;
// 
//     public TEndpoint(String id, String ipAddress, String macAddress, String aDevice) {
//         this.id = id;
//         this.ipAddress = ipAddress;
//         this.macAddress = macAddress;
//         device = aDevice;
//     }
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/TNetwork.java
// public class TNetwork {
// 
//     public final String id;
//     public final String gateway;
//     public final String pool;
//     public final String interfaceSuffix;
// 
//     public TNetwork(String id, String gateway, String pool, String aSuffix) {
//         this.id = id;
//         this.gateway = gateway;
//         this.pool = pool;
//         interfaceSuffix = aSuffix;
//     }
// 
//     @Override
//     public String toString() {
//         return "TNetwork{" +
//                 "id='" + id + '\'' +
//                 ", gateway='" + gateway + '\'' +
//                 ", pool='" + pool + '\'' +
//                 ", interfaceSuffix='" + interfaceSuffix + '\'' +
//                 '}';
//     }
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/ICommandService.java
// public interface ICommandService {
// 
//     String executeCommand(ShellCommand aCommand) throws IOException, InterruptedException;
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/INetworkService.java
// public interface INetworkService {
// 
//     String getNetworkGateway(String aNetwork, String aEndpointId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/model/ShellCommand.java
// public class ShellCommand {
// 
//     public final String[] arguments;
// 
//     private ShellCommand(String[] aArguments) {
//         arguments = aArguments;
//     }
// 
//     public String getCommand() {
//         StringBuilder sb = new StringBuilder();
//         sb.append(arguments[0]);
//         for(int i=1; i<arguments.length; i++) {
//             sb.append(' ');
//             sb.append(arguments[i]);
//         }
//         return sb.toString();
//     }
// 
//     public static class Builder {
//         private final List<String> arguments;
// 
//         public Builder(String aCommandName) {
//             arguments = new ArrayList<>();
//             arguments.add(aCommandName);
//         }
// 
//         public Builder add(String aArgument) {
//             arguments.add(aArgument);
//             return this;
//         }
// 
//         public ShellCommand build() {
//             return new ShellCommand(arguments.toArray(new String[arguments.size()]));
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "ShellCommand{" +
//                 "arguments=" + Arrays.toString(arguments) +
//                 '}';
//     }
// }


import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import io.pne.veth.server.handlers.dao.IEndpointDao;
import io.pne.veth.server.handlers.dao.INetworkDao;
import io.pne.veth.server.handlers.dao.TEndpoint;
import io.pne.veth.server.handlers.dao.TNetwork;
import io.pne.veth.server.handlers.service.ICommandService;
import io.pne.veth.server.handlers.service.INetworkService;
import io.pne.veth.server.handlers.service.model.ShellCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.StringTokenizer;
package io.pne.veth.server.handlers.service.impl;



public class NetworkServiceImpl implements INetworkService {

    private static final Logger LOG = LoggerFactory.getLogger(NetworkServiceImpl.class);

    private final INetworkDao     networkDao;
    private final IEndpointDao    endpointDao;
    private final Gson            gson;
    private final ICommandService commandService;

// Path: server/src/main/java/io/pne/veth/server/handlers/dao/IEndpointDao.java
// public interface IEndpointDao {
// 
//     void addEndpoint(TEndpoint aEndpoint);
// 
//     TEndpoint findEndPoint(String aEndpointId);
// 
//     void removeEndpoint(String aEndpointId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/INetworkDao.java
// public interface INetworkDao {
// 
//     void addNetwork(TNetwork aNetwork);
// 
//     TNetwork findNetwork(String aNetworkId);
// 
//     void removeNetwork(String aNetworkId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/TEndpoint.java
// public class TEndpoint {
// 
//     public final String id;
//     public final String ipAddress;
//     public final String macAddress;
//     public final String device;
// 
//     public TEndpoint(String id, String ipAddress, String macAddress, String aDevice) {
//         this.id = id;
//         this.ipAddress = ipAddress;
//         this.macAddress = macAddress;
//         device = aDevice;
//     }
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/dao/TNetwork.java
// public class TNetwork {
// 
//     public final String id;
//     public final String gateway;
//     public final String pool;
//     public final String interfaceSuffix;
// 
//     public TNetwork(String id, String gateway, String pool, String aSuffix) {
//         this.id = id;
//         this.gateway = gateway;
//         this.pool = pool;
//         interfaceSuffix = aSuffix;
//     }
// 
//     @Override
//     public String toString() {
//         return "TNetwork{" +
//                 "id='" + id + '\'' +
//                 ", gateway='" + gateway + '\'' +
//                 ", pool='" + pool + '\'' +
//                 ", interfaceSuffix='" + interfaceSuffix + '\'' +
//                 '}';
//     }
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/ICommandService.java
// public interface ICommandService {
// 
//     String executeCommand(ShellCommand aCommand) throws IOException, InterruptedException;
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/INetworkService.java
// public interface INetworkService {
// 
//     String getNetworkGateway(String aNetwork, String aEndpointId);
// }
// 
// Path: server/src/main/java/io/pne/veth/server/handlers/service/model/ShellCommand.java
// public class ShellCommand {
// 
//     public final String[] arguments;
// 
//     private ShellCommand(String[] aArguments) {
//         arguments = aArguments;
//     }
// 
//     public String getCommand() {
//         StringBuilder sb = new StringBuilder();
//         sb.append(arguments[0]);
//         for(int i=1; i<arguments.length; i++) {
//             sb.append(' ');
//             sb.append(arguments[i]);
//         }
//         return sb.toString();
//     }
// 
//     public static class Builder {
//         private final List<String> arguments;
// 
//         public Builder(String aCommandName) {
//             arguments = new ArrayList<>();
//             arguments.add(aCommandName);
//         }
// 
//         public Builder add(String aArgument) {
//             arguments.add(aArgument);
//             return this;
//         }
// 
//         public ShellCommand build() {
//             return new ShellCommand(arguments.toArray(new String[arguments.size()]));
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "ShellCommand{" +
//                 "arguments=" + Arrays.toString(arguments) +
//                 '}';
//     }
// }


// Path: server/src/main/java/io/pne/veth/server/handlers/service/impl/NetworkServiceImpl.java
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import io.pne.veth.server.handlers.dao.IEndpointDao;
import io.pne.veth.server.handlers.dao.INetworkDao;
import io.pne.veth.server.handlers.dao.TEndpoint;
import io.pne.veth.server.handlers.dao.TNetwork;
import io.pne.veth.server.handlers.service.ICommandService;
import io.pne.veth.server.handlers.service.INetworkService;
import io.pne.veth.server.handlers.service.model.ShellCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.StringTokenizer;

package io.pne.veth.server.handlers.service.impl;



public class NetworkServiceImpl implements INetworkService {

    private static final Logger LOG = LoggerFactory.getLogger(NetworkServiceImpl.class);

    private final INetworkDao     networkDao;
    private final IEndpointDao    endpointDao;
    private final Gson            gson;
    private final ICommandService commandService;

    public NetworkServiceImpl(INetworkDao networkDao, IEndpointDao endpointDao, Gson gson, ICommandService shellService) {