/** {@inheritDoc} */
  @Transactional
  public OnmsIpInterface setIsPrimaryFlag(final Integer nodeId, final String ipAddress) {
    // TODO upsert? not sure if this needs one.. leave the todo here in case
    if (nodeId == null) {
      LogUtils.debugf(this, "nodeId is null!");
      return null;
    } else if (ipAddress == null) {
      LogUtils.debugf(this, "ipAddress is null!");
      return null;
    }
    final OnmsIpInterface svcIface = m_ipInterfaceDao.findByNodeIdAndIpAddress(nodeId, ipAddress);
    if (svcIface == null) {
      LogUtils.infof(
          this, "unable to find IPInterface for nodeId=%s, ipAddress=%s", nodeId, ipAddress);
      return null;
    }
    OnmsIpInterface primaryIface = null;
    if (svcIface.isPrimary()) {
      primaryIface = svcIface;
    } else if (svcIface.getNode().getPrimaryInterface() == null) {
      svcIface.setIsSnmpPrimary(PrimaryType.PRIMARY);
      m_ipInterfaceDao.saveOrUpdate(svcIface);
      m_ipInterfaceDao.flush();
      primaryIface = svcIface;
    } else {
      svcIface.setIsSnmpPrimary(PrimaryType.SECONDARY);
      m_ipInterfaceDao.saveOrUpdate(svcIface);
      m_ipInterfaceDao.flush();
    }

    m_ipInterfaceDao.initialize(primaryIface);
    return primaryIface;
  }
  @Transactional
  private OnmsIpInterface saveOrUpdate(final OnmsIpInterface iface) {
    iface.visit(new ServiceTypeFulfiller());
    infof(this, "SaveOrUpdating IpInterface %s", iface);
    m_ipInterfaceDao.saveOrUpdate(iface);
    m_ipInterfaceDao.flush();

    return iface;
  }