List of usage examples for org.hibernate.criterion Restrictions eq
public static SimpleExpression eq(String propertyName, Object value)
From source file:au.edu.uts.eng.remotelabs.schedserver.bookings.pojo.impl.BookingsServiceImpl.java
License:Open Source License
@Override public BookingOperation createBooking(Calendar start, Calendar end, User user, ResourcePermission perm, Session db) {//from w w w . j av a 2 s . c om BookingOperation response = new BookingOperation(); response.setSuccess(false); /* ---------------------------------------------------------------- * -- Check permission constraints. -- * ---------------------------------------------------------------- */ Date startDate = start.getTime(); Date endDate = end.getTime(); if (!perm.getUserClass().isBookable()) { this.logger.info( "Unable to create a booking because the permission " + perm.getId() + " is not bookable."); response.setFailureReason("Permission not bookable."); return response; } if (startDate.before(perm.getStartTime()) || endDate.after(perm.getExpiryTime())) { this.logger.info("Unable to create a booking because the booking time is outside the permission time. " + "Permission start: " + perm.getStartTime() + ", expiry: " + perm.getExpiryTime() + ", booking start: " + startDate + ", booking end: " + endDate + '.'); response.setFailureReason("Booking time out of permission range."); return response; } /* Time horizon is a moving offset when bookings can be made. */ Calendar horizon = Calendar.getInstance(); horizon.add(Calendar.SECOND, perm.getUserClass().getTimeHorizon()); if (horizon.after(start)) { this.logger.info("Unable to create a booking because the booking start time (" + startDate + ") is before the time horizon (" + horizon.getTime() + ")."); response.setFailureReason("Before time horizon."); return response; } /* Maximum concurrent bookings. */ int numBookings = (Integer) db.createCriteria(Bookings.class).add(Restrictions.eq("active", Boolean.TRUE)) .add(Restrictions.eq("user", user)).add(Restrictions.eq("resourcePermission", perm)) .setProjection(Projections.rowCount()).uniqueResult(); if (numBookings >= perm.getMaximumBookings()) { this.logger.info("Unable to create a booking because the user " + user.getNamespace() + ':' + user.getName() + " already has the maxiumum numnber of bookings (" + numBookings + ")."); response.setFailureReason("User has maximum number of bookings."); return response; } /* User bookings at the same time. */ numBookings = (Integer) db.createCriteria(Bookings.class).setProjection(Projections.rowCount()) .add(Restrictions.eq("active", Boolean.TRUE)).add(Restrictions.eq("user", user)) .add(Restrictions.disjunction() .add(Restrictions.and(Restrictions.gt("startTime", startDate), Restrictions.lt("startTime", endDate))) .add(Restrictions.and(Restrictions.gt("endTime", startDate), Restrictions.le("endTime", endDate))) .add(Restrictions.and(Restrictions.le("startTime", startDate), Restrictions.gt("endTime", endDate)))) .uniqueResult(); if (numBookings > 0) { this.logger.info("Unable to create a booking because the user " + user.getNamespace() + ':' + user.getName() + " has concurrent bookings."); response.setFailureReason("User has concurrent bookings."); return response; } /* ---------------------------------------------------------------- * -- Create booking. -- * ---------------------------------------------------------------- */ if (ResourcePermission.CONSUMER_PERMISSION.equals(perm.getType())) { CreateBookingRequest request = new CreateBookingRequest(); if (request.createBooking(user, perm.getRemotePermission(), start, end, db)) { response.setSuccess(request.wasSuccessful()); response.setFailureReason(request.getReason()); if (request.wasSuccessful()) { /* Provider created booking so we now need to create it * locally. */ this.logger.debug("Successfullly created booking at provider with identifier " + request.getBookingID() + '.'); Bookings bk = new Bookings(); bk.setActive(true); bk.setStartTime(startDate); bk.setEndTime(endDate); bk.setDuration((int) (end.getTimeInMillis() - start.getTimeInMillis()) / 1000); bk.setResourcePermission(perm); bk.setResourceType(ResourcePermission.CONSUMER_PERMISSION); bk.setProviderId(request.getBookingID()); bk.setUser(user); bk.setUserNamespace(user.getNamespace()); bk.setUserName(user.getName()); response.setBooking(new BookingsDao(db).persist(bk)); /* Notification emails are only sent to home users. */ new BookingNotification(bk).notifyCreation(); } else { this.logger.info("Provider failed to create booking with reason " + request.getReason()); /* Provider returned that it couldn't create booking. */ for (BookingTime bt : request.getBestFits()) { response.addBestFit(bt.getStart(), bt.getEnd()); } } } else { /* Provider call failed. */ this.logger .info("Provider call to create booking failed with reason " + request.getFailureReason()); response.setSuccess(false); response.setFailureReason("Provider request failed (" + request.getFailureReason() + ")"); } } else { BookingCreation bc = this.engine.createBooking(user, perm, new TimePeriod(start, end), db); if (bc.wasCreated()) { response.setSuccess(true); response.setBooking(bc.getBooking()); /* Notification emails are only sent to home users. */ if (perm.getRemotePermission() == null) new BookingNotification(bc.getBooking()).notifyCreation(); } else { response.setSuccess(false); response.setFailureReason("Resource not free."); for (TimePeriod tp : bc.getBestFits()) { numBookings = (Integer) db.createCriteria(Bookings.class).setProjection(Projections.rowCount()) .add(Restrictions.eq("active", Boolean.TRUE)).add(Restrictions.eq("user", user)) .add(Restrictions.disjunction() .add(Restrictions.and(Restrictions.gt("startTime", tp.getStartTime().getTime()), Restrictions.lt("startTime", tp.getEndTime().getTime()))) .add(Restrictions.and(Restrictions.gt("endTime", tp.getStartTime().getTime()), Restrictions.le("endTime", tp.getEndTime().getTime()))) .add(Restrictions.and(Restrictions.le("startTime", tp.getStartTime().getTime()), Restrictions.gt("endTime", tp.getEndTime().getTime())))) .uniqueResult(); if (numBookings > 0) { this.logger.debug("Excluding best fit option for user " + user.qName() + " because it is " + "concurrent with an existing."); continue; } response.addBestFit(tp.getStartTime(), tp.getEndTime()); } } } return response; }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.AcademicPermissionDao.java
License:Open Source License
/** * Gets all the academic permissions for the specified user. * /*w w w . j a v a2 s. c o m*/ * @param user user to find permissions for * @return list of academic permissions */ @SuppressWarnings("unchecked") public List<AcademicPermission> getByUser(User user) { Criteria cri = this.session.createCriteria(AcademicPermission.class); cri.add(Restrictions.eq("user", user)); return cri.list(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.AcademicPermissionDao.java
License:Open Source License
/** * Gets all the academic permissions for the specified user class. * /* w w w . j a v a 2 s .c o m*/ * @param uClass user class to find permissions for * @return list of academic permissions */ @SuppressWarnings("unchecked") public List<AcademicPermission> getByUserClass(UserClass uClass) { Criteria cri = this.session.createCriteria(AcademicPermission.class); cri.add(Restrictions.eq("userClass", uClass)); return cri.list(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.AcademicPermissionDao.java
License:Open Source License
/** * Gets the academic permission for the specified user and user class. If it is * not found <code>null</code>. If more than one permission is found, the first * is used.//from ww w . j a va 2 s. c o m * * @param user user constraint * @param uClass user class constraint * @return permission or <code>null</code> */ @SuppressWarnings("unchecked") public AcademicPermission getForUserAndUserClass(User user, UserClass uClass) { Criteria cri = this.session.createCriteria(AcademicPermission.class); cri.add(Restrictions.eq("user", user)).add(Restrictions.eq("userClass", uClass)); List<AcademicPermission> perms = cri.list(); if (perms.size() == 0) { return null; } else if (perms.size() > 1) { this.logger.warn("Found more than one academic permission for the user " + user.getName() + " and " + "user class " + uClass.getName() + ". Using the first found permission."); } return perms.get(0); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.ConfigDao.java
License:Open Source License
/** * Returns the configuration values with the specified configuration key. * //from ww w.java 2 s . c o m * @param key configuration key * @return list of matching configuration values */ @SuppressWarnings("unchecked") public List<Config> getConfig(String key) { Criteria crit = this.session.createCriteria(this.clazz); crit.add(Restrictions.eq("key", key)); return crit.list(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.ProjectDao.java
License:Open Source License
/** * Gets the latest created project that is related to the specified * session. // w ww . ja va 2 s.c o m * * @param session session to find the session from * @param autogenerate whether the project is set to auto generate * @return project or null if no project exists */ public Project getLatestProject(Session session, boolean autogenerate) { return (Project) this.session.createCriteria(Project.class).add(Restrictions.eq("user", session.getUser())) // User constraint .add(Restrictions.eq("userClass", session.getResourcePermission().getUserClass())) // User class constraint .add(Restrictions.eq("autoPublishCollections", autogenerate)).addOrder(Order.desc("creationTime")) .setMaxResults(1).uniqueResult(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.RemotePermissionDao.java
License:Open Source License
/** * Finds the remote permission with the specified GUID. * //from www .j a va 2 s . co m * @param guid guid to find remote perission with * @return remote permission or <tt>null</tt> if not found */ public RemotePermission findByGuid(String guid) { return (RemotePermission) this.session.createCriteria(RemotePermission.class) .add(Restrictions.eq("guid", guid)).uniqueResult(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.RemoteSiteDao.java
License:Open Source License
public RemoteSite findSite(String guid) { return (RemoteSite) this.session.createCriteria(RemoteSite.class).add(Restrictions.eq("guid", guid)) .uniqueResult();// w w w . j av a2 s .c o m }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.RequestablePermissionPeriodDao.java
License:Open Source License
/** * Gets the list of active requestable periods. * /*from w ww . j av a2s . c om*/ * @return list of requestable periods */ @SuppressWarnings("unchecked") public List<RequestablePermissionPeriod> getActivePeriods() { return this.session.createCriteria(RequestablePermissionPeriod.class) .add(Restrictions.eq("active", Boolean.TRUE)).add(Restrictions.gt("end", new Date())) .addOrder(Order.desc("type")).addOrder(Order.desc("rigType")).addOrder(Order.desc("rig")) .addOrder(Order.desc("requestCapabilities")).addOrder(Order.asc("start")).list(); }
From source file:au.edu.uts.eng.remotelabs.schedserver.dataaccess.dao.RequestCapabilitiesDao.java
License:Open Source License
/** * Find the request capabilities entity which match the specified capabilities. * <code>null</code> is returned if none is found. * // w ww .j a va2 s .c om * @param capabilities capabilities to find * @return capabilities or null */ public RequestCapabilities findCapabilites(String capabilities) { Criteria cri = this.session.createCriteria(RequestCapabilities.class); cri.add(Restrictions.eq("capabilities", new Capabilities(capabilities).asCapabilitiesString())); return (RequestCapabilities) cri.uniqueResult(); }