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());
}
}
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);
}
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();
}
}
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();
}
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());
}
Aggregations