Created
March 15, 2014 15:00
-
-
Save aliakhtar/9568597 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class CrudEditor<M extends ModelDTO> extends Composite | |
| implements EditsItem<M> | |
| { | |
| private RendererProvider rendererFactory = new CrudFieldRenderer(); | |
| //Cannot use FormField<?> here as it gives an error when trying to add values to the map. | |
| // Using LinkedHashMap for preserving order of insertion and rendering. | |
| private final Map<String, Renders> renderMap | |
| = new LinkedHashMap<>(); | |
| private final Map<String, FormField<?>> fields = new HashMap<>(); | |
| private final FlowPanel container; | |
| private boolean isRendered = false; | |
| public CrudEditor() | |
| { | |
| container = new FlowPanel(); | |
| container.setStyleName("form-horizontal form-bordered form-row-stripped"); | |
| initWidget(container); | |
| } | |
| public CrudEditor<M> setFieldRenderer(RendererProvider renderer) | |
| { | |
| this.rendererFactory = renderer; | |
| return this; | |
| } | |
| public <T> CrudEditor<M> addField(String name, String label, HasValue<T> field) | |
| { | |
| FormField<T> formField = FormFieldMaker.make(field); | |
| Renders newRenderer = this.rendererFactory.create(label, formField); | |
| addField(name, formField, newRenderer); | |
| return this; | |
| } | |
| public <T> CrudEditor<M> addField(String name, FormField<?> field, Renders renderer) | |
| { | |
| renderMap.put(name, renderer); | |
| fields.put(name, field); | |
| return this; | |
| } | |
| public CrudEditor<M> addTextbox(String name, String label) | |
| { | |
| addField(name, label, new TextBox() ); | |
| return this; | |
| } | |
| public CrudEditor<M> addTextarea(String name, String label) | |
| { | |
| TextArea t = new TextArea(); | |
| t.setVisibleLines( Crud.DEFAULT_TEXTAREA_LINES); | |
| t.setCharacterWidth(Crud.DEFAULT_TEXTAREA_WIDTH); | |
| addField(name, label, t); | |
| return this; | |
| } | |
| /** | |
| * Crud.DEFAULT_TEXTAREA_LINES / DEFAULT_TEXTAREA_WIDTH may be used here if necessary | |
| */ | |
| public CrudEditor<M> addTextarea(String name, String label, int width, int lineCount) | |
| { | |
| TextArea t = new TextArea(); | |
| t.setVisibleLines(lineCount); | |
| t.setCharacterWidth(width); | |
| //In the template, setting the cols on textarea doesn't seem to have any effect, so its | |
| //necessary to set the width directly in order to make it wider: | |
| t.getElement().getStyle().setWidth( width * 1.5, Style.Unit.PX ); | |
| addField(name, label, t ); | |
| return this; | |
| } | |
| public <T> CrudEditor<M> addBootstrapSwitch(String name, String label, BootstrapSwitch<T> bsSwitch) | |
| { | |
| FormField<T> field = FormFieldMaker.make(bsSwitch); | |
| CrudFieldRenderer<FormField<T>> renderer = new CrudFieldRenderer<>(label, field); | |
| renderer.setControlStyle(""); | |
| addField(name, field, renderer); | |
| return this; | |
| } | |
| public CrudEditor<M> addDateTimePicker(String name, String label) | |
| { | |
| DateTimePicker picker = new DateTimePicker(); | |
| addField(name, label, picker); | |
| return this; | |
| } | |
| public CrudEditor<M> addDatePicker(String name, String label) | |
| { | |
| DatePicker picker = new DatePicker(); | |
| addField(name, label, picker); | |
| return this; | |
| } | |
| public <T extends HasId> EditsItem<M> addSelect(String name, String label, List<T> options) | |
| { | |
| UiSelect<T> select = new UiSelect<>(); | |
| select.addItems(options); | |
| addField(name, label, select); | |
| return this; | |
| } | |
| public boolean isRendered() | |
| { | |
| return isRendered; | |
| } | |
| private CrudEditor<M> render() | |
| { | |
| for (Renders renderer : renderMap.values() ) | |
| { | |
| if (renderer.isRendered() ) | |
| continue; | |
| renderer.render(); | |
| container.add(renderer); | |
| } | |
| isRendered = true; | |
| return this; | |
| } | |
| public String getValue(String name) | |
| { | |
| try | |
| { | |
| return (String) fields.get(name).getValue(); | |
| } | |
| catch (Exception e) | |
| { | |
| return ""; | |
| } | |
| } | |
| public Long getLong(String name) | |
| { | |
| try | |
| { | |
| return (Long) fields.get(name).getValue(); | |
| } | |
| catch (Exception e) | |
| { | |
| return Long.valueOf(0); | |
| } | |
| } | |
| public Integer getInt(String name) | |
| { | |
| try | |
| { | |
| return (Integer) fields.get(name).getValue(); | |
| } | |
| catch (Exception e) | |
| { | |
| return Integer.valueOf(0); | |
| } | |
| } | |
| public <T> T getValue(String name, Class<T> type) | |
| { | |
| try | |
| { | |
| return (T) fields.get(name).getValue(); | |
| } | |
| catch (Exception e) | |
| { | |
| return null; | |
| } | |
| } | |
| @Override | |
| public EditsItem<M> add() | |
| { | |
| render(); | |
| return this; | |
| } | |
| @Override | |
| public EditsItem<M> edit(long id) | |
| { | |
| render(); | |
| return this; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment