private toolbarAction get_parentAction() {
   Vector<Vector<String>> resultRows = new Vector<Vector<String>>();
   toolbarAction action = null;
   try {
     String currentDocumentType = BungeniEditorProperties.getEditorProperty("activeDocumentMode");
     dbSettings.Connect();
     QueryResults qr =
         dbSettings.QueryResults(
             SettingsQueryFactory.Q_FETCH_ACTION_BY_NAME(
                 currentDocumentType, this.m_subAction.parent_action_name()));
     dbSettings.EndConnect();
     if (qr == null) {
       throw new Exception("QueryResults returned null");
     }
     if (qr.hasResults()) {
       HashMap columns = qr.columnNameMap();
       // child actions are present
       // call the result nodes recursively...
       resultRows = qr.theResults();
       // should alwayrs return a single result
       Vector<java.lang.String> tableRow = new Vector<java.lang.String>();
       tableRow = resultRows.elementAt(0);
       action = new toolbarAction(tableRow, columns);
     }
   } catch (Exception ex) {
     log.error("getParentSection: " + ex.getMessage());
   } finally {
     return action;
   }
 }
  public boolean preValidationFullInsert() {
    boolean bResult = true;
    try {
      // check root
      dbSettings.Connect();
      QueryResults qr =
          dbSettings.QueryResults(
              SettingsQueryFactory.Q_CHECK_IF_ACTION_HAS_PARENT(
                  theAction.action_naming_convention()));
      dbSettings.EndConnect();
      String[] results = qr.getSingleColumnResult("THE_COUNT");
      if (results[0].equals("0")) {
        if (!ooDocument.hasSection("root")) {
          checkFieldsMessages.add("The document does not have a root section!");
          bResult = false;
          return bResult;
        }
      }

      if (ooDocument.hasSection(theAction.action_naming_convention())) {
        checkFieldsMessages.add(
            "The document already has a papers section, please delete the section first");
        bResult = false;
        return bResult;
      }

    } catch (Exception ex) {
      log.error("preValidation : " + ex.getMessage());
      bResult = false;
    } finally {
      return bResult;
    }
  }
  private int check_containment_Section(String currentContainerSection) {

    int error = BungeniError.GENERAL_ERROR;
    try {
      // get valid parent actions
      String strActionName = m_parentAction.action_name();
      dbSettings.Connect();
      String fetchParentQuery = SettingsQueryFactory.Q_FETCH_PARENT_ACTIONS(strActionName);
      log.debug("checkContainmentSection = " + fetchParentQuery);
      QueryResults qr = dbSettings.QueryResults(fetchParentQuery);
      dbSettings.EndConnect();
      String[] actionSectionTypes = qr.getSingleColumnResult("ACTION_SECTION_TYPE");
      // there can be multiple parents... so we iterate through the array if one of them is a valid
      // parent

      HashMap<String, String> sectionMetadata =
          ooDocument.getSectionMetadataAttributes(currentContainerSection);
      // if (sectionMetadata.get)
      String strDocSectionType = "";
      if (sectionMetadata.containsKey("BungeniSectionType")) {
        strDocSectionType = sectionMetadata.get("BungeniSectionType").trim();
        // check the doc section type against the array of valid action section types
        for (String sectionType : actionSectionTypes) {
          if (strDocSectionType.equals(sectionType.trim())) {
            error = BungeniError.VALID_SECTION_CONTAINER;
            break;
          } else {
            error = BungeniError.INVALID_SECTION_CONTAINER;
          }
        }
      } else {
        error = BungeniError.INVALID_SECTION_CONTAINER;
      }
    } catch (Exception ex) {
      log.error("check_containmentSection : " + ex.getMessage());
      log.error("check_containmentSection : " + CommonExceptionUtils.getStackTrace(ex));
    } finally {
      return error;
    }
  }