package Sercultur.lists;
import Sercultur.classes.Exposicao;
import Sercultur.classes.comparators.ExposicoesComparator;
import XmlUtils.XmlUtil;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class ExposicaoList {
//Lista de Exposicoes
public static ArrayList<Exposicao> getAll(){
Document doc = getServiceDoc("", "");
return getListFromDoc(doc);
}
//Lista de Exposicoes By Distrito
public static ArrayList<Exposicao> getByDistrito(String numeroDistrito){
Document doc = getServiceDoc(numeroDistrito, "");
return getListFromDoc(doc);
}
//Lista de Exposicoes By Concelho
public static ArrayList<Exposicao> getByConcelho(String numeroConcelho){
Document doc = getServiceDoc("", numeroConcelho);
return getListFromDoc(doc);
}
//Lista de Exposicoes from Doc
public static ArrayList<Exposicao> getListFromDoc(Document doc){
LinkedHashSet<Integer> idsEstreias = getEstreiasId();
LinkedHashSet<Exposicao> list = new LinkedHashSet<Exposicao>();
ArrayList<Exposicao> arrayList = new ArrayList<Exposicao>();
//cada exposicao
NodeList rows = doc.getElementsByTagName("Row");
for(int i = 0; i < rows.getLength(); i++ ){
Element e = (Element)rows.item(i);
Element tema = (Element) e.getElementsByTagName("TemaEvento").item(0);
Element titulo = (Element) e.getElementsByTagName("Evento").item(0);
Element descricao = (Element) e.getElementsByTagName("Descricao").item(0);
Element numeroConcelho = (Element) e.getElementsByTagName("NumeroConcelho").item(0);
Element numeroDistrito = (Element) e.getElementsByTagName("NumeroDistrito").item(0);
Element imagemPequena = (Element) e.getElementsByTagName("ImagemPequena").item(0);
Element imagem = (Element) e.getElementsByTagName("Imagem1").item(0);
Element horario = (Element) e.getElementsByTagName("Horario").item(0);
Element precoEntrada = (Element) e.getElementsByTagName("PrecoEntrada").item(0);
Element local = (Element) e.getElementsByTagName("Local").item(0);
Element websiteLocal = (Element) e.getElementsByTagName("WebSiteLocal").item(0);
Element minData = (Element) e.getElementsByTagName("MinData").item(0);
Element maxData = (Element) e.getElementsByTagName("MaxData").item(0);
Element numero = (Element) e.getElementsByTagName("Numero").item(0);
arrayList.add(new Exposicao(
tema.getTextContent(),
titulo.getTextContent(),
descricao.getTextContent(),
numeroConcelho.getTextContent(),
numeroDistrito.getTextContent(),
imagemPequena.getTextContent(),
imagem.getTextContent(),
horario.getTextContent(),
precoEntrada.getTextContent(),
local.getTextContent(),
websiteLocal.getTextContent(),
minData.getTextContent(),
maxData.getTextContent(),
idsEstreias.contains( Integer.parseInt( numero.getTextContent() ) ) ? true : false
));
}
Collections.sort(arrayList);
return arrayList;
}
//Ids das estreias (exposições)
private static LinkedHashSet<Integer> getEstreiasId(){
LinkedHashSet<Integer> ids = new LinkedHashSet<Integer>();
SerculturServices.Sws service = new SerculturServices.Sws();
QName portQName = new QName("http://ws.sercultur.pt/", "SwsSoap12");
String req = "<EstreiasExposicoes xmlns=\"http://ws.sercultur.pt/\"><Concelho></Concelho></EstreiasExposicoes>";
try { // Call Web Service Operation
Dispatch<Source> sourceDispatch = null;
sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req)));
Document doc = XmlUtil.getDocFromSource(result);
NodeList list = doc.getElementsByTagName("Numero");
for( int i = 0; i < list.getLength(); i++ ){
ids.add( Integer.parseInt( list.item(i).getTextContent() ) );
}
} catch (Exception ex) {
System.out.println("Error:"+ex.getMessage());
}
return ids;
}
private static Document getServiceDoc(String numeroDistrito, String numeroConcelho ){
SerculturServices.Sws service = new SerculturServices.Sws();
QName portQName = new QName("http://ws.sercultur.pt/", "SwsSoap12");
String req = "<Agenda xmlns=\"http://ws.sercultur.pt/\"><Area></Area><Tipo>1</Tipo><Tema></Tema><CicloFestival></CicloFestival><Distrito>"+numeroDistrito+"</Distrito><Concelho>"+numeroConcelho+"</Concelho><DiasProgramacao></DiasProgramacao><Destaques></Destaques><Opcionais></Opcionais><EspacoAcademico></EspacoAcademico><Internacional></Internacional><Local></Local><Evento></Evento></Agenda>";
try { // Call Web Service Operation
Dispatch<Source> sourceDispatch = null;
sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req)));
return XmlUtil.getDocFromSource(result);
} catch (Exception ex) {
System.out.println("Error:"+ex.getMessage());
}
return null;
}
}