package edu.asu.spring.quadriga.web.transformation;
import java.util.List;
import java.util.concurrent.Future;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import edu.asu.spring.quadriga.domain.network.tranform.ITransformation;
import edu.asu.spring.quadriga.exceptions.QuadrigaGeneratorException;
import edu.asu.spring.quadriga.service.network.transform.impl.Generator;
import edu.asu.spring.quadriga.service.network.transform.impl.MatchGraphs;
import edu.asu.spring.quadriga.service.network.transform.impl.TransformNode;
/**
* @author yoganandakishore
*
* This class creates a task to generate transformed network
* asynchronously
*
*/
@Service
public class TransformationProcessor {
@Autowired
private Generator generator;
@Autowired
private MatchGraphs matchGraphs;
/**
* Asynchronously run the task of generating transformed network results and
* generating a string from those results
*
* @param transformations
* @param networkIdList
* @return future
* @throws QuadrigaGeneratorException
*/
@Async
public Future<String> runTransformationAsync(List<ITransformation> transformations, List<String> networkIdList)
throws QuadrigaGeneratorException {
List<List<TransformNode>> results = matchGraphs.matchGraphs(transformations, networkIdList);
String graphString = generator.generateText(results, null, true);
return new AsyncResult<>(graphString);
}
}