List of usage examples for org.hibernate.criterion Projections rowCount
public static Projection rowCount()
From source file:au.edu.uts.eng.remotelabs.schedserver.permissions.pages.UserClassesPage.java
License:Open Source License
/** * Deletes a permission.//from w w w.j av a 2 s. com * * @param request * @return response * @throws JSONException */ public JSONObject deletePermission(HttpServletRequest request) throws JSONException { JSONObject obj = new JSONObject(); obj.put("success", false); ResourcePermissionDao dao = new ResourcePermissionDao(this.db); ResourcePermission perm = dao.get(Long.parseLong(request.getParameter("pid"))); if (perm == null) { this.logger.warn("Unable to delete resource permission with identifier '" + request.getParameter("pid") + "' because the permission was not found."); obj.put("reason", "Permission not found"); return obj; } int num = (Integer) this.db.createCriteria(Session.class).add(Restrictions.eq("active", Boolean.TRUE)) .add(Restrictions.eq("resourcePermission", perm)).setProjection(Projections.rowCount()) .uniqueResult(); if (num > 0) { this.logger.warn("Unable to delete resource permission '" + perm.getId() + "' because a session from this " + "permission is active."); obj.put("reason", "A session from this class is in progress."); return obj; } num = (Integer) this.db.createCriteria(Bookings.class).add(Restrictions.eq("active", Boolean.TRUE)) .add(Restrictions.eq("resourcePermission", perm)).setProjection(Projections.rowCount()) .uniqueResult(); if (num > 0) { this.logger.warn("Unable to delete permission '" + perm.getId() + "' because a booking from this " + "permission is active."); obj.put("reason", "Permission has active reservations."); return obj; } dao.delete(perm); this.logger.info("Resource permission '" + perm.getId() + "' has been deleted."); obj.put("success", true); return obj; }
From source file:au.edu.uts.eng.remotelabs.schedserver.rigmanagement.intf.RigManagement.java
License:Open Source License
@Override public PutRigOfflineResponse putRigOffline(PutRigOffline putRigOffline) { PutRigOfflineType param = putRigOffline.getPutRigOffline(); this.logger.debug("Received RigManagement#putRigOffline with params: requestor ID=" + param.getRequestorID() + "requestor namespace=" + param.getRequestorNameSpace() + ", requestor name" + param.getRequestorName() + ", rig name=" + param.getRig().getName() + ", offline start=" + param.getStart().getTime() + ", offline end=" + param.getEnd().getTime() + ", reason=" + param.getReason() + '.'); PutRigOfflineResponse response = new PutRigOfflineResponse(); OperationResponseType result = new OperationResponseType(); response.setPutRigOfflineResponse(result); RigDao dao = new RigDao(); try {/*from w w w . j a v a 2 s. c om*/ if (!this.isAuthorised(param, dao.getSession())) { this.logger.warn("Unable to put a rig offline because the user is not authorised to perform this " + "operation (not a ADMIN)."); result.setFailureCode(1); result.setFailureReason("Not authorised."); return response; } Rig rig = dao.findByName(param.getRig().getName()); if (rig == null) { this.logger.warn("Unable to put a rig offline because the rig with name " + param.getRig().getName() + " was not found."); result.setFailureCode(2); result.setFailureReason("Rig not found."); return response; } if (param.getStart().after(param.getEnd())) { this.logger .warn("Unable to put a rig offline because the offline start " + param.getStart().getTime() + " is after the offline end " + param.getEnd().getTime() + "."); result.setFailureCode(3); result.setFailureReason("Start after end."); return response; } Date startDate = param.getStart().getTime(); Date endDate = param.getEnd().getTime(); if ((Integer) dao.getSession().createCriteria(RigOfflineSchedule.class) .add(Restrictions.eq("active", Boolean.TRUE)).add(Restrictions.eq("rig", rig)) .add(Restrictions.disjunction() .add(Restrictions.and(Restrictions.gt("startTime", startDate), Restrictions.lt("endTime", endDate))) .add(Restrictions.and(Restrictions.lt("startTime", startDate), Restrictions.gt("endTime", endDate))) .add(Restrictions.and(Restrictions.lt("startTime", startDate), Restrictions.gt("endTime", endDate))) .add(Restrictions.and(Restrictions.lt("startTime", startDate), Restrictions.gt("endTime", endDate)))) .setProjection(Projections.rowCount()).uniqueResult() > 0) { this.logger.warn("Unable to put a rig offline because there is a concurrent rig offline period."); result.setFailureCode(4); result.setFailureReason("Concurrent offline period."); return response; } result.setSuccessful(true); RigOfflineSchedule offline = new RigOfflineSchedule(); offline.setActive(true); offline.setRig(rig); offline.setStartTime(startDate); offline.setEndTime(endDate); offline.setReason(param.getReason()); new RigOfflineScheduleDao(dao.getSession()).persist(offline); /* Notify the booking engine. */ BookingEngineService service = RigManagementActivator.getBookingService(); if (service != null) service.putRigOffline(offline, dao.getSession()); /* If the period is currently active, clear the rig maintenance state. */ Date now = new Date(); if (rig.isActive() && rig.isOnline() && offline.getStartTime().before(now) && offline.getEndTime().after(now)) { this.logger.info("Setting maintenance state on rig " + rig.getName() + '.'); if (this.notTest) new RigMaintenance().putMaintenance(rig, true, dao.getSession()); rig.setOnline(false); rig.setOfflineReason("In maintenance."); new RigLogDao(dao.getSession()).addOfflineLog(rig, "In maintenance."); dao.flush(); } } finally { dao.closeSession(); } return response; }
From source file:au.edu.uts.eng.remotelabs.schedserver.session.impl.SessionExpiryChecker.java
License:Open Source License
@SuppressWarnings("unchecked") @Override/*from w ww . j av a 2s. c o m*/ public void run() { org.hibernate.Session db = null; try { if ((db = DataAccessActivator.getNewSession()) == null) { this.logger.warn("Unable to obtain a database session, for rig session status checker. Ensure the " + "SchedulingServer-DataAccess bundle is installed and active."); return; } boolean kicked = false; Criteria query = db.createCriteria(Session.class); query.add(Restrictions.eq("active", Boolean.TRUE)).add(Restrictions.isNotNull("assignmentTime")); Date now = new Date(); List<Session> sessions = query.list(); for (Session ses : sessions) { ResourcePermission perm = ses.getResourcePermission(); int remaining = ses.getDuration() + // The session time (perm.getAllowedExtensions() - ses.getExtensions()) * perm.getExtensionDuration() - // Extension time Math.round((System.currentTimeMillis() - ses.getAssignmentTime().getTime()) / 1000); // In session time int extension = perm.getSessionDuration() - ses.getDuration() >= TIME_EXT ? TIME_EXT : perm.getExtensionDuration(); /****************************************************************** * For sessions that have been marked for termination, terminate * * those that have no more remaining time. * ******************************************************************/ if (ses.isInGrace()) { if (remaining <= 0) { ses.setActive(false); ses.setRemovalTime(now); db.beginTransaction(); db.flush(); db.getTransaction().commit(); this.logger.info("Terminating session for " + ses.getUserNamespace() + ':' + ses.getUserName() + " on " + ses.getAssignedRigName() + " because it is expired and the grace period has elapsed."); if (this.notTest) new RigReleaser().release(ses, db); } } /****************************************************************** * For sessions with remaining time less than the grace duration: * * 1) If the session has no remaining extensions, mark it for * * termination. * * 2) Else, if the session rig is queued, mark it for * * termination. * * 3) Else, extend the sessions time. * ******************************************************************/ else if (remaining < ses.getRig().getRigType().getLogoffGraceDuration()) { BookingEngineService service; /* Need to make a decision whether to extend time or set for termination. */ if (ses.getExtensions() <= 0 && ses.getDuration() >= perm.getSessionDuration()) { this.logger.info("Session for " + ses.getUserNamespace() + ':' + ses.getUserName() + " on " + "rig " + ses.getAssignedRigName() + " is expired and cannot be extended. Marking " + "session for expiry and giving a grace period."); ses.setInGrace(true); ses.setRemovalReason("No more session time extensions."); db.beginTransaction(); db.flush(); db.getTransaction().commit(); /* Notification warning. */ if (this.notTest) new RigNotifier().notify("Your session will expire in " + remaining + " seconds. " + "Please finish and exit.", ses, db); } else if ((Integer) db.createCriteria(Bookings.class) .add(Restrictions.eq("active", Boolean.TRUE)) .add(Restrictions.eq("user", ses.getUser())).add(Restrictions.ge("startTime", now)) .add(Restrictions.lt("startTime", new Date(System.currentTimeMillis() + extension * 1000))) .setProjection(Projections.rowCount()).uniqueResult() > 0) { this.logger.info("Session for " + ses.getUserNamespace() + ':' + ses.getUserName() + " on " + "rig" + ses.getAssignedRigName() + " is being terminated because the user has a " + "starting booking. Marking session for expiry and giving a grace period."); ses.setInGrace(true); ses.setRemovalReason("User has starting booking."); db.beginTransaction(); db.flush(); db.getTransaction().commit(); /* Notification warning. */ if (this.notTest) new RigNotifier().notify("Your session will expire in " + remaining + " seconds. " + "Please finish and exit. Please note, you have a reservation that starts after this" + " session so do not leave.", ses, db); } else if (QueueInfo.isQueued(ses.getRig(), db) || ((service = SessionActivator.getBookingService()) != null && !service.extendQueuedSession(ses.getRig(), ses, extension, db))) { this.logger.info( "Session for " + ses.getUserNamespace() + ':' + ses.getUserName() + " on " + "rig " + ses.getAssignedRigName() + " is expired and the rig is queued or booked. " + "Marking session for expiry and giving a grace period."); ses.setInGrace(true); ses.setRemovalReason("Rig is queued or booked."); db.beginTransaction(); db.flush(); db.getTransaction().commit(); /* Notification warning. */ if (this.notTest) new RigNotifier().notify("Your session will end in " + remaining + " seconds. " + "After this you be removed, so please logoff.", ses, db); } else { this.logger.info("Session for " + ses.getUserNamespace() + ':' + ses.getUserName() + " on " + "rig " + ses.getAssignedRigName() + " is expired and is having its session time " + "extended by " + extension + " seconds."); if (perm.getSessionDuration() - ses.getDuration() >= TIME_EXT) { ses.setDuration(ses.getDuration() + extension); } else { ses.setExtensions((short) (ses.getExtensions() - 1)); } db.beginTransaction(); db.flush(); db.getTransaction().commit(); } } /****************************************************************** * For sessions created with a user class that can be kicked off, * * if the rig is queued, the user is kicked off immediately. * ******************************************************************/ /* DODGY The 'kicked' flag is to only allow a single kick per * pass. This is allow time for the rig to be released and take the * queued session. This is a hack at best, but should be addressed * by a released - cleaning up meta state. */ else if (!kicked && QueueInfo.isQueued(ses.getRig(), db) && perm.getUserClass().isKickable()) { kicked = true; /* No grace is being given. */ this.logger .info("A kickable user is using a rig that is queued for, so they are being removed."); ses.setActive(false); ses.setRemovalTime(now); ses.setRemovalReason("Resource was queued and user was kickable."); db.beginTransaction(); db.flush(); db.getTransaction().commit(); if (this.notTest) new RigReleaser().release(ses, db); } /****************************************************************** * Finally, for sessions with time still remaining, check * * session activity timeout - if it is not ignored and is ready * * for use. * ******************************************************************/ else if (ses.isReady() && ses.getResourcePermission().isActivityDetected() && (System.currentTimeMillis() - ses.getActivityLastUpdated().getTime()) / 1000 > perm .getSessionActivityTimeout()) { /* Check activity. */ if (this.notTest) new SessionIdleKicker().kickIfIdle(ses, db); } } } catch (HibernateException hex) { this.logger.error("Failed to query database to expired sessions (Exception: " + hex.getClass().getName() + ", Message:" + hex.getMessage() + ")."); if (db != null && db.getTransaction() != null) { try { db.getTransaction().rollback(); } catch (HibernateException ex) { this.logger.error("Exception rolling back session expiry transaction (Exception: " + ex.getClass().getName() + "," + " Message: " + ex.getMessage() + ")."); } } } catch (Throwable thr) { this.logger.error("Caught unchecked exception in session expirty checker. Exception: " + thr.getClass() + ", message: " + thr.getMessage() + '.'); } finally { try { if (db != null) db.close(); } catch (HibernateException ex) { this.logger.error("Exception cleaning up database session (Exception: " + ex.getClass().getName() + "," + " Message: " + ex.getMessage() + ")."); } } }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkModuleCount(ArkModule arkModuleCriteria) { Criteria criteria = buildArkModuleCriteria(arkModuleCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkFunctionCount(ArkFunction arkFunctionCriteria) { Criteria criteria = buildArkFunctionCriteria(arkFunctionCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkRoleModuleFunctionVOCount(ArkRoleModuleFunctionVO arkRoleModuleFunctionVoCriteria) { Criteria criteria = buildArkRoleModuleFunctionVoCriteria(arkRoleModuleFunctionVoCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkModuleFunctionCount(ArkModuleFunction arkModuleFunctionCriteria) { Criteria criteria = buildArkModuleFunctionCriteria(arkModuleFunctionCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkRoleCount(ArkRole arkRoleCriteria) { Criteria criteria = buildArkRoleCriteria(arkRoleCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.admin.model.dao.AdminDao.java
License:Open Source License
public long getArkModuleRoleCount(ArkModuleRole arkModuleRoleCriteria) { Criteria criteria = buildArkModuleRoleCriteria(arkModuleRoleCriteria); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); return totalCount; }
From source file:au.org.theark.core.dao.ArkAuthorisationDao.java
License:Open Source License
public Boolean isArkUserLinkedToStudies(ArkUser arkUser) { Boolean flag = false;/*ww w . j av a 2s . com*/ Criteria criteria = getSession().createCriteria(ArkUserRole.class); criteria.add(Restrictions.eq("arkUser", arkUser)); criteria.setProjection(Projections.rowCount()); Long totalCount = (Long) criteria.uniqueResult(); if (totalCount > 0) { flag = true; } return flag; }