}
@Override
public void process(JCas aJCas) throws AnalysisEngineProcessException {
Audio audio = new Audio(aJCas);
// Prelievo dell'array di link dal aJCas
Iterator linkIT = aJCas.getAnnotationIndex(LinkType.type).iterator();
LinkType link = (LinkType) linkIT.next();
// LinkType uri=null;
// StringArray tempPath=null;
// int i=0;
// FSIndex linkT = aJCas.getAnnotationIndex(LinkType.type);
// Assegnazione dell'array di link alla variabile locale
StringArray videoUri = link.getArrayVideoUri();
//Log degli uri dei video
int i;
for(i = 0; i < videoUri.size(); i++)
getContext().getLogger().log(Level.WARNING, videoUri.get(i));
// Ciclo per il download dei singoli video
// Thread download = null;
// for(i=0; i<videoUri.size(); i++){
// //Istanziazione dei thread
// download = new Thread( new Runnable() {
// public void run() {
// try {
// //Assegnazione all'iesimo elemento il path in cui è stato scaricato
// il file audio
// tempPath.set(i,
// AudioVideoProcessing.audioDownloadEndExtraction(uri.getSourceType(),
// videoUri.get(i)));
// } catch (IOException e) {
// getContext().getLogger().log(Level.WARNING, "Error: " + e.getMessage());
// } catch (InterruptedException e) {
// getContext().getLogger().log(Level.WARNING, "Error: " + e.getMessage());
// }
// }
// });
// //Partenza di ogni singola istanza
// download.start();
// }
// //Attesa della fine dei thread
// try {
// download.join();
// } catch (InterruptedException e) {
// getContext().getLogger().log(Level.WARNING, "Error: " + e.getMessage());
// }
//Inizializzazione dell'insieme di threads
ExecutorService es = Executors.newCachedThreadPool();
ArrayList<Callable<String>> tasks = new ArrayList<Callable<String>>();
List<Future<String>> results = new ArrayList<Future<String>>();
StringArray path = new StringArray(aJCas, videoUri.size());
// Assegnazione dell'array di competenza
audio.setAudioPath(path);
for (i = 0; i < videoUri.size(); i++)
tasks.add(new ThreadCallDownload(videoUri.get(i),link.getSourceType(),tp));
try {
//Metodo che esegue tutti i threads e restituisce i risultati una volta
//terminati tutti i trheads
results = es.invokeAll(tasks);
for(i = 0; i < results.size(); i++){
audio.setAudioPath(i, results.get(i).get());
getContext().getLogger().log(Level.WARNING, "Path: " + results.get(i).get());
}
} catch (InterruptedException e) {
getContext().getLogger().log(Level.WARNING, "InterruptedError: " + e.getMessage());
} catch (ExecutionException e) {
getContext().getLogger().log(Level.WARNING, "IOError/InterruptedError: " + e.getMessage());
}
// Aggiornamento degli indici
audio.addToIndexes();
}