throw new RegistrationException("cannot add license to user", e);
}
}
private void upgradeLicenses(UserImpl buyer, List licensesBought) throws DaoException, ServiceException {
License licenseUsed = buyer.getLicenseUsed();
LOGGER.debug("upgrading licenses of "+buyer+" ("+licenseUsed+") with "+licensesBought);
if (licensesBought.isEmpty()) {
return;
}
List availableLicenses = new ArrayList(licensesBought);
List usersToUpdate = new ArrayList();
if (isTrial(licenseUsed)
|| (licenseUsed == null && buyer.getBuyedLicenses().size() == licensesBought.size())) {
// upgrade buyer license
License l = (License)availableLicenses.remove(0);
LOGGER.debug("upgrading buyer license to "+l);
buyer.setLicenseUsed(l);
DaoFactory.getUserDao().save(buyer);
usersToUpdate.add(buyer);
}
Map trialLicensesByOwner = getTrialLicensesByOwner(buyer);
LOGGER.debug(trialLicensesByOwner.size()+" licenses still need to be upgraded, "+availableLicenses.size()+" available");
if (! trialLicensesByOwner.isEmpty() && trialLicensesByOwner.size() <= availableLicenses.size()) {
// there is enough licenses for the number of currently used trial licenses: we upgrade them all
LOGGER.debug("upgrading licenses of "+trialLicensesByOwner.keySet());
for (Iterator iter = trialLicensesByOwner.keySet().iterator(); iter.hasNext();) {
UserImpl owner = (UserImpl)iter.next();
License newLicense = (License)availableLicenses.remove(0);
owner.setLicenseUsed(newLicense);
DaoFactory.getUserDao().save(owner);
usersToUpdate.add(owner);
}
} else {
LOGGER.debug("not enough licenses, no upgrade");
}
if (!canManageGroups(buyer.getLicenseUsed())) {
// user does not have group management any more
// all buyed trials used by others should now belong to them and be ungrouped
for (Iterator iter = buyer.getBuyedLicenses().iterator(); iter.hasNext();) {
License lic = (License)iter.next();
if (isTrial(lic) && lic.getOwner() != null && lic.getOwner().getId() != buyer.getId()) {
lic.setBuyer(lic.getOwner());
if (lic.getGroup() != null) {
ServiceFactory.getGroupService().removeLicense(new Long(lic.getGroup().getId()), new Long(lic.getId()));
} else {
saveLicense(lic);
}
}
}