Example usage for org.hibernate Session delete

List of usage examples for org.hibernate Session delete

Introduction

In this page you can find the example usage for org.hibernate Session delete.

Prototype

void delete(Object object);

Source Link

Document

Remove a persistent instance from the datastore.

Usage

From source file:au.com.nicta.ct.solution.tracking.CtTrackingModel.java

License:Open Source License

protected void deleteTrackReferences(Session s, CtTracks t) {

    if (!valid())
        return;//from   w w  w.  ja  v a 2 s.co  m

    _s.getCtTrackses().remove(t);
    removeTracksSequencedDetections(t); //why not?
    s.delete(t);
    _tracksStates.remove(t);
}

From source file:au.com.nicta.ct.solution.tracking.jipda.CtTkDBTracker.java

License:Open Source License

static void dropAllExistingTracks(Session session) {
    // Clear the current solution of all tracks
    String hql = "SELECT ctTracksDetections" + " FROM CtTracksDetections as ctTracksDetections"
            + " JOIN ctTracksDetections.ctTracks ctTracks" + " WHERE ctTracks.ctSolutions = :solutionPk";

    Query q = session.createQuery(hql);
    q.setInteger("solutionPk", CtSolutionController.getSolutions().getPkSolution());
    List<CtTracksDetections> results = q.list();

    for (CtTracksDetections td : results) {
        session.delete(td);
    }/*from w  ww  .j a  va2  s . c om*/

    hql = "SELECT ctTracks" + " FROM CtTracks as ctTracks" + " WHERE ctTracks.ctSolutions = :solutionPk";

    q = session.createQuery(hql);
    q.setInteger("solutionPk", CtSolutionController.getSolutions().getPkSolution());
    List<CtTracks> results2 = q.list();

    for (CtTracks t : results2) {
        session.delete(t);
    }

}

From source file:au.com.nicta.ct.solution.tracking.jipda.CtTkDBTracker.java

License:Open Source License

static void dropExistingTracks(Session session, TkTracks tracks, int startTimeIdxInclusive,
        int endTimeIdxInclusive) {

    CtSolutions solution = (CtSolutions) CtObjectDirectory.get("solution");

    // Drop all existing track detection associations
    int trackCnt = 0;
    for (TkTrack t : tracks) {
        ++trackCnt;//from  ww  w . java2  s. co  m

        for (TkTrackElement e : t.elements) {
            TkDetection d = e.det;
            if (d == null) {
                continue;
            }

            System.out.println("d.timeIdx: " + (d.timeIdx));
            System.out.println("trackCnt: " + (trackCnt));
            System.out.println("total no. tracks: " + (trackCnt));
            if (d.timeIdx == startTimeIdxInclusive || d.timeIdx == endTimeIdxInclusive) {
                continue;
            }

            Integer detectionPk = d.find(DETECTION_PK);

            String hql = "SELECT ctTracksDetections" + " FROM CtTracksDetections as ctTracksDetections"
                    + " JOIN ctTracksDetections.ctDetections ctDetections"
                    + " WHERE ctDetections.pkDetection = :detectionPk";

            Query q = session.createQuery(hql);
            q.setInteger("detectionPk", detectionPk);
            List<CtTracksDetections> results = q.list();

            HashSet<CtTracks> modified = new HashSet<CtTracks>();

            for (CtTracksDetections td : results) {
                CtTracks t_n = td.getCtTracks();
                CtDetections d_n = td.getCtDetections();
                CtSolutions s = t_n.getCtSolutions();

                if (s.getPkSolution() == solution.getPkSolution()) {
                    //                    if( td.getCtTracks().getCtSolutions().getPkSolution() == solution.getPkSolution() ) {
                    t_n.getCtTracksDetectionses().remove(td);
                    d_n.getCtTracksDetectionses().remove(td);
                    session.delete(td);
                    modified.add(t_n);
                }
            }

            // now clean up tracks that have no surviving detections:
            for (CtTracks t_n : modified) {
                Set<CtTracksDetections> tds = t_n.getCtTracksDetectionses();

                if (tds.isEmpty()) {
                    CtSolutions s = t_n.getCtSolutions();
                    s.getCtTrackses().remove(t_n);
                    session.delete(t);
                    session.update(s);
                }
            }

            //                String hql =
            //                      "DELETE from CtTracksDetections as ctTracksDetections"
            //                    + " WHERE fk_detection = " + detectionPk;
            //                System.out.println("hql: " + (hql) );
            //
            //                Query query = session.createQuery(hql);
            //                int row = query.executeUpdate();
            //                System.out.println("Rows deleted: " + row);
        }
    }
}

From source file:au.com.nicta.ct.solution.tracking.jipda.CtTkDBTracker.java

License:Open Source License

static void removeEmptyTracks(Session session) {
    CtSolutions solution = (CtSolutions) CtObjectDirectory.get("solution");
    String hql = "SELECT ctTracks" + " FROM CtTracks as ctTracks" + " JOIN ctTracks.ctSolutions as ctSolutions"
            + " WHERE ctSolutions.pkSolution = :solutionPk";

    Query q = session.createQuery(hql);
    q.setInteger("solutionPk", solution.getPkSolution());
    List<CtTracks> results = q.list();

    for (CtTracks t : results) {
        Set<CtTracksDetections> s = t.getCtTracksDetectionses();
        //            System.out.println("t.getPkTrack(): " + (t.getPkTrack()) );
        //            System.out.println("t.getCtTracksDetectionses().size(): " + (t.getCtTracksDetectionses().size()) );
        //            System.out.println("s.isEmpty(): " + (s.isEmpty()) );;

        if (s.isEmpty()) {
            // empty track, delete it
            solution.getCtTrackses().remove(t);
            session.update(solution);//  w  w w. j a va  2 s .  co m
            session.delete(t);
        }
    }
}

From source file:au.edu.anu.metadatastores.harvester.HarvestContentService.java

License:Open Source License

/**
 * Delete the harvest content row/*from  www  .jav  a 2 s .  c  om*/
 * 
 * @param content The harvest content row to delete
 */
public void deleteHarvestContent(HarvestContent content) {
    Session session = HarvesterHibernateUtil.getSessionFactory().openSession();
    try {
        session.beginTransaction();

        session.delete(content);

        session.getTransaction().commit();
    } finally {
        session.close();
    }
}

From source file:au.edu.anu.metadatastores.store.datacommons.DataCommonsService.java

License:Open Source License

/**
 * Set the relationships// w  w  w.  j  ava  2  s .  co m
 * 
 * @param item The dublin core item to set the relation for
 * @param dublinCore the dublin core to set relations for
 * @param session The hibernate session
 */
