public void batchRelate(
      ModelRoot modelRoot, boolean relateProxies, boolean notifyChanges, boolean searchAllRoots) {
    InstanceList instances = null;
    ModelRoot baseRoot = modelRoot;

    // R39
    DataTypePackage_c relInst55157 =
        (DataTypePackage_c)
            baseRoot.getInstanceList(DataTypePackage_c.class).get(new Object[] {m_package_id});
    // if there was no local element, check for any global elements
    // failing that proceed to check other model roots
    if (relInst55157 == null) {
      relInst55157 =
          (DataTypePackage_c)
              Ooaofooa.getDefaultInstance()
                  .getInstanceList(DataTypePackage_c.class)
                  .get(new Object[] {m_package_id});
    }
    if (relInst55157 == null && searchAllRoots && !baseRoot.isCompareRoot()) {
      Ooaofooa[] roots = Ooaofooa.getInstances();
      for (int i = 0; i < roots.length; i++) {
        if (roots[i].isCompareRoot()) {
          // never use elements from any compare root
          continue;
        }
        relInst55157 =
            (DataTypePackage_c)
                roots[i].getInstanceList(DataTypePackage_c.class).get(new Object[] {m_package_id});
        if (relInst55157 != null) break;
      }
    }
    // synchronized
    if (relInst55157 != null) {
      if (relateProxies || !isProxy() || (inSameComponent(this, relInst55157) && !isProxy())) {
        relInst55157.relateAcrossR39To(this, notifyChanges);
      }
    }

    DataType_c relInst55158 =
        (DataType_c) baseRoot.getInstanceList(DataType_c.class).get(new Object[] {m_dt_id});
    // if there was no local element, check for any global elements
    // failing that proceed to check other model roots
    if (relInst55158 == null) {
      relInst55158 =
          (DataType_c)
              Ooaofooa.getDefaultInstance()
                  .getInstanceList(DataType_c.class)
                  .get(new Object[] {m_dt_id});
    }
    if (relInst55158 == null && searchAllRoots && !baseRoot.isCompareRoot()) {
      Ooaofooa[] roots = Ooaofooa.getInstances();
      for (int i = 0; i < roots.length; i++) {
        if (roots[i].isCompareRoot()) {
          // never use elements from any compare root
          continue;
        }
        relInst55158 =
            (DataType_c) roots[i].getInstanceList(DataType_c.class).get(new Object[] {m_dt_id});
        if (relInst55158 != null) break;
      }
    }
    // synchronized
    if (relInst55158 != null) {
      if (relateProxies || !isProxy() || (inSameComponent(this, relInst55158) && !isProxy())) {
        relInst55158.relateAcrossR39To(this, notifyChanges);
      }
    }
  }