package net.conselldemallorca.helium.core.model.dao; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.hibernate.criterion.Restrictions; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Component; import net.conselldemallorca.helium.core.extern.domini.DominiHelium; import net.conselldemallorca.helium.core.helper.DominiHelper; import net.conselldemallorca.helium.core.helperv26.MesuresTemporalsHelper; import net.conselldemallorca.helium.core.model.hibernate.Domini; import net.conselldemallorca.helium.core.model.hibernate.Domini.TipusAuthDomini; import net.conselldemallorca.helium.core.model.hibernate.Domini.TipusDomini; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.util.GlobalProperties; /** * Dao pels objectes de tipus Domini * * @author Limit Tecnologies <limit@limit.es> */ @Component public class DominiDao extends HibernateGenericDao<Domini, Long> { private Map<Long, DominiHelium> wsCache = new HashMap<Long, DominiHelium>(); private Map<Long, NamedParameterJdbcTemplate> jdbcTemplates = new HashMap<Long, NamedParameterJdbcTemplate>(); @Resource private MesuresTemporalsHelper mesuresTemporalsHelper; public DominiDao() { super(Domini.class); } public List<Domini> findAmbEntorn(Long entornId) { return findByCriteria(Restrictions.eq("entorn.id", entornId), Restrictions.isNull("expedientTipus.id")); } public List<Domini> findAmbEntornITipusExp(Long entornId, Long tipusExpedientId) { return findByCriteria( Restrictions.eq("entorn.id", entornId), Restrictions.eq("expedientTipus.id", tipusExpedientId)); } public List<Domini> findAmbEntornITipusExpONull(Long entornId, Long tipusExpedientId) { List<Domini> dominis = findByCriteria( Restrictions.eq("entorn.id", entornId), Restrictions.isNull("expedientTipus.id")); if (tipusExpedientId != null){ dominis.addAll(findAmbEntornITipusExp(entornId, tipusExpedientId)); } return dominis; } public Domini findAmbEntornICodi(Long entornId, String codi) { List<Domini> dominis = findByCriteria( Restrictions.eq("entorn.id", entornId), Restrictions.eq("codi", codi)); if (dominis.size() > 0) return dominis.get(0); return null; } public void makeDirty(Long dominiId) { wsCache.remove(dominiId); jdbcTemplates.remove(dominiId); } /*private List<FilaResultat> consultaWs( Domini domini, String id, Map<String, Object> parametres) throws Exception { mesuresTemporalsHelper.mesuraIniciar("DOMINI WS: " + domini.getCodi(), "domini"); DominiHelium client = getClientWsFromDomini(domini); List<ParellaCodiValor> paramsConsulta = new ArrayList<ParellaCodiValor>(); if (DominiHelper.DOMINI_INTERN_CODI.equalsIgnoreCase(domini.getCodi())) { paramsConsulta.add( new ParellaCodiValor( "entorn", domini.getEntorn().getCodi())); } if (parametres != null) { for (String codi: parametres.keySet()) { paramsConsulta.add(new ParellaCodiValor( codi, parametres.get(codi))); } } logger.debug("PeticiĆ³ de domini de tipus WS (" + "id=" + domini.getId() + ", " + "codi=" + domini.getCodi() + ", " + "params=" + parametresToString(parametres) + ")"); List<FilaResultat> resposta = client.consultaDomini(id, paramsConsulta); mesuresTemporalsHelper.mesuraCalcular("DOMINI WS: " + domini.getCodi(), "domini"); return resposta; } @SuppressWarnings({ "unchecked", "rawtypes" }) private List<FilaResultat> consultaSql( Domini domini, Map<String, Object> parametres) throws DominiException { try { logger.debug("PeticiĆ³ de domini de tipus SQL (" + "id=" + domini.getId() + ", " + "codi=" + domini.getCodi() + ", " + "params=" + parametresToString(parametres) + ")"); mesuresTemporalsHelper.mesuraIniciar("DOMINI SQL: " + domini.getCodi(), "domini"); NamedParameterJdbcTemplate jdbcTemplate = getJdbcTemplateFromDomini(domini); MapSqlParameterSource parameterSource = new MapSqlParameterSource(parametres) { public boolean hasValue(String paramName) { return true; } }; List<FilaResultat> resultat = jdbcTemplate.query( domini.getSql(), parameterSource, new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { FilaResultat fr = new FilaResultat(); ResultSetMetaData rsm = rs.getMetaData(); for (int i = 1; i <= rsm.getColumnCount(); i++) { fr.addColumna(new ParellaCodiValor( rsm.getColumnName(i), rs.getObject(i))); } return fr; } }); mesuresTemporalsHelper.mesuraCalcular("DOMINI SQL: " + domini.getCodi(), "domini"); return resultat; } catch (Exception ex) { throw new DominiException("No s'ha pogut consultar el domini: " + domini.getCodi(), ex); } } private DominiHelium getClientWsFromDomini(Domini domini) { DominiHelium clientWs = wsCache.get(domini.getId()); if (clientWs == null) { String usuari = null; String contrasenya = null; if (domini.getTipusAuth() != null && !TipusAuthDomini.NONE.equals(domini.getTipusAuth())) { if (OrigenCredencials.PROPERTIES.equals(domini.getOrigenCredencials())) { usuari = GlobalProperties.getInstance().getProperty(domini.getUsuari()); contrasenya = GlobalProperties.getInstance().getProperty(domini.getContrasenya()); } else { usuari = domini.getUsuari(); contrasenya = domini.getContrasenya(); } } String auth = "NONE"; if (TipusAuthDomini.HTTP_BASIC.equals(domini.getTipusAuth())) auth = "BASIC"; if (TipusAuthDomini.USERNAMETOKEN.equals(domini.getTipusAuth())) auth = "USERNAMETOKEN"; clientWs = (DominiHelium)WsClientUtils.getWsClientProxy( DominiHelium.class, domini.getUrl(), usuari, contrasenya, auth, false, false, true); wsCache.put(domini.getId(), clientWs); } return clientWs; } private NamedParameterJdbcTemplate getJdbcTemplateFromDomini(Domini domini) throws NamingException { NamedParameterJdbcTemplate jdbcTemplate = jdbcTemplates.get(domini.getId()); if (jdbcTemplate == null) { Context initContext = new InitialContext(); String dataSourceJndi = domini.getJndiDatasource(); if (isDesplegamentTomcat() && dataSourceJndi.endsWith("java:/es.caib.helium.db")) dataSourceJndi = "java:/comp/env/jdbc/HeliumDS"; DataSource ds = (DataSource)initContext.lookup(dataSourceJndi); jdbcTemplate = new NamedParameterJdbcTemplate(ds); jdbcTemplates.put(domini.getId(), jdbcTemplate); } return jdbcTemplate; } public List<FilaResultat> getResultat( Domini domini, String dominiConsultaWsId, Map<String, Object> parametres) throws Exception { List<FilaResultat> resultat = null; if (domini.getTipus().equals(TipusDomini.CONSULTA_WS)) resultat = consultaWs(domini, dominiConsultaWsId, parametres); else if (domini.getTipus().equals(TipusDomini.CONSULTA_SQL)) resultat = consultaSql(domini, parametres); if (resultat == null) resultat = new ArrayList<FilaResultat>(); return resultat; } private boolean isDesplegamentTomcat() { String desplegamentTomcat = GlobalProperties.getInstance().getProperty("app.domini.desplegament.tomcat"); return "true".equalsIgnoreCase(desplegamentTomcat); } private String parametresToString( Map<String, Object> parametres) { String separador = ", "; StringBuilder sb = new StringBuilder(); if (parametres != null) { for (String key: parametres.keySet()) { sb.append(key); sb.append(":"); sb.append(parametres.get(key)); sb.append(separador); } } if (sb.length() > 0) sb.substring(0, sb.length() - separador.length()); return sb.toString(); } private static final Log logger = LogFactory.getLog(DominiDao.class);*/ }