protected void setRelations(DublinCoreItem item, DublinCore dublinCore, Session session) {
    Iterator<ItemRelation> it = item.getItemRelationsForIid().iterator();

    List<ItemRelation> itemRelations = new ArrayList<ItemRelation>();

    List<RelationPart> relationParts = getRelationPartsList(dublinCore);
    setIdentifierRelations(item, relationParts, itemRelations, session);
    setNLAIdentifierRelations(item, relationParts, itemRelations, session);
    setARCIdentifierRelations(item, relationParts, itemRelations, session);
    setNHMRCIdentifierRelations(item, relationParts, itemRelations, session);

    boolean hasValue = false;
    while (it.hasNext()) {
        ItemRelation relation = it.next();

        for (ItemRelation itemRelation : itemRelations) {
            if (relation.getId().equals(itemRelation.getId())) {
                if (Boolean.TRUE.equals(relation.getUserUpdated())) {
                    itemRelation.setUserUpdated(Boolean.TRUE);
                }
                hasValue = true;
            }
        }
        if (!hasValue && Boolean.TRUE.equals(relation.getUserUpdated())) {
            itemRelations.add(relation);
        } else if (!hasValue) {
            it.remove();
            session.delete(relation);
        }

        hasValue = false;
    }
    item.setItemRelationsForIid(new HashSet<ItemRelation>(itemRelations));
}

From source file:au.edu.anu.metadatastores.store.misc.AbstractItemService.java

License:Open Source License

/**
 * Update the item with the new values if they have changed
 * //from   w  w  w.  java2s. c o  m
 * @param oldItem The currently saved item
 * @param newItem The item with the updated information
 * @param session The current session
 * @param lastModified The last modified date
 */
protected void updateAttributesFromItem(Item oldItem, Item newItem, Session session, Date lastModified) {
    List<ItemAttribute> newAttrs = new ArrayList<ItemAttribute>();
    List<ItemAttribute> removeAttrs = new ArrayList<ItemAttribute>();

    if (newItem.getTitle() != null) {
        oldItem.setTitle(newItem.getTitle());
    }

    Map<String, List<ItemAttribute>> oldItemMap = getAttributeMap(oldItem.getItemAttributes());
    Map<String, List<ItemAttribute>> newItemMap = getAttributeMap(newItem.getItemAttributes());

    List<ItemAttribute> foundNewList;

    Set<String> oldKeySet = oldItemMap.keySet();
    Set<String> newKeySet = newItemMap.keySet();

    for (String key : oldKeySet) {
        List<ItemAttribute> oldValues = oldItemMap.get(key);
        List<ItemAttribute> newValues = newItemMap.get(key);
        foundNewList = new ArrayList<ItemAttribute>();
        boolean foundNewAttr = false;
        if (newValues != null) {
            for (ItemAttribute oldAttr : oldValues) {
                for (ItemAttribute newAttr : newValues) {
                    if (oldAttr.getAttrValue().equals(newAttr.getAttrValue())) {
                        foundNewAttr = true;
                        foundNewList.add(newAttr);
                        checkSubAttributes(oldItem, oldAttr, newAttr, removeAttrs);
                        break;
                    }
                }
                if (!foundNewAttr) {
                    if (oldValues.size() == 1 && newValues.size() == 1) {
                        ItemAttribute newAttr = newValues.get(0);
                        foundNewList.add(newAttr);
                        addAttributeHistory(oldItem, oldAttr, lastModified);

                        oldAttr.setAttrValue(newAttr.getAttrValue());
                        oldAttr.setLastModified(newAttr.getLastModified());
                        oldAttr.setUserUpdated(newAttr.getUserUpdated());
                    } else {
                        if (oldAttr.getItemAttribute() == null) {
                            removeAttrs.add(oldAttr);
                        }
                    }
                }
                foundNewAttr = false;
            }
            newValues.removeAll(foundNewList);
            if (newValues.size() > 0) {
                newAttrs.addAll(newValues);
            }

        } else {
            for (ItemAttribute attr : oldValues) {
                if (attr.getItemAttribute() == null) {
                    removeAttrs.add(attr);
                }
            }
        }
    }

    newKeySet.removeAll(oldKeySet);
    for (String key : newKeySet) {
        newAttrs.addAll(newItemMap.get(key));
    }

    for (ItemAttribute attr : removeAttrs) {
        //TODO figure out when to know that user updated fields should be deleted.  User updated information should be able to be dleted...
        LOGGER.info("Remove: {}, {}", attr.getAttrType(), attr.getAttrValue());
        if (!Boolean.TRUE.equals(attr.getUserUpdated())) {
            LOGGER.info("Removing Value");
            addAttributeHistory(oldItem, attr, lastModified);
            if (attr.getItemAttributes() != null && attr.getItemAttributes().size() > 0) {
                for (ItemAttribute subAttr : attr.getItemAttributes()) {
                    oldItem.getItemAttributes().remove(subAttr);
                    session.delete(subAttr);
                }
            }
            oldItem.getItemAttributes().remove(attr);
            session.delete(attr);
        }
    }

    oldItem.getItemAttributes().addAll(getNewAttributes(oldItem, null, newAttrs));
}

From source file:au.edu.anu.metadatastores.store.misc.RelationService.java

License:Open Source License

/**
 * Updates the relation with a confirmation or denial of the relationship
 * /*from  w w w . j  av a  2 s  .c  om*/
 * @param relation The relation to confirm or deny
 * @param isRelation Whether the relation is one or not
 */
public void confirmOrDenyRelation(Relation relation, Boolean isRelation) {
    Session session = StoreHibernateUtil.getSessionFactory().openSession();
    try {
        session.beginTransaction();

        PotentialRelationId id = new PotentialRelationId(relation.getIid(), relation.getRelationValue(),
                relation.getRelatedIid());

        PotentialRelation potentialRelation = (PotentialRelation) session.get(PotentialRelation.class, id);

        if (potentialRelation == null) {
            potentialRelation = new PotentialRelation();
            potentialRelation.setId(id);
        }

        potentialRelation.setRequireCheck(Boolean.FALSE);
        potentialRelation.setIslink(isRelation);

        session.merge(potentialRelation);

        ItemRelationId itemRelationId = new ItemRelationId(id.getIid(), id.getRelationValue(),
                id.getRelatedIid());

        ItemRelation itemRelation = (ItemRelation) session.get(ItemRelation.class, itemRelationId);

        if (isRelation == Boolean.TRUE) {
            if (itemRelation == null) {
                itemRelation = new ItemRelation();
                itemRelation.setId(itemRelationId);
                itemRelation.setUserUpdated(Boolean.TRUE);
                session.save(itemRelation);
            } else {
                itemRelation.setUserUpdated(Boolean.TRUE);
                session.merge(itemRelation);
            }
        } else {
            if (itemRelation != null) {
                session.delete(itemRelation);
            }
        }

        session.getTransaction().commit();
    } finally {
        session.close();
    }
}

