/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.wikilegis.ui.pages; import java.io.IOException; import java.io.InputStream; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.markup.html.form.upload.FileUploadField; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.FeedbackPanel; import br.gov.camara.edemocracia.portlets.wikilegis.importer.ArtigoDTO; import br.gov.camara.edemocracia.portlets.wikilegis.importer.EstruturaDTO; import br.gov.camara.edemocracia.portlets.wikilegis.importer.XMLCodigoComercialWikilegisImporter; import br.gov.camara.edemocracia.portlets.wikilegis.model.Artigo; import br.gov.camara.edemocracia.portlets.wikilegis.model.Estrutura; import br.gov.camara.edemocracia.portlets.wikilegis.service.ArtigoLocalServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.service.EstruturaLocalServiceUtil; import br.gov.camara.edemocracia.portlets.wikilegis.ui.panels.WikiLegisMenuPanel; import br.gov.camara.edemocracia.portlets.wikilegis.ui.util.UIUtils; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; /** * * @author Bruno */ @SuppressWarnings("serial") public class UploadPage extends WebPage { public UploadPage() { initMenuWikilegis(); final FeedbackPanel uploadFeedback = new FeedbackPanel("feedback"); add(uploadFeedback); final FileUploadForm uploadForm = new FileUploadForm("uploadForm"); add(uploadForm); } private void initMenuWikilegis() { add(new WikiLegisMenuPanel("menuWikilegis")); } private class FileUploadForm extends Form<Void> { private FileUploadField fileUploadField; public FileUploadForm(String name) { super(name); setMultiPart(true); fileUploadField = new FileUploadField("fileInput"); fileUploadField.setOutputMarkupId(true); add(fileUploadField); add(new BookmarkablePageLink<HomePage>("cancelar", HomePage.class)); // setMaxSize(Bytes.kilobytes(100)); } @Override protected void onSubmit() { final FileUpload uploads = fileUploadField.getFileUpload(); if (uploads != null) { try { XMLCodigoComercialWikilegisImporter xmlImporter = new XMLCodigoComercialWikilegisImporter(); InputStream upload = uploads.getInputStream(); EstruturaDTO raiz; try { raiz = xmlImporter.processXML(upload); } finally { try { upload.close(); } catch (IOException e) { } } // Importa os elementos raiz long estruturaIdAnterior = 0l; for (EstruturaDTO estruturaDto : raiz.getFilhos()) { estruturaIdAnterior = importaEstrutura(estruturaDto, 0l, estruturaIdAnterior).getEstruturaId(); } importaArtigos(raiz, UIUtils.getScopeGroupId(), 0l); info("Arquivo importado com sucesso!"); } catch (Exception e) { error("Erro na importação: " + e.getMessage()); } } else { error("Nenhum arquivo encontrado."); } } /** * Importa uma estrutura e seus filhos * * @param elemento * @param estruturaPaiId * @param estruturaAnteriorId * @return * @throws PortalException * @throws SystemException */ private Estrutura importaEstrutura(EstruturaDTO elemento, long estruturaPaiId, long estruturaAnteriorId) throws PortalException, SystemException { long groupId = UIUtils.getScopeGroupId(); Estrutura estrutura = EstruturaLocalServiceUtil.criaEstrutura( groupId, estruturaPaiId, estruturaAnteriorId, elemento.getNome()); // Acrescenta estruturas filhas long estruturaId = estrutura.getEstruturaId(); long estruturaIdAnterior = 0l; for (EstruturaDTO estruturaDto : elemento.getFilhos()) { Estrutura filho = importaEstrutura(estruturaDto, estruturaId, estruturaIdAnterior); estruturaIdAnterior = filho.getEstruturaId(); } importaArtigos(elemento, groupId, estruturaId); return estrutura; } /** * @param elemento * @param groupId * @param estruturaId * @throws PortalException * @throws SystemException */ private void importaArtigos(EstruturaDTO elemento, long groupId, long estruturaId) throws PortalException, SystemException { long artigoIdAnterior = 0l; for (ArtigoDTO artigoDto : elemento.getArtigos()) { Artigo artigo = ArtigoLocalServiceUtil.criaArtigo(groupId, estruturaId, artigoIdAnterior, artigoDto.getProposta(), artigoDto.getVigente()); artigoIdAnterior = artigo.getArtigoId(); } } } }