@Override public Object bind( RootParamNode rootParamNode, String name, Class clazz, java.lang.reflect.Type type, Annotation[] annotations) { // TODO need to be more generic in order to work with JPASupport if (clazz.isAnnotationPresent(Entity.class)) { ParamNode paramNode = rootParamNode.getChild(name, true); String[] keyNames = new JPAModelLoader(clazz).keyNames(); ParamNode[] ids = new ParamNode[keyNames.length]; // Collect the matching ids int i = 0; for (String keyName : keyNames) { ids[i++] = paramNode.getChild(keyName, true); } if (ids != null && ids.length > 0) { try { EntityManager em = JPABase.getJPAConfig(clazz).getJPAContext().em(); StringBuilder q = new StringBuilder().append("from ").append(clazz.getName()).append(" o where"); int keyIdx = 1; for (String keyName : keyNames) { q.append(" o.").append(keyName).append(" = ?").append(keyIdx++).append(" and "); } if (q.length() > 4) { q = q.delete(q.length() - 4, q.length()); } Query query = em.createQuery(q.toString()); // The primary key can be a composite. Class[] pk = new JPAModelLoader(clazz).keyTypes(); int j = 0; for (ParamNode id : ids) { if (id.getValues() == null || id.getValues().length == 0 || id.getFirstValue(null) == null || id.getFirstValue(null).trim().length() <= 0) { // We have no ids, it is a new entity return GenericModel.create(rootParamNode, name, clazz, annotations); } query.setParameter( j + 1, Binder.directBind( id.getOriginalKey(), annotations, id.getValues()[0], pk[j++], null)); } Object o = query.getSingleResult(); return GenericModel.edit(rootParamNode, name, o, annotations); } catch (NoResultException e) { // ok } catch (Exception e) { throw new UnexpectedException(e); } } return GenericModel.create(rootParamNode, name, clazz, annotations); } return null; }
/** * Gets the name. * * @return the name */ public String getName() { StringBuilder name = new StringBuilder(); if (!StringUtil.isNullOrEmpty(title)) { name.append(title); } if (!StringUtil.isNullOrEmpty(firstname)) { if (name.length() > 0) { name.append(" "); } name.append(firstname); } if (!StringUtil.isNullOrEmpty(lastname)) { if (name.length() > 0) { name.append(" "); } name.append(lastname); } return name.toString(); }
private static String generateToken() { final StringBuilder builder = new StringBuilder(260); while (builder.length() < 256) { builder.append(Long.toHexString(TOKEN_GENERATOR.nextLong())); } return builder.substring(0, 256); }
@Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("Audit >>> "); if (userName != null) { builder.append(userName); } if (event != null) { if (builder.length() > 0) { builder.append(' '); } builder.append(event); } if (dataLabel != null) { if (builder.length() > 0) { builder.append(' '); } builder.append(dataLabel); builder.append('.'); } if (dataId != null) { if (builder.length() > 0) { builder.append(' '); } builder.append("ID: '"); builder.append(dataId); builder.append("' Type: '"); builder.append(dataType); builder.append("'"); } if (dataOldVersionId != null || dataNewVersionId != null) { if (builder.length() > 0) { builder.append(' '); } builder.append(" Versions: '"); builder.append(dataOldVersionId); builder.append("' -> '"); builder.append(dataNewVersionId); builder.append("'"); } return builder.toString(); }
public Query buildQuery(Integer type, T example, String... orden) { StringBuilder qry; List<String> ids = new ArrayList<String>(); if (type == 1) { qry = new StringBuilder(SELECT_COUNT); qry.append(example.getClass().getSimpleName()); } else { qry = new StringBuilder(SELECT); qry.append(example.getClass().getSimpleName()); ids = this.obtenerId(example); } qry.append(FROM); qry.append(WHERE); List<Object> parametros = new ArrayList(); Criterio criterio = new Criterio(); Map<String, Object> propiedades = this.obtenerPropiedades(example); criterio.contruccion(propiedades); Set<String> igualdad = criterio.igualdad.keySet(); Integer idx = 1; for (String key : igualdad) { if (idx > 1) { qry.append(AND); } qry.append(OBJ); qry.append(key); qry.append(EQ); qry.append(idx); parametros.add(criterio.igualdad.get(key)); idx++; } Set<String> likeKeys = criterio.like.keySet(); for (String key : likeKeys) { if (idx > 1) { qry.append(AND); } Object valor = criterio.like.get(key); if (valor instanceof String) { qry.append(LOWER); qry.append(OBJ); qry.append(key); qry.append(")"); qry.append(LIKE); qry.append(idx); parametros.add(((String) valor).toLowerCase()); } else { qry.append(OBJ); qry.append(key); qry.append(LIKE); qry.append(idx); parametros.add(valor); } idx++; } Set<String> compositeKeys = criterio.compuesto.keySet(); for (String key : compositeKeys) { Object value = criterio.compuesto.get(key); try { if (value.toString().startsWith("class java.util")) { continue; } else if (StringUtils.containsIgnoreCase(key, "pk")) { Map<String, Object> propsComposites = this.obtenerPropiedades(value, key); Criterio criterioCompuesto = new Criterio(); criterioCompuesto.contruccion(propsComposites); if (!criterioCompuesto.igualdad.isEmpty()) { Set<String> eqKeysPK = criterioCompuesto.igualdad.keySet(); for (String keyPK : eqKeysPK) { if (idx > 1) { qry.append(AND); } qry.append(OBJ); qry.append(keyPK); qry.append(EQ); qry.append(idx); parametros.add(criterioCompuesto.igualdad.get(keyPK)); idx++; } } if (!criterioCompuesto.like.isEmpty()) { Set<String> likeKeysPK = criterioCompuesto.like.keySet(); for (String keyPK : likeKeysPK) { if (idx > 1) { qry.append(AND); } Object valor = criterioCompuesto.like.get(keyPK); if (valor instanceof String) { qry.append(LOWER); qry.append(OBJ); qry.append(keyPK); qry.append(")"); qry.append(LIKE); qry.append(idx); parametros.add(((String) valor).toLowerCase()); } else { qry.append(OBJ); qry.append(keyPK); qry.append(LIKE); qry.append(idx); parametros.add(valor); } idx++; } } } else { Map<String, Object> propsComposites = this.obtenerPropiedades(value); Criterio criterioCompuesto = new Criterio(); criterioCompuesto.contruccion(propsComposites); if (!criterioCompuesto.igualdad.isEmpty()) { Set<String> eqKeysPK = criterioCompuesto.igualdad.keySet(); for (String keyPK : eqKeysPK) { if (idx > 1) { qry.append(AND); } qry.append(OBJ); qry.append(key); qry.append("."); qry.append(keyPK); qry.append(EQ); qry.append(idx); parametros.add(criterioCompuesto.igualdad.get(keyPK)); idx++; } } if (!criterioCompuesto.like.isEmpty()) { Set<String> likeKeysPK = criterioCompuesto.like.keySet(); for (String keyPK : likeKeysPK) { System.out.println( "Compuesto LIKE: " + keyPK + ", " + criterioCompuesto.igualdad.get(keyPK)); if (idx > 1) { qry.append(AND); } Object valor = criterioCompuesto.like.get(keyPK); if (valor instanceof String) { qry.append(LOWER); qry.append(OBJ); qry.append(key); qry.append("."); qry.append(keyPK); qry.append(")"); qry.append(LIKE); qry.append(idx); parametros.add(((String) valor).toLowerCase()); } else { qry.append(OBJ); qry.append(key); qry.append("."); qry.append(keyPK); qry.append(LIKE); qry.append(idx); parametros.add(valor); } idx++; } } } } catch (RuntimeException e) { continue; } } if (idx == 1) { qry.append(" 1=1"); } if (!ids.isEmpty()) { qry.append(ORDER); } else { qry.append(" "); } if (orden.length > 0) { for (String ord : orden) { qry.append(OBJ); qry.append(ord.substring(2)); if (ord.startsWith("A,")) { qry.append(ASC); } else if (ord.startsWith("D,")) { qry.append(DESC); } } } else { for (String id : ids) { if (!id.contains("_persistence")) { qry.append(OBJ); qry.append(id); qry.append(ASC); } } } System.out.println(qry.substring(0, qry.length() - 2)); Query query = this.em.createQuery(qry.substring(0, qry.length() - 2)); if (!parametros.isEmpty()) { int i = 1; for (Object obj : parametros) { query.setParameter(i, obj); i++; } } return query; }