From source file:au.edu.uts.eng.remotelabs.schedserver.bookings.impl.slotsengine.tests.DayBookingsTester.java

License:Open Source License

public void testFindBestFitsC1() throws Exception {
    Session ses = DataAccessActivator.getNewSession();
    ses.beginTransaction();//from w w w . ja va  2 s .c o  m
    UserClass uclass1 = new UserClass();
    uclass1.setName("booktestclass");
    uclass1.setActive(true);
    uclass1.setQueuable(false);
    uclass1.setBookable(true);
    uclass1.setTimeHorizon(1000);
    ses.save(uclass1);
    User us1 = new User();
    us1.setName("bktestuser1");
    us1.setNamespace("BKNS");
    us1.setPersona("USER");
    ses.save(us1);
    RigType rigType1 = new RigType("booktestrigtype", 300, false);
    ses.save(rigType1);
    RigType rigType2 = new RigType("booktestrigtype2", 300, false);
    ses.save(rigType2);
    RigCapabilities caps1 = new RigCapabilities("book,test,foo");
    ses.save(caps1);
    RigCapabilities caps2 = new RigCapabilities("book,test,bar");
    ses.save(caps2);
    RigCapabilities caps3 = new RigCapabilities("book,baz,foo");
    ses.save(caps3);
    RequestCapabilities rcaps1 = new RequestCapabilities("book");
    ses.save(rcaps1);
    RequestCapabilities rcaps2 = new RequestCapabilities("foo");
    ses.save(rcaps2);
    RequestCapabilities rcaps3 = new RequestCapabilities("bar");
    ses.save(rcaps3);
    Rig r1 = new Rig();
    r1.setName("bkrig1");
    r1.setRigType(rigType1);
    r1.setLastUpdateTimestamp(new Date());
    r1.setRigCapabilities(caps1);
    ses.save(r1);
    Rig r2 = new Rig();
    r2.setName("bkrig2");
    r2.setRigType(rigType1);
    r2.setLastUpdateTimestamp(new Date());
    r2.setRigCapabilities(caps2);
    ses.save(r2);
    Rig r3 = new Rig();
    r3.setName("bkrig3");
    r3.setRigType(rigType2);
    r3.setLastUpdateTimestamp(new Date());
    r3.setRigCapabilities(caps3);
    ses.save(r3);
    ResourcePermission perm1 = new ResourcePermission();
    perm1.setUserClass(uclass1);
    perm1.setType("RIG");
    perm1.setSessionDuration(3600);
    perm1.setQueueActivityTimeout(300);
    perm1.setAllowedExtensions((short) 10);
    perm1.setSessionActivityTimeout(300);
    perm1.setExtensionDuration(300);
    perm1.setMaximumBookings(10);
    perm1.setRig(r1);
    perm1.setStartTime(new Date());
    perm1.setExpiryTime(new Date());
    perm1.setDisplayName("bookperm");
    ses.save(perm1);

    /* #### BOOKINGS FOR R1 ########################################### */
    Calendar r1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk1 = new Bookings();
    bk1.setActive(true);
    bk1.setDuration(3600);
    /* Slots 2 - 5. */
    r1tm.add(Calendar.MINUTE, 30);
    bk1.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.HOUR, 1);
    bk1.setEndTime(r1tm.getTime());
    bk1.setResourcePermission(perm1);
    bk1.setResourceType("RIG");
    bk1.setRig(r1);
    bk1.setUser(us1);
    bk1.setUserName(us1.getName());
    bk1.setUserNamespace(us1.getNamespace());
    ses.save(bk1);
    Bookings bk2 = new Bookings();
    bk2.setActive(true);
    bk2.setCancelReason("Test cancel.");
    bk2.setDuration(1800);
    /* Slots 8 - 9. */
    r1tm.add(Calendar.MINUTE, 30);
    bk2.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.MINUTE, 30);
    bk2.setEndTime(r1tm.getTime());
    bk2.setResourcePermission(perm1);
    bk2.setResourceType("RIG");
    bk2.setRig(r1);
    bk2.setUser(us1);
    bk2.setUserName(us1.getName());
    bk2.setUserNamespace(us1.getNamespace());
    ses.save(bk2);
    Bookings bk3 = new Bookings();
    bk3.setActive(true);
    bk3.setDuration(7200);
    /* Slots 36 - 43. */
    r1tm.add(Calendar.MINUTE, 30);
    r1tm.add(Calendar.HOUR, 6);
    bk3.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.HOUR, 2);
    bk3.setEndTime(r1tm.getTime());
    bk3.setResourcePermission(perm1);
    bk3.setResourceType("RIG");
    bk3.setRig(r1);
    bk3.setUser(us1);
    bk3.setUserName(us1.getName());
    bk3.setUserNamespace(us1.getNamespace());
    ses.save(bk3);

    /* #### BOOKINGS FOR R2 ########################################### */
    Calendar r2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk8 = new Bookings();
    bk8.setActive(true);
    bk8.setDuration(3600);
    /* Slots 13 - 16. */
    r2tm.add(Calendar.HOUR, 3);
    bk8.setStartTime(r2tm.getTime());
    r2tm.add(Calendar.HOUR, 1);
    bk8.setEndTime(r2tm.getTime());
    bk8.setResourcePermission(perm1);
    bk8.setResourceType("RIG");
    bk8.setRig(r2);
    bk8.setUser(us1);
    bk8.setUserName(us1.getName());
    bk8.setUserNamespace(us1.getNamespace());
    ses.save(bk8);

    Bookings bk9 = new Bookings();
    bk9.setActive(true);
    bk9.setDuration(1800);
    /* Slots 36 - 37. */
    r2tm.add(Calendar.HOUR, 5);
    bk9.setStartTime(r2tm.getTime());
    r2tm.add(Calendar.MINUTE, 30);
    bk9.setEndTime(r2tm.getTime());
    bk9.setResourcePermission(perm1);
    bk9.setResourceType("RIG");
    bk9.setRig(r2);
    bk9.setUser(us1);
    bk9.setUserName(us1.getName());
    bk9.setUserNamespace(us1.getNamespace());
    ses.save(bk9);

    /* #### BOOKINGS FOR R3 ########################################### */
    Calendar r3tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk10 = new Bookings();
    bk10.setActive(true);
    bk10.setDuration(1800);
    /* Slots 2 - 3. */
    r3tm.add(Calendar.MINUTE, 30);
    bk10.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.MINUTE, 30);
    bk10.setEndTime(r3tm.getTime());
    bk10.setResourcePermission(perm1);
    bk10.setResourceType("RIG");
    bk10.setRig(r3);
    bk10.setUser(us1);
    bk10.setUserName(us1.getName());
    bk10.setUserNamespace(us1.getNamespace());
    ses.save(bk10);

    Bookings bk11 = new Bookings();
    bk11.setActive(true);
    bk11.setDuration(3600);
    /* Slots 12 - 15. */
    r3tm.add(Calendar.HOUR, 2);
    bk11.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.HOUR, 1);
    bk11.setEndTime(r3tm.getTime());
    bk11.setResourcePermission(perm1);
    bk11.setResourceType("RIG");
    bk11.setRig(r3);
    bk11.setUser(us1);
    bk11.setUserName(us1.getName());
    bk11.setUserNamespace(us1.getNamespace());
    ses.save(bk11);

    Bookings bk12 = new Bookings();
    bk12.setActive(true);
    bk12.setDuration(3600);
    /* Slots 24 - 27. */
    r3tm.add(Calendar.HOUR, 2);
    bk12.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.HOUR, 1);
    bk12.setEndTime(r3tm.getTime());
    bk12.setResourcePermission(perm1);
    bk12.setResourceType("RIG");
    bk12.setRig(r3);
    bk12.setUser(us1);
    bk12.setUserName(us1.getName());
    bk12.setUserNamespace(us1.getNamespace());
    ses.save(bk12);

    /* #### Type bookings for RigType1 ####################################*/
    Calendar rt1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk4 = new Bookings();
    bk4.setActive(true);
    bk4.setDuration(1800);
    /* Slots 0 - 1. */
    bk4.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.MINUTE, 30);
    bk4.setEndTime(rt1tm.getTime());
    bk4.setResourcePermission(perm1);
    bk4.setResourceType("TYPE");
    bk4.setRigType(rigType1);
    bk4.setUser(us1);
    bk4.setUserName(us1.getName());
    bk4.setUserNamespace(us1.getNamespace());
    ses.save(bk4);

    Bookings bk13 = new Bookings();
    bk13.setActive(true);
    bk13.setDuration(7200);
    /* Slots 0 - 7. */
    rt1tm.add(Calendar.MINUTE, -30);
    bk13.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 2);
    bk13.setEndTime(rt1tm.getTime());
    bk13.setResourcePermission(perm1);
    bk13.setResourceType("TYPE");
    bk13.setRigType(rigType1);
    bk13.setUser(us1);
    bk13.setUserName(us1.getName());
    bk13.setUserNamespace(us1.getNamespace());
    ses.save(bk13);

    Bookings bk5 = new Bookings();
    bk5.setActive(true);
    bk5.setDuration(3600);
    /* Slots 20 - 23. */
    rt1tm.add(Calendar.HOUR, 3);
    bk5.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    bk5.setEndTime(rt1tm.getTime());
    bk5.setResourcePermission(perm1);
    bk5.setResourceType("TYPE");
    bk5.setRigType(rigType1);
    bk5.setUser(us1);
    bk5.setUserName(us1.getName());
    bk5.setUserNamespace(us1.getNamespace());
    ses.save(bk5);

    Bookings bk14 = new Bookings();
    bk14.setActive(true);
    bk14.setDuration(3600);
    /* Slots 24 - 27. */
    bk14.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    bk14.setEndTime(rt1tm.getTime());
    bk14.setResourcePermission(perm1);
    bk14.setResourceType("TYPE");
    bk14.setRigType(rigType1);
    bk14.setUser(us1);
    bk14.setUserName(us1.getName());
    bk14.setUserNamespace(us1.getNamespace());
    ses.save(bk14);

    Bookings bk15 = new Bookings();
    bk15.setActive(true);
    bk15.setDuration(5400);
    /* Slots 52 - 58. */
    rt1tm.add(Calendar.HOUR, 6);
    bk15.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    rt1tm.add(Calendar.MINUTE, 30);
    bk15.setEndTime(rt1tm.getTime());
    bk15.setResourcePermission(perm1);
    bk15.setResourceType("TYPE");
    bk15.setRigType(rigType1);
    bk15.setUser(us1);
    bk15.setUserName(us1.getName());
    bk15.setUserNamespace(us1.getNamespace());
    ses.save(bk15);

    /* #### Type bookings for RigType2 ####################################*/
    Calendar rt2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk16 = new Bookings();
    bk16.setActive(true);
    bk16.setDuration(3600);
    /* Slots 52 - 59. */
    rt2tm.add(Calendar.HOUR, 7);
    bk16.setStartTime(rt2tm.getTime());
    rt2tm.add(Calendar.HOUR, 1);
    rt2tm.add(Calendar.MINUTE, 15);
    bk16.setEndTime(rt2tm.getTime());
    bk16.setResourcePermission(perm1);
    bk16.setResourceType("TYPE");
    bk16.setRigType(rigType2);
    bk16.setUser(us1);
    bk16.setUserName(us1.getName());
    bk16.setUserNamespace(us1.getNamespace());
    ses.save(bk16);

    /* #### Bookings for Request Caps 1. #################################*/
    Calendar rcap1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk6 = new Bookings();
    bk6.setActive(true);
    bk6.setDuration(1800);
    /* Slots 20 - 21. */
    rcap1tm.add(Calendar.HOUR, 5);
    bk6.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.MINUTE, 30);
    bk6.setEndTime(rcap1tm.getTime());
    bk6.setResourcePermission(perm1);
    bk6.setResourceType("CAPABILITY");
    bk6.setRequestCapabilities(rcaps1);
    bk6.setUser(us1);
    bk6.setUserName(us1.getName());
    bk6.setUserNamespace(us1.getNamespace());
    ses.save(bk6);

    Bookings bk7 = new Bookings();
    bk7.setActive(true);
    bk7.setDuration(1800);
    /* Slots 22 - 23. */
    bk7.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.MINUTE, 30);
    bk7.setEndTime(rcap1tm.getTime());
    bk7.setResourcePermission(perm1);
    bk7.setResourceType("CAPABILITY");
    bk7.setRequestCapabilities(rcaps1);
    bk7.setUser(us1);
    bk7.setUserName(us1.getName());
    bk7.setUserNamespace(us1.getNamespace());
    ses.save(bk7);

    Bookings bk17 = new Bookings();
    bk17.setActive(true);
    bk17.setDuration(1800);
    /* Slots 32 - 35. */
    rcap1tm.add(Calendar.HOUR, 2);
    bk17.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.HOUR, 1);
    bk17.setEndTime(rcap1tm.getTime());
    bk17.setResourcePermission(perm1);
    bk17.setResourceType("CAPABILITY");
    bk17.setRequestCapabilities(rcaps1);
    bk17.setUser(us1);
    bk17.setUserName(us1.getName());
    bk17.setUserNamespace(us1.getNamespace());
    ses.save(bk17);

    /* #### Bookings for Request Caps 2. #################################*/
    Calendar rcap2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk18 = new Bookings();
    bk18.setActive(true);
    bk18.setDuration(1800);
    /* Slots 56 - 59. */
    rcap2tm.add(Calendar.HOUR, 14);
    bk18.setStartTime(rcap2tm.getTime());
    rcap2tm.add(Calendar.HOUR, 1);
    bk18.setEndTime(rcap2tm.getTime());
    bk18.setResourcePermission(perm1);
    bk18.setResourceType("CAPABILITY");
    bk18.setRequestCapabilities(rcaps2);
    bk18.setUser(us1);
    bk18.setUserName(us1.getName());
    bk18.setUserNamespace(us1.getNamespace());
    ses.save(bk18);

    /* #### Bookings for Request Caps 3. #################################*/
    Calendar rcap3tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk19 = new Bookings();
    bk19.setActive(true);
    bk19.setDuration(4500);
    /* Slots 56 - 59. */
    rcap3tm.add(Calendar.HOUR, 7);
    bk19.setStartTime(rcap3tm.getTime());
    rcap3tm.add(Calendar.HOUR, 1);
    rcap3tm.add(Calendar.MINUTE, 15);
    bk19.setEndTime(rcap3tm.getTime());
    bk19.setResourcePermission(perm1);
    bk19.setResourceType("CAPABILITY");
    bk19.setRequestCapabilities(rcaps3);
    bk19.setUser(us1);
    bk19.setUserName(us1.getName());
    bk19.setUserNamespace(us1.getNamespace());
    ses.save(bk19);

    ses.getTransaction().commit();

    ses.beginTransaction();
    MatchingCapabilities mat1 = new MatchingCapabilities(rcaps1, caps1);
    ses.save(mat1);
    MatchingCapabilities mat2 = new MatchingCapabilities(rcaps1, caps2);
    ses.save(mat2);
    MatchingCapabilities mat3 = new MatchingCapabilities(rcaps1, caps3);
    ses.save(mat3);
    MatchingCapabilities mat4 = new MatchingCapabilities(rcaps2, caps1);
    ses.save(mat4);
    MatchingCapabilities mat5 = new MatchingCapabilities(rcaps2, caps3);
    ses.save(mat5);
    MatchingCapabilities mat6 = new MatchingCapabilities(rcaps3, caps2);
    ses.save(mat6);
    ses.getTransaction().commit();

    ses.refresh(rcaps1);
    ses.refresh(rcaps2);
    ses.refresh(rcaps3);
    ses.refresh(caps1);
    ses.refresh(caps2);
    ses.refresh(caps3);
    ses.refresh(r1);
    ses.refresh(r2);
    ses.refresh(r3);
    ses.refresh(rigType1);
    ses.refresh(rigType2);

    Bookings b = new Bookings();
    b.setActive(true);
    Calendar bt = TimeUtil.getDayBegin(this.dayStr);
    bt.add(Calendar.HOUR, 7);
    bt.add(Calendar.MINUTE, 30);
    b.setStartTime(bt.getTime());
    bt.add(Calendar.HOUR, 1);
    b.setEndTime(bt.getTime());
    b.setDuration(3600);
    b.setResourceType("CAPABILITY");
    b.setRequestCapabilities(rcaps1);
    b.setUser(us1);
    b.setUserName(us1.getName());
    b.setUserName(us1.getNamespace());
    b.setResourcePermission(perm1);

    MBooking mb = new MBooking(b, this.dayStr);
    boolean st = this.day.createBooking(mb, ses);

    List<MRange> fits = this.day.findBestFits(mb, ses);

    ses.beginTransaction();
    ses.delete(bk1);
    ses.delete(bk2);
    ses.delete(bk3);
    ses.delete(bk4);
    ses.delete(bk5);
    ses.delete(bk6);
    ses.delete(bk7);
    ses.delete(bk8);
    ses.delete(bk9);
    ses.delete(bk10);
    ses.delete(bk11);
    ses.delete(bk12);
    ses.delete(bk13);
    ses.delete(bk14);
    ses.delete(bk15);
    ses.delete(bk16);
    ses.delete(bk17);
    ses.delete(bk18);
    ses.delete(bk19);
    ses.delete(perm1);
    ses.delete(r1);
    ses.delete(r2);
    ses.delete(r3);
    ses.delete(mat1);
    ses.delete(mat2);
    ses.delete(mat3);
    ses.delete(mat4);
    ses.delete(mat5);
    ses.delete(mat6);
    ses.delete(caps1);
    ses.delete(caps2);
    ses.delete(caps3);
    ses.delete(rcaps1);
    ses.delete(rcaps2);
    ses.delete(rcaps3);
    ses.delete(rigType1);
    ses.delete(rigType2);
    ses.delete(us1);
    ses.delete(uclass1);
    ses.getTransaction().commit();

    assertTrue(bk1.isActive());
    assertTrue(bk2.isActive());
    assertTrue(bk3.isActive());
    assertTrue(bk4.isActive());
    assertTrue(bk5.isActive());
    assertTrue(bk6.isActive());
    assertTrue(bk7.isActive());
    assertTrue(bk8.isActive());
    assertTrue(bk9.isActive());
    assertTrue(bk10.isActive());
    assertTrue(bk11.isActive());
    assertTrue(bk12.isActive());
    assertTrue(bk13.isActive());
    assertTrue(bk14.isActive());
    assertTrue(bk15.isActive());
    assertTrue(bk16.isActive());
    assertTrue(bk17.isActive());
    assertTrue(bk18.isActive());
    assertTrue(bk19.isActive());

    assertFalse(st);
    assertNotNull(fits);
    assertEquals(2, fits.size());

    MRange r = fits.get(0);
    assertEquals(28, r.getStartSlot());
    assertEquals(31, r.getEndSlot());
    assertEquals(4, r.getNumSlots());

    r = fits.get(1);
    assertEquals(33, r.getStartSlot());
    assertEquals(36, r.getEndSlot());
    assertEquals(4, r.getNumSlots());
}

From source file:au.edu.uts.eng.remotelabs.schedserver.bookings.impl.slotsengine.tests.DayBookingsTester.java

License:Open Source License

public void testFindBestFitsR1() throws Exception {
    Session ses = DataAccessActivator.getNewSession();
    ses.beginTransaction();/*ww  w  .ja  v a 2s. c  o  m*/
    UserClass uclass1 = new UserClass();
    uclass1.setName("booktestclass");
    uclass1.setActive(true);
    uclass1.setQueuable(false);
    uclass1.setBookable(true);
    uclass1.setTimeHorizon(1000);
    ses.save(uclass1);
    User us1 = new User();
    us1.setName("bktestuser1");
    us1.setNamespace("BKNS");
    us1.setPersona("USER");
    ses.save(us1);
    RigType rigType1 = new RigType("booktestrigtype", 300, false);
    ses.save(rigType1);
    RigType rigType2 = new RigType("booktestrigtype2", 300, false);
    ses.save(rigType2);
    RigCapabilities caps1 = new RigCapabilities("book,test,foo");
    ses.save(caps1);
    RigCapabilities caps2 = new RigCapabilities("book,test,bar");
    ses.save(caps2);
    RigCapabilities caps3 = new RigCapabilities("book,baz,foo");
    ses.save(caps3);
    RequestCapabilities rcaps1 = new RequestCapabilities("book");
    ses.save(rcaps1);
    RequestCapabilities rcaps2 = new RequestCapabilities("foo");
    ses.save(rcaps2);
    RequestCapabilities rcaps3 = new RequestCapabilities("bar");
    ses.save(rcaps3);
    Rig r1 = new Rig();
    r1.setName("bkrig1");
    r1.setRigType(rigType1);
    r1.setLastUpdateTimestamp(new Date());
    r1.setRigCapabilities(caps1);
    ses.save(r1);
    Rig r2 = new Rig();
    r2.setName("bkrig2");
    r2.setRigType(rigType1);
    r2.setLastUpdateTimestamp(new Date());
    r2.setRigCapabilities(caps2);
    ses.save(r2);
    Rig r3 = new Rig();
    r3.setName("bkrig3");
    r3.setRigType(rigType2);
    r3.setLastUpdateTimestamp(new Date());
    r3.setRigCapabilities(caps3);
    ses.save(r3);
    ResourcePermission perm1 = new ResourcePermission();
    perm1.setUserClass(uclass1);
    perm1.setType("RIG");
    perm1.setSessionDuration(3600);
    perm1.setQueueActivityTimeout(300);
    perm1.setAllowedExtensions((short) 10);
    perm1.setSessionActivityTimeout(300);
    perm1.setExtensionDuration(300);
    perm1.setMaximumBookings(10);
    perm1.setRig(r1);
    perm1.setStartTime(new Date());
    perm1.setExpiryTime(new Date());
    perm1.setDisplayName("bookperm");
    ses.save(perm1);

    /* #### BOOKINGS FOR R1 ########################################### */
    Calendar r1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk1 = new Bookings();
    bk1.setActive(true);
    bk1.setDuration(3600);
    /* Slots 2 - 5. */
    r1tm.add(Calendar.MINUTE, 30);
    bk1.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.HOUR, 1);
    bk1.setEndTime(r1tm.getTime());
    bk1.setResourcePermission(perm1);
    bk1.setResourceType("RIG");
    bk1.setRig(r1);
    bk1.setUser(us1);
    bk1.setUserName(us1.getName());
    bk1.setUserNamespace(us1.getNamespace());
    ses.save(bk1);
    Bookings bk2 = new Bookings();
    bk2.setActive(true);
    bk2.setCancelReason("Test cancel.");
    bk2.setDuration(1800);
    /* Slots 8 - 9. */
    r1tm.add(Calendar.MINUTE, 30);
    bk2.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.MINUTE, 30);
    bk2.setEndTime(r1tm.getTime());
    bk2.setResourcePermission(perm1);
    bk2.setResourceType("RIG");
    bk2.setRig(r1);
    bk2.setUser(us1);
    bk2.setUserName(us1.getName());
    bk2.setUserNamespace(us1.getNamespace());
    ses.save(bk2);
    Bookings bk3 = new Bookings();
    bk3.setActive(true);
    bk3.setDuration(7200);
    /* Slots 36 - 43. */
    r1tm.add(Calendar.MINUTE, 30);
    r1tm.add(Calendar.HOUR, 6);
    bk3.setStartTime(r1tm.getTime());
    r1tm.add(Calendar.HOUR, 2);
    bk3.setEndTime(r1tm.getTime());
    bk3.setResourcePermission(perm1);
    bk3.setResourceType("RIG");
    bk3.setRig(r1);
    bk3.setUser(us1);
    bk3.setUserName(us1.getName());
    bk3.setUserNamespace(us1.getNamespace());
    ses.save(bk3);

    /* #### BOOKINGS FOR R2 ########################################### */
    Calendar r2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk8 = new Bookings();
    bk8.setActive(true);
    bk8.setDuration(3600);
    /* Slots 13 - 16. */
    r2tm.add(Calendar.HOUR, 3);
    bk8.setStartTime(r2tm.getTime());
    r2tm.add(Calendar.HOUR, 1);
    bk8.setEndTime(r2tm.getTime());
    bk8.setResourcePermission(perm1);
    bk8.setResourceType("RIG");
    bk8.setRig(r2);
    bk8.setUser(us1);
    bk8.setUserName(us1.getName());
    bk8.setUserNamespace(us1.getNamespace());
    ses.save(bk8);

    Bookings bk9 = new Bookings();
    bk9.setActive(true);
    bk9.setDuration(1800);
    /* Slots 36 - 37. */
    r2tm.add(Calendar.HOUR, 5);
    bk9.setStartTime(r2tm.getTime());
    r2tm.add(Calendar.MINUTE, 30);
    bk9.setEndTime(r2tm.getTime());
    bk9.setResourcePermission(perm1);
    bk9.setResourceType("RIG");
    bk9.setRig(r2);
    bk9.setUser(us1);
    bk9.setUserName(us1.getName());
    bk9.setUserNamespace(us1.getNamespace());
    ses.save(bk9);

    /* #### BOOKINGS FOR R3 ########################################### */
    Calendar r3tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk10 = new Bookings();
    bk10.setActive(true);
    bk10.setDuration(1800);
    /* Slots 2 - 3. */
    r3tm.add(Calendar.MINUTE, 30);
    bk10.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.MINUTE, 30);
    bk10.setEndTime(r3tm.getTime());
    bk10.setResourcePermission(perm1);
    bk10.setResourceType("RIG");
    bk10.setRig(r3);
    bk10.setUser(us1);
    bk10.setUserName(us1.getName());
    bk10.setUserNamespace(us1.getNamespace());
    ses.save(bk10);

    Bookings bk11 = new Bookings();
    bk11.setActive(true);
    bk11.setDuration(3600);
    /* Slots 12 - 15. */
    r3tm.add(Calendar.HOUR, 2);
    bk11.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.HOUR, 1);
    bk11.setEndTime(r3tm.getTime());
    bk11.setResourcePermission(perm1);
    bk11.setResourceType("RIG");
    bk11.setRig(r3);
    bk11.setUser(us1);
    bk11.setUserName(us1.getName());
    bk11.setUserNamespace(us1.getNamespace());
    ses.save(bk11);

    Bookings bk12 = new Bookings();
    bk12.setActive(true);
    bk12.setDuration(3600);
    /* Slots 24 - 27. */
    r3tm.add(Calendar.HOUR, 2);
    bk12.setStartTime(r3tm.getTime());
    r3tm.add(Calendar.HOUR, 1);
    bk12.setEndTime(r3tm.getTime());
    bk12.setResourcePermission(perm1);
    bk12.setResourceType("RIG");
    bk12.setRig(r3);
    bk12.setUser(us1);
    bk12.setUserName(us1.getName());
    bk12.setUserNamespace(us1.getNamespace());
    ses.save(bk12);

    /* #### Type bookings for RigType1 ####################################*/
    Calendar rt1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk4 = new Bookings();
    bk4.setActive(true);
    bk4.setDuration(1800);
    /* Slots 0 - 1. */
    bk4.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.MINUTE, 30);
    bk4.setEndTime(rt1tm.getTime());
    bk4.setResourcePermission(perm1);
    bk4.setResourceType("TYPE");
    bk4.setRigType(rigType1);
    bk4.setUser(us1);
    bk4.setUserName(us1.getName());
    bk4.setUserNamespace(us1.getNamespace());
    ses.save(bk4);

    Bookings bk13 = new Bookings();
    bk13.setActive(true);
    bk13.setDuration(7200);
    /* Slots 0 - 7. */
    rt1tm.add(Calendar.MINUTE, -30);
    bk13.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 2);
    bk13.setEndTime(rt1tm.getTime());
    bk13.setResourcePermission(perm1);
    bk13.setResourceType("TYPE");
    bk13.setRigType(rigType1);
    bk13.setUser(us1);
    bk13.setUserName(us1.getName());
    bk13.setUserNamespace(us1.getNamespace());
    ses.save(bk13);

    Bookings bk5 = new Bookings();
    bk5.setActive(true);
    bk5.setDuration(3600);
    /* Slots 20 - 23. */
    rt1tm.add(Calendar.HOUR, 3);
    bk5.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    bk5.setEndTime(rt1tm.getTime());
    bk5.setResourcePermission(perm1);
    bk5.setResourceType("TYPE");
    bk5.setRigType(rigType1);
    bk5.setUser(us1);
    bk5.setUserName(us1.getName());
    bk5.setUserNamespace(us1.getNamespace());
    ses.save(bk5);

    Bookings bk14 = new Bookings();
    bk14.setActive(true);
    bk14.setDuration(3600);
    /* Slots 24 - 27. */
    bk14.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    bk14.setEndTime(rt1tm.getTime());
    bk14.setResourcePermission(perm1);
    bk14.setResourceType("TYPE");
    bk14.setRigType(rigType1);
    bk14.setUser(us1);
    bk14.setUserName(us1.getName());
    bk14.setUserNamespace(us1.getNamespace());
    ses.save(bk14);

    Bookings bk15 = new Bookings();
    bk15.setActive(true);
    bk15.setDuration(5400);
    /* Slots 52 - 58. */
    rt1tm.add(Calendar.HOUR, 6);
    bk15.setStartTime(rt1tm.getTime());
    rt1tm.add(Calendar.HOUR, 1);
    rt1tm.add(Calendar.MINUTE, 30);
    bk15.setEndTime(rt1tm.getTime());
    bk15.setResourcePermission(perm1);
    bk15.setResourceType("TYPE");
    bk15.setRigType(rigType1);
    bk15.setUser(us1);
    bk15.setUserName(us1.getName());
    bk15.setUserNamespace(us1.getNamespace());
    ses.save(bk15);

    /* #### Type bookings for RigType2 ####################################*/
    Calendar rt2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk16 = new Bookings();
    bk16.setActive(true);
    bk16.setDuration(3600);
    /* Slots 52 - 59. */
    rt2tm.add(Calendar.HOUR, 7);
    bk16.setStartTime(rt2tm.getTime());
    rt2tm.add(Calendar.HOUR, 1);
    bk16.setEndTime(rt2tm.getTime());
    bk16.setResourcePermission(perm1);
    bk16.setResourceType("TYPE");
    bk16.setRigType(rigType2);
    bk16.setUser(us1);
    bk16.setUserName(us1.getName());
    bk16.setUserNamespace(us1.getNamespace());
    ses.save(bk16);

    /* #### Bookings for Request Caps 1. #################################*/
    Calendar rcap1tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk6 = new Bookings();
    bk6.setActive(true);
    bk6.setDuration(1800);
    /* Slots 20 - 21. */
    rcap1tm.add(Calendar.HOUR, 5);
    bk6.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.MINUTE, 30);
    bk6.setEndTime(rcap1tm.getTime());
    bk6.setResourcePermission(perm1);
    bk6.setResourceType("CAPABILITY");
    bk6.setRequestCapabilities(rcaps1);
    bk6.setUser(us1);
    bk6.setUserName(us1.getName());
    bk6.setUserNamespace(us1.getNamespace());
    ses.save(bk6);

    Bookings bk7 = new Bookings();
    bk7.setActive(true);
    bk7.setDuration(1800);
    /* Slots 22 - 23. */
    bk7.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.MINUTE, 30);
    bk7.setEndTime(rcap1tm.getTime());
    bk7.setResourcePermission(perm1);
    bk7.setResourceType("CAPABILITY");
    bk7.setRequestCapabilities(rcaps1);
    bk7.setUser(us1);
    bk7.setUserName(us1.getName());
    bk7.setUserNamespace(us1.getNamespace());
    ses.save(bk7);

    Bookings bk17 = new Bookings();
    bk17.setActive(true);
    bk17.setDuration(1800);
    /* Slots 32 - 35. */
    rcap1tm.add(Calendar.HOUR, 2);
    bk17.setStartTime(rcap1tm.getTime());
    rcap1tm.add(Calendar.HOUR, 1);
    bk17.setEndTime(rcap1tm.getTime());
    bk17.setResourcePermission(perm1);
    bk17.setResourceType("CAPABILITY");
    bk17.setRequestCapabilities(rcaps1);
    bk17.setUser(us1);
    bk17.setUserName(us1.getName());
    bk17.setUserNamespace(us1.getNamespace());
    ses.save(bk17);

    /* #### Bookings for Request Caps 2. #################################*/
    Calendar rcap2tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk18 = new Bookings();
    bk18.setActive(true);
    bk18.setDuration(1800);
    /* Slots 56 - 59. */
    rcap2tm.add(Calendar.HOUR, 14);
    bk18.setStartTime(rcap2tm.getTime());
    rcap2tm.add(Calendar.HOUR, 1);
    bk18.setEndTime(rcap2tm.getTime());
    bk18.setResourcePermission(perm1);
    bk18.setResourceType("CAPABILITY");
    bk18.setRequestCapabilities(rcaps2);
    bk18.setUser(us1);
    bk18.setUserName(us1.getName());
    bk18.setUserNamespace(us1.getNamespace());
    ses.save(bk18);

    /* #### Bookings for Request Caps 3. #################################*/
    Calendar rcap3tm = TimeUtil.getDayBegin(this.dayStr);
    Bookings bk19 = new Bookings();
    bk19.setActive(true);
    bk19.setDuration(4500);
    /* Slots 56 - 59. */
    rcap3tm.add(Calendar.HOUR, 7);
    bk19.setStartTime(rcap3tm.getTime());
    rcap3tm.add(Calendar.HOUR, 1);
    rcap3tm.add(Calendar.MINUTE, 15);
    bk19.setEndTime(rcap3tm.getTime());
    bk19.setResourcePermission(perm1);
    bk19.setResourceType("CAPABILITY");
    bk19.setRequestCapabilities(rcaps3);
    bk19.setUser(us1);
    bk19.setUserName(us1.getName());
    bk19.setUserNamespace(us1.getNamespace());
    ses.save(bk19);

    ses.getTransaction().commit();

    ses.beginTransaction();
    MatchingCapabilities mat1 = new MatchingCapabilities(rcaps1, caps1);
    ses.save(mat1);
    MatchingCapabilities mat2 = new MatchingCapabilities(rcaps1, caps2);
    ses.save(mat2);
    MatchingCapabilities mat3 = new MatchingCapabilities(rcaps1, caps3);
    ses.save(mat3);
    MatchingCapabilities mat4 = new MatchingCapabilities(rcaps2, caps1);
    ses.save(mat4);
    MatchingCapabilities mat5 = new MatchingCapabilities(rcaps2, caps3);
    ses.save(mat5);
    MatchingCapabilities mat6 = new MatchingCapabilities(rcaps3, caps2);
    ses.save(mat6);
    ses.getTransaction().commit();

    ses.refresh(rcaps1);
    ses.refresh(rcaps2);
    ses.refresh(rcaps3);
    ses.refresh(caps1);
    ses.refresh(caps2);
    ses.refresh(caps3);
    ses.refresh(r1);
    ses.refresh(r2);
    ses.refresh(r3);
    ses.refresh(rigType1);
    ses.refresh(rigType2);

    Bookings b = new Bookings();
    b.setActive(true);
    Calendar bt = TimeUtil.getDayBegin(this.dayStr);
    bt.add(Calendar.HOUR, 2);
    b.setStartTime(bt.getTime());
    bt.add(Calendar.HOUR, 1);
    b.setEndTime(bt.getTime());
    b.setDuration(3600);
    b.setResourceType("RIG");
    b.setRig(r1);
    b.setUser(us1);
    b.setUserName(us1.getName());
    b.setUserName(us1.getNamespace());
    b.setResourcePermission(perm1);

    MBooking mb = new MBooking(b, this.dayStr);
    boolean st = this.day.createBooking(mb, ses);

    List<MRange> fits = this.day.findBestFits(mb, ses);

    ses.beginTransaction();
    ses.delete(bk1);
    ses.delete(bk2);
    ses.delete(bk3);
    ses.delete(bk4);
    ses.delete(bk5);
    ses.delete(bk6);
    ses.delete(bk7);
    ses.delete(bk8);
    ses.delete(bk9);
    ses.delete(bk10);
    ses.delete(bk11);
    ses.delete(bk12);
    ses.delete(bk13);
    ses.delete(bk14);
    ses.delete(bk15);
    ses.delete(bk16);
    ses.delete(bk17);
    ses.delete(bk18);
    ses.delete(bk19);
    ses.delete(perm1);
    ses.delete(r1);
    ses.delete(r2);
    ses.delete(r3);
    ses.delete(mat1);
    ses.delete(mat2);
    ses.delete(mat3);
    ses.delete(mat4);
    ses.delete(mat5);
    ses.delete(mat6);
    ses.delete(caps1);
    ses.delete(caps2);
    ses.delete(caps3);
    ses.delete(rcaps1);
    ses.delete(rcaps2);
    ses.delete(rcaps3);
    ses.delete(rigType1);
    ses.delete(rigType2);
    ses.delete(us1);
    ses.delete(uclass1);
    ses.getTransaction().commit();

    assertTrue(bk1.isActive());
    assertTrue(bk2.isActive());
    assertTrue(bk3.isActive());
    assertTrue(bk4.isActive());
    assertTrue(bk5.isActive());
    assertTrue(bk6.isActive());
    assertTrue(bk7.isActive());
    assertTrue(bk8.isActive());
    assertTrue(bk9.isActive());
    assertTrue(bk10.isActive());
    assertTrue(bk11.isActive());
    assertTrue(bk12.isActive());
    assertTrue(bk13.isActive());
    assertTrue(bk14.isActive());
    assertTrue(bk15.isActive());
    assertTrue(bk16.isActive());
    assertTrue(bk17.isActive());
    assertTrue(bk18.isActive());
    assertTrue(bk19.isActive());

    assertFalse(st);
    assertNotNull(fits);
    assertEquals(2, fits.size());

    MRange r = fits.get(0);
    assertEquals(6, r.getStartSlot());
    assertEquals(7, r.getEndSlot());
    assertEquals(2, r.getNumSlots());

    r = fits.get(1);
    assertEquals(10, r.getStartSlot());
    assertEquals(13, r.getEndSlot());
    assertEquals(4, r.getNumSlots());
}