Search in sources :

Example 26 with AuditEvent

use of ubic.gemma.model.common.auditAndSecurity.AuditEvent in project Gemma by PavlidisLab.

the class AuditControllerTest method testAddUpdateEvent.

@Test
public void testAddUpdateEvent() {
    ExpressionExperiment e = this.getTestPersistentExpressionExperiment();
    EntityDelegator ed = new EntityDelegator(e);
    assertEquals("ubic.gemma.model.expression.experiment.ExpressionExperiment", ed.getClassDelegatingFor());
    auditController.addAuditEvent(ed, "CommentedEvent", "foo", "bar");
    e = expressionExperimentService.load(e.getId());
    assertNotNull(e);
    e = expressionExperimentService.thawLite(e);
    assertNotNull(e);
    AuditTrail auditTrail = e.getAuditTrail();
    assertNotNull(auditTrail);
    AuditEvent lastEvent = auditTrail.getLast();
    assertNotNull(lastEvent);
    AuditEventType eventType = lastEvent.getEventType();
    assertNotNull(eventType);
    assertEquals(CommentedEvent.class, eventType.getClass());
}
Also used : AuditEventType(ubic.gemma.model.common.auditAndSecurity.eventType.AuditEventType) AuditEvent(ubic.gemma.model.common.auditAndSecurity.AuditEvent) AuditTrail(ubic.gemma.model.common.auditAndSecurity.AuditTrail) ExpressionExperiment(ubic.gemma.model.expression.experiment.ExpressionExperiment) Test(org.junit.Test) BaseSpringWebTest(ubic.gemma.web.util.BaseSpringWebTest)

Example 27 with AuditEvent

use of ubic.gemma.model.common.auditAndSecurity.AuditEvent in project Gemma by PavlidisLab.

the class AuditEventDaoImpl method retainLackingEvent.

@Override
public void retainLackingEvent(final Collection<? extends Auditable> a, final Class<? extends AuditEventType> type) {
    StopWatch timer = new StopWatch();
    timer.start();
    final Map<Auditable, AuditEvent> events = this.getLastEvent(a, type);
    AbstractDao.log.info("Phase I: " + timer.getTime() + "ms");
    CollectionUtils.filter(a, new Predicate() {

        @Override
        public boolean evaluate(Object arg0) {
            // noinspection SuspiciousMethodCalls // this is perfectly fine since we are passing this directly into the filter
            return !events.containsKey(arg0);
        }
    });
}
Also used : Auditable(ubic.gemma.model.common.Auditable) AuditEvent(ubic.gemma.model.common.auditAndSecurity.AuditEvent) AuditEventValueObject(ubic.gemma.model.common.auditAndSecurity.AuditEventValueObject) StopWatch(org.apache.commons.lang3.time.StopWatch) Predicate(org.apache.commons.collections.Predicate)

Example 28 with AuditEvent

use of ubic.gemma.model.common.auditAndSecurity.AuditEvent in project Gemma by PavlidisLab.

the class AuditEventDaoImpl method retainHavingEvent.

@Override
public void retainHavingEvent(final Collection<? extends Auditable> a, final Class<? extends AuditEventType> type) {
    final Map<Auditable, AuditEvent> events = this.getLastEvent(a, type);
    CollectionUtils.filter(a, new Predicate() {

        @Override
        public boolean evaluate(Object arg0) {
            // noinspection SuspiciousMethodCalls // this is perfectly fine since we are passing this directly into the filter
            return events.containsKey(arg0);
        }
    });
}
Also used : Auditable(ubic.gemma.model.common.Auditable) AuditEvent(ubic.gemma.model.common.auditAndSecurity.AuditEvent) AuditEventValueObject(ubic.gemma.model.common.auditAndSecurity.AuditEventValueObject) Predicate(org.apache.commons.collections.Predicate)

Example 29 with AuditEvent

use of ubic.gemma.model.common.auditAndSecurity.AuditEvent in project Gemma by PavlidisLab.

the class AuditEventDaoImpl method getLastEvent.

private Map<Auditable, AuditEvent> getLastEvent(final Collection<? extends Auditable> auditables, Class<? extends AuditEventType> type) {
    Map<Auditable, AuditEvent> result = new HashMap<>();
    if (auditables.size() == 0)
        return result;
    final Map<AuditTrail, Auditable> atMap = this.getAuditTrailMap(auditables);
    List<String> classes = this.getClassHierarchy(type);
    // language=HQL
    final String queryString = "select trail, ae from AuditTrailImpl trail " + "inner join trail.events ae inner join ae.eventType et inner join fetch ae.performer where trail in (:trails) " + "and et.class in (:classes) order by ae.date desc, ae.id desc ";
    StopWatch timer = new StopWatch();
    timer.start();
    Collection<AuditTrail> batch = new ArrayList<>();
    int batchSize = 100;
    for (AuditTrail at : atMap.keySet()) {
        batch.add(at);
        if (batch.size() == batchSize) {
            org.hibernate.Query queryObject = this.getSessionFactory().getCurrentSession().createQuery(queryString);
            queryObject.setParameterList("trails", batch);
            queryObject.setParameterList("classes", classes);
            queryObject.setReadOnly(true);
            List<?> qr = queryObject.list();
            if (qr == null || qr.isEmpty()) {
                batch.clear();
                continue;
            }
            this.putAllQrs(result, qr, atMap);
            batch.clear();
        }
    }
    if (!batch.isEmpty()) {
        org.hibernate.Query queryObject = this.getSessionFactory().getCurrentSession().createQuery(queryString);
        // if too many will fail.
        queryObject.setParameterList("trails", batch);
        queryObject.setParameterList("classes", classes);
        queryObject.setReadOnly(true);
        List<?> qr = queryObject.list();
        if (qr == null || qr.isEmpty())
            return result;
        this.putAllQrs(result, qr, atMap);
    }
    timer.stop();
    if (timer.getTime() > 500) {
        AbstractDao.log.info("Last event of type " + type.getSimpleName() + " retrieved for " + auditables.size() + " items in " + timer.getTime() + "ms");
    }
    return result;
}
Also used : Auditable(ubic.gemma.model.common.Auditable) StopWatch(org.apache.commons.lang3.time.StopWatch) Query(org.hibernate.Query) AuditEvent(ubic.gemma.model.common.auditAndSecurity.AuditEvent) AuditTrail(ubic.gemma.model.common.auditAndSecurity.AuditTrail)

