// Caso n�o existam itens a serem exibidos,
// O slide � exibido apenas com a informa��o de que nenhum item foi encontrado.
if (root.getElementsByTagName("semItens").getLength() > 0) {
Slide s = ppt.createSlide();
adicionaTitulo(request, root, s, ppt, caminhoImagens);
TextBox semItens = adicionaTextBox(s, "Nenhum item foi encontrado para os par�metros deste relat�rio.",
null, 5, 102, 600, 20, 0);
formataFonte(semItens, 14, "Arial", true, false, false, Color.blue, TextBox.AlignLeft);
adicionaRodape(root, s);
ppt.write(out);
exibePPT(request, response, out, caminhoCompleto);
}
NodeList itens = root.getElementsByTagName("item");
ArrayList slides = new ArrayList();
Slide s1;
int quantidadeSlides = 0;
int posicaoYQuebraSlide = 548;
int incrementoParaOutroParecer = 0;
int desceEtapas = 0;
for (int i = 0; i < itens.getLength(); i++) {
Node item = itens.item(i);
NodeList filhosItemCorrente = item.getChildNodes();
Node nd = null;
NamedNodeMap map = item.getAttributes();
nd = map.getNamedItem("nomeItem");
if (!nd.getNodeValue().equals("")) {
nomeItem = nd.getNodeValue();
}
// Obtendo a tag ocorrencias do item corrente
// Obtendo os pareceres do item corrente
Node noOcorrenciaCorrente = null;
Node noParecerCorrente = null;
ArrayList pareceres = new ArrayList();
String nomeNo;
for (int o = 0; o < filhosItemCorrente.getLength(); o++) {
nomeNo = filhosItemCorrente.item(o).getNodeName();
if (nomeNo.equals("ocorrencias")) {
noOcorrenciaCorrente = filhosItemCorrente.item(o);
} else if (nomeNo.equals("parecer")) {
noParecerCorrente = filhosItemCorrente.item(o);
pareceres.add(noParecerCorrente);
desceEtapas++;
}
}
// Se a tag item corrente tem o atributo nomeItem != "", cria-se um novo slide
if (!nd.getNodeValue().equals("")) {
// Criando o slide
s1 = null;
incrementoParaOutroParecer = 0;
slides.add(quantidadeSlides, ppt.createSlide());
s1 = (Slide)slides.get(quantidadeSlides);
quantidadeSlides++;
// Caso contr�rio, continuamos a escrever no mesmo slide
} else {
s1 = (ppt.getSlides()[ppt.getSlides().length - 1]);
}
// ************** Montagem do T�tulo ****************** //
adicionaTitulo(request, root, s1, ppt, caminhoImagens);
// ************** Montagem do �rgao ****************** //
// Obtendo o �rg�o no XML
nd = map.getNamedItem("orgaoItem");
String orgao = nd.getNodeValue();//pegarAtributo(doc, "item", "orgao");
// Obtendo o Respons�vel T�cnico no XML
nd = map.getNamedItem("labelRespTecnicoIett");
if (!nd.getNodeValue().trim().equals("")) {
coordenador = nd.getNodeValue();
nd = map.getNamedItem("valorRespTecnicoIett");
coordenador += "" + nd.getNodeValue();
}
//Texto do label DR1 - N�mero de Ocorrencias (label)
nd = map.getNamedItem("labelDR1");
String labelDR1 = nd.getNodeValue() + ":";
//Texto do valor DR1 - N�mero de Ocorrencias (valor)
nd = map.getNamedItem("valorDR1");
String valorDR1 = nd.getNodeValue();
adicionaOrgao (s1, orgao, nomeItem, coordenador);
if (valorDR1 != "") {
//montagem do label DR1
TextBox ctLabelDR1 = adicionaTextBox(s1, labelDR1, null, 0, 156, 198, 16, 1);
ctLabelDR1.setVerticalAlignment(1);
formataFonte(ctLabelDR1, 12, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
//montagem do valor DR1
TextBox ctValorDR1 = adicionaTextBox(s1, valorDR1, null, 160, 155, 198, 16, 1);
ctValorDR1.setVerticalAlignment(1);
formataFonte(ctValorDR1, 12, "Arial", false, false, false, Color.black, TextBox.AlignLeft);
}
// ************** Pareceres (Situa��o) **************** //
Iterator pareceresItem = pareceres.iterator();
while(pareceresItem.hasNext()) {
noParecerCorrente = (Node)pareceresItem.next();
// adicionando novo slide caso o parecer corrente n�o caiba no slide atual:
if ((174 + incrementoParaOutroParecer) >= posicaoYQuebraSlide) {
adicionaRodape(root, s1);
incrementoParaOutroParecer = 0;
// criando o novo slide
s1 = ppt.createSlide();
slides.add(quantidadeSlides, s1);
quantidadeSlides++;
// a partir daqui estamos escrevendo num novo slide
adicionaTitulo(request, root, s1, ppt, caminhoImagens);
adicionaOrgao (s1, orgao, nomeItem, coordenador);
}
//montagem do label situa��o
TextBox ctSituacao = adicionaTextBox(s1, "Situa��o:", null, 0, 174 + incrementoParaOutroParecer, 99, 17, 1);
ctSituacao.setVerticalAlignment (1);
formataFonte(ctSituacao, 12, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
//Texto da situa��o
String situacao = noParecerCorrente.getAttributes().getNamedItem("situacaoParecer").getNodeValue().toString();
//Deve-se remover as quebras de linha das strings exibidas para que n�o percam a formata��o de fonte.
situacao = situacao.replace("\n", " ");
//montagem do valor Situa��o
TextBox ctValorSituacao = adicionaTextBox(s1, situacao, null, 58, 174 + incrementoParaOutroParecer, 99, 17, 1);
ctValorSituacao.setVerticalAlignment(1);
formataFonte(ctValorSituacao, 12, "Arial", false, false, false, Color.black, TextBox.AlignLeft);
String pathImagemParecer = "";
//imagem da situa��o
try {
pathImagemParecer = noParecerCorrente.getAttributes().getNamedItem("caminhoImagem").getNodeValue().toString();
int beginIndex = pathImagemParecer.lastIndexOf("/");
pathImagemParecer = caminhoImagens + pathImagemParecer.substring(beginIndex, pathImagemParecer.length());
int idImagemParecer = ppt.addPicture(new File(pathImagemParecer), Picture.PNG);
Picture imagemParecer = new Picture(idImagemParecer);
imagemParecer.setAnchor(new java.awt.Rectangle(12, 190 + incrementoParaOutroParecer, 21,21));
s1.addShape(imagemParecer);
} catch (Exception e) {
System.out.println("Imagem n�o econtrada:" + pathImagemParecer);
}
//Texto do Label Parecer
String labelParecer = noParecerCorrente.getAttributes().getNamedItem("labelParecer").getNodeValue().toString()
+ noParecerCorrente.getAttributes().getNamedItem("dataUltParecer").getNodeValue().toString() + ":";
//montagem do labelParecer
TextBox ctLabelParecer = adicionaTextBox(s1, labelParecer, null, 48, 193 + incrementoParaOutroParecer, 330, 16, 1);
ctLabelParecer.setVerticalAlignment(1);
formataFonte(ctLabelParecer, 12, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
//Descri��o do parecer
String descricaoParecer = noParecerCorrente.getAttributes().getNamedItem("descricao").getNodeValue().toString();
//Deve-se remover as quebras de linha das strings exibidas para que n�o percam a formata��o de fonte.
descricaoParecer = descricaoParecer.replace("\n", " ");
//montagem do labelParecer
TextBox ctDescricaoParecer = adicionaTextBox(s1, descricaoParecer, null, 0, 214 + incrementoParaOutroParecer, 390, 36, 1);
formataFonte(ctDescricaoParecer, 10, "Arial", false, false, false, Color.black, TextBox.AlignLeft);
//montagem do label observa��es
TextBox ctLabelObservacoes = adicionaTextBox(s1, "Observa��es:", null, 0, 235 + incrementoParaOutroParecer, 99, 17, 1);
ctLabelObservacoes.setVerticalAlignment (1);
formataFonte(ctLabelObservacoes, 12, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
//observa��es
String observacoes = "";
if (noParecerCorrente.getAttributes().getNamedItem("observacoes") != null){
observacoes = noParecerCorrente.getAttributes().getNamedItem("observacoes").getNodeValue().toString();
}
//Deve-se remover as quebras de linha das strings exibidas para que n�o percam a formata��o de fonte.
observacoes = observacoes.replace("\n", " ");
//montagem do textbox de observacoes
TextBox ctObservacoes = adicionaTextBox(s1, observacoes, null, 0, 250 + incrementoParaOutroParecer, 390, 36, 1);
ctObservacoes.setVerticalAlignment(0);
formataFonte(ctObservacoes, 12, "Arial", false, false, false, Color.black, TextBox.AlignLeft);
incrementoParaOutroParecer = incrementoParaOutroParecer + 100;
}
//************** Lado Direito - tag labelFuncao *************************//
//Texto do label Fun��o
if (noOcorrenciaCorrente != null) {
String labelFuncao = noOcorrenciaCorrente.getAttributes().getNamedItem("labelFuncao").getNodeValue().toString();
//Montagem do label Fun��o
TextBox ctLabelFuncao = adicionaTextBox(s1, labelFuncao, null, 397, 156, 198, 16, 1);
ctLabelFuncao.setVerticalAlignment(1);
formataFonte(ctLabelFuncao, 12, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
//Preenchimento da fun��o
TextBox ctCabecalhoFuncao = adicionaTextBox(s1, "Data", Color.LIGHT_GRAY, 396, 173, 70, 14, 1);
ctCabecalhoFuncao.setVerticalAlignment (1);
formataFonte(ctCabecalhoFuncao, 8, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
TextBox ctCabecalhoFuncao2 = adicionaTextBox(s1, "Descri��o", Color.LIGHT_GRAY, 456, 173, 333, 14, 1);
ctCabecalhoFuncao2.setVerticalAlignment(1);
formataFonte(ctCabecalhoFuncao2, 8, "Arial", true, false, false, Color.black, TextBox.AlignLeft);
// tag ocorrencia
NodeList ocorrenciaNodeList = noOcorrenciaCorrente.getChildNodes();
int posicaoYOcorrencia = 187;
for (int o = 0; o < ocorrenciaNodeList.getLength(); o++) {
Node ocorrenciaNode = ocorrenciaNodeList.item(o);
NamedNodeMap mapOcorrencia = ocorrenciaNode.getAttributes();
if (mapOcorrencia != null) {
Node ndOcorrenciaData = mapOcorrencia.getNamedItem("data");
Node ndOcorrenciaDescricao = mapOcorrencia.getNamedItem("descricao");
String dataOcorrencia = ndOcorrenciaData.getNodeValue();
String descricaoOcorrencia = ndOcorrenciaDescricao.getNodeValue();
//Deve-se remover as quebras de linha das strings exibidas para que n�o percam a formata��o de fonte.
descricaoOcorrencia = descricaoOcorrencia.replace("\n", " ");
// Caixa de texto de cada "ocorrencia" - Data
TextBox ctOcorrenciaData = adicionaTextBox(s1, dataOcorrencia, null, 396, posicaoYOcorrencia, 70, 12, 1);
ctOcorrenciaData.setVerticalAlignment(1);
formataFonte(ctOcorrenciaData, 10, "Arial", false, false, false, Color.BLACK, TextBox.AlignLeft);
// Caixa de texto de cada "ocorrencia" - Descri��o
TextBox ctOcorrenciaDescricao = adicionaTextBox(s1, descricaoOcorrencia, null, 456, posicaoYOcorrencia, 333, 12, 1);
ctOcorrenciaDescricao.setVerticalAlignment(1);
formataFonte(ctOcorrenciaDescricao, 10, "Arial", false, false, false, Color.BLACK, TextBox.AlignLeft);
posicaoYOcorrencia = posicaoYOcorrencia + new Double(ctOcorrenciaData.getAnchor().getHeight()).intValue();
}
}
// Caso exista um outro slide com Di�rio de Bordo, resetamos a posicaoYOcorrencia
posicaoYOcorrencia = 187;
}
// ************ ETAPAS *************** //
// tag etapas
int posicaoYEtapas = 320;
// caso tenhamos mais de 1 parecer, devemos deslocar as etapas para baixo:
// (4 � a quantidade m�xima de pareceres que cabem em um slide)
if (pareceres.size() > 1 && pareceres.size() <= 4) {
posicaoYEtapas = posicaoYEtapas + (pareceres.size() * 58);
} else if (desceEtapas > 0) {
posicaoYEtapas = posicaoYEtapas + (desceEtapas * 58);
desceEtapas = 0;
}
int espacoEntreTextBox = 20;
Color corColuna = new Color(238,233,233); // cinza clarinho
NodeList etapasNodeList = root.getElementsByTagName("etapas");
NodeList etapaNodeList = root.getElementsByTagName("etapa");
for (int x = 0; (etapaNodeList.getLength() > 0) && (x < etapasNodeList.getLength()); x++) {
Node etapasNode = etapasNodeList.item(x);
NamedNodeMap mapEtapas = etapasNode.getAttributes();
if (mapEtapas != null && (etapasNode.getParentNode().equals(item) )) {
Node ndEtapas = mapEtapas.getNamedItem("labelFuncao");
String nomeEtapa = ndEtapas.getNodeValue();
// adicionando novo slide caso as Etapas n�o caibam no slide atual:
if (posicaoYEtapas >= posicaoYQuebraSlide) {
adicionaRodape(root, s1);
// resetando a posicaoYEtapas para ser utlizada no pr�ximo slide
posicaoYEtapas = 174;
// criando novo slide
s1 = ppt.createSlide();
slides.add(quantidadeSlides, s1);
quantidadeSlides++;
// a partir de agora escrevemos em outro slide
adicionaTitulo(request, root, s1, ppt, caminhoImagens);
adicionaOrgao (s1, orgao, nomeItem, coordenador);
}
// Caixa de texto do Label "Etapas:"
TextBox ctNomeEtapa = adicionaTextBox(s1, nomeEtapa, null, 3, posicaoYEtapas, 403, 15, 1);
ctNomeEtapa.setVerticalAlignment(1);
formataFonte(ctNomeEtapa, 12, "Arial", true, false, false, Color.BLACK, TextBox.AlignLeft);
posicaoYEtapas = posicaoYEtapas + espacoEntreTextBox;
// tag etapa
for (int p = 0; p < etapaNodeList.getLength(); p++) {
Node etapaNode = etapaNodeList.item(p);
NamedNodeMap mapEtapa = etapaNode.getAttributes();
// dentre as tags etapa do xml, queremos apenas as que s�o filhas do n�
// etapas corrente:
if (mapEtapa != null && etapaNode.getParentNode().equals(etapasNode)) {
Node ndEtapa = mapEtapa.getNamedItem("nomeEtapa");
String nomeEtapas = ndEtapa.getNodeValue();
// Caixa de texto do Nome da Etapa
TextBox ctNomeEtapas = adicionaTextBox(s1, nomeEtapas, null, 3, posicaoYEtapas, 403, 15, 1);
ctNomeEtapas.setVerticalAlignment(1);
formataFonte(ctNomeEtapas, 12, "Arial", true, false, false, Color.BLACK, TextBox.AlignLeft);
posicaoYEtapas = posicaoYEtapas + (espacoEntreTextBox - 6);
// tag etapasColuna
NodeList etapasColunaNodeList = etapaNode.getChildNodes();
String nomeEtapasColuna = "";
ArrayList linhasValor = new ArrayList();
String valor = "";
for (int q = 0; q < etapasColunaNodeList.getLength(); q++) {
Node etapasColunaNode = etapasColunaNodeList.item(q);
valor = "";
if (etapasColunaNode.getNodeName().equals("etapasColuna")) {
NamedNodeMap mapEtapasColuna = etapasColunaNode.getAttributes();
Node ndEtapasColuna = mapEtapasColuna.getNamedItem("label");
nomeEtapasColuna = nomeEtapasColuna +
ndEtapasColuna.getNodeValue() + "\t ";
} else if (etapasColunaNode.getNodeName().equals("itemEtapa")) {
NodeList estapasValorNodeList = etapasColunaNode.getChildNodes();
for (int s = 0; s < estapasValorNodeList.getLength(); s++) {
Node noEtapaValor = estapasValorNodeList.item(s);
NamedNodeMap mapEtapaValores = noEtapaValor.getAttributes();
if (mapEtapaValores != null){
Node ndEtapasValor = mapEtapaValores.getNamedItem("valor");
valor = valor + ndEtapasValor.getNodeValue().replace("\n", "") + "\t ";
}
}
linhasValor.add(valor);
}
}
// Caixa de texto com Labels de coluna da Etapa
TextBox ctEtapasColuna = adicionaTextBox(s1, nomeEtapasColuna, Color.LIGHT_GRAY, 5, posicaoYEtapas, 783, 15, 1);
ctEtapasColuna.setVerticalAlignment(1);
formataFonte(ctEtapasColuna, 8, "Arial", true, false, false, Color.BLACK, TextBox.AlignLeft);
posicaoYEtapas = posicaoYEtapas + new Double(ctEtapasColuna.getAnchor().getHeight()).intValue();
// Adiciona as linhas com valores das etapas:
for (int posi = 0; posi < linhasValor.size(); posi++) {
// Determinando a cor da linha atual (pode ser cinzinha claro ou branco)
corColuna = new Color(238,233,233);
if (posi % 2 != 0) corColuna = null;
// adicionando novo slide caso a linha de valor da etapa n�o caiba no slide atual:
if (posicaoYEtapas >= posicaoYQuebraSlide) {
adicionaRodape(root, s1);
// resetando a posicaoYEtapas para o outro slide
posicaoYEtapas = 174;
// criando o novo slide
s1 = ppt.createSlide();
slides.add(quantidadeSlides, s1);
quantidadeSlides++;
// a partir de agora estamos escrevendo no novo slide
adicionaTitulo(request, root, s1, ppt, caminhoImagens);
adicionaOrgao (s1, orgao, nomeItem, coordenador);
}
TextBox ctColunasValor = adicionaTextBox(s1, linhasValor.get(posi).toString(), corColuna, 5, posicaoYEtapas, 783, 12, 1);
ctColunasValor.setVerticalAlignment(1);
formataFonte(ctColunasValor, 9, "Arial", false, false, false, Color.BLACK, TextBox.AlignLeft);
posicaoYEtapas = posicaoYEtapas + new Double(ctColunasValor.getAnchor().getHeight()).intValue();
valor = "";
}
// espa�o entre linhas do conte�do de cada etapa (linhas brancas e cinzinha claro);
// 5 = altura de cada linha dessas.