Search in sources :

Example 1 with FormBuilder

use of com.manydesigns.elements.forms.FormBuilder in project Portofino by ManyDesigns.

the class TablesAction method saveColumn.

@Path("{db}/{schema}/{table}/{column}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public void saveColumn(@PathParam("db") String db, @PathParam("schema") String schema, @PathParam("table") String tableName, @PathParam("column") String columnName, ColumnAndAnnotations column) throws Exception {
    Column existing = DatabaseLogic.findColumnByName(persistence.getModel(), db, schema, tableName, columnName);
    if (existing == null) {
        throw new WebApplicationException(Response.Status.NOT_FOUND);
    }
    Table table = existing.getTable();
    Class<?> type = getColumnType(existing, existing.getJavaType());
    Form annotationsForm = new FormBuilder(getApplicableAnnotations(type)).build();
    MapKeyValueAccessor annotationsAccessor = new MapKeyValueAccessor(column.getAnnotations());
    annotationsForm.readFrom(annotationsAccessor);
    if (annotationsForm.validate()) {
        BeanUtils.copyProperties(column.getColumn(), existing);
        existing.setTable(table);
        existing.getAnnotations().removeIf(a -> KNOWN_ANNOTATIONS.contains(a.getType()));
        Set<Map.Entry<String, Object>> set = column.getAnnotations().entrySet();
        set.forEach(e -> {
            if (e.getValue() == null) {
                return;
            }
            Annotation a;
            String value = e.getValue().toString();
            if (StringUtils.isBlank(value)) {
                return;
            }
            switch(e.getKey()) {
                case "dateFormat":
                    try {
                        new SimpleDateFormat(value);
                    } catch (IllegalArgumentException ex) {
                        logger.error("Invalid date format: " + value, ex);
                        // TODO I18n
                        RequestMessages.addErrorMessage("Invalid date format: " + value);
                        break;
                    }
                    a = new Annotation(DATE_FORMAT);
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "decimalFormat":
                    try {
                        new java.text.DecimalFormat(value);
                    } catch (IllegalArgumentException ex) {
                        logger.error("Invalid decimal format: " + value, ex);
                        // TODO I18n
                        RequestMessages.addErrorMessage("Invalid decimal format: " + value);
                        break;
                    }
                    a = new Annotation(DECIMAL_FORMAT);
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "fieldSize":
                    a = new Annotation(FIELD_SIZE);
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "fileBlob":
                    if (Boolean.TRUE.equals(e.getValue())) {
                        a = new Annotation(FILE_BLOB);
                        existing.getAnnotations().add(a);
                    }
                    break;
                case "databaseBlobContentTypeProperty":
                    Annotation databaseBlobAnn1 = existing.ensureAnnotation(DATABASE_BLOB);
                    databaseBlobAnn1.setProperty("contentTypeProperty", value);
                    break;
                case "databaseBlobFileNameProperty":
                    Annotation databaseBlobAnn2 = existing.ensureAnnotation(DATABASE_BLOB);
                    databaseBlobAnn2.setProperty("fileNameProperty", value);
                    break;
                case "databaseBlobTimestampProperty":
                    Annotation databaseBlobAnn3 = existing.ensureAnnotation(DATABASE_BLOB);
                    databaseBlobAnn3.setProperty("timestampProperty", value);
                    break;
                case "highlightLinks":
                    a = new Annotation(HIGHLIGHT_LINKS);
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "minValue":
                    if (type == Integer.class || type == Long.class || type == BigInteger.class) {
                        a = new Annotation(MIN_INT_VALUE);
                    } else {
                        a = new Annotation(MIN_DECIMAL_VALUE);
                    }
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "maxValue":
                    if (type == Integer.class || type == Long.class || type == BigInteger.class) {
                        a = new Annotation(MAX_INT_VALUE);
                    } else {
                        a = new Annotation(MAX_DECIMAL_VALUE);
                    }
                    a.getProperties().add(new Property("value", value));
                    existing.getAnnotations().add(a);
                    break;
                case "regexp":
                    a = new Annotation(REGEXP);
                    a.getProperties().add(new Property("value", value));
                    // Default error message
                    a.getProperties().add(new Property("errorMessage", "elements.error.field.regexp.format"));
                    existing.getAnnotations().add(a);
                    break;
                case "stringFormat":
                    a = new Annotation(((Map) e.getValue()).get("v").toString());
                    existing.getAnnotations().add(a);
                    break;
                case "typeOfContent":
                    a = new Annotation(((Map) e.getValue()).get("v").toString());
                    a.getProperties().add(new Property("value", "true"));
                    existing.getAnnotations().add(a);
                    break;
                default:
                    String msg = "Unsupported annotation: " + e.getKey();
                    logger.error(msg);
                    // TODO i18n
                    RequestMessages.addErrorMessage(msg);
            }
        });
        persistence.initModel();
        persistence.saveXmlModel();
    } else {
        throw new WebApplicationException(Response.serverError().entity(annotationsForm).build());
    }
}
Also used : FormBuilder(com.manydesigns.elements.forms.FormBuilder) Form(com.manydesigns.elements.forms.Form) Annotation(com.manydesigns.portofino.model.Annotation) MapKeyValueAccessor(com.manydesigns.elements.MapKeyValueAccessor) BigInteger(java.math.BigInteger) SimpleDateFormat(java.text.SimpleDateFormat) Property(com.manydesigns.portofino.model.Property)

Example 2 with FormBuilder

use of com.manydesigns.elements.forms.FormBuilder in project Portofino by ManyDesigns.

the class ConnectionsAction method describeConnection.

@GET
@Path("{databaseName}")
@Produces(MediaType.APPLICATION_JSON)
public String describeConnection(@PathParam("databaseName") String databaseName) throws Exception {
    ConnectionProvider connectionProvider = persistence.getConnectionProvider(databaseName);
    ConnectionProviderDetail cp = new ConnectionProviderDetail(connectionProvider);
    Form form = new FormBuilder(ConnectionProviderDetail.class).build();
    form.readFromObject(cp);
    return connectionWithSchemas(databaseName, connectionProvider, form);
}
Also used : FormBuilder(com.manydesigns.elements.forms.FormBuilder) ConnectionProviderDetail(com.manydesigns.portofino.upstairs.actions.database.connections.support.ConnectionProviderDetail) Form(com.manydesigns.elements.forms.Form)

Example 3 with FormBuilder

use of com.manydesigns.elements.forms.FormBuilder in project Portofino by ManyDesigns.

the class ConnectionsAction method saveConnectionProvider.

protected Response saveConnectionProvider(ConnectionProvider connectionProvider, JSONObject jsonObject, BiFunction<ConnectionProvider, Form, Response> handler) {
    ConnectionProviderDetail cp = new ConnectionProviderDetail(connectionProvider);
    Form form = new FormBuilder(ConnectionProviderDetail.class).configMode(Mode.EDIT).build();
    Field jndiResource = form.findFieldByPropertyName("jndiResource");
    if (connectionProvider instanceof JndiConnectionProvider) {
        form.get(0).clear();
        form.get(0).add(jndiResource);
    } else {
        form.get(0).remove(jndiResource);
    }
    form.readFromObject(cp);
    FormUtil.readFromJson(form, jsonObject);
    if (form.validate()) {
        if (jsonObject.has("schemas")) {
            JSONArray schemasJson = jsonObject.getJSONArray("schemas");
            updateSchemas(connectionProvider, schemasJson, (database, schema) -> database.getSchemas().remove(schema));
        }
        form.writeToObject(cp);
        return handler.apply(connectionProvider, form);
    } else {
        return Response.serverError().entity(form).build();
    }
}
Also used : FormBuilder(com.manydesigns.elements.forms.FormBuilder) Field(com.manydesigns.elements.fields.Field) ConnectionProviderDetail(com.manydesigns.portofino.upstairs.actions.database.connections.support.ConnectionProviderDetail) Form(com.manydesigns.elements.forms.Form) JSONArray(org.json.JSONArray)

Example 4 with FormBuilder

use of com.manydesigns.elements.forms.FormBuilder in project Portofino by ManyDesigns.

the class SelectFieldTest2 method setUp.

@Override
@BeforeMethod
public void setUp() throws Exception {
    super.setUp();
    selectionProvider = new DefaultSelectionProvider("selectionProvider", 2);
    for (int i = 0; i < valuesArray.length; i++) {
        selectionProvider.appendRow(valuesArray[i], labelsArray[i], true);
    }
    form = new FormBuilder(Bean.class).configSelectionProvider(selectionProvider, "p1", "p2").build();
    FieldSet fieldSet = form.get(0);
    selectField1 = (SelectField) fieldSet.get(0);
    selectField2 = (SelectField) fieldSet.get(1);
    selectionModel = selectField1.getSelectionModel();
}
Also used : FormBuilder(com.manydesigns.elements.forms.FormBuilder) FieldSet(com.manydesigns.elements.forms.FieldSet) DefaultSelectionProvider(com.manydesigns.elements.options.DefaultSelectionProvider) BeforeMethod(org.testng.annotations.BeforeMethod)

Example 5 with FormBuilder

use of com.manydesigns.elements.forms.FormBuilder in project Portofino by ManyDesigns.

the class PersistenceTest method testDateWithDTSSwitch.

// Disable because it fails on the CI server where the timezone is different
@Test(enabled = false)
public void testDateWithDTSSwitch() {
    TimeZone.setDefault(TimeZone.getTimeZone("Europe/Rome"));
    // 1973-06-03 DTS switch at midnight in tz Europe/Rome
    Date problematicDate = new Date(73, 5, 3);
    Map<String, Object> order = new HashMap<>();
    order.put("orderid", new BigInteger("1"));
    order.put("userid", "x");
    order.put("orderdate", problematicDate);
    order.put("shipaddr1", "x");
    order.put("shipaddr2", "x");
    order.put("shipcity", "x");
    order.put("shipstate", "x");
    order.put("shipzip", "x");
    order.put("shipcountry", "x");
    order.put("billaddr1", "x");
    order.put("billaddr2", "x");
    order.put("billcity", "x");
    order.put("billstate", "x");
    order.put("billzip", "x");
    order.put("billcountry", "x");
    order.put("courier", "x");
    order.put("totalprice", new BigDecimal(1.0));
    order.put("billtofirstname", "x");
    order.put("billtolastname", "x");
    order.put("shiptofirstname", "x");
    order.put("shiptolastname", "x");
    order.put("creditcard", "x");
    order.put("exprdate", "x");
    order.put("cardtype", "x");
    order.put("locale", "x");
    Session session = persistence.getSession("jpetstore");
    session.save("orders", order);
    FormBuilder fb = new FormBuilder(persistence.getTableAccessor("jpetstore", "orders"));
    Form form = fb.configFields("orderdate").build();
    DateField dateField = (DateField) form.findFieldByPropertyName("orderdate");
    dateField.readFromObject(order);
    assertEquals("dd-MM-yyyy", ElementsProperties.getConfiguration().getString("fields.date.format"));
    String strDate = "03-06-1973";
    assertEquals(strDate, dateField.getStringValue());
    MutableHttpServletRequest request = new MutableHttpServletRequest();
    request.setParameter("date", strDate);
    dateField.readFromRequest(request);
    assertTrue(dateField.validate());
    dateField.writeToObject(order);
    session.update("orders", order);
    session.flush();
    // Forget about order
    session.clear();
    order = (Map) session.get("orders", new BigInteger("1"));
    // Convert to java.util.Date from java.sql.Date
    Date date = new Date(((Date) order.get("orderdate")).getTime());
    assertEquals(73, date.getYear());
    assertEquals(5, date.getMonth());
    assertEquals(3, date.getDate());
    assertEquals(1, date.getHours());
    assertEquals(0, date.getMinutes());
    assertEquals(0, date.getSeconds());
    dateField.readFromObject(order);
    assertEquals(strDate, dateField.getStringValue());
}
Also used : FormBuilder(com.manydesigns.elements.forms.FormBuilder) Form(com.manydesigns.elements.forms.Form) BigInteger(java.math.BigInteger) FileObject(org.apache.commons.vfs2.FileObject) MutableHttpServletRequest(com.manydesigns.elements.servlet.MutableHttpServletRequest) DateField(com.manydesigns.elements.fields.DateField) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) Session(org.hibernate.Session)

Aggregations

FormBuilder (com.manydesigns.elements.forms.FormBuilder)9 Form (com.manydesigns.elements.forms.Form)6 ConnectionProviderDetail (com.manydesigns.portofino.upstairs.actions.database.connections.support.ConnectionProviderDetail)2 BigInteger (java.math.BigInteger)2 MapKeyValueAccessor (com.manydesigns.elements.MapKeyValueAccessor)1 DateField (com.manydesigns.elements.fields.DateField)1 Field (com.manydesigns.elements.fields.Field)1 FieldSet (com.manydesigns.elements.forms.FieldSet)1 DefaultSelectionProvider (com.manydesigns.elements.options.DefaultSelectionProvider)1 MutableHttpServletRequest (com.manydesigns.elements.servlet.MutableHttpServletRequest)1 Annotation (com.manydesigns.portofino.model.Annotation)1 Property (com.manydesigns.portofino.model.Property)1 Settings (com.manydesigns.portofino.upstairs.Settings)1 MailSettings (com.manydesigns.portofino.upstairs.actions.mail.support.MailSettings)1 BigDecimal (java.math.BigDecimal)1 SimpleDateFormat (java.text.SimpleDateFormat)1 LocalDate (java.time.LocalDate)1 FileObject (org.apache.commons.vfs2.FileObject)1 Session (org.hibernate.Session)1 JSONArray (org.json.JSONArray)1