Package uk.ac.bbsrc.tgac.miso.analysis.manager

Source Code of uk.ac.bbsrc.tgac.miso.analysis.manager.AnalysisRequestManager

/*
* Copyright (c) 2012. The Genome Analysis Centre, Norwich, UK
* MISO project contacts: Robert Davey, Mario Caccamo @ TGAC
* *********************************************************************
*
* This file is part of MISO.
*
* MISO 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 3 of the License, or
* (at your option) any later version.
*
* MISO 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 MISO.  If not, see <http://www.gnu.org/licenses/>.
*
* *********************************************************************
*/

package uk.ac.bbsrc.tgac.miso.analysis.manager;

//import com.fasterxml.jackson.core.JsonGenerationException;
//import com.fasterxml.jackson.databind.JsonMappingException;
//import com.fasterxml.jackson.databind.ObjectMapper;

import net.sf.json.JSONObject;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import uk.ac.bbsrc.tgac.miso.analysis.submission.PipelineRequest;
import uk.ac.bbsrc.tgac.miso.analysis.submission.TaskSubmissionRequest;
import uk.ac.ebi.fgpt.conan.dao.ConanPipelineDAO;
import uk.ac.ebi.fgpt.conan.dao.XMLLoadingPipelineDAO;
import uk.ac.ebi.fgpt.conan.model.ConanPipeline;
import uk.ac.ebi.fgpt.conan.model.ConanProcess;
import uk.ac.ebi.fgpt.conan.model.ConanTask;

import uk.ac.ebi.fgpt.conan.model.ConanUser;
import uk.ac.ebi.fgpt.conan.service.*;
import uk.ac.ebi.fgpt.conan.service.exception.SubmissionException;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
* uk.ac.bbsrc.tgac.miso.analysis.manager
* <p/>
* Info
*
* @author Rob Davey
* @date 28/10/11
* @since 0.1.2
*/
public class AnalysisRequestManager {
  protected static final Logger log = LoggerFactory.getLogger(AnalysisRequestManager.class);
  private ObjectMapper mapper = new ObjectMapper();

  @Autowired
  private ConanPipelineService conanPipelineService;

  @Autowired
  private ConanTaskService conanTaskService;

  @Autowired
  private ConanUserService conanUserService;

  @Autowired
  private ConanSubmissionService conanSubmissionService;

  @Autowired
  private ConanProcessService conanProcessService;

  public ConanPipelineService getConanPipelineService() {
    return conanPipelineService;
  }

  public void setConanPipelineService(ConanPipelineService conanPipelineService) {
    this.conanPipelineService = conanPipelineService;
  }

  public ConanTaskService getConanTaskService() {
    return this.conanTaskService;
  }

  public void setConanTaskService(ConanTaskService conanTaskService) {
    this.conanTaskService = conanTaskService;
  }

  public ConanUserService getConanUserService() {
    return conanUserService;
  }

  public void setConanUserService(ConanUserService conanUserService) {
    this.conanUserService = conanUserService;
  }

  public void setConanSubmissionService(ConanSubmissionService conanSubmissionService) {
    this.conanSubmissionService = conanSubmissionService;
  }

  public ConanProcessService getConanProcessService() {
    return conanProcessService;
  }

  public void setConanProcessService(ConanProcessService conanProcessService) {
    this.conanProcessService = conanProcessService;
  }

  public String queryTasks(JSONObject query) {
    String queryMethod = query.getString("query");
    try {
      Method m = getConanTaskService().getClass().getMethod(queryMethod);
      if ("getTask".equals(queryMethod)) {
        ConanTask<? extends ConanPipeline> task = (ConanTask<? extends ConanPipeline>)m.invoke(getConanTaskService(), null);
        return mapper.writeValueAsString(task);
      }
      else {
        if (queryMethod.contains("search") || queryMethod.contains("create")) {
          throw new UnsupportedOperationException("Cannot call " +queryMethod+ ".");
        }
        else {
          List<ConanTask<? extends ConanPipeline>> tasks = (List<ConanTask<? extends ConanPipeline>>)m.invoke(getConanTaskService(), null);
          return mapper.writeValueAsString(tasks);
        }
      }
    }
    catch (NoSuchMethodException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (InvocationTargetException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (IllegalAccessException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (JsonMappingException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (JsonGenerationException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (IOException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
  }

  //public void generateAndSubmitTask(TaskSubmissionRequest submissionRequest, User user) throws SubmissionException {
  public void generateAndSubmitTask(TaskSubmissionRequest submissionRequest) throws SubmissionException {
    ConanTask.Priority priority = ConanTask.Priority.valueOf(submissionRequest.getPriority());
    log.info(submissionRequest.toString());

    //reload pipelines at runtime - argh!
    if (conanPipelineService instanceof DefaultPipelineService) {
      ConanPipelineDAO c = ((DefaultPipelineService) conanPipelineService).getPipelineDAO();
      if (c instanceof XMLLoadingPipelineDAO) {
        ((XMLLoadingPipelineDAO)c).reset();
      }
    }

    ConanTask<? extends ConanPipeline> conanTask =
            conanTaskService.createNewTask(submissionRequest.getPipelineName(),
                                      submissionRequest.getStartingProcessIndex(),
                                      submissionRequest.getInputParameters(),
                                      priority,
                                      //TODO - don't hardcode in the username
                                      conanUserService.getUserByUserName("tgaclims"));

    // and submit the newly generated task
    conanSubmissionService.submitTask(conanTask);
  }

  //public String queryPipelines(JSONObject query, User user) {
  public String queryPipelines(JSONObject query) {
    String queryMethod = query.getString("query");
    log.info(query.toString());
    JSONObject params = query.getJSONObject("params");
    try {
      if ("getPipeline".equals(queryMethod)) {
        if (params == null || params.isNullObject() || params.isEmpty() || !params.has("name")) {
          throw new UnsupportedOperationException("Cannot call " +queryMethod+ " without a 'name' parameter.");
        }
        else {
          Method m = getConanPipelineService().getClass().getMethod(queryMethod, ConanUser.class, String.class);
          ConanPipeline pipeline = (ConanPipeline) m.invoke(getConanPipelineService(), getConanUserService().getUserByUserName("tgaclims"), params.getString("name"));
          return mapper.writeValueAsString(pipeline);
        }
      }
      else {
        if (queryMethod.contains("reorder") || queryMethod.contains("load") || queryMethod.contains("create")) {
          throw new UnsupportedOperationException("Cannot call " +queryMethod+ ".");
        }
        else {
          if (params == null || params.isNullObject() || params.isEmpty()) {
            Method m = getConanPipelineService().getClass().getMethod(queryMethod, ConanUser.class);
            List<ConanPipeline> pipelines = (List<ConanPipeline>)m.invoke(getConanPipelineService(), getConanUserService().getUserByUserName("tgaclims"));
            return mapper.writeValueAsString(pipelines);
          }
          else {
            throw new UnsupportedOperationException("Cannot call " +queryMethod+ ".");
          }
        }
      }
    }
    catch (NoSuchMethodException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (InvocationTargetException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (IllegalAccessException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (JsonMappingException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (JsonGenerationException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
    catch (IOException e) {
      e.printStackTrace();
      return "ERROR: " + e.getMessage();
    }
  }

  public void generateAndAddPipeline(PipelineRequest request) {
    List<ConanProcess> conanProcesses = new ArrayList<ConanProcess>();
    for (String processName : request.getProcesses()) {
      ConanProcess conanProcess = getConanProcessService().getProcess(processName);
      conanProcesses.add(conanProcess);
    }

    conanPipelineService.createPipeline(request.getName(),
                                        conanProcesses,
                                        getConanUserService().getUserByUserName("tgaclims"),
                                        request.isPrivate());
  }

}
TOP

Related Classes of uk.ac.bbsrc.tgac.miso.analysis.manager.AnalysisRequestManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.