/* * $Id$ * * Copyright 2011 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package omero.cmd.basic; import java.util.ArrayList; import java.util.List; import java.util.Map; import ome.system.OmeroContext; import omero.cmd.Helper; import omero.cmd.IRequest; import omero.cmd.ListRequests; import omero.cmd.ListRequestsRsp; import omero.cmd.Request; import omero.cmd.Response; import omero.cmd.HandleI.Cancel; import omero.util.ObjectFactoryRegistry; import omero.util.ObjectFactoryRegistry.ObjectFactory; /** * @author Josh Moore, josh at glencoesoftware.com * @since 4.3.2 */ public class ListRequestsI extends ListRequests implements IRequest { private static final long serialVersionUID = -3653081139095111039L; private final OmeroContext ctx; private Helper helper; public ListRequestsI(OmeroContext ctx) { this.ctx = ctx; } public Map<String, String> getCallContext() { return null; } public void init(Helper helper) { helper.setSteps(1); this.helper = helper; } public Object step(int i) { helper.assertStep(0, i); final Ice.Communicator ic = ctx.getBean(Ice.Communicator.class); final List<Request> requestTypes = new ArrayList<Request>(); final Map<String, ObjectFactoryRegistry> registries = ctx .getBeansOfType(ObjectFactoryRegistry.class); final ListRequestsRsp rsp = new ListRequestsRsp(); for (ObjectFactoryRegistry registry : registries.values()) { Map<String, ObjectFactory> factories = registry.createFactories(ic); for (Map.Entry<String, ObjectFactory> entry : factories.entrySet()) { String key = entry.getKey(); ObjectFactory factory = entry.getValue(); Object obj = factory.create(key); if (obj instanceof Request) { requestTypes.add((Request) obj); } } } rsp.list = requestTypes; return rsp; } @Override public void finish() throws Cancel { // no-op } public void buildResponse(int step, Object object) { helper.assertStep(0, step); helper.setResponseIfNull((Response) object); } public Response getResponse() { return helper.getResponse(); } }