Example 30 with AuditEvent

use of ubic.gemma.model.common.auditAndSecurity.AuditEvent in project Gemma by PavlidisLab.

the class AuditEventDaoImpl method getLastEvents.

@Override
public Map<Class<? extends AuditEventType>, Map<Auditable, AuditEvent>> getLastEvents(Collection<? extends Auditable> auditables, Collection<Class<? extends AuditEventType>> types) {
    StopWatch timer = new StopWatch();
    timer.start();
    Map<Class<? extends AuditEventType>, Map<Auditable, AuditEvent>> results = new HashMap<>();
    if (auditables.size() == 0)
        return results;
    for (Class<? extends AuditEventType> t : types) {
        results.put(t, new HashMap<Auditable, AuditEvent>());
    }
    final Map<AuditTrail, Auditable> atMap = this.getAuditTrailMap(auditables);
    List<String> classes = this.getClassHierarchy(types);
    // language=HQL
    final String queryString = "select et, trail, event from AuditTrailImpl trail " + "inner join trail.events event inner join event.eventType et inner join fetch event.performer where trail in (:trails) " + "and et.class in (:classes) order by event.date desc, event.id desc ";
    Query queryObject = this.getSessionFactory().getCurrentSession().createQuery(queryString);
    queryObject.setParameterList("trails", atMap.keySet());
    queryObject.setParameterList("classes", classes);
    List<?> qr = queryObject.list();
    for (Object o : qr) {
        Object[] ar = (Object[]) o;
        AuditEventType ty = (AuditEventType) ar[0];
        AuditTrail t = (AuditTrail) ar[1];
        AuditEvent e = (AuditEvent) ar[2];
        /*
             * This is a bit inefficient. Loop needed because returned type is Impl (and probably a proxy). But probably
             * query is the bottleneck.
             */
        for (Class<? extends AuditEventType> ti : types) {
            if (ti.isAssignableFrom(ty.getClass())) {
                Map<Auditable, AuditEvent> innerMap = results.get(ti);
                assert innerMap != null;
                // only replace event if its date is more recent.
                Auditable ae = atMap.get(t);
                if (!innerMap.containsKey(ae) || innerMap.get(ae).getDate().compareTo(e.getDate()) < 0) {
                    innerMap.put(atMap.get(t), e);
                }
                break;
            }
        }
    }
    timer.stop();
    if (timer.getTime() > 1000) {
        AbstractDao.log.info("Last events retrieved for  " + types.size() + " different types for " + auditables.size() + " items in " + timer.getTime() + "ms");
    }
    return results;
}
Also used : Auditable(ubic.gemma.model.common.Auditable) AuditEventType(ubic.gemma.model.common.auditAndSecurity.eventType.AuditEventType) Query(org.hibernate.Query) StopWatch(org.apache.commons.lang3.time.StopWatch) AuditEvent(ubic.gemma.model.common.auditAndSecurity.AuditEvent) AuditEventValueObject(ubic.gemma.model.common.auditAndSecurity.AuditEventValueObject) AuditTrail(ubic.gemma.model.common.auditAndSecurity.AuditTrail)

Aggregations

AuditEvent (ubic.gemma.model.common.auditAndSecurity.AuditEvent)34 Auditable (ubic.gemma.model.common.Auditable)9 ArrayDesign (ubic.gemma.model.expression.arrayDesign.ArrayDesign)7 AuditEventValueObject (ubic.gemma.model.common.auditAndSecurity.AuditEventValueObject)6 StopWatch (org.apache.commons.lang3.time.StopWatch)5 AuditTrail (ubic.gemma.model.common.auditAndSecurity.AuditTrail)5 ArrayDesignValueObject (ubic.gemma.model.expression.arrayDesign.ArrayDesignValueObject)5 ExpressionExperiment (ubic.gemma.model.expression.experiment.ExpressionExperiment)5 Date (java.util.Date)4 Test (org.junit.Test)4 Query (org.hibernate.Query)3 BaseSpringContextTest (ubic.gemma.core.testing.BaseSpringContextTest)3 AuditEventType (ubic.gemma.model.common.auditAndSecurity.eventType.AuditEventType)3 HashSet (java.util.HashSet)2 Predicate (org.apache.commons.collections.Predicate)2 Transactional (org.springframework.transaction.annotation.Transactional)2 AbstractAuditable (ubic.gemma.model.common.AbstractAuditable)2 Curatable (ubic.gemma.model.common.auditAndSecurity.curation.Curatable)2 BioAssay (ubic.gemma.model.expression.bioAssay.BioAssay)2 UserDetailsImpl (gemma.gsec.authentication.UserDetailsImpl)1