Search in sources :

Example 6 with Field

use of com.manydesigns.elements.fields.Field in project Portofino by ManyDesigns.

the class TableFormPdfExporter method composeXml.

/**
 * Composes an XML document representing the current search results.
 */
protected Reader composeXml() {
    XmlBuffer xb = new XmlBuffer();
    xb.writeXmlHeader("UTF-8");
    xb.openElement("class");
    xb.openElement("table");
    if (title != null) {
        xb.write(title);
    }
    xb.closeElement("table");
    double[] columnSizes = setupColumnSizes();
    for (double columnSize : columnSizes) {
        xb.openElement("column");
        xb.openElement("width");
        xb.write(columnSize + "em");
        xb.closeElement("width");
        xb.closeElement("column");
    }
    for (TableForm.Column col : form.getColumns()) {
        xb.openElement("header");
        xb.openElement("nameColumn");
        xb.write(col.getLabel());
        xb.closeElement("nameColumn");
        xb.closeElement("header");
    }
    for (TableForm.Row row : form.getRows()) {
        xb.openElement("rows");
        for (Field field : row) {
            xb.openElement("row");
            xb.openElement("value");
            xb.write(field.getStringValue());
            xb.closeElement("value");
            xb.closeElement("row");
        }
        xb.closeElement("rows");
    }
    xb.closeElement("class");
    return new StringReader(xb.toString());
}
Also used : XmlBuffer(com.manydesigns.elements.xml.XmlBuffer) Field(com.manydesigns.elements.fields.Field) TableForm(com.manydesigns.elements.forms.TableForm)

Example 7 with Field

use of com.manydesigns.elements.fields.Field 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 8 with Field

use of com.manydesigns.elements.fields.Field in project Portofino by ManyDesigns.

the class CrudActionTest method testBlobs.

public void testBlobs() throws Exception {
    MutableHttpServletRequest req = new MutableHttpServletRequest();
    ElementsThreadLocals.setMultipart(req);
    req.getServletContext().setInitParameter("portofino.api.root", "http://fake");
    req.makeMultipart();
    Column column = DatabaseLogic.findColumnByName(persistence.getModel(), "jpetstore", "PUBLIC", "PRODUCT", "DESCN");
    Annotation ann = new Annotation(column, FileBlob.class.getName());
    column.getAnnotations().add(ann);
    persistence.initModel();
    CrudAction crudAction = new CrudAction() {

        public void commitTransaction() {
            super.commitTransaction();
            session.beginTransaction();
        }

        @NotNull
        @Override
        protected ClassAccessor filterAccordingToPermissions(ClassAccessor classAccessor) {
            // Let's ignore Shiro
            return classAccessor;
        }

        @Override
        protected String getUrlEncoding() {
            return PortofinoProperties.URL_ENCODING_DEFAULT;
        }
    };
    CrudConfiguration configuration = new CrudConfiguration();
    configuration.setDatabase("jpetstore");
    configuration.setQuery("from product");
    String metaFilenamePattern = "blob-{0}.properties";
    String dataFilenamePattern = "blob-{0}.data";
    crudAction.blobManager = new HierarchicalBlobManager(new File(System.getProperty("java.io.tmpdir")), metaFilenamePattern, dataFilenamePattern);
    CrudProperty property = new CrudProperty();
    property.setName("productid");
    property.setEnabled(true);
    property.setInsertable(true);
    property.setUpdatable(true);
    configuration.getProperties().add(property);
    property = new CrudProperty();
    property.setName("category");
    property.setEnabled(true);
    property.setInsertable(true);
    property.setUpdatable(true);
    configuration.getProperties().add(property);
    property = new CrudProperty();
    property.setName("descn");
    property.setEnabled(true);
    property.setInsertable(true);
    property.setUpdatable(true);
    configuration.getProperties().add(property);
    property = new CrudProperty();
    property.setName("name");
    property.setEnabled(true);
    property.setInsertable(true);
    property.setUpdatable(true);
    ann = new Annotation(column, Required.class.getName());
    ann.getProperties().add(new Property("value", "true"));
    property.getAnnotations().add(ann);
    configuration.getProperties().add(property);
    configuration.persistence = persistence;
    configuration.init();
    ActionInstance actionInstance = new ActionInstance(null, null, new ActionDescriptor(), CrudAction.class);
    actionInstance.setConfiguration(configuration);
    actionInstance.getParameters().add("1");
    ActionContext actionContext = new ActionContext();
    actionContext.setRequest(req);
    actionContext.setActionPath("");
    actionContext.setServletContext(req.getServletContext());
    req.setParameter("productid", "1");
    Map category = (Map) persistence.getSession("jpetstore").createQuery("from category").list().get(0);
    req.setParameter("category", (String) category.get("catid"));
    crudAction.persistence = persistence;
    crudAction.setContext(actionContext);
    crudAction.setActionInstance(actionInstance);
    crudAction.init();
    crudAction.setupForm(Mode.CREATE);
    Field descnField = crudAction.getForm().findFieldByPropertyName("descn");
    assertNotNull(descnField);
    assertTrue(descnField instanceof FileBlobField);
    File tmpFile = File.createTempFile("blob", "blob");
    DiskFileItem fileItem = new DiskFileItem("descn", "application/octet-stream", false, tmpFile.getName(), 0, tmpFile.getParentFile()) {

        @Override
        public void delete() {
        // Do nothing as we want to reuse this
        }
    };
    OutputStream os = fileItem.getOutputStream();
    IOUtils.write("some test data", os, req.getCharacterEncoding());
    req.addFileItem("descn", fileItem);
    req.setParameter("descn_operation", AbstractBlobField.UPLOAD_MODIFY);
    crudAction.httpPostMultipart();
    assertFalse(crudAction.form.validate());
    AbstractBlobField blobField = (AbstractBlobField) crudAction.form.findFieldByPropertyName("descn");
    assertNotNull(blobField.getValue());
    assertEquals(tmpFile.getName(), blobField.getValue().getFilename());
    assertEquals(fileItem.getSize(), blobField.getValue().getSize());
    try {
        crudAction.getBlobManager().loadMetadata(new Blob(blobField.getValue().getCode()));
        fail("The blob was saved despite validation failing");
    } catch (Exception e) {
    }
    crudAction.object = null;
    req.setParameter(blobField.getCodeInputName(), blobField.getValue().getCode());
    req.setParameter("name", "name");
    req.setParameter("productid", "1");
    req.setParameter("category", "BIRDS");
    crudAction.httpPostMultipart();
    assertTrue(crudAction.form.validate());
    blobField = (FileBlobField) crudAction.form.findFieldByPropertyName("descn");
    assertNotNull(blobField.getValue());
    // This is necessary because the crud might reload the form
    crudAction.blobManager.loadMetadata(blobField.getValue());
    assertEquals(tmpFile.getName(), blobField.getValue().getFilename());
    assertEquals(fileItem.getSize(), blobField.getValue().getSize());
    try {
        crudAction.blobManager.loadMetadata(new Blob(blobField.getValue().getCode()));
    } catch (IOException e) {
        e.printStackTrace();
        fail("The blob was not saved");
    }
    crudAction.httpPutMultipart();
    assertTrue(crudAction.form.validate());
    blobField = (FileBlobField) crudAction.form.findFieldByPropertyName("descn");
    assertNotNull(blobField.getValue());
    // This is necessary because the crud might reload the form
    crudAction.blobManager.loadMetadata(blobField.getValue());
    assertEquals(tmpFile.getName(), blobField.getValue().getFilename());
    String oldBlobCode = blobField.getValue().getCode();
    assertEquals(fileItem.getSize(), blobField.getValue().getSize());
    req.setParameter("descn_operation", FileBlobField.UPLOAD_MODIFY);
    req.setFileItem("descn", fileItem);
    crudAction.httpPutMultipart();
    assertTrue(crudAction.form.validate());
    blobField = (FileBlobField) crudAction.form.findFieldByPropertyName("descn");
    assertNotNull(blobField.getValue());
    // This is necessary because the crud might reload the form
    crudAction.blobManager.loadMetadata(blobField.getValue());
    assertEquals(tmpFile.getName(), blobField.getValue().getFilename());
    String newBlobCode = blobField.getValue().getCode();
    assertNotEquals(oldBlobCode, newBlobCode);
    crudAction.blobManager.loadMetadata(new Blob(newBlobCode));
    try {
        crudAction.blobManager.loadMetadata(new Blob(oldBlobCode));
        fail("The blob " + oldBlobCode + " should have been deleted");
    } catch (IOException e) {
    // Ok
    }
    Session session = persistence.getSession("jpetstore");
    session.flush();
    Object id = ((Map) crudAction.object).get("productid");
    int qres = session.createSQLQuery("update product set descn = 'illegal' where productid = :id").setParameter("id", id).executeUpdate();
    assertEquals(1, qres);
    session.flush();
    session.getTransaction().commit();
    session.clear();
    session.beginTransaction();
    // Force loading the object from the DB
    crudAction.getParameters().add(id.toString());
    crudAction.parametersAcquired();
    crudAction.setupForm(Mode.VIEW);
    crudAction.form.readFromObject(crudAction.object);
    BlobUtils.loadBlobs(crudAction.form, crudAction.getBlobManager(), false);
    blobField = (FileBlobField) crudAction.form.findFieldByPropertyName("descn");
    assertNotNull(blobField.getValue());
    assertNotNull(blobField.getBlobError());
    assertNull(blobField.getValue().getFilename());
    qres = session.createSQLQuery("update product set descn = :blobCode where productid = :id").setParameter("id", id).setParameter("blobCode", newBlobCode).executeUpdate();
    assertEquals(1, qres);
    session.flush();
    session.getTransaction().commit();
    session.clear();
    session.beginTransaction();
    // Force reload
    crudAction.parametersAcquired();
    crudAction.httpDelete(Collections.emptyList());
    try {
        crudAction.blobManager.loadMetadata(new Blob(newBlobCode));
        fail("The blob " + newBlobCode + " should have been deleted");
    } catch (IOException e) {
    // Ok
    }
}
Also used : FileBlobField(com.manydesigns.elements.fields.FileBlobField) ActionDescriptor(com.manydesigns.portofino.actions.ActionDescriptor) OutputStream(java.io.OutputStream) Field(com.manydesigns.elements.fields.Field) FileBlobField(com.manydesigns.elements.fields.FileBlobField) AbstractBlobField(com.manydesigns.elements.fields.AbstractBlobField) Column(com.manydesigns.portofino.model.database.Column) CrudProperty(com.manydesigns.portofino.resourceactions.crud.configuration.CrudProperty) AbstractBlobField(com.manydesigns.elements.fields.AbstractBlobField) Property(com.manydesigns.portofino.model.Property) CrudProperty(com.manydesigns.portofino.resourceactions.crud.configuration.CrudProperty) CrudConfiguration(com.manydesigns.portofino.resourceactions.crud.configuration.database.CrudConfiguration) DiskFileItem(org.apache.commons.fileupload.disk.DiskFileItem) Blob(com.manydesigns.elements.blobs.Blob) FileBlob(com.manydesigns.elements.annotations.FileBlob) FileBlob(com.manydesigns.elements.annotations.FileBlob) MutableHttpServletRequest(com.manydesigns.elements.servlet.MutableHttpServletRequest) IOException(java.io.IOException) ActionContext(com.manydesigns.portofino.resourceactions.ActionContext) Annotation(com.manydesigns.portofino.model.Annotation) SQLException(java.sql.SQLException) IOException(java.io.IOException) ActionInstance(com.manydesigns.portofino.resourceactions.ActionInstance) ClassAccessor(com.manydesigns.elements.reflection.ClassAccessor) HierarchicalBlobManager(com.manydesigns.elements.blobs.HierarchicalBlobManager) FileObject(org.apache.commons.vfs2.FileObject) File(java.io.File) Map(java.util.Map) Session(org.hibernate.Session)

Example 9 with Field

use of com.manydesigns.elements.fields.Field 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 10 with Field

use of com.manydesigns.elements.fields.Field in project Portofino by ManyDesigns.

the class FormBuilder method buildField.

protected Field buildField(PropertyAccessor propertyAccessor) {
    Field 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 = buildSelectField(propertyAccessor, current.getValue(), prefix);
            break;
        }
    }
    return buildField(propertyAccessor, field, prefix);
}
Also used : Field(com.manydesigns.elements.fields.Field) SelectField(com.manydesigns.elements.fields.SelectField) SelectionProvider(com.manydesigns.elements.options.SelectionProvider)

Aggregations

Field (com.manydesigns.elements.fields.Field)17 SelectField (com.manydesigns.elements.fields.SelectField)5 SelectionProvider (com.manydesigns.elements.options.SelectionProvider)4 FieldSet (com.manydesigns.elements.forms.FieldSet)3 PropertyAccessor (com.manydesigns.elements.reflection.PropertyAccessor)3 Blob (com.manydesigns.elements.blobs.Blob)2 TableForm (com.manydesigns.elements.forms.TableForm)2 XmlBuffer (com.manydesigns.elements.xml.XmlBuffer)2 FileBlob (com.manydesigns.elements.annotations.FileBlob)1 HierarchicalBlobManager (com.manydesigns.elements.blobs.HierarchicalBlobManager)1 AbstractBlobField (com.manydesigns.elements.fields.AbstractBlobField)1 BooleanField (com.manydesigns.elements.fields.BooleanField)1 FileBlobField (com.manydesigns.elements.fields.FileBlobField)1 TextField (com.manydesigns.elements.fields.TextField)1 BooleanSearchField (com.manydesigns.elements.fields.search.BooleanSearchField)1 SearchField (com.manydesigns.elements.fields.search.SearchField)1 Form (com.manydesigns.elements.forms.Form)1 FormBuilder (com.manydesigns.elements.forms.FormBuilder)1 SelectionModel (com.manydesigns.elements.options.SelectionModel)1 ClassAccessor (com.manydesigns.elements.reflection.ClassAccessor)1