Search in sources :

Example 41 with PropertyAccessor

use of com.manydesigns.elements.reflection.PropertyAccessor in project Portofino by ManyDesigns.

the class ManyToManyAction method loadAssociations.

protected void loadAssociations() throws NoSuchFieldException {
    Table table = m2mConfiguration.getActualRelationTable();
    TableCriteria criteria = new TableCriteria(table);
    // TODO chiave multipla
    String onePropertyName = m2mConfiguration.getActualOnePropertyName();
    PropertyAccessor onePropertyAccessor = relationTableAccessor.getProperty(onePropertyName);
    // TODO chiave multipla
    SelectionProviderReference manySelectionProvider = m2mConfiguration.getManySelectionProvider();
    String manyPropertyName = manySelectionProvider.getActualSelectionProvider().getReferences().get(0).getActualFromColumn().getActualPropertyName();
    PropertyAccessor manyPropertyAccessor = relationTableAccessor.getProperty(manyPropertyName);
    criteria = criteria.eq(onePropertyAccessor, onePk);
    QueryStringWithParameters queryString;
    try {
        queryString = QueryUtils.mergeQuery(m2mConfiguration.getQuery(), criteria, this);
    } catch (RuntimeException e) {
        RequestMessages.addErrorMessage("Invalid query");
        throw e;
    }
    existingAssociations = QueryUtils.runHqlQuery(session, queryString.getQueryString(), queryString.getParameters());
    availableAssociations = new ArrayList<Object>();
    String databaseName = ((DatabaseSelectionProvider) manySelectionProvider.getActualSelectionProvider()).getToDatabase();
    String hql = ((DatabaseSelectionProvider) manySelectionProvider.getActualSelectionProvider()).getHql();
    if (!StringUtils.isEmpty(hql)) {
        Session selectionProviderSession = persistence.getSession(databaseName);
        QueryStringWithParameters manyQuery = QueryUtils.mergeQuery(hql, null, this);
        potentiallyAvailableAssociations = QueryUtils.runHqlQuery(selectionProviderSession, manyQuery.getQueryString(), manyQuery.getParameters());
    } else {
        throw new RuntimeException("Couldn't determine many query");
    }
    PropertyAccessor[] manyKeyProperties = manyTableAccessor.getKeyProperties();
    // TODO handle manyKeyProperties.length > 1
    PropertyAccessor manyPkAccessor = manyTableAccessor.getProperty(manyKeyProperties[0].getName());
    for (Object o : potentiallyAvailableAssociations) {
        Object oPk = manyPkAccessor.get(o);
        boolean existing = isExistingAssociation(manyPropertyAccessor, oPk);
        if (!existing) {
            availableAssociations.add(o);
        }
    }
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) TableCriteria(com.manydesigns.portofino.persistence.TableCriteria) SelectionProviderReference(com.manydesigns.portofino.resourceactions.m2m.configuration.SelectionProviderReference) QueryStringWithParameters(com.manydesigns.elements.text.QueryStringWithParameters) JSONObject(org.json.JSONObject) Session(org.hibernate.Session)

Example 42 with PropertyAccessor

use of com.manydesigns.elements.reflection.PropertyAccessor in project Portofino by ManyDesigns.

the class IdStrategy method generatePkStringArray.

public String[] generatePkStringArray(Object object) {
    PropertyAccessor[] keyProperties = classAccessor.getKeyProperties();
    String[] array = new String[keyProperties.length];
    for (int i = 0; i < keyProperties.length; i++) {
        PropertyAccessor property = keyProperties[i];
        Object value = property.get(object);
        String stringValue = OgnlUtils.convertValue(value, String.class);
        array[i] = stringValue;
    }
    return array;
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor)

Example 43 with PropertyAccessor

use of com.manydesigns.elements.reflection.PropertyAccessor in project Portofino by ManyDesigns.

the class QueryUtils method getQueryStringWithParametersForCriteria.

/**
 * Tranforms a {@link TableCriteria} to a query string with an associated array of parameters.
 * @param criteria the criteria.
 * @param alias the alias to use for the main entity.
 * @return the same criteria encoded as a HQL query with parameters.
 */
