Example usage for org.hibernate.criterion Projections rowCount

List of usage examples for org.hibernate.criterion Projections rowCount

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections rowCount.

Prototype

public static Projection rowCount() 

Source Link

Document

The query row count, ie.

Usage

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;
}