@Override
  public void doService() {
    logger.debug("IN");
    IPeriodicityDAO perDao;
    try {
      perDao = DAOFactory.getPeriodicityDAO();
      perDao.setUserProfile(getUserProfile());
    } catch (EMFUserError e1) {
      logger.error(e1.getMessage(), e1);
      throw new SpagoBIServiceException(SERVICE_NAME, "Error occurred");
    }
    Locale locale = getLocale();

    String serviceType = this.getAttributeAsString(MESSAGE_DET);
    logger.debug("Service type " + serviceType);
    if (serviceType != null && serviceType.equalsIgnoreCase(PERIODICTIES_LIST)) {

      try {
        List periodicities = perDao.loadPeriodicityList();
        logger.debug("Loaded periodicities list");
        JSONArray periodicitiesJSON =
            (JSONArray)
                SerializerFactory.getSerializer("application/json")
                    .serialize(periodicities, locale);
        JSONObject periodicitiesResponseJSON = createJSONResponsePeriodicities(periodicitiesJSON);

        writeBackToClient(new JSONSuccess(periodicitiesResponseJSON));

      } catch (Throwable e) {
        logger.error("Exception occurred while retrieving users", e);
        throw new SpagoBIServiceException(
            SERVICE_NAME, "Exception occurred while retrieving users", e);
      }
    } else if (serviceType != null && serviceType.equalsIgnoreCase(PERIODICITY_INSERT)) {

      String id = getAttributeAsString(ID);
      String name = getAttributeAsString(NAME);
      String months = getAttributeAsString(MONTHS);
      String days = getAttributeAsString(DAYS);
      String hours = getAttributeAsString(HOURS);
      String minutes = getAttributeAsString(MINUTES);

      if (name != null) {
        Periodicity per = new Periodicity();
        per.setName(name);

        if (months != null && !months.equals("")) {
          per.setMonths(new Integer(months));
        } else {
          per.setMonths(new Integer("0"));
        }
        if (days != null && !days.equals("")) {
          per.setDays(new Integer(days));
        } else {
          per.setDays(new Integer("0"));
        }
        if (hours != null && !hours.equals("")) {
          per.setHours(new Integer(hours));
        } else {
          per.setHours(new Integer("0"));
        }
        if (minutes != null && !minutes.equals("")) {
          per.setMinutes(new Integer(minutes));
        } else {
          per.setMinutes(new Integer("0"));
        }

        try {
          if (id != null && !id.equals("") && !id.equals("0")) {
            per.setIdKpiPeriodicity(Integer.valueOf(id));
            perDao.modifyPeriodicity(per);
            logger.debug("Resource " + id + " updated");
            JSONObject attributesResponseSuccessJSON = new JSONObject();
            attributesResponseSuccessJSON.put("success", true);
            attributesResponseSuccessJSON.put("responseText", "Operation succeded");
            attributesResponseSuccessJSON.put("id", id);
            writeBackToClient(new JSONSuccess(attributesResponseSuccessJSON));
          } else {
            Integer perID = perDao.insertPeriodicity(per);
            logger.debug("New Resource inserted");
            JSONObject attributesResponseSuccessJSON = new JSONObject();
            attributesResponseSuccessJSON.put("success", true);
            attributesResponseSuccessJSON.put("responseText", "Operation succeded");
            attributesResponseSuccessJSON.put("id", perID);
            writeBackToClient(new JSONSuccess(attributesResponseSuccessJSON));
          }

        } catch (Throwable e) {
          logger.error(e.getMessage(), e);
          throw new SpagoBIServiceException(
              SERVICE_NAME, "Exception occurred while saving new resource", e);
        }

      } else {
        logger.error("Resource name, code or type are missing");
        throw new SpagoBIServiceException(SERVICE_NAME, "Please fill resource name, code and type");
      }
    } else if (serviceType != null && serviceType.equalsIgnoreCase(PERIODICITY_DELETE)) {
      Integer id = getAttributeAsInteger(ID);
      try {
        perDao.deletePeriodicity(id);
        logger.debug("Resource deleted");
        writeBackToClient(new JSONAcknowledge("Operation succeded"));
      } catch (Throwable e) {
        logger.error("Exception occurred while retrieving resource to delete", e);
        throw new SpagoBIServiceException(
            SERVICE_NAME, "Exception occurred while retrieving resource to delete", e);
      }
    }
    logger.debug("OUT");
  }