public static QueryStringWithParameters getQueryStringWithParametersForCriteria(@Nullable TableCriteria criteria, @Nullable String alias, int initialParameterIndex) {
    if (criteria == null) {
        return new QueryStringWithParameters("", new Object[0]);
    }
    Table table = criteria.getTable();
    ArrayList<Object> parametersList = new ArrayList<Object>();
    StringBuilder whereBuilder = new StringBuilder();
    for (Criterion criterion : criteria) {
        PropertyAccessor accessor = criterion.getPropertyAccessor();
        String hqlFormat;
        if (criterion instanceof TableCriteria.EqCriterion) {
            TableCriteria.EqCriterion eqCriterion = (TableCriteria.EqCriterion) criterion;
            Object value = eqCriterion.getValue();
            hqlFormat = "{0} = :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.InCriterion) {
            TableCriteria.InCriterion inCriterion = (TableCriteria.InCriterion) criterion;
            Object[] values = inCriterion.getValues();
            StringBuilder params = new StringBuilder();
            if (values != null) {
                boolean first = true;
                for (Object value : values) {
                    if (!first) {
                        params.append(", :p").append(parametersList.size() + initialParameterIndex);
                    } else {
                        params.append(":p").append(parametersList.size() + initialParameterIndex);
                        first = false;
                    }
                    parametersList.add(value);
                }
                hqlFormat = "{0} in (" + params + ")";
            } else {
                hqlFormat = null;
            }
        } else if (criterion instanceof TableCriteria.NeCriterion) {
            TableCriteria.NeCriterion neCriterion = (TableCriteria.NeCriterion) criterion;
            Object value = neCriterion.getValue();
            hqlFormat = "{0} <> :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.BetweenCriterion) {
            TableCriteria.BetweenCriterion betweenCriterion = (TableCriteria.BetweenCriterion) criterion;
            Object min = betweenCriterion.getMin();
            Object max = betweenCriterion.getMax();
            hqlFormat = "{0} >= :p" + (parametersList.size() + initialParameterIndex) + " AND {0} <= :p" + (parametersList.size() + initialParameterIndex + 1);
            parametersList.add(min);
            parametersList.add(max);
        } else if (criterion instanceof TableCriteria.GtCriterion) {
            TableCriteria.GtCriterion gtCriterion = (TableCriteria.GtCriterion) criterion;
            Object value = gtCriterion.getValue();
            hqlFormat = "{0} > :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.GeCriterion) {
            TableCriteria.GeCriterion gtCriterion = (TableCriteria.GeCriterion) criterion;
            Object value = gtCriterion.getValue();
            hqlFormat = "{0} >= :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.LtCriterion) {
            TableCriteria.LtCriterion ltCriterion = (TableCriteria.LtCriterion) criterion;
            Object value = ltCriterion.getValue();
            hqlFormat = "{0} < :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.LeCriterion) {
            TableCriteria.LeCriterion leCriterion = (TableCriteria.LeCriterion) criterion;
            Object value = leCriterion.getValue();
            hqlFormat = "{0} <= :p" + (parametersList.size() + initialParameterIndex);
            parametersList.add(value);
        } else if (criterion instanceof TableCriteria.LikeCriterion) {
            TableCriteria.LikeCriterion likeCriterion = (TableCriteria.LikeCriterion) criterion;
            String value = (String) likeCriterion.getValue();
            if (likeCriterion.getTextMatchMode() == TextMatchMode.EQUALS) {
                hqlFormat = "{0} = :p" + (parametersList.size() + initialParameterIndex);
                parametersList.add(value);
            } else {
                String pattern = processTextMatchMode(likeCriterion.getTextMatchMode(), value);
                hqlFormat = "{0} like :p" + (parametersList.size() + initialParameterIndex);
                parametersList.add(pattern);
            }
        } else if (criterion instanceof TableCriteria.IlikeCriterion) {
            TableCriteria.IlikeCriterion ilikeCriterion = (TableCriteria.IlikeCriterion) criterion;
            String value = (String) ilikeCriterion.getValue();
            if (ilikeCriterion.getTextMatchMode() == TextMatchMode.EQUALS) {
                hqlFormat = "lower({0}) = lower(:p" + (parametersList.size() + initialParameterIndex + ")");
                parametersList.add(value);
            } else {
                String pattern = processTextMatchMode(ilikeCriterion.getTextMatchMode(), value);
                hqlFormat = "lower({0}) like lower(:p" + (parametersList.size() + initialParameterIndex) + ")";
                parametersList.add(pattern);
            }
        } else if (criterion instanceof TableCriteria.IsNullCriterion) {
            hqlFormat = "{0} is null";
        } else if (criterion instanceof TableCriteria.IsNotNullCriterion) {
            hqlFormat = "{0} is not null";
        } else {
            logger.error("Unrecognized criterion: {}", criterion);
            throw new InternalError("Unrecognied criterion");
        }
        if (hqlFormat == null) {
            continue;
        }
        String accessorName = accessor.getName();
        if (alias != null) {
            accessorName = alias + "." + accessorName;
        }
        String hql = MessageFormat.format(hqlFormat, accessorName);
        if (whereBuilder.length() > 0) {
            whereBuilder.append(" AND ");
        }
        whereBuilder.append(hql);
    }
    String whereClause = whereBuilder.toString();
    String queryString;
    String actualEntityName = table.getActualEntityName();
    if (alias != null) {
        actualEntityName += " " + alias;
    }
    if (whereClause.length() > 0) {
        queryString = MessageFormat.format("FROM {0}" + WHERE_STRING + "{1}", actualEntityName, whereClause);
    } else {
        queryString = MessageFormat.format("FROM {0}", actualEntityName);
    }
    Object[] parameters = new Object[parametersList.size()];
    parametersList.toArray(parameters);
    return new QueryStringWithParameters(queryString, parameters);
}
Also used : QueryStringWithParameters(com.manydesigns.elements.text.QueryStringWithParameters) Criterion(com.manydesigns.elements.fields.search.Criterion) PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor)

