예제 #1
0
  int getNbEditUntil(VarDefBase varChildToFind, FoundFlag foundFlag) {
    int nNbEdit = 0;
    if (isEditInMapRedefine() && m_OccursDef == null) nNbEdit++;

    int nNbChildren = getNbChildren();
    for (int n = 0; n < nNbChildren && !foundFlag.isFound(); n++) {
      VarDefBase varDefChild = getChild(n);
      if (varChildToFind == varDefChild) {
        foundFlag.setFound();
        return nNbEdit;
      }
      if (!foundFlag.isFound()) {
        int nNbEditUnderChild = varDefChild.getNbEditUntil(varChildToFind, foundFlag);
        if (varDefChild.isVarInMapRedefine()
            && varDefChild.m_varDefRedefinOrigin
                != null) // we are a var redefine, and we know what we redefines
        {
          if (foundFlag.isFound()) // We found the edit serched as a child of the var redefine
          {
            int nNbEditAlredayCounted =
                varDefChild.m_varDefRedefinOrigin
                    .getNbEdit(); // Number of items alreday counted in the var redefine origin: it
                                  // must not be taken into account
            nNbEdit = nNbEdit + nNbEditUnderChild - nNbEditAlredayCounted;
            return nNbEdit;
          }
        } else nNbEdit += nNbEditUnderChild;
      }
    }

    if (!foundFlag.isFound()) {
      if (isEditInMapRedefine() && m_OccursDef != null) {
        int nNbOccurs = m_OccursDef.getNbOccurs();
        nNbEdit = nNbEdit * nNbOccurs;
      }
    }

    return nNbEdit;
  }