Java tutorial
/* * Copyright (C) 2015 jlgranda * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jlgranda.fede.database; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import org.jpapi.model.Setting; import org.jpapi.controller.BussinesEntityHome; import org.jpapi.model.CodeType; import org.jpapi.model.Group; import org.jpapi.model.StatusType; import org.jpapi.model.profile.Subject; import org.jpapi.util.Dates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author jlgranda */ @Stateless public class SetupService implements Serializable { private static Logger log = LoggerFactory.getLogger(SetupService.class); private static final long serialVersionUID = 235471466504044866L; @PersistenceContext EntityManager em; protected BussinesEntityHome bussinesEntityHome = null; private static final String[][] DATA = { { "0", "PLAN DE CUENTAS SEGUN NIIF COMPLETAS Y NIIF PARA PYMES", "SCHEMA", "Plan de cuentas segn NIIF Completas y NIIF para PYMES" }, { "1", "ACTIVO", "GENDER", "Conforman el estado de situacin financiera, de flujo de efectivo y de evolucin patrimonio" }, { "10101", "EFECTIVO Y EQUIVALENTES AL EFECTIVO", "ACCOUNT", "Efectivo, comprende la caja y los depsitos bancarios a la vista.<br/>Equivalente al efectivo, son inversiones a corto plazo de gran liquidez (hasta 90 das), que son fcilmente convertibles en valores en efectivo, con riesgo insignificante de cambios en su valor. <br/>NIC 7p6, 7, 8, 9, 48, 49 NIIF para PYMES p7.2" }, { "10102", "ACTIVOS FINANCIEROS", "ACCOUNT", "NIC 32 p11 - NIC 39 - NIIF 7 - NIIF 9 <br/>Secciones 11 y 12 NIIF para las PYMES" }, { "1010201", "ACTIVOS FINANCIEROS A VALOR RAZONABLE CON CAMBIOS EN RESULTADOS", "ACCOUNT", "Son los activos financieros adquiridos para negociar activamente, con el objetivo de generar ganancia. <br/>Medicin Inicial y Posterior:<br/>A valor razonable<br/>La variacin se reconoce resultado del ejercicio" }, { "2", "PASIVO", "GENDER", "Conforman el estado de situacin financiera, de flujo de efectivo y de evolucin patrimonio" }, { "3", "PATRIMONIO", "GENDER", "Conforman el estado de situacin financiera, de flujo de efectivo y de evolucin patrimonio" }, { "4", "CUENTAS DE RESULTADO ACREEDORAS", "ASSET", "Cuentas de gestin de partidas de resultados acreedoras y deudoras, indispensable para la elaboracin del balance de perdidas y ganancias" }, { "5", "CUENTAS DE RESULTADO DEUDORAS", "LIABILITY", "Cuentas de gestin de partidas de resultados acreedoras y deudoras, indispensable para la elaboracin del balance de perdidas y ganancias" }, { "6", "CUENTAS CONTINGENTES", "INCOME", "Agrupan las obligaciones eventuales" }, { "7", "CUENTAS DE ORDEN", "EXPENSE", "Cuentas de orden y de control, indispensables para la buena administracin" } }; public void validate() { //bussinesEntityHome.setEntityManager(bussinesEntityRepository); validateDB(); //validateIdentityObjectTypes(); validateSecurity(); validateDefaultCustomer(); validateDefaultSupplier(); validateSetting(); } private void validateDB() { Setting singleResult = null; try { TypedQuery<Setting> query = getEntityManager() .createQuery("from Setting s where s.name='schemaVersion'", Setting.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { java.util.Date now = Dates.now(); singleResult = new Setting("schemaVersion", "1"); singleResult.setCreatedOn(now); singleResult.setLastUpdate(now); singleResult.setCodeType(CodeType.SYSTEM); getEntityManager().persist(singleResult); getEntityManager().flush(); } log.info("Current database schema version is [" + singleResult.getValue() + "]"); } // private void validateIdentityObjectTypes() { // if (getEntityManager().createQuery("select t from IdentityObjectType t where t.name = :name") // .setParameter("name", "USER") // .getResultList().isEmpty()) { // // IdentityObjectType user = new IdentityObjectType(); // user.setName("USER"); // getEntityManager().persist(user); // } // // if (getEntityManager().createQuery("select t from IdentityObjectType t where t.name = :name") // .setParameter("name", "GROUP") // .getResultList().isEmpty()) { // // IdentityObjectType group = new IdentityObjectType(); // group.setName("GROUP"); // getEntityManager().persist(group); // } // } private void validateGroups() { Group singleResult = null; Map<String, String> props = new HashMap<>(); //Grupos de arranque del sistema props.put("fede", "fede:1"); props.put("salud", "Salud:2"); props.put("alimentos", "Alimentos:3"); props.put("ropa", "Ropa:4"); props.put("educacion", "Educacin:5"); props.put("vivienda", "Vivienda:6"); props.put("favorito", "Favoritos:7"); String value = null; String name = null; Short orden = null; for (String key : props.keySet()) { value = props.get(key); try { TypedQuery<Group> query = getEntityManager().createQuery("from Group g where g.code='" + key + "'", Group.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { java.util.Date now = Dates.now(); name = value.split(":")[0]; orden = Short.valueOf(value.split(":")[1]); singleResult = new Group(key, name); singleResult.setOrden(orden); singleResult.setCreatedOn(now); singleResult.setLastUpdate(now); singleResult.setCodeType(CodeType.TAG); singleResult.setStatus(StatusType.ACTIVE.toString()); getEntityManager().persist(singleResult); getEntityManager().flush(); } log.info("Added group code: {} name: [{}]", key, singleResult.getName()); } } private void validateSetting() { Setting singleResult = null; Map<String, String> props = new HashMap<>(); //email settings // props.put("mail.from", "fede@jlgranda.com:Remitente de correo electrnico"); // props.put("mail.host", "jlgranda.com:Servidor de correo electrnico"); // props.put("mail.user", "fede:Usuario de correo electrnico"); // props.put("mail.password", "LieferQuireMidstUpends95: Contrasea de correo electrnico"); // props.put("mail.inbox", "INBOX:Carpeta de correo electrnico"); // props.put("mail.port", "25:Puerto de correo"); // props.put("mail.verbose", "false:Mostrar detalles de conversacin de sessin de correo"); // props.put("mail.debug", "false:Mostrar informacin de depuracin de sessin de correo"); // // props.put("mail.store.protocol", "imap:Protocolo de sessin de correo"); // props.put("mail.transport.protocol", "smtps:Protocolo seguro de sessin de correo"); props.put("mail.imap.host", "jlgranda.com:Servidor IMAP:IMAP"); props.put("mail.imap.port", "25:Puerto IMAP:IMAP"); props.put("mail.imaps.ssl.trust", "*:SSL TRUST:SMTPS"); props.put("mail.smtps.port", "25:Puerto SMTP:SMTPS"); props.put("mail.smtps.host", "jlgranda.com:Servidor de envios SMTPS:SMTPS"); props.put("mail.smtps.from", "AppsVentas <consiguemas@jlgranda.com>:Remitente de correo:SMTPS"); props.put("mail.smtps.username", "consiguemas@jlgranda.com:SMTP Username:SMTPS"); props.put("mail.smtps.password", "LitePorePrudePursed13:SMTP Password:SMTPS"); props.put("mail.smtps.auth", "true:Usar autenticacin:SMTPS"); props.put("mail.smtps.ssl", "true:SSL:SMTPS"); props.put("mail.smtp.starttls.enable", "false:Usar TTLS:SMTPS"); //XML utils settings props.put("fede.xml.tag.numeroAutorizacion", "<numeroAutorizacion></numeroAutorizacion>:Etiqueta de nmero de autorizacin en XML:XML"); props.put("fede.xml.tag.fechaAutorizacion", "<fechaAutorizacion></fechaAutorizacion>:Etiqueta de fecha de autorizacin en XML:XML"); //dates patterns props.put("fede.date.pattern", "dd/MM/yyyy:Formato de fecha:SYSTEM"); //UI settings props.put("fede.group.default", "fede:Grupo por defecto:UI"); props.put("fede.dashboard.timeline.length", "10:Longitud de lista en dashboard::UI"); props.put("fede.dashboard.range", "364:Rango de tiempo para mostrar tablas:UI"); //364 das props.put("fede.inbox.list.length", "50:Nmero de filas en detalles tipo tabla:UI"); //50 das props.put("app.fede.sales.dashboard.refreshtime", "20:Tiempo de refresco en pantallas de monitoreo:UI"); //20 segundos props.put("app.fede.sales.dashboard.lasts.list.length", "10:Longitud de listas rpidas:UI"); //10 segundos props.put("app.fede.sizeLimit", "1048576:Tamao mximo de carga de archivo:UI"); //maximo tamao de archivo a subir props.put("app.fede.fileLimit", "34:Nmero mximo de archivos a cargar:UI"); //Maximo de archivos a subir props.put("app.fede.allowTypes", "/(\\.|\\/)(xml|zip|pdf|txt)$/:Tipos de archivos permitidos:UI"); //Tipo de archivo permitidos props.put("app.management.tarea.documentos.sizeLimit", "1048576:Tamao mximo de carga de archivo:UI"); //maximo tamao de archivo a subir props.put("app.management.tarea.documentos.fileLimit", "34:Nmero mximo de archivos a cargar:UI"); //Maximo de archivos a subir props.put("app.management.tarea.documentos.allowTypes", "/(\\.|\\/)(xml|zip|pdf|txt)$/:Tipos de archivos permitidos:UI"); //Tipo de archivo permitidos props.put("app.admin.subject.sizeLimit", "1048576:Tamao mximo de carga de archivo:UI"); //maximo tamao de archivo a subir props.put("app.admin.subject.fileLimit", "34:Nmero mximo de archivos a cargar:UI"); //Maximo de archivos a subir props.put("app.admin.subject.allowTypes", "/(\\.|\\/)(gif|jpe?g|png)$/:Tipos de archivos permitidos:UI"); //Tipo de archivo permitidos props.put("app.profile.photo.width", "100:Ancho de Imagen:UI"); //Ancho de imgenes props.put("app.profile.photo.height", "100:Alto de Imagen:UI"); //Alto de imgenes props.put("app.fede.decimalSeparator", ".:Separador de decimales:CORE"); props.put("app.fede.thousandSeparator", ",:Separador de miles:CORE"); props.put("app.fede.decimalPlaces", "2:Nmero de digitos a mostrar en campos tipo nmero:CORE"); props.put("app.fede.inventory.top", "10:Nmero de elementos en listas top:CORE"); String label = null; String value = null; String category = null; for (String key : props.keySet()) { value = props.get(key).split(":")[0]; label = props.get(key).split(":")[1]; category = props.get(key).split(":")[2]; try { TypedQuery<Setting> query = getEntityManager() .createQuery("from Setting s where s.name='" + key + "' and owner is null", Setting.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { java.util.Date now = Dates.now(); singleResult = new Setting(label, key, value); singleResult.setCategory(category); singleResult.setCreatedOn(now); singleResult.setLastUpdate(now); singleResult.setCodeType(CodeType.SYSTEM); singleResult.setStatus(StatusType.ACTIVE.toString()); getEntityManager().persist(singleResult); getEntityManager().flush(); } log.info("Current {} is [{}]", key, singleResult.getValue()); } } private void validateSecurity() { Subject singleResult = null; try { TypedQuery<Subject> query = getEntityManager().createQuery("from Subject s where s.username='admin'", Subject.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { singleResult = createAdministrator(); getEntityManager().persist(singleResult); } } private void validateDefaultCustomer() { Subject singleResult = null; try { TypedQuery<Subject> query = getEntityManager() .createQuery("from Subject s where s.username='consumidorfinal'", Subject.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { singleResult = createDefaultCustomer(); getEntityManager().persist(singleResult); } } private void validateDefaultSupplier() { Subject singleResult = null; try { TypedQuery<Subject> query = getEntityManager() .createQuery("from Subject s where s.username='proveedorsinfactura'", Subject.class); singleResult = query.getSingleResult(); } catch (NoResultException e) { singleResult = createDefaultSupplier(); getEntityManager().persist(singleResult); } } private Subject createAdministrator() { Subject singleResult = new Subject(); singleResult.setEmail("admin@fede.com"); singleResult.setUsername("admin"); singleResult.setPassword((new org.apache.commons.codec.digest.Crypt().crypt("consumidorfinal"))); singleResult.setUsernameConfirmed(true); singleResult.setCreatedOn(Dates.now()); singleResult.setLastUpdate(Dates.now()); singleResult.setCodeType(CodeType.NONE); singleResult.setSubjectType(Subject.Type.SYSTEM); getEntityManager().persist(singleResult); return singleResult; } private Subject createDefaultSupplier() { Subject singleResult = new Subject(); singleResult.setEmail("proveedorsinfactura@fede.com"); singleResult.setUsername("proveedorsinfactura"); singleResult.setFirstname("Proveedor"); singleResult.setSurname("Sin factura"); singleResult.setCode("000000000000"); singleResult.setCodeType(CodeType.RUC); singleResult.setPassword((new org.apache.commons.codec.digest.Crypt().crypt("pr0v33d0r"))); singleResult.setUsernameConfirmed(true); singleResult.setCreatedOn(Dates.now()); singleResult.setLastUpdate(Dates.now()); singleResult.setSubjectType(Subject.Type.SYSTEM); getEntityManager().persist(singleResult); return singleResult; } private Subject createDefaultCustomer() { Subject singleResult = new Subject(); singleResult.setEmail("consumidorfinal@fede.com"); singleResult.setUsername("consumidorfinal"); singleResult.setFirstname("Consumidor"); singleResult.setSurname("Final"); singleResult.setCode("9999999999999"); singleResult.setCodeType(CodeType.RUC); singleResult.setPassword((new org.apache.commons.codec.digest.Crypt().crypt("c0nsum1d0rf1n4l"))); singleResult.setUsernameConfirmed(true); singleResult.setCreatedOn(Dates.now()); singleResult.setLastUpdate(Dates.now()); singleResult.setSubjectType(Subject.Type.SYSTEM); getEntityManager().persist(singleResult); return singleResult; } private EntityManager getEntityManager() { return em; } }