/* * $Id$ * * Copyright 2008 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.eventlogs; import java.util.ArrayList; import java.util.List; import java.util.Set; import ome.model.IObject; import ome.model.meta.EventLog; import ome.parameters.Parameters; /** * {@link EventLogLoader} which iterates through each object model type (in no * particular order) and returns each object from lowest to highest id. * * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta3 */ public class AllEntitiesPseudoLogLoader<T extends IObject> extends EventLogLoader { List<String> classes; String current = null; long last = -1; public void setClasses(Set<String> classes) { this.classes = new ArrayList<String>(classes); } @Override protected EventLog query() { if (current == null) { if (more() == 0) { return null; } current = classes.remove(0); } final String query = String.format( "select obj from %s obj where obj.id > %d order by id asc", current, last); final IObject obj = queryService.findByQuery(query, new Parameters().page(0, 1)); if (obj != null) { last = obj.getId(); // Here we pass the string to prevent $$ CGLIB style issues return wrap(current, obj); } else { // If no object, then reset and recurse. current = null; last = -1; return query(); } } /** * Returns the number of classes which are still unprocessed as a proxy for * how much is left to process. */ @Override public long more() { return classes.size() + (current == null ? 0 : 1); } protected EventLog wrap(String cls, IObject obj) { EventLog el = new EventLog(); el.setEntityType(cls); el.setEntityId(obj.getId()); el.setAction("UPDATE"); return el; } }