/*
* Copyright (C) 2015 University of Dundee & Open Microscopy Environment.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package omero.cmd.graphs;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import ome.model.IObject;
import omero.cmd.HandleI.Cancel;
import omero.cmd.ERR;
import omero.cmd.Helper;
import omero.cmd.IRequest;
import omero.cmd.LegalGraphTargets;
import omero.cmd.LegalGraphTargetsResponse;
import omero.cmd.Response;
/**
* Query which model object classes are legal as targets for a request.
* @author m.t.b.carroll@dundee.ac.uk
* @since 5.1.4
*/
public class LegalGraphTargetsI extends LegalGraphTargets implements IRequest {
private final GraphRequestFactory graphRequestFactory;
private Helper helper;
/**
* Construct a new legal graph targets query.
* @param graphRequestFactory the graph request factory
*/
public LegalGraphTargetsI(GraphRequestFactory graphRequestFactory) {
this.graphRequestFactory = graphRequestFactory;
}
@Override
public Map<String, String> getCallContext() {
return null;
}
@Override
public void init(Helper helper) {
this.helper = helper;
helper.setSteps(1);
}
@Override
public Object step(int step) throws Cancel {
if (step == 0) {
try {
return graphRequestFactory.getLegalTargets(request.getClass());
} catch (Exception e) {
throw helper.cancel(new ERR(), e, "graph-no-targets");
}
} else {
final Exception e = new IllegalArgumentException("request has no step " + step);
throw helper.cancel(new ERR(), e, "bad-step");
}
}
@Override
public void finish() throws Cancel {
}
@Override
public void buildResponse(int step, Object object) {
helper.assertResponse(step);
if (step == 0) {
final LegalGraphTargetsResponse response = new LegalGraphTargetsResponse();
final Collection<Class<? extends IObject>> legalTargetClasses = (Collection<Class<? extends IObject>>) object;
response.targets = new ArrayList<String>(legalTargetClasses.size());
for (final Class<? extends IObject> legalTargetClass : legalTargetClasses) {
response.targets.add(legalTargetClass.getName());
}
helper.setResponseIfNull(response);
}
}
@Override
public Response getResponse() {
return helper.getResponse();
}
}