示例#1
0
  public static void addShData(
      ShDataElement shData,
      int crt_data_ref,
      IMPU impu,
      String crt_service_indication,
      String server_name,
      int identitySet,
      String dsai_tag) {

    Session session = HibernateUtil.getCurrentSession();
    ShIMSDataElement shIMSData = shData.getShIMSData();

    if (crt_data_ref == ShConstants.Data_Ref_Charging_Info
        || crt_data_ref == ShConstants.Data_Ref_DSAI
        || crt_data_ref == ShConstants.Data_Ref_iFC
        || crt_data_ref == ShConstants.Data_Ref_IMS_User_State
        || crt_data_ref == ShConstants.Data_Ref_PSI_Activation
        || crt_data_ref == ShConstants.Data_Ref_SCSCF_Name) {
      if (shIMSData == null) {
        shIMSData = new ShIMSDataElement();
        shData.setShIMSData(shIMSData);
      }
    }
    ShDataExtensionElement shDataExtension = shData.getShDataExtension();
    if (crt_data_ref == ShConstants.Data_Ref_Aliases_Repository_Data) {

      if (shDataExtension == null) {
        shDataExtension = new ShDataExtensionElement();
        shData.setShDataExtension(shDataExtension);
      }
    }

    switch (crt_data_ref) {
      case ShConstants.Data_Ref_Repository_Data:
        RepositoryData repData =
            RepositoryData_DAO.get_by_IMPU_and_ServiceIndication(
                session, impu.getId(), crt_service_indication);
        RepositoryDataElement repDataElement = new RepositoryDataElement();
        repDataElement.setServiceData(new String(repData.getRep_data()));
        repDataElement.setSqn(repData.getSqn());
        repDataElement.setServiceIndication(crt_service_indication);
        shData.addRepositoryData(repDataElement);
        break;

      case ShConstants.Data_Ref_Aliases_Repository_Data:
        AliasesRepositoryData aliasesRepData =
            AliasesRepositoryData_DAO.get_by_setID_and_ServiceIndication(
                session, impu.getId_implicit_set(), crt_service_indication);

        AliasesRepositoryDataElement aliasesRepDataElement = new AliasesRepositoryDataElement();
        aliasesRepDataElement.setServiceData(new String(aliasesRepData.getRep_data()));
        aliasesRepDataElement.setSqn(aliasesRepData.getSqn());
        aliasesRepDataElement.setServiceIndication(crt_service_indication);
        shDataExtension.addAliasesRepositoryData(aliasesRepDataElement);
        break;

      case ShConstants.Data_Ref_IMS_Public_Identity:
        PublicIdentityElement pIdentityElement = shData.getPublicIdentifiers();
        if (pIdentityElement == null) {
          pIdentityElement = new PublicIdentityElement();
          shData.setPublicIdentifiers(pIdentityElement);
        }

        List impuList = null;
        switch (identitySet) {
          case ShConstants.Identity_Set_All_Identities:
            impuList = IMPU_DAO.get_all_within_same_IMPI_Associations(session, impu.getId());
            break;

          case ShConstants.Identity_Set_Registered_Identities:
            impuList =
                IMPU_DAO.get_all_Registered_within_same_IMPI_Associations(session, impu.getId());
            break;

          case ShConstants.Identity_Set_Implicit_Identities:
          case ShConstants.Identity_Set_Alias_Identities:
            // for the moment Alias_Identities & Implicit_Identities are interpreted as beeing the
            // same thing
            impuList = IMPU_DAO.get_all_from_set(session, impu.getId_implicit_set());
            break;
        }

        // add the IMPUs to the response
        if (impuList == null) {
          logger.error("IMPU List is NULL. The list should contain at least one element!");
          return;
        }
        for (int i = 0; i < impuList.size(); i++) {
          IMPU crtIMPU = (IMPU) impuList.get(i);
          if (i == 0) {
            // add the identity type for all the IMPUs
            pIdentityElement.setIdentityType(crtIMPU.getType());
          }
          pIdentityElement.addPublicIdentity(crtIMPU.getIdentity());
        }

        break;

      case ShConstants.Data_Ref_IMS_User_State:
        shIMSData.setImsUserState(impu.getUser_state());
        break;

      case ShConstants.Data_Ref_SCSCF_Name:
        List impiList = IMPI_DAO.get_all_IMPI_for_IMPU_ID(session, impu.getId());
        if (impiList != null && impiList.size() > 0) {
          IMPI impi = (IMPI) impiList.get(0);
          String scscfName = IMSU_DAO.get_SCSCF_Name_by_IMSU_ID(session, impi.getId_imsu());
          shIMSData.setScscfName(scscfName);

          if (scscfName == null) {
            shIMSData.setAddEmptySCSCFName(true);
          }
        }
        break;

      case ShConstants.Data_Ref_iFC:
        ApplicationServer serviceAS =
            ApplicationServer_DAO.get_by_Server_Name(session, server_name);
        if (serviceAS == null) {
          logger.error(
              "The Server-Name AS was not found in the HSS!!! Aborting from addShData()...");
          return;
        }

        List ifcList = IFC_DAO.get_all_IFCs_by_IMPU_ID_and_DSAI_Value_Active(session, impu.getId());
        if (ifcList != null) {
          ApplicationServerElement asElement = new ApplicationServerElement();
          asElement.setDefaultHandling(serviceAS.getDefault_handling());
          asElement.setServerName(serviceAS.getServer_name());
          asElement.setServiceInfo(serviceAS.getService_info());

          Iterator it = ifcList.iterator();
          while (it.hasNext()) {
            IFC crt_ifc = (IFC) it.next();
            if (crt_ifc.getId_application_server() == serviceAS.getId()) {
              InitialFilterCriteriaElement ifcElement = new InitialFilterCriteriaElement();

              ifcElement.setApplicationServer(asElement);
              SP_IFC sp_ifc =
                  SP_IFC_DAO.get_by_SP_and_IFC_ID(session, impu.getId_sp(), crt_ifc.getId());
              ifcElement.setPriority(sp_ifc.getPriority());
              ifcElement.setProfilePartIndicator(crt_ifc.getProfile_part_ind());

              // set the trigger point
              TP tp = TP_DAO.get_by_ID(session, crt_ifc.getId_tp());
              if (tp != null) {
                TriggerPointElement tpElement = new TriggerPointElement();
                tpElement.setConditionTypeCNF(tp.getCondition_type_cnf());

                List sptList = SPT_DAO.get_all_by_TP_ID(session, tp.getId());
                if (sptList != null) {
                  Iterator it2 = sptList.iterator();
                  SPT crt_spt;
                  SPTElement sptElement;
                  while (it2.hasNext()) {
                    crt_spt = (SPT) it2.next();
                    sptElement = new SPTElement();
                    sptElement.setConditionNegated(crt_spt.getCondition_negated());
                    sptElement.setGroupID(crt_spt.getGrp());

                    sptElement.setMethod(crt_spt.getMethod());
                    sptElement.setRequestURI(crt_spt.getRequesturi());
                    if (crt_spt.getSession_case() != null) {
                      sptElement.setSessionCase(crt_spt.getSession_case());
                    }
                    sptElement.setSessionDescLine(crt_spt.getSdp_line());
                    sptElement.setSessionDescContent(crt_spt.getSdp_line_content());
                    sptElement.setSipHeader(crt_spt.getHeader());
                    sptElement.setSipHeaderContent(crt_spt.getHeader_content());

                    // extension
                    sptElement.addRegistrationType(crt_spt.getRegistration_type());
                    tpElement.addSPT(sptElement);
                  }
                }
                ifcElement.setTriggerPoint(tpElement);
              }
              shIMSData.addInitialFilterCriteria(ifcElement);
            }
          }
        }
        if (shIMSData.getIfcList() == null) {
          shIMSData.setAddEmptyIFCs(true);
        }
        break;

      case ShConstants.Data_Ref_Charging_Info:
        if (shIMSData == null) {
          shIMSData = new ShIMSDataElement();
          shData.setShIMSData(shIMSData);
        }
        ChargingInfo chgInfo = ChargingInfo_DAO.get_by_ID(session, impu.getId());

        ChargingInformationElement chgInfoElement = new ChargingInformationElement();
        chgInfoElement.setPriCCFName(chgInfo.getPri_ccf());
        chgInfoElement.setSecCCFName(chgInfo.getSec_ccf());
        chgInfoElement.setPriECFName(chgInfo.getPri_ecf());
        chgInfoElement.setSecECFName(chgInfo.getSec_ecf());
        shIMSData.setChgInformation(chgInfoElement);
        break;

      case ShConstants.Data_Ref_PSI_Activation:
        if (shIMSData == null) {
          shIMSData = new ShIMSDataElement();
          shData.setShIMSData(shIMSData);
        }
        shIMSData.setPsiActivation(impu.getPsi_activation());
        break;

      case ShConstants.Data_Ref_Location_Info:
        break;

      case ShConstants.Data_Ref_User_State:
        break;

        /** Added Jo?o Vitor Torres contribution for MSISDN */
      case ShConstants.Data_Ref_MSISDN:
        PublicIdentityElement msisdn = shData.getPublicIdentifiers();
        if (msisdn == null) {
          msisdn = new PublicIdentityElement();
          shData.setPublicIdentifiers(msisdn);
        }
        impuList = IMPU_DAO.get_all_within_same_IMPI_Associations(session, impu.getId());
        // add the IMPUs to the response
        if (impuList == null) {
          logger.error("IMPU List is NULL. The list should contain at least one element!");
          return;
        }

        for (int i = 0; i < impuList.size(); i++) {
          IMPU crtIMPU = (IMPU) impuList.get(i);
          if (crtIMPU.getIdentity().matches("(tel:)?[0-9]+")) {
            if (i == 0) {
              // add the identity type for all the IMPUs
              msisdn.setIdentityType(crtIMPU.getType());
            }
            msisdn.addMSISDN(
                crtIMPU.getIdentity().substring(crtIMPU.getIdentity().indexOf(":") + 1));
          }
        }
        break;

      case ShConstants.Data_Ref_DSAI:
        if (shIMSData == null) {
          shIMSData = new ShIMSDataElement();
          shData.setShIMSData(shIMSData);
        }

        DSAI dsai = DSAI_DAO.get_by_Dsai_tag(session, dsai_tag);
        if (dsai == null) {
          new ShExperimentalResultException(
              DiameterConstants.ResultCode.RC_IMS_DIAMETER_ERROR_DSAI_NOT_AVAILABLE);
        } else {
          int id_impu = impu.getId();
          int id_dsai = dsai.getId();
          DSAI_IMPU dsai_impu = DSAI_IMPU_DAO.get_by_DSAI_and_IMPU_ID(session, id_dsai, id_impu);
          if (dsai_impu == null) {
            new ShExperimentalResultException(
                DiameterConstants.ResultCode.RC_IMS_DIAMETER_ERROR_DSAI_NOT_AVAILABLE);
          }

          DSAIElement dsai_element = new DSAIElement();
          dsai_element.setTag(dsai_tag);
          // this dsai_value is associated only with the impu
          dsai_element.setValue(dsai_impu.getDsai_value());
          shIMSData.addDSAI(dsai_element);
        }
        break;
    }
  }