@Override
  public boolean initializeService(
      CConfigServicesDaemon ServicesDaemonConfig,
      CAbstractConfigLoader OwnerConfig) { // Alternate manual contructor

    boolean bResult = super.initializeService(ServicesDaemonConfig, OwnerConfig);

    try {

      this.bAuthRequired = true;
      this.strRunningPath = net.maindataservices.Utilities.getJarFolder(this.getClass());
      this.strServiceName = "System.List.Registered.Managers";
      this.strServiceVersion = "0.0.0.1";

      this.setupService(
          ConstantsSystemListRegisteredManagers._Main_File_Log,
          this.strRunningPath
              + ConstantsCommonClasses._Langs_Dir
              + ConstantsSystemListRegisteredManagers._Main_File
              + "."
              + ConstantsCommonClasses._Lang_Ext); // Init the Logger and Lang

      ServiceLogger.logMessage(
          "1", ServiceLang.translate("Running dir: [%s]", this.strRunningPath));
      ServiceLogger.logMessage("1", ServiceLang.translate("Version: [%s]", this.strServiceVersion));

      CClassPathLoader ClassPathLoader = new CClassPathLoader();

      ClassPathLoader.loadClassFiles(
          this.strRunningPath + ConstantsCommonClasses._Pre_Execute_Dir,
          ConstantsCommonClasses._Lib_Ext,
          2,
          ServiceLogger,
          ServiceLang);

      this.loadAndRegisterServicePreExecute();

      ClassPathLoader.loadClassFiles(
          this.strRunningPath + ConstantsCommonClasses._Post_Execute_Dir,
          ConstantsCommonClasses._Lib_Ext,
          2,
          ServiceLogger,
          ServiceLang);

      this.loadAndRegisterServicePostExecute();

      this.strServiceDescription = ServiceLang.translate("Lets unregister managers");

      ArrayList<CInputServiceParameter> ServiceInputParameters =
          new ArrayList<CInputServiceParameter>();

      CInputServiceParameter InputParameter =
          new CInputServiceParameter(
              ConstantsCommonClasses._Request_ResponseFormat,
              false,
              ConstantsCommonClasses._Request_ResponseFormat_Type,
              ConstantsCommonClasses._Request_ResponseFormat_Length,
              TParameterScope.IN,
              ServiceLang.translate("Response format name, example: XML-DATAPACKET, CSV, JSON"));

      ServiceInputParameters.add(InputParameter);

      InputParameter =
          new CInputServiceParameter(
              ConstantsCommonClasses._Request_ResponseFormatVersion,
              false,
              ConstantsCommonClasses._Request_ResponseFormatVersion_Type,
              ConstantsCommonClasses._Request_ResponseFormatVersion_Length,
              TParameterScope.IN,
              ServiceLang.translate("Response format version, example: 1.1"));

      ServiceInputParameters.add(InputParameter);

      InputParameter =
          new CInputServiceParameter(
              ConstantsCommonClasses._Request_ServiceName,
              true,
              ConstantsCommonClasses._Request_ServiceName_Type,
              ConstantsCommonClasses._Request_ServiceName_Length,
              TParameterScope.IN,
              ServiceLang.translate("Service Name"));

      ServiceInputParameters.add(InputParameter);

      InputParameter =
          new CInputServiceParameter(
              ConstantsCommonClasses._Request_SecurityTokenID,
              true,
              ConstantsSystemListRegisteredManagers._Request_SecurityToken_Type,
              ConstantsSystemListRegisteredManagers._Request_SecurityToken_Length,
              TParameterScope.IN,
              ServiceLang.translate("Security token"));

      ServiceInputParameters.add(InputParameter);

      InputParameter =
          new CInputServiceParameter(
              ConstantsSystemListRegisteredManagers._Request_Context,
              true,
              ConstantsSystemListRegisteredManagers._Request_Context_Type,
              ConstantsSystemListRegisteredManagers._Request_Context_Length,
              TParameterScope.IN,
              ServiceLang.translate(
                  "Context to list registered managers, use * for list all context and registered managers. sample: /DBServices"));

      ServiceInputParameters.add(InputParameter);

      GroupsInputParametersService.put(ConstantsCommonClasses._Default, ServiceInputParameters);

    } catch (Exception Ex) {

      bResult = false;

      if (OwnerLogger != null) OwnerLogger.logException("-1010", Ex.getMessage(), Ex);
    }

    return bResult;
  }
  @Override
  public int executeService(
      int intEntryCode,
      HttpServletRequest Request,
      HttpServletResponse Response,
      String strSecurityTokenID,
      HashMap<String, CAbstractService> RegisteredServices,
      CAbstractResponseFormat ResponseFormat,
      String strResponseFormatVersion) {

    int intResultCode = -1000;

    if (this.checkServiceInputParameters(
            GroupsInputParametersService.get(ConstantsCommonClasses._Default),
            Request,
            Response,
            ResponseFormat,
            strResponseFormatVersion,
            (String) OwnerConfig.sendMessage(ConstantsMessagesCodes._Global_DateTime_Format, null),
            (String) OwnerConfig.sendMessage(ConstantsMessagesCodes._Global_Date_Format, null),
            (String) OwnerConfig.sendMessage(ConstantsMessagesCodes._Global_Time_Format, null),
            this.ServiceLogger != null ? this.ServiceLogger : this.OwnerLogger,
            this.ServiceLang != null ? this.ServiceLang : this.OwnerLang)
        == true) {

      CServicePreExecuteResult ServicePreExecuteResult =
          this.runServicePreExecute(
              intEntryCode,
              Request,
              Response,
              strSecurityTokenID,
              RegisteredServices,
              ResponseFormat,
              strResponseFormatVersion);

      if (ServicePreExecuteResult == null || ServicePreExecuteResult.bStopExecuteService == false) {

        if (strSecurityTokenID != null && strSecurityTokenID.isEmpty() == false) {

          try {

            CRegisteredManagersControl RegisteredManagersControl =
                CRegisteredManagersControl.getRegisteredManagersControl();

            if (RegisteredManagersControl != null) {

              String strContext =
                  Request.getParameter(ConstantsSystemListRegisteredManagers._Request_Context);

              Vector<CRegisteredManagerInfo> RegisteredManagersList =
                  RegisteredManagersControl.getListRegisteredManagersOnContext(strContext);

              CMemoryRowSet RegisteredManagers = new CMemoryRowSet(false);

              RegisteredManagers.addField(
                  ConstantsSystemListRegisteredManagers._Response_Context,
                  ConstantsSystemListRegisteredManagers._Response_Context_SQLType,
                  ConstantsSystemListRegisteredManagers._Response_Context_Type,
                  ConstantsSystemListRegisteredManagers._Response_Context_Length,
                  ConstantsSystemListRegisteredManagers._Response_Context);
              RegisteredManagers.addField(
                  ConstantsSystemListRegisteredManagers._Response_ManagerURL,
                  ConstantsSystemListRegisteredManagers._Response_ManagerURL_SQLType,
                  ConstantsSystemListRegisteredManagers._Response_ManagerURL_Type,
                  ConstantsSystemListRegisteredManagers._Response_ManagerURL_Length,
                  ConstantsSystemListRegisteredManagers._Response_ManagerURL);
              RegisteredManagers.addField(
                  ConstantsSystemListRegisteredManagers._Response_Weight,
                  ConstantsSystemListRegisteredManagers._Response_Weight_SQLType,
                  ConstantsSystemListRegisteredManagers._Response_Weight_Type,
                  ConstantsSystemListRegisteredManagers._Response_Weight_Length,
                  ConstantsSystemListRegisteredManagers._Response_Weight);
              RegisteredManagers.addField(
                  ConstantsSystemListRegisteredManagers._Response_StandardizedWeight,
                  ConstantsSystemListRegisteredManagers._Response_StandardizedWeight_SQLType,
                  ConstantsSystemListRegisteredManagers._Response_StandardizedWeight_Type,
                  ConstantsSystemListRegisteredManagers._Response_StandardizedWeight_Length,
                  ConstantsSystemListRegisteredManagers._Response_StandardizedWeight);
              RegisteredManagers.addField(
                  ConstantsSystemListRegisteredManagers._Response_Load,
                  ConstantsSystemListRegisteredManagers._Response_Load_SQLType,
                  ConstantsSystemListRegisteredManagers._Response_Load_Type,
                  ConstantsSystemListRegisteredManagers._Response_Load_Length,
                  ConstantsSystemListRegisteredManagers._Response_Load);

              // Determine the max Weight for context for sample: "/DBServices" -> 1500,
              // "/BPservices" -> 2300, "/RegisterServices" -> 1890
              LinkedHashMap<String, Integer> ContextsMaxWeight =
                  new LinkedHashMap<String, Integer>();

              for (CRegisteredManagerInfo RegisteredManagerInfo : RegisteredManagersList) {

                Integer intCurrentMaxWeight =
                    ContextsMaxWeight.get(RegisteredManagerInfo.strContext);

                if (intCurrentMaxWeight == null) {

                  ContextsMaxWeight.put(
                      RegisteredManagerInfo.strContext, RegisteredManagerInfo.intWeight);

                } else if (RegisteredManagerInfo.intWeight > intCurrentMaxWeight) {

                  ContextsMaxWeight.put(
                      RegisteredManagerInfo.strContext, RegisteredManagerInfo.intWeight);
                }
              }

              for (CRegisteredManagerInfo RegisteredManagerInfo : RegisteredManagersList) {

                RegisteredManagers.addData(
                    ConstantsSystemListRegisteredManagers._Response_Context,
                    RegisteredManagerInfo.strContext);
                RegisteredManagers.addData(
                    ConstantsSystemListRegisteredManagers._Response_ManagerURL,
                    RegisteredManagerInfo.strManagerURL);
                RegisteredManagers.addData(
                    ConstantsSystemListRegisteredManagers._Response_Weight,
                    RegisteredManagerInfo.intWeight);

                int intCurrentMaxWeight = ContextsMaxWeight.get(RegisteredManagerInfo.strContext);

                RegisteredManagerInfo.intStandardizedWeight =
                    RegisteredManagerInfo.intWeight * 100 / intCurrentMaxWeight;

                RegisteredManagers.addData(
                    ConstantsSystemListRegisteredManagers._Response_StandardizedWeight,
                    RegisteredManagerInfo.intStandardizedWeight);

                RegisteredManagers.addData(
                    ConstantsSystemListRegisteredManagers._Response_Load,
                    RegisteredManagerInfo.intLoad);
              }

              Response.setContentType(ResponseFormat.getContentType());
              Response.setCharacterEncoding(ResponseFormat.getCharacterEncoding());

              String strResponseBuffer =
                  ResponseFormat.formatMemoryRowSet(
                      RegisteredManagers,
                      strResponseFormatVersion,
                      (String)
                          OwnerConfig.sendMessage(
                              ConstantsMessagesCodes._Global_DateTime_Format, null),
                      (String)
                          OwnerConfig.sendMessage(ConstantsMessagesCodes._Global_Date_Format, null),
                      (String)
                          OwnerConfig.sendMessage(ConstantsMessagesCodes._Global_Time_Format, null),
                      ServiceLogger,
                      ServiceLang);

              Response.getWriter().print(strResponseBuffer);

              intResultCode = 1;
            }

          } catch (Exception Ex) {

            if (ServiceLogger != null) ServiceLogger.logException("-1020", Ex.getMessage(), Ex);
            else if (OwnerLogger != null) OwnerLogger.logException("-1020", Ex.getMessage(), Ex);
          }
        }

      } else {

        intResultCode = ServicePreExecuteResult.intResultCode;
      }

      CServicePostExecuteResult ServicePostExecuteResult =
          this.runServicePostExecute(
              intEntryCode,
              Request,
              Response,
              strSecurityTokenID,
              RegisteredServices,
              ResponseFormat,
              strResponseFormatVersion);

      if (ServicePostExecuteResult != null) {

        intResultCode = ServicePostExecuteResult.intResultCode;
      }
    }

    return intResultCode;
  }