@Override
  public HandlerResult handle(ProcessState state, ProcessInstance process) {
    IpAddress ipAddress = (IpAddress) state.getResource();
    Network network = objectManager.loadResource(Network.class, ipAddress.getNetworkId());
    if (!networkService.shouldAssignIpAddress(network)) {
      return null;
    }

    String assignedIp = ipAddress.getAddress();
    Long subnetId = ipAddress.getSubnetId();

    IPAssignment assignment = allocateIp(ipAddress, network);
    if (assignment != null) {
      assignedIp = assignment.getIpAddress();
      if (assignment.getSubnet() != null) {
        subnetId = assignment.getSubnet().getId();
      }
    }

    return new HandlerResult(
        IP_ADDRESS.ADDRESS, assignedIp,
        IP_ADDRESS.SUBNET_ID, subnetId,
        IP_ADDRESS.NAME,
            StringUtils.isBlank(ipAddress.getName()) ? assignedIp : ipAddress.getName());
  }
 protected Instance getInstanceForPrimaryIp(IpAddress ipAddress) {
   if (IpAddressConstants.ROLE_PRIMARY.equals(ipAddress.getRole())) {
     for (Nic nic : getObjectManager().mappedChildren(ipAddress, Nic.class)) {
       if (nic.getDeviceNumber() != null && nic.getDeviceNumber() == 0) {
         Instance instance = getObjectManager().loadResource(Instance.class, nic.getInstanceId());
         if (instance != null) {
           return instance;
         }
       }
     }
   }
   return null;
 }
  protected String getIpAddress(
      ServiceInstanceData serviceInstanceData,
      boolean isSource,
      Map<Long, IpAddress> instanceIdToHostIpMap) {
    Nic nic = serviceInstanceData.getNic();
    ServiceExposeMap exposeMap = serviceInstanceData.getExposeMap();
    IpAddress ipAddr = serviceInstanceData.getIpAddress();
    String ip = null;

    if (isSource
        && serviceInstanceData
            .getService()
            .getKind()
            .equalsIgnoreCase(ServiceDiscoveryConstants.KIND.SERVICE.name())) {
      if (ipAddr != null) {
        ip = ipAddr.getAddress();
      }
    } else {
      if (ipAddr != null) {
        ip = ipAddr.getAddress();
      } else {
        ip = exposeMap.getIpAddress();
      }
    }

    if (nic == null || nic.getDeviceNumber().equals(0)) {
      return ip;
    } else {
      IpAddress hostIp = instanceIdToHostIpMap.get(nic.getInstanceId());
      if (hostIp != null) {
        if (isSource) {
          return "default";
        }
        return hostIp.getAddress();
      }
    }
    return null;
  }