package fr.mcc.ginco.soap; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import javax.jws.WebService; import fr.mcc.ginco.beans.NodeLabel; import fr.mcc.ginco.beans.ThesaurusArray; import fr.mcc.ginco.beans.ThesaurusArrayConcept; import fr.mcc.ginco.beans.ThesaurusTerm; import fr.mcc.ginco.data.ReducedThesaurusArray; import fr.mcc.ginco.data.ReducedThesaurusTerm; import fr.mcc.ginco.services.INodeLabelService; import fr.mcc.ginco.services.IThesaurusArrayService; import fr.mcc.ginco.services.IThesaurusConceptService; /** * This class is the implementation of all SOAP services related to thesaurus objects */ @WebService(endpointInterface = "fr.mcc.ginco.soap.ISOAPThesaurusArrayService") public class SOAPThesaurusArrayServiceImpl implements ISOAPThesaurusArrayService { @Inject private IThesaurusArrayService thesaurusArrayService; @Inject @Named("nodeLabelService") private INodeLabelService nodeLabelService; @Inject @Named("thesaurusConceptService") private IThesaurusConceptService thesaurusConceptService; @Override public List<ReducedThesaurusArray> getThesaurusArraysByThesaurusId(String thesaurusId) { List<ReducedThesaurusArray> results = new ArrayList<ReducedThesaurusArray>(); List<ThesaurusArray> arrays = thesaurusArrayService.getAllThesaurusArrayByThesaurusId(null, thesaurusId); for (ThesaurusArray array : arrays) { NodeLabel label = nodeLabelService .getByThesaurusArrayAndLanguage(array.getIdentifier()); ReducedThesaurusArray reducedArray = new ReducedThesaurusArray(); reducedArray.setIdentifier(array.getIdentifier()); reducedArray.setTitle(label.getLexicalValue()); reducedArray.setOrdered(array.getOrdered()); results.add(reducedArray); } return results; } public void getTermsByThesaurusArray(ReducedThesaurusArray redThesArray) { ThesaurusArray thesArray = thesaurusArrayService.getThesaurusArrayById(redThesArray.getIdentifier()); List<ThesaurusArrayConcept> thesConcepts = new ArrayList<ThesaurusArrayConcept>(thesArray.getConcepts()); List<ReducedThesaurusTerm> list = new ArrayList<ReducedThesaurusTerm> (); if (thesArray.getOrdered()) { Collections.sort(thesConcepts, new Comparator<ThesaurusArrayConcept>() { public int compare(ThesaurusArrayConcept t1, ThesaurusArrayConcept t2) { return Integer.compare(t1.getArrayOrder(), t2.getArrayOrder()); } }); } for (ThesaurusArrayConcept thesConcept : thesConcepts) { ThesaurusTerm prefTerm = thesaurusConceptService.getConceptPreferredTerm(thesConcept.getIdentifier().getConceptId()); if (prefTerm != null) { list.add(ReducedThesaurusTerm.getReducedThesaurusTerm(prefTerm)); } } redThesArray.setTerms(list); } @Override public List<ReducedThesaurusArray> getThesaurusArraysWithTermsByThesaurusId(String thesaurusId) { List<ReducedThesaurusArray> results = getThesaurusArraysByThesaurusId(thesaurusId); for (ReducedThesaurusArray array : results) { getTermsByThesaurusArray(array); } return results; } @Override public ReducedThesaurusArray getThesaurusArrayWithTerms(String thesaurusArrayId) { // TODO Auto-generated method stub ReducedThesaurusArray reducedArray = new ReducedThesaurusArray(); ThesaurusArray array = thesaurusArrayService.getThesaurusArrayById(thesaurusArrayId); if (array != null) { NodeLabel label = nodeLabelService .getByThesaurusArrayAndLanguage(array.getIdentifier()); reducedArray.setIdentifier(array.getIdentifier()); reducedArray.setTitle(label.getLexicalValue()); reducedArray.setOrdered(array.getOrdered()); getTermsByThesaurusArray(reducedArray); } return reducedArray; } }