Search in sources :

Example 31 with PropertyAccessor

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

the class NumericFieldTest method testFormattedWithModifiers.

public void testFormattedWithModifiers() throws NoSuchFieldException {
    ClassAccessor classAccessor = JavaClassAccessor.getClassAccessor(this.getClass());
    PropertyAccessor myPropertyAccessor = classAccessor.getProperty("myFormattedDecimalWithModifiers");
    decimalField = new NumericField(myPropertyAccessor, Mode.EDIT, null);
    decimalField.setStringValue("aaa1,234.5bbb");
    assertTrue(decimalField.validate());
    assertEquals(decimalField.getValue(), new BigDecimal("123.4"));
    decimalField.setStringValue("aaa1.234,5bbb");
    assertFalse(decimalField.validate());
    // Out of range, max is 10^precision
    decimalField.setStringValue("aaa1,234,567.8bbb");
    assertFalse(decimalField.validate());
    // Leave only Italian locale
    req.locales.remove(0);
    decimalField = new NumericField(myPropertyAccessor, Mode.EDIT, null);
    decimalField.setStringValue("aaa1,234.5bbb");
    assertFalse(decimalField.validate());
    decimalField.setStringValue("aaa1.234,5bbb");
    assertTrue(decimalField.validate());
    assertEquals(decimalField.getValue(), new BigDecimal("123.4"));
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) JavaClassAccessor(com.manydesigns.elements.reflection.JavaClassAccessor) ClassAccessor(com.manydesigns.elements.reflection.ClassAccessor) BigDecimal(java.math.BigDecimal)

Example 32 with PropertyAccessor

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

the class NumericFieldTest method testFormatted.

public void testFormatted() throws NoSuchFieldException {
    ClassAccessor classAccessor = JavaClassAccessor.getClassAccessor(this.getClass());
    PropertyAccessor myPropertyAccessor = classAccessor.getProperty("myFormattedDecimal");
    decimalField = new NumericField(myPropertyAccessor, Mode.EDIT, null);
    decimalField.setStringValue("aaa1,234.5bbb");
    assertEquals(decimalField.getValue(), new BigDecimal("1234"));
    assertTrue(decimalField.validate());
    decimalField.setStringValue("aaa1.234,5bbb");
    assertFalse(decimalField.validate());
    // Leave only Italian locale
    req.locales.remove(0);
    decimalField = new NumericField(myPropertyAccessor, Mode.EDIT, null);
    decimalField.setStringValue("aaa1,234.5bbb");
    assertFalse(decimalField.validate());
    decimalField.setStringValue("aaa1.234,5bbb");
    assertTrue(decimalField.validate());
    assertEquals(decimalField.getValue(), new BigDecimal("1234"));
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) JavaClassAccessor(com.manydesigns.elements.reflection.JavaClassAccessor) ClassAccessor(com.manydesigns.elements.reflection.ClassAccessor) BigDecimal(java.math.BigDecimal)

Example 33 with PropertyAccessor

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

the class FormBuilder method configReflectiveFields.

public FormBuilder configReflectiveFields() {
    logger.debug("configReflectiveFields");
    groupedPropertyAccessors = new ArrayList<ArrayList<PropertyAccessor>>();
    fieldSetNames = new ArrayList<String>();
    ArrayList<PropertyAccessor> currentGroup = null;
    String currentGroupName = null;
    for (PropertyAccessor current : classAccessor.getProperties()) {
        // check if field is enabled
        Enabled enabled = current.getAnnotation(Enabled.class);
        if (enabled != null && !enabled.value()) {
            logger.debug("Skipping non-enabled field: {}", current.getName());
            continue;
        }
        String groupName = null;
        if (current.isAnnotationPresent(com.manydesigns.elements.annotations.FieldSet.class)) {
            groupName = getText(current.getAnnotation(FieldSet.class).value());
        }
        if ((currentGroup == null) || (groupName != null && !groupName.equals(currentGroupName))) {
            currentGroup = new ArrayList<PropertyAccessor>();
            groupedPropertyAccessors.add(currentGroup);
            fieldSetNames.add(groupName);
            currentGroupName = groupName;
        }
        currentGroup.add(current);
    }
    logger.debug("configReflectiveFields");
    return this;
}
Also used : FieldSet(com.manydesigns.elements.annotations.FieldSet) PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) Enabled(com.manydesigns.elements.annotations.Enabled)

Example 34 with PropertyAccessor

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

the class FormBuilder method build.

// **************************************************************************
// Building
// **************************************************************************
public Form build() {
    logger.debug("build");
    Form form = new Form(mode);
    if (groupedPropertyAccessors == null) {
        configReflectiveFields();
    }
    // remove unused (or partially used) selection providers
    List<PropertyAccessor> allPropertyAccessors = new ArrayList<PropertyAccessor>();
    for (ArrayList<PropertyAccessor> group : groupedPropertyAccessors) {
        allPropertyAccessors.addAll(group);
    }
    removeUnusedSelectionProviders(allPropertyAccessors);
    // create the form/fieldset/field sructure
    Map<String, Field> fieldMap = new HashMap<String, Field>();
    for (int i = 0; i < groupedPropertyAccessors.size(); i++) {
        buildFieldGroup(form, i, fieldMap);
    }
    // handle cascaded select fields
    for (Map.Entry<String[], SelectionProvider> current : selectionProviders.entrySet()) {
        String[] fieldNames = current.getKey();
        SelectionProvider selectionProvider = current.getValue();
        SelectionModel selectionModel = selectionProvider.createSelectionModel();
        SelectField previousField = null;
        for (int i = 0; i < fieldNames.length; i++) {
            SelectField selectField = (SelectField) fieldMap.get(fieldNames[i]);
            selectField.setSelectionModel(selectionModel);
            selectField.setSelectionModelIndex(i);
            if (previousField != null) {
                selectField.setPreviousSelectField(previousField);
                previousField.setNextSelectField(selectField);
            }
            previousField = selectField;
        }
    }
    return form;
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) SelectField(com.manydesigns.elements.fields.SelectField) Field(com.manydesigns.elements.fields.Field) SelectField(com.manydesigns.elements.fields.SelectField) SelectionModel(com.manydesigns.elements.options.SelectionModel) SelectionProvider(com.manydesigns.elements.options.SelectionProvider)

Example 35 with PropertyAccessor

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

the class SearchFormBuilder method build.

// **************************************************************************
// Building
// **************************************************************************
public SearchForm build() {
    logger.debug("build");
    SearchForm searchForm = new SearchForm();
    FieldsManager manager = FieldsManager.getManager();
    if (propertyAccessors == null) {
        configReflectiveFields();
    }
    Map<String, SearchField> fieldMap = new HashMap<String, SearchField>();
    for (PropertyAccessor propertyAccessor : propertyAccessors) {
        SearchField field = null;
        String fieldName = propertyAccessor.getName();
        for (Map.Entry<String[], SelectionProvider> current : selectionProviders.entrySet()) {
            String[] fieldNames = current.getKey();
            int index = ArrayUtils.indexOf(fieldNames, fieldName);
            if (index >= 0) {
                field = new SelectSearchField(propertyAccessor, current.getValue(), prefix);
                break;
            }
        }
        if (field == null) {
            field = manager.tryToInstantiateSearchField(classAccessor, propertyAccessor, prefix);
        }
        if (field == null) {
            logger.warn("Cannot instantiate field for property {}", propertyAccessor);
            continue;
        }
        fieldMap.put(fieldName, field);
        searchForm.add(field);
    }
    // handle cascaded select fields
    for (Map.Entry<String[], SelectionProvider> current : selectionProviders.entrySet()) {
        String[] fieldNames = current.getKey();
        SelectionProvider selectionProvider = current.getValue();
        SelectionModel selectionModel = selectionProvider.createSelectionModel();
        SelectSearchField previousField = null;
        for (int i = 0; i < fieldNames.length; i++) {
            SelectSearchField selectSearchField = (SelectSearchField) fieldMap.get(fieldNames[i]);
            if (selectSearchField == null) {
                previousField = null;
                continue;
            }
            selectSearchField.setSelectionModel(selectionModel);
            selectSearchField.setSelectionModelIndex(i);
            if (previousField != null) {
                selectSearchField.setPreviousSelectField(previousField);
                previousField.setNextSelectField(selectSearchField);
            }
            previousField = selectSearchField;
        }
    }
    return searchForm;
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) HashMap(java.util.HashMap) SelectSearchField(com.manydesigns.elements.fields.search.SelectSearchField) SearchField(com.manydesigns.elements.fields.search.SearchField) SelectSearchField(com.manydesigns.elements.fields.search.SelectSearchField) SelectionModel(com.manydesigns.elements.options.SelectionModel) SelectionProvider(com.manydesigns.elements.options.SelectionProvider) HashMap(java.util.HashMap) Map(java.util.Map) FieldsManager(com.manydesigns.elements.fields.helpers.FieldsManager)

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