@Override public Object leaveOpenTransaction() { checkTestMode(); Transaction tx = persistence.createTransaction(); persistence.getEntityManager().find(User.class, UUID.fromString("60885987-1b61-4247-94c7-dff348347f93")); return tx; }
@Transactional @Override public void declarativeTransaction() { checkTestMode(); persistence.getEntityManager().find(User.class, UUID.fromString("60885987-1b61-4247-94c7-dff348347f93")); persistence.getEntityManagerContext().setAttribute("test", "test_value"); }
protected void restoreEntity(Entity entity, String storeName) { EntityManager em = persistence.getEntityManager(storeName); Entity reloadedEntity = em.find(entity.getClass(), entity.getId()); if (reloadedEntity != null && ((SoftDelete) reloadedEntity).isDeleted()) { log.info("Restoring deleted entity " + entity); Date deleteTs = ((SoftDelete) reloadedEntity).getDeleteTs(); ((SoftDelete) reloadedEntity).setDeleteTs(null); em.merge(reloadedEntity); restoreDetails(reloadedEntity, deleteTs, storeName); } }
protected Entity reload(Entity entity) { String storeName = metadataTools.getStoreName(entity.getMetaClass()); if (storeName == null) throw new RuntimeException("Cannot determine data store for " + entity); try (Transaction tx = persistence.createTransaction(storeName)) { Entity reloaded = persistence.getEntityManager(storeName).find(entity.getClass(), entity.getId(), createFullView(entity.getMetaClass())); if (reloaded != null) { entity = reloaded; } tx.commit(); } return entity; }
@Override public void setActive(Set<ScheduledTask> tasks, boolean active) { try (Transaction tx = persistence.createTransaction()) { EntityManager em = persistence.getEntityManager(); for (ScheduledTask task : tasks) { ScheduledTask t = em.find(ScheduledTask.class, task.getId()); t.setActive(active); } tx.commit(); } }
/** * Get query results from query cache by specified {@code queryKey} */ @SuppressWarnings("unchecked") public <T> List<T> getResultListFromCache(QueryKey queryKey, List<View> views) { log.debug("Looking for query in cache: {}", queryKey.printDescription()); List<T> resultList = null; QueryResult queryResult = queryCache.get(queryKey); if (queryResult != null) { MetaClass metaClass = metadata.getClassNN(queryResult.getType()); String storeName = metadata.getTools().getStoreName(metaClass); EntityManager em = persistence.getEntityManager(storeName); resultList = new ArrayList<>(queryResult.getResult().size()); if (!metadata.getTools().isCacheable(metaClass)) { log.warn("Using cacheable query without entity cache for {}", queryResult.getType()); } for (Object id : queryResult.getResult()) { resultList.add(em.find(metaClass.getJavaClass(), id, views.toArray(new View[views.size()]))); } } else { log.debug("Query results are not found in cache: {}", queryKey.printDescription()); } return resultList; }
@Override public void saveOwnLocale(String locale) { UUID userId = userSessionSource.getUserSession().getUser().getId(); log.debug("Saving user's {} language settings: {}", userId, locale); try (Transaction tx = persistence.createTransaction()) { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userId, "user.locale"); if (user == null) throw new EntityAccessException(User.class, userId); user.setLanguage(locale); tx.commit(); } }
@Override public boolean checkPassword(UUID userId, String passwordHash) { checkNotNullArgument(userId, "Null userId"); checkNotNullArgument(passwordHash, "Null new password hash"); User user; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); user = em.find(User.class, userId, CHECK_PASSWORD_VIEW); if (user == null) throw new RuntimeException("Unable to find user with id: " + userId); tx.commit(); } finally { tx.end(); } return passwordEncryption.checkPassword(user, passwordHash); }
@Override public void setActive(ScheduledTask task, boolean active) { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); ScheduledTask t = em.find(ScheduledTask.class, task.getId()); t.setActive(active); tx.commit(); } finally { tx.end(); } }
protected void checkIfFileDescriptorExists(FileDescriptor fd) throws FileStorageException { try (Transaction tx = persistence.getTransaction()) { FileDescriptor existingFile = persistence.getEntityManager().find(FileDescriptor.class, fd.getId()); if (existingFile == null || entityStates.isDeleted(existingFile)) { throw new FileStorageException(FileStorageException.Type.FILE_NOT_FOUND, fd.getName()); } tx.commit(); } } }
/** * Get single query results from query cache by specified {@code queryKey} * If query is cached and no results found exception is thrown */ @SuppressWarnings("unchecked") public <T> T getSingleResultFromCache(QueryKey queryKey, List<View> views) { log.debug("Looking for query in cache: {}", queryKey.printDescription()); QueryResult queryResult = queryCache.get(queryKey); if (queryResult != null) { MetaClass metaClass = metadata.getClassNN(queryResult.getType()); if (!metadata.getTools().isCacheable(metaClass)) { log.warn("Using cacheable query without entity cache for {}", queryResult.getType()); } if (queryResult.getException() != null) { RuntimeException ex = queryResult.getException(); ex.fillInStackTrace(); throw queryResult.getException(); } EntityManager em = persistence.getEntityManager(); for (Object id : queryResult.getResult()) { return (T) em.find(metaClass.getJavaClass(), id, views.toArray(new View[views.size()])); } } log.debug("Query results are not found in cache: {}", queryKey.printDescription()); return null; }
@Override public Role copyRole(UUID roleId) { checkNotNullArgument(roleId, "Null access role id"); checkUpdatePermission(Role.class); Role clone; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); Query roleNamesQuery = em.createQuery("select g.name from sec$Role g"); @SuppressWarnings("unchecked") Set<String> roleNames = new HashSet<>(roleNamesQuery.getResultList()); Role role = em.find(Role.class, roleId, ROLE_COPY_VIEW); if (role == null) throw new IllegalStateException("Unable to find specified role with id: " + roleId); clone = cloneRole(role, roleNames, em); clone.setDefaultRole(false); tx.commit(); } finally { tx.end(); } return clone; }
@Override public Group copyAccessGroup(UUID accessGroupId) { checkNotNullArgument(accessGroupId, "Null access group id"); checkUpdatePermission(Group.class); Group clone; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); Query groupNamesQuery = em.createQuery("select g.name from sec$Group g"); @SuppressWarnings("unchecked") Set<String> groupNames = new HashSet<>(groupNamesQuery.getResultList()); Group accessGroup = em.find(Group.class, accessGroupId, GROUP_COPY_VIEW); if (accessGroup == null) throw new IllegalStateException("Unable to find specified access group with id: " + accessGroupId); clone = cloneGroup(accessGroup, accessGroup.getParent(), groupNames, em); tx.commit(); } finally { tx.end(); } return clone; }
public Integer getPermissionValue(User user, PermissionType permissionType, String target) { Integer result; List<Role> roles = new ArrayList<>(); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); user = em.find(User.class, user.getId()); for (UserRole userRole : user.getUserRoles()) { if (userRole.getRole() != null) { roles.add(userRole.getRole()); } } UserSession session = new UserSession(uuidSource.createUuid(), user, roles, userSessionSource.getLocale(), false); compilePermissions(session, roles); result = session.getPermissionValue(permissionType, target); tx.commit(); } finally { tx.end(); } return result; }
@Override public void saveOwnTimeZone(UserTimeZone timeZone) { log.debug("Saving user's time zone settings: " + timeZone); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userSessionSource.getUserSession().getUser().getId(), "user.timeZone"); if (user == null) throw new EntityAccessException(User.class, userSessionSource.getUserSession().getUser().getId()); user.setTimeZone(timeZone.name); user.setTimeZoneAuto(timeZone.auto); tx.commit(); } finally { tx.end(); } }
@Override public UserTimeZone loadOwnTimeZone() { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userSessionSource.getUserSession().getUser().getId(), "user.timeZone"); if (user == null) throw new EntityAccessException(User.class, userSessionSource.getUserSession().getUser().getId()); tx.commit(); return new UserTimeZone(user.getTimeZone(), Boolean.TRUE.equals(user.getTimeZoneAuto())); } finally { tx.end(); } }
parent = em.find(Group.class, parent.getId()); // refresh parent in case of detached
@Override public String loadOwnLocale() { try (Transaction tx = persistence.createTransaction()) { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userSessionSource.getUserSession().getUser().getId(), "user.locale"); if (user == null) throw new EntityAccessException(User.class, userSessionSource.getUserSession().getUser().getId()); tx.commit(); return user.getLanguage(); } }
@Override public void changeUserPassword(UUID userId, String newPasswordHash) { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userId, CHANGE_PASSWORD_VIEW); if (user == null) { throw new EntityAccessException(User.class, userId); } user.setPassword(newPasswordHash); user.setChangePasswordAtNextLogon(false); // reset remember me for user Query query = em.createQuery("delete from sec$RememberMeToken rt where rt.user.id=:userId"); query.setParameter("userId", userId); query.executeUpdate(); tx.commit(); } finally { tx.end(); } }
@Nonnull @Override public UserSession substituteUser(User substitutedUser) { UserSession currentSession = userSessionSource.getUserSession(); try (Transaction tx = persistence.createTransaction()) { EntityManager em = persistence.getEntityManager(); User user; if (currentSession.getUser().equals(substitutedUser)) { user = em.find(User.class, substitutedUser.getId()); if (user == null) { throw new NoResultException("User not found"); } } else { user = loadSubstitutedUser(substitutedUser, currentSession, em); } UserSession session = userSessionManager.createSession(currentSession, user); withSecurityContext(new SecurityContext(serverSession), () -> publishUserSubstitutedEvent(currentSession, session) ); tx.commit(); userSessions.remove(currentSession); userSessionManager.clearPermissionsOnUser(session); userSessions.add(session); return session; } }