private void createDummyTenantRegistry() { synchronized (this) { final TenantDO dummyTenant = new TenantDO().setName("Dummy tenant").setShortName("Dummy tenant") .setDescription("This tenant is only a technical tenant, if no default tenant is given."); dummyTenant.setId(-1); dummyTenantRegistry = new TenantRegistry(dummyTenant, applicationContext); } }
/** * @param tenant * @param userId * @return true if tenant is not null and not deleted and the given user is assigned to the given tenant. Otherwise * false. */ @Override public boolean isUserAssignedToTenant(final TenantDO tenant, final Integer userId) { if (tenant == null || tenant.isDeleted() || tenant.getAssignedUsers() == null) { return false; } return tenant .getAssignedUsers() .stream() .anyMatch(user -> user.getId().equals(userId)); }
public void populateItem(final Item<ICellPopulator<TenantDO>> item, final String componentId, final IModel<TenantDO> rowModel) { final TenantDO tenant = rowModel.getObject(); appendCssClasses(item, tenant.getId(), tenant.isDeleted()); if (tenant.isDefault() == true) { appendCssClasses(item, RowCssClass.IMPORTANT_ROW); } } };
public String getLogName(final TenantDO tenant) { final TenantDO t = getTenant(tenant.getId()); return "#" + t.getId() + " '" + t.getShortName() + "'"; }
for (final TenantDO tenant : tenantsToAssign) { emgrFactory.runInTrans(emgr -> { final TenantDO dbTenant = emgr.selectByPkAttached(TenantDO.class, tenant.getId()); final PFUserDO dbUser = emgr.selectByPkAttached(PFUserDO.class, user.getId()); Set<PFUserDO> assignedUsers = dbTenant.getAssignedUsers(); if (assignedUsers == null) { assignedUsers = new HashSet<PFUserDO>(); dbTenant.setAssignedUsers(assignedUsers); log.info("Assigning user '" + dbUser.getUsername() + "' to tenant '" + dbTenant.getName() + "'."); assignedUsers.add(dbUser); assignedTenants.add(dbTenant); dbTenant.setLastUpdate(); // Needed, otherwise TenantDO is not detected for hibernate history! } else { log.info("User '" + user.getUsername() + "' already assigned to tenant '" + dbTenant.getName() + "'."); for (final TenantDO tenant : tenantsToUnassign) { emgrFactory.runInTrans(emgr -> { final TenantDO dbTenant = emgr.selectByPkAttached(TenantDO.class, tenant.getId()); final PFUserDO dbUser = emgr.selectByPkAttached(PFUserDO.class, user.getId()); final Set<PFUserDO> assignedUsers = dbTenant.getAssignedUsers(); if (assignedUsers != null && assignedUsers.contains(dbUser) == true) { log.info("Unassigning user '" + user.getUsername() + "' from tenant '" + dbTenant.getName() + "'."); assignedUsers.remove(dbUser); unassignedTenants.add(dbTenant); dbTenant.setLastUpdate(); // Needed, otherwise TenantDO is not detected for hibernate history! } else { log.info("User '" + user.getUsername() + "' is not assigned to tenant '" + dbTenant.getName() + "' (can't unassign).");
/** * @see org.projectforge.framework.persistence.api.BaseDao#onSaveOrModify(org.projectforge.core.ExtendedBaseDO) */ @Override protected void onSaveOrModify(final TenantDO obj) { if (obj.isDefault() == false) { return; } final TenantDO defaultTenant = getDefaultTenant(); if (defaultTenant == null) { return; } if (obj.getId() == null || ObjectUtils.equals(defaultTenant.getId(), obj.getId()) == false) { throw new UserException("multitenancy.error.maxOnlyOneTenantShouldBeDefault"); } }
/** * @see org.projectforge.framework.configuration.AbstractConfiguration#getIdentifier4LogMessage() */ @Override protected String getIdentifier4LogMessage() { return "Configuration[tenant=" + (tenant != null ? tenant.getId() : null) + "]"; }
private TenantDO createTenant(final String name, final boolean isDefault, final PFUserDO... assignedUsers) { final TenantDO tenant = new TenantDO().setName(name).setDefaultTenant(isDefault); tenantDao.internalSave(tenant); return tenant; } }
/** * Creates ProjectForge's system groups for the new tenant.<br/> * Creates for every user an history entry if the user is part of this new tenant. * * @param tenant * @see org.projectforge.framework.persistence.api.BaseDao#afterSave(org.projectforge.core.ExtendedBaseDO) */ @Override public void afterSave(final TenantDO tenant) { final PFUserDO adminUser = ThreadLocalUserContext.getUser(); if (tenant.isDefault() == false) { // The groups do already exist for the default tenant. initDatabaseDao.internalCreateProjectForgeGroups(tenant, adminUser); } else { // Clear the dummy entry: TenantRegistryMap.getInstance().clear(); } final Collection<TenantDO> tenantList = new ArrayList<TenantDO>(); tenantList.add(tenant); if (tenant.getAssignedUsers() != null) { // Create history entry of PFUserDO for all assigned users: for (final PFUserDO user : tenant.getAssignedUsers()) { createHistoryEntry(user, null, tenantList); } } }
@Override public String getDisplayValue(final TenantDO choice) { return choice.getName(); }
public boolean isPartOfTenant(final TenantDO tenant, final PFUserDO user) { if (tenantService.isMultiTenancyAvailable() == false) { return true; } if (tenant == null || user == null || tenant.getAssignedUsers() == null) { return false; } return tenant.getAssignedUsers().contains(user); }
/** * @param tenant the currentTenant to set * @return this for chaining. */ public MySession setCurrentTenant(final TenantDO tenant) { if (tenant == null) { log.warn("Can't switch to current tenant=null!"); return this; } if (tenant.getId() == null) { log.warn("Can't switch to current tenant with id=null!"); return this; } if (this.userContext.getCurrentTenant() != null && tenant.getId().equals(this.userContext.getCurrentTenant().getId()) == false) { log.info("User switched the tenant: [" + tenant.getName() + "] (was [" + this.userContext.getCurrentTenant().getName() + "])."); this.userContext.setCurrentTenant(tenant); UserPreferencesHelper.putEntry(USER_PREF_KEY_CURRENT_TENANT, tenant.getId(), true); } return this; }
try { emf.tx().go(emgr -> { TenantDO attachedDefaultTenant = emgr.selectByPkAttached(TenantDO.class, defaultTenant.getId()); List<PFUserDO> users = emgr.selectAttached(PFUserDO.class, "select u from PFUserDO u"); for (PFUserDO user : users) { log.info("Assign user with id: " + user.getId() + " to default tenant."); attachedDefaultTenant.getAssignedUsers().add(user); emgr.update(attachedDefaultTenant);
final boolean hasDefaultTenant = tenantDao.getDefaultTenant() != null; if (isNew() == true && hasDefaultTenant == false) { getData().setDefaultTenant(true); final Set<PFUserDO> assignedUsers = getData().getAssignedUsers(); final UsersProvider usersProvider = new UsersProvider(userDao); assignUsersListHelper = new MultiChoiceListHelper<PFUserDO>().setComparator(new UsersComparator()).setFullList(
/** * Please note: Any existing assigned user in tenant object is ignored! * * @param tenant * @param assignedUsers Full list of all users which have to assigned to this tenant. * @return */ public void setAssignedUsers(final TenantDO tenant, final Collection<PFUserDO> assignedUsers) throws AccessException { final Set<PFUserDO> origAssignedUsers = tenant.getAssignedUsers(); if (origAssignedUsers != null) { final Iterator<PFUserDO> it = origAssignedUsers.iterator(); while (it.hasNext() == true) { final PFUserDO user = it.next(); if (assignedUsers.contains(user) == false) { it.remove(); } } } for (final PFUserDO user : assignedUsers) { if (origAssignedUsers == null || origAssignedUsers.contains(user) == false) { tenant.addUser(user); } } }
if (o instanceof TenantDO) { TenantDO t = (TenantDO) o; if (t.isDefault()) { LOG.info("Found default tenant"); defaultTenant = t;
/** * @see org.projectforge.web.wicket.CellItemListenerPropertyColumn#populateItem(org.apache.wicket.markup.repeater.Item, * java.lang.String, org.apache.wicket.model.IModel) */ @Override public void populateItem(final Item<ICellPopulator<TenantDO>> item, final String componentId, final IModel<TenantDO> rowModel) { final TenantDO Tenant = rowModel.getObject(); item.add(new ListSelectActionPanel(componentId, rowModel, TenantEditPage.class, Tenant.getId(), returnToPage, DateTimeFormatter .instance().getFormattedDate(Tenant.getCreated()))); addRowClick(item); cellItemListener.populateItem(item, componentId, rowModel); } });
@Override public String getObject() { final TenantDO currentTenant = userContext.getCurrentTenant(); return currentTenant != null ? currentTenant.getShortName() : "???"; }
@Override public TenantDO newInstance() { return new TenantDO(); }