Example 44 with PropertyAccessor

use of com.manydesigns.elements.reflection.PropertyAccessor in project Portofino by ManyDesigns.

the class SelectionProviderLogic method getOption.

@NotNull
public static OptionProvider.Option getOption(String name, PropertyAccessor[] propertyAccessors, @Nullable TextFormat[] textFormats, Object object) {
    boolean active = true;
    if (object instanceof Object[]) {
        Object[] valueAndActive = (Object[]) object;
        if (valueAndActive.length > 1) {
            active = valueAndActive[1] instanceof Boolean && (Boolean) valueAndActive[1];
        }
        if (valueAndActive.length > 0) {
            object = valueAndActive[0];
        } else {
            throw new IllegalArgumentException("Invalid selection provider query result - sp: " + name);
        }
    }
    Object[] values = new Object[propertyAccessors.length];
    String[] labels = new String[propertyAccessors.length];
    int j = 0;
    for (PropertyAccessor property : propertyAccessors) {
        Object value = property.get(object);
        values[j] = value;
        if (textFormats == null || textFormats[j] == null) {
            String label = OgnlUtils.convertValueToString(value);
            labels[j] = label;
        } else {
            TextFormat textFormat = textFormats[j];
            labels[j] = textFormat.format(object);
        }
        j++;
    }
    return new OptionProvider.Option(values, labels, active);
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) TextFormat(com.manydesigns.elements.text.TextFormat) NotNull(org.jetbrains.annotations.NotNull)

Example 45 with PropertyAccessor

use of com.manydesigns.elements.reflection.PropertyAccessor in project Portofino by ManyDesigns.

the class AbstractCompositeElement method findFieldByPropertyName.

public Field findFieldByPropertyName(String propertyName) {
    for (T element : this) {
        if (element instanceof Field) {
            Field field = (Field) element;
            PropertyAccessor accessor = field.getPropertyAccessor();
            if (accessor.getName().equals(propertyName)) {
                return field;
            }
        } else if (element instanceof AbstractCompositeElement) {
            Field field = ((AbstractCompositeElement) element).findFieldByPropertyName(propertyName);
            if (field != null) {
                return field;
            }
        }
    }
    return null;
}
Also used : Field(com.manydesigns.elements.fields.Field) PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor)

Aggregations

PropertyAccessor (com.manydesigns.elements.reflection.PropertyAccessor)46 ClassAccessor (com.manydesigns.elements.reflection.ClassAccessor)13 JavaClassAccessor (com.manydesigns.elements.reflection.JavaClassAccessor)12 JSONObject (org.json.JSONObject)5 SelectionProvider (com.manydesigns.elements.options.SelectionProvider)4 Field (com.manydesigns.elements.fields.Field)3 SelectField (com.manydesigns.elements.fields.SelectField)3 OgnlTextFormat (com.manydesigns.elements.text.OgnlTextFormat)3 TableAccessor (com.manydesigns.portofino.reflection.TableAccessor)3 Session (org.hibernate.Session)3 FieldSet (com.manydesigns.elements.annotations.FieldSet)2 SelectionModel (com.manydesigns.elements.options.SelectionModel)2 QueryStringWithParameters (com.manydesigns.elements.text.QueryStringWithParameters)2 TableCriteria (com.manydesigns.portofino.persistence.TableCriteria)2 SelectionProviderReference (com.manydesigns.portofino.resourceactions.m2m.configuration.SelectionProviderReference)2 Serializable (java.io.Serializable)2 Annotation (java.lang.annotation.Annotation)2 BigDecimal (java.math.BigDecimal)2 URISyntaxException (java.net.URISyntaxException)2 HashMap (java.util.HashMap)2