コード例 #1
0
  /**
   * Remove (or rather invalidate) a customer. Removing a customer means, that his personal data
   * will be overwritten.
   *
   * <p>Note that this will be called inside a transaction explicitely.
   *
   * @param custId
   */
  public void removeCustomer(int custId) {

    logger.info("removeCustomer : " + custId);
    startUserTransaction();

    // TODO: make sure that all related entities are deleted, too.
    CustomerEntity ce = em.find(CustomerEntity.class, custId);

    // avoid trivialities
    if (ce == null) {
      logger.warning("Unable to retrieve user for custId " + custId + " cannot remove customer");
      return;
    }

    // TODO: remove all those ride request that can still be removed,
    // and invalidate the rest
    List<RiderUndertakesRideEntity> allRides =
        riderUndertakesRideControllerBean.getRidesForCustomer(ce);

    for (RiderUndertakesRideEntity re : allRides) {

      if (riderUndertakesRideControllerBean.isRemovable(re.getRiderrouteId())) {
        // delete all rides that can be deleted
        logger.info("Deleting Ride " + re.getRiderrouteId());
        riderUndertakesRideControllerBean.removeRide(re.getRiderrouteId());
      } else {
        // invalidate all rides that cannot be deleted
        logger.info("Invalidating Ride " + re.getRiderrouteId());
        riderUndertakesRideControllerBean.invalidateRide(re.getRiderrouteId());
      }
    } // for (RiderUndertakesRideEntity re: allRides)

    // TODO: remove all those ride request that can still be removed,
    // and invalidate the rest
    List<DriverUndertakesRideEntity> allDrives =
        driverUndertakesRideControllerBean.getDrivesForDriver(ce.getCustNickname());

    for (DriverUndertakesRideEntity due : allDrives) {

      if (driverUndertakesRideControllerBean.isDeletable(due.getRideId())) {
        // delete all drives that can be deleted
        logger.info("Invalidating Ride " + due.getRideId());
        driverUndertakesRideControllerBean.invalidateRide(due.getRideId());
      } else {
        // invalidate all rides that cannot be deleted
        logger.info("Invalidating Drive " + due.getRideId());
        driverUndertakesRideControllerBean.invalidateRide(due.getRideId());
      }
    } // for (RiderUndertakesRideEntity re: allRides)

    // TODO:
    // overwrite valid data for this user with randomized data

    String random = "" + Math.random();
    String ts = "" + System.currentTimeMillis();
    String seed = "deleted_user" + random + ":" + ts;

    // set firstname, lastname and gender
    this.setBasePersonalData(custId, seed, seed, '-', null);
    // invalidate dob, email , cellphone, landline phone
    // address data, smoker data, licensedate
    this.setPersonalData(
        custId,
        seed, // mock firstName
        seed,
        'x',
        null, // mock date of birth
        seed, // mock email
        false,
        seed, // mock mobile phone
        false,
        seed, // mock landline
        seed, // mock cust_addr street
        seed, // mock zipcode
        seed, // mock City
        'n', // mock smokerprefs
        null, // mock licensedate
        null, // mock preferred language
        UnitOfLength.KILOMETER.getKey());

    // invalidate nickname and password
    this.setNickname(custId, seed);
    this.setPassword(custId, seed);

    em.merge(ce);
    em.persist(ce);
    //
    // do not remove the customer, only overwrite the data
    //
    // em.remove(e);
    commitUserTransaction();
  }