public WizardVO wizardImei(ArrayList<ImeiVO> listOfImeiVO)
      throws MSMApplicationException, MSMSystemException {
    Properties properties = getSettings();
    String smsMessage = "You are able to download NDG client here: ";
    String link = properties.getProperty("urlServer") + "/ndg-servlets/GetClient?to=";
    log.debug("wizardImei: " + link);

    WizardVO wizardVo = new WizardVO();
    for (ImeiVO imeiVO : listOfImeiVO) {
      if (imeiManager.hasImei(imeiVO)) {
        wizardVo.addImei(imeiVO.getImei());
      }
      if (imeiManager.hasMsisdn(imeiVO)) {
        wizardVo.addPhone(imeiVO.getMsisdn());
      }
    }
    if (!wizardVo.isFilled()) {
      for (ImeiVO imeiVO : listOfImeiVO) {
        createIMEI(imeiVO);
        log.debug("newIMEI: " + imeiVO.getImei());
      }
      log.debug("sendLinkSMS: " + smsMessage + link);
      sendLinkSMS(smsMessage + link, listOfImeiVO);
    }

    return wizardVo;
  }
 public void createIMEI(ImeiVO imeiVO) throws MSMApplicationException {
   NdgUser userLogged = findNdgUserByName(imeiVO.getUserName());
   if (userManager.userAdminHasPositiveBalance(UserVO.IMEI_LIMIT, userLogged.getUserAdmin())) {
     imeiManager.createIMEI(imeiVO);
     sendDynamicJad(imeiVO.getMsisdn(), imeiVO.getImei());
   } else {
     throw new ImeiLimitReachedException();
   }
   userManager.updateUserAdminBalance(UserVO.IMEI_LIMIT, userLogged.getUserAdmin());
 }
 public void sendDynamicJad(String msisdn, String imei) throws MSMApplicationException {
   String urlToJad = null;
   try {
     urlToJad = deviceManager.createDynamicJad(msisdn);
     ArrayList<ImeiVO> listoOfDevices = new ArrayList<ImeiVO>();
     ImeiVO imeiVo = new ImeiVO();
     imeiVo.setImei(imei);
     imeiVo.setMsisdn(msisdn);
     listoOfDevices.add(imeiVo);
     if (SmsHandlerFactory.getInstance().hasSmsSupport()) {
       sendLinkSMS(urlToJad, listoOfDevices);
     }
   } catch (MSMApplicationException e) {
     e.printStackTrace();
   }
 }
 public void deleteIMEI(String _imei) throws MSMApplicationException {
   try {
     ImeiVO imeiVO = getImei(_imei);
     if (imeiVO.getRealImei() == 'N') {
       deleteJadDir(imeiVO.getMsisdn());
     }
     imeiManager.deleteIMEI(_imei);
   } catch (RuntimeException e) {
     Throwable cause = e.getCause();
     for (int i = 0; i < 3 && cause != null; i++) {
       cause = cause.getCause();
       if (cause instanceof ConstraintViolationException) {
         throw new ImeiHasRelationshipException();
       }
     }
     throw e;
   }
 }
  public void postResult(StringBuffer resultBuffered, TransactionLogVO postResultTransaction)
      throws MSMApplicationException, MSMSystemException {

    ResultParser parser = new ResultParser();
    ResultXml resultBean = null;
    NdgUser userLogged = null;

    try {
      resultBean = parser.parseResult(resultBuffered, "UTF-8");
    } catch (Exception e) {
      throw new ResultNotParsedException();
    }

    if (resultBean != null) {
      ImeiVO imei = imeiManager.getIMEI(resultBean.getImei());
      userLogged = findNdgUserByName(imei.getUserName());
      if (userManager.userAdminHasPositiveBalance(UserVO.RESULT_LIMIT, userLogged.getUserAdmin())) {
        resultHandler.postResult(resultBuffered, postResultTransaction);
        userManager.updateUserAdminBalance(UserVO.RESULT_LIMIT, userLogged.getUserAdmin());
      } else {
        throw new UserLimitReachedException();
      }
    }
  }