public void logout() {
   if ((authorization == null) || (backingStore == null)) {
     return;
   }
   try {
     boolean transactionStarted = beginTransaction();
     if (!transactionStarted) {
       rollback();
       transactionStarted = beginTransaction();
       if (!transactionStarted) {
         setAuthorization(null);
         return;
       }
     }
     UUID secSessionId = authorization.getSecSessionId();
     if (secSessionId != null) {
       ICFSecuritySecSessionObj secSession =
           getSecSessionTableObj().readSecSessionByIdIdx(secSessionId);
       if (secSession != null) {
         if (secSession.getOptionalFinish() == null) {
           ICFSecuritySecSessionEditObj editSecSession = secSession.beginEdit();
           editSecSession.setOptionalFinish(Calendar.getInstance());
           editSecSession.update();
           editSecSession.endEdit();
         }
       }
     }
     commit();
   } finally {
     setAuthorization(null);
     minimizeMemory();
   }
 }
 public void setPanelMode(CFJPanel.PanelMode value) {
   final String S_ProcName = "setPanelMode";
   CFJPanel.PanelMode oldValue = getPanelMode();
   if (oldValue == value) {
     return;
   }
   ICFSecuritySecSessionObj focus = getSwingFocusAsSecSession();
   if ((value != CFJPanel.PanelMode.Unknown) && (value != CFJPanel.PanelMode.View)) {
     if (focus == null) {
       throw CFLib.getDefaultExceptionFactory()
           .newNullArgumentException(getClass(), S_ProcName, 0, "swingFocus");
     }
   }
   ICFSecuritySecSessionEditObj editObj;
   if (focus != null) {
     editObj = (ICFSecuritySecSessionEditObj) focus.getEdit();
   } else {
     editObj = null;
   }
   switch (value) {
     case Unknown:
       switch (oldValue) {
         case Unknown:
           break;
         default:
           if (editObj != null) {
             editObj.endEdit();
           }
           break;
       }
       break;
     case Add:
       switch (oldValue) {
         case Unknown:
         case Add:
         case View:
           if (editObj == null) {
             if (focus != null) {
               if (!focus.getIsNew()) {
                 throw CFLib.getDefaultExceptionFactory()
                     .newUsageException(
                         getClass(),
                         S_ProcName,
                         "Transitioning to PanelMode Add requires Focus.getIsNew() to be true");
               }
               editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
               if (editObj == null) {
                 throw CFLib.getDefaultExceptionFactory()
                     .newUsageException(
                         getClass(),
                         S_ProcName,
                         "Expected beginEdit() to return a new edition of the focus object");
               }
             } else {
               throw CFLib.getDefaultExceptionFactory()
                   .newNullArgumentException(getClass(), S_ProcName, 0, "focus");
             }
           }
           break;
         case Edit:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode Edit to Add");
         case Update:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode Update to Add");
         case Delete:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode Delete to Add");
         default:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode default to Add");
       }
       break;
     case View:
       switch (oldValue) {
         case Unknown:
           break;
         case View:
           break;
         case Edit:
           break;
         case Update:
           break;
         case Delete:
           break;
         default:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode " + oldValue + " to View");
       }
       if (editObj != null) {
         editObj.endEdit();
       }
       break;
     case Edit:
       switch (oldValue) {
         case Unknown:
           if (editObj == null) {
             editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
             if (editObj == null) {
               throw CFLib.getDefaultExceptionFactory()
                   .newUsageException(
                       getClass(),
                       S_ProcName,
                       "Expected beginEdit() to return a new edition of the focus object");
             }
           }
           break;
         case View:
           if (editObj == null) {
             editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
             if (editObj == null) {
               throw CFLib.getDefaultExceptionFactory()
                   .newUsageException(
                       getClass(),
                       S_ProcName,
                       "Expected beginEdit() to return a new edition of the focus object");
             }
           }
           break;
         case Edit:
           if (editObj == null) {
             editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
             if (editObj == null) {
               throw CFLib.getDefaultExceptionFactory()
                   .newUsageException(
                       getClass(),
                       S_ProcName,
                       "Expected beginEdit() to return a new edition of the focus object");
             }
           }
           break;
         default:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode " + oldValue + " to Edit");
       }
       break;
     case Update:
       if ((oldValue != CFJPanel.PanelMode.Edit) && (oldValue != CFJPanel.PanelMode.Add)) {
         throw CFLib.getDefaultExceptionFactory()
             .newUsageException(
                 getClass(), S_ProcName, "Cannot transition from mode " + oldValue + " to Update");
       }
       super.setPanelMode(value);
       if (editObj != null) {
         postFields();
         if (editObj.getIsNew()) {
           focus = (ICFDbTestSecSessionObj) editObj.create();
           setSwingFocus(focus);
         } else {
           editObj.update();
         }
         editObj.endEdit();
         editObj = null;
       }
       setPanelMode(CFJPanel.PanelMode.View);
       break;
     case Delete:
       switch (oldValue) {
         case View:
           if (focus != null) {
             if (editObj == null) {
               editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
               if (editObj == null) {
                 throw CFLib.getDefaultExceptionFactory()
                     .newUsageException(
                         getClass(),
                         S_ProcName,
                         "Expected beginEdit() to return a new edition of the focus object");
               }
             }
           }
           break;
         case Edit:
           if (focus != null) {
             if (editObj == null) {
               editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
               if (editObj == null) {
                 throw CFLib.getDefaultExceptionFactory()
                     .newUsageException(
                         getClass(),
                         S_ProcName,
                         "Expected beginEdit() to return a new edition of the focus object");
               }
             }
           }
           break;
         case Update:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(), S_ProcName, "Cannot transition PanelMode Update to Delete");
         case Delete:
           if (editObj == null) {
             editObj = (ICFSecuritySecSessionEditObj) focus.beginEdit();
             if (editObj == null) {
               throw CFLib.getDefaultExceptionFactory()
                   .newUsageException(
                       getClass(),
                       S_ProcName,
                       "Expected beginEdit() to return a new edition of the focus object");
             }
           }
           break;
         default:
           throw CFLib.getDefaultExceptionFactory()
               .newUsageException(
                   getClass(),
                   S_ProcName,
                   "Cannot transition PanelMode " + oldValue + " to Delete");
       }
       editObj.delete();
       editObj.endEdit();
       setSwingFocus(null);
       setPanelMode(CFJPanel.PanelMode.Unknown);
       break;
     default:
       switch (oldValue) {
         case Unknown:
           break;
         default:
           if (editObj != null) {
             editObj.endEdit();
           }
           break;
       }
       break;
   }
   super.setPanelMode(value);
   populateFields();
   adjustComponentEnableStates();
 }
  public void startElement(String uri, String localName, String qName, Attributes attrs)
      throws SAXException {
    CFFreeSwitchXMsgSchemaMessageFormatter schemaFormatter = null;
    try {
      // Common XML Attributes
      String attrId = null;
      // Request Attributes
      String attrSecSessionId = null;
      // Attribute Extraction
      String attrLocalName;
      int numAttrs;
      int idxAttr;
      final String S_ProcName = "startElement";
      final String S_LocalName = "LocalName";

      assert qName.equals("RqstLogOut");

      CFFreeSwitchXMsgRqstHandler xmsgRqstHandler = (CFFreeSwitchXMsgRqstHandler) getParser();
      if (xmsgRqstHandler == null) {
        throw CFLib.getDefaultExceptionFactory()
            .newNullArgumentException(getClass(), S_ProcName, 0, "getParser()");
      }

      schemaFormatter = xmsgRqstHandler.getSchemaMessageFormatter();

      ICFFreeSwitchSchemaObj schemaObj = xmsgRqstHandler.getSchemaObj();
      if (schemaObj == null) {
        throw CFLib.getDefaultExceptionFactory()
            .newNullArgumentException(getClass(), S_ProcName, 0, "getParser().getSchemaObj()");
      }

      // Extract Attributes
      numAttrs = attrs.getLength();
      for (idxAttr = 0; idxAttr < numAttrs; idxAttr++) {
        attrLocalName = attrs.getLocalName(idxAttr);
        if (attrLocalName.equals("Id")) {
          if (attrId != null) {
            throw CFLib.getDefaultExceptionFactory()
                .newUniqueIndexViolationException(
                    getClass(), S_ProcName, S_LocalName, attrLocalName);
          }
          attrId = attrs.getValue(idxAttr);
        } else if (attrLocalName.equals("SecSessionId")) {
          if (attrSecSessionId != null) {
            throw CFLib.getDefaultExceptionFactory()
                .newUniqueIndexViolationException(
                    getClass(), S_ProcName, S_LocalName, attrLocalName);
          }
          attrSecSessionId = attrs.getValue(idxAttr);
        } else if (attrLocalName.equals("schemaLocation")) {
          // ignored
        } else {
          throw CFLib.getDefaultExceptionFactory()
              .newUnrecognizedAttributeException(
                  getClass(), S_ProcName, getParser().getLocationInfo(), attrLocalName);
        }
      }

      // Ensure that required attributes have values
      if ((attrSecSessionId == null) || (attrSecSessionId.length() <= 0)) {
        throw CFLib.getDefaultExceptionFactory()
            .newNullArgumentException(getClass(), S_ProcName, 0, "SecSessionId");
      }

      UUID secSessionId = UUID.fromString(attrSecSessionId);
      if (secSessionId == null) {
        throw CFLib.getDefaultExceptionFactory()
            .newNullArgumentException(getClass(), S_ProcName, 0, "converted-secSessionId");
      }
      if (schemaObj.getAuthorization() == null) {
        throw CFLib.getDefaultExceptionFactory()
            .newRuntimeException(getClass(), S_ProcName, "Already disconnected from the database");
      }
      ICFSecuritySecSessionObj secSession = schemaObj.getSecSession();
      if (secSession == null) {
        throw CFLib.getDefaultExceptionFactory()
            .newRuntimeException(
                getClass(), S_ProcName, "Security session does not exist for this schema");
      }
      if (!secSessionId.equals(secSession.getRequiredSecSessionId())) {
        throw CFLib.getDefaultExceptionFactory()
            .newRuntimeException(
                getClass(),
                S_ProcName,
                "Security session id does not match the one established by this schema");
      }
      if (secSession.getOptionalFinish() == null) {
        schemaObj.rollback();
        schemaObj.beginTransaction();
        ICFSecuritySecSessionEditObj editSecSession = secSession.beginEdit();
        editSecSession.setOptionalFinish(Calendar.getInstance());
        editSecSession.update();
        editSecSession.endEdit();
        schemaObj.commit();
      }
      schemaObj.disconnect(false);
      schemaObj.setAuthorization(null);
      String response =
          schemaFormatter.formatRspnXmlPreamble()
              + "\n"
              + "\t"
              + CFFreeSwitchXMsgSchemaMessageFormatter.formatRspnLoggedOut("\n\t\t\t", secSessionId)
              + "\n"
              + schemaFormatter.formatRspnXmlPostamble();
      ((CFFreeSwitchXMsgRqstHandler) getParser()).appendResponse(response);
    } catch (RuntimeException e) {
      CFFreeSwitchXMsgRqstHandler xmsgRqstHandler = ((CFFreeSwitchXMsgRqstHandler) getParser());
      schemaFormatter = xmsgRqstHandler.getSchemaMessageFormatter();
      String response =
          schemaFormatter.formatRspnXmlPreamble()
              + "\n"
              + "\t"
              + CFFreeSwitchXMsgSchemaMessageFormatter.formatRspnException("\n\t\t\t", e)
              + "\n"
              + schemaFormatter.formatRspnXmlPostamble();
      xmsgRqstHandler.resetResponse();
      xmsgRqstHandler.appendResponse(response);
      xmsgRqstHandler.setCaughtException(true);
    } catch (Error e) {
      CFFreeSwitchXMsgRqstHandler xmsgRqstHandler = ((CFFreeSwitchXMsgRqstHandler) getParser());
      schemaFormatter = xmsgRqstHandler.getSchemaMessageFormatter();
      String response =
          schemaFormatter.formatRspnXmlPreamble()
              + "\n"
              + "\t"
              + CFFreeSwitchXMsgSchemaMessageFormatter.formatRspnException("\n\t\t\t", e)
              + "\n"
              + schemaFormatter.formatRspnXmlPostamble();
      xmsgRqstHandler.resetResponse();
      xmsgRqstHandler.appendResponse(response);
      xmsgRqstHandler.setCaughtException(true);
    }
  }