Builder Module
Builder module is a set of Java utilities designed to cover some functionalities:
- Make easier the developer task of sending actions to the frontend.
- Allow to define dynamic screens in Java instead of XML files.
Configuration
Add the following dependency into your maven pom.xml
file:
<dependency>
<groupId>com.almis.awe</groupId>
<artifactId>awe-builder-spring-boot-starter</artifactId>
</dependency>
And there you go!
Client action builders
Client action builders help the developer in the task of sending specific client actions to the frontend.
screen
action builder
This action makes the application to move to another screen.
Usage:
serviceData.addClientAction(new ScreenActionBuilder("another-screen-option").build());
This sample creates a client action which will try to navigate to the option defined as another-screen-option
.
redirect
action builder
This action makes the application to redirect to another URL.
Usage:
serviceData.addClientAction(new RedirectActionBuilder("http://go.to.another.url").build());
This sample creates a client action which will try to navigate to the URL http://go.to.another.url
.
redirect-screen
action builder
This action makes the application to redirect a specific screen to another URL.
Usage:
serviceData.addClientAction(new RedirectScreenActionBuilder("specific-screen", "http://go.to.another.url").build());
This sample creates a client action which will try to navigate to the URL http://go.to.another.url
if the
current screen is specific-screen
(useful for dynamic-generated screens).
fill
action builder
This action sends a list of data to a component:
Usage:
DataList dataList = new DataList();
// ...
serviceData.addClientAction(new FillActionBuilder("my-grid", dataList).build());
This sample sends dataList
to "my-grid"
component.
select
action builder
This action sends a list of selected values to a component.
Usage:
List<String> values = new ArrayList();
// ...
serviceData.addClientAction(new SelectActionBuilder("my-select", values).build());
Alternate usage:
serviceData.addClientAction(new SelectActionBuilder("my-select", value1, value2, ... valueN).build());
This sample sends a list of selected values to "my-select"
component.
fill-suggest
action builder
This action sends a list of selected values and labels to a suggest component.
Usage:
List<Object> values = new ArrayList();
// ...
serviceData.addClientAction(new FillSuggestActionBuilder("my-suggest", values).build());
This sample sends a list of selected values and labels to "my-suggest"
component.
filter
action builder
This action calls a component to reload itself:
Usage:
serviceData.addClientAction(new FilterActionBuilder("my-grid").build());
This sample tells "my-grid"
component to reload its data.
update-controller
action builder
This action triggers a change of attribute inside a component:
Usage:
// ...
serviceData.addClientAction(new UpdateControllerActionBuilder("my-select", "optional", false).build());
This sample changes the optional
attribute on "my-select"
component to false
.
message
action builder
This action allows sending a message to the user. Message type can be one of OK
, WARNING
, ERROR
or INFO
.
Usage:
serviceData.addClientAction(new MessageActionBuilder(AnswerType.OK, "message title", "message description").build());
This sample sends a message to the frontend.
dialog
action builder
This action opens a modal window in the screen.
Usage:
serviceData.addClientAction(new DialogActionBuilder("my-dialog").build());
This sample opens the modal screen named "my-dialog"
.
confirm
action builder
This action opens a modal window with a button to confirm or cancel action.
Usage:
serviceData.addClientAction(new ConfirmActionBuilder("messageId").build());
This sample opens a modal confirm dialog using the message
tag defined as message-id
.
An alternate usage of this builder is the following one:
serviceData.addClientAction(new ConfirmActionBuilder("message title", "message description").build());
Instead of using a defined message
tag, this action uses the title
and description
parameter defined on it.
get-file
action builder
This action asks a file to be downloaded.
Usage:
FileData fileData = new FileData();
//...
serviceData.addClientAction(new DownloadActionBuilder(fileData).build());
This sample try to download the file defined in the fileData
bean.
CSS action builders
add-class
action builder
This action search for a CSS class in the screen and if it finds it, adds some CSS classes to the element.
Usage:
serviceData.addClientAction(new AddCssClassActionBuilder(".selector", "class1", "class2", "class3").build());
This sample search for the .selector
CSS selector, and adds the "class1", "class2" and "class3" classes into the element if found.
remove-class
action builder
This action search for a CSS class in the screen and if it finds it, removes some CSS classes from the element.
Usage:
serviceData.addClientAction(new RemoveCssClassActionBuilder(".selector", "class1", "class2", "class3").build());
This sample search for the .selector
CSS selector, and removes the "class1", "class2" and "class3" classes from the element if found.
toggle-class
action builder
This action search for a CSS class in the screen and toggles it from the element.
Usage:
serviceData.addClientAction(new ToggleCssClassActionBuilder(".selector", "class1", "class2", "class3").build());
This sample search for the .selector
CSS selector, and removes the "class1", "class2" and "class3" classes from the element if found.
Grid action builders
add-columns
action builder
This action adds some columns on a grid.
Usage:
List<Column> columnList = new ArrayList<>();
//...
serviceData.addClientAction(new AddColumnsActionBuilder("my-grid", columnList).build());
This sample adds a list of columns on the "my-grid"
grid.
replace-columns
action builder
This action replaces all columns on the grid with the defined column list.
Usage:
List<Column> columnList = new ArrayList<>();
//...
serviceData.addClientAction(new ReplaceColumnsActionBuilder("my-grid", columnList).build());
This sample replaces all columns on the "my-grid"
grid.
show-columns
action builder
This action show some columns on a grid.
Usage:
List<String> columnIdList = new ArrayList<>();
//...
serviceData.addClientAction(new ShowColumnsActionBuilder("my-grid", columnIdList).build());
Alternate usage:
serviceData.addClientAction(new ShowColumnsActionBuilder("my-grid", "column1", "column2", ... "columnN").build());
hide-columns
action builder
This action hide some columns on a grid.
Usage:
List<String> columnIdList = new ArrayList<>();
//...
serviceData.addClientAction(new HideColumnsActionBuilder("my-grid", columnIdList).build());
Alternate usage:
serviceData.addClientAction(new HideColumnsActionBuilder("my-grid", "column1", "column2", ... "columnN").build());
add-row
action builder
This action adds a row to the grid. Depending on selected row you can decide where to add the new row:
TOP
: As the first line of the grid.BOTTOM
: As the last line of the grid (default).UP
: Over the selected row.DOWN
: Below the selected row.
Usage:
Map<String, Object> rowData = new HashMap<>();
//...
serviceData.addClientAction(new AddRowActionBuilder(RowPosition.TOP, "my-grid", rowData).build());
Alternate usage:
ObjectNode rowData = JsonNodeFactory.instance.objectNode();
//...
serviceData.addClientAction(new AddRowActionBuilder(RowPosition.DOWN, "my-grid", rowData).build());
copy-row
action builder
This action copies a row to the grid. Depending on selected row you can decide where to add the new row:
TOP
: As the first line of the grid.BOTTOM
: As the last line of the grid (default).UP
: Over the selected row.DOWN
: Below the selected row.
Usage:
serviceData.addClientAction(new CopyRowActionBuilder(RowPosition.TOP, "my-grid").build());
You also can define the row you want to copy from:
serviceData.addClientAction(new CopyRowActionBuilder(RowPosition.BOTTOM, "my-grid", "my-row").build());
update-row
action builder
This action updates the selected row.
Usage:
Map<String, Object> rowData = new HashMap<>();
//...
serviceData.addClientAction(new UpdateRowActionBuilder("my-grid", rowData).build());
Alternate usage:
ObjectNode rowData = JsonNodeFactory.instance.objectNode();
//...
serviceData.addClientAction(new UpdateRowActionBuilder("my-grid", rowData).build());
You also can define the row you want to update:
serviceData.addClientAction(new DeleteRowActionBuilder("my-grid", "my-row", rowData).build());
delete-row
action builder
This action deletes the selected row.
Usage:
serviceData.addClientAction(new DeleteRowActionBuilder("my-grid").build());
You also can define the row you want to delete:
serviceData.addClientAction(new DeleteRowActionBuilder("my-grid", "my-row").build());
select-all-rows
action builder
This action selects all rows in the grid.
Usage:
serviceData.addClientAction(new SelectAllRowsActionBuilder("my-grid").build());
unselect-all-rows
action builder
This action unselects all rows in the grid.
Usage:
serviceData.addClientAction(new UnselectAllRowsActionBuilder("my-grid").build());
update-cell
action builder
This action updates a grid cell data.
Usage:
ComponentAddress address = new ComponentAddress("view", "component", "row", "column");
CellData cellData = new CellData(value);
//...
serviceData.addClientAction(new UpdateCellActionBuilder("my-grid", cellData).build());
This sample changes the cell column
at row row
on component
grid with cellData
value.
This builder also allows to define data as JsonNode
instead of CellData
:
ComponentAddress address = new ComponentAddress("view", "component", "row", "column");
ObjectNode nodeData = JsonNodeFactory.instance.objectNode();
nodeData.put("icon", "fa-empire");
nodeData.put("style", "text-danger");
nodeData.put("value", "fa-empire");
//...
serviceData.addClientAction(new UpdateCellActionBuilder(address, nodeData).build());
Chart action builders
add-chart-series
action builder
This action allows to add series to a chart
Usage:
List<ChartSerie> serieList = new ArrayList<>();
//...
serviceData.addClientAction(new AddChartSeriesActionBuilder("my-chart", serieList).build());
Alternate usage:
serviceData.addClientAction(new AddChartSeriesActionBuilder("my-chart", serie1, serie2, ... serieN).build());
This sample adds a list of series on the "my-chart"
chart.
replace-chart-series
action builder
This action allows to replace all series from a chart
Usage:
List<ChartSerie> serieList = new ArrayList<>();
//...
serviceData.addClientAction(new ReplaceChartSeriesActionBuilder("my-chart", serieList).build());
Alternate usage:
serviceData.addClientAction(new ReplaceChartSeriesActionBuilder("my-chart", serie1, serie2, ... serieN).build());
This sample replaces all series on the "my-chart"
chart.
remove-chart-series
action builder
This action allows to remove some series from a chart.
Usage:
List<ChartSerie> serieList = new ArrayList<>();
//...
serviceData.addClientAction(new RemoveChartSeriesActionBuilder("my-chart", serieList).build());
Alternate usage:
serviceData.addClientAction(new RemoveChartSeriesActionBuilder("my-chart", serie1, serie2, ... serieN).build());
This sample remove all series defined on serieList from the "my-chart"
chart.
add-points
action builder
This action sends a list of serie data to a chart:
Usage:
DataList dataList = new DataList();
// ...
serviceData.addClientAction(new AddPointsActionBuilder("my-chart", dataList).build());
This sample sends dataList
points to "my-chart"
component.
Note: Each datalist column name must match a chart serie id.
Screen builders
This set of builders is designed to generate java-defined screens instead of defining them in XML format.
Screen builder
The screen builder is the main builder in this set. It allows the developer to generate dynamically an XML Screen structure:
ScreenBuilder builder = new ScreenBuilder()
.setId(UUID.randomUUID().toString())
.setTemplate("window")
.addTag(new TagBuilder()
.setSource("center")
.setLabel("LABEL")
.setStyle("expand")
.setType("div")
.addChart(new ChartBuilder()
.setStockChart(true)
.setAutoload(true)
.setId("chart1")
.setAutorefresh(5)
.setEnableDataLabels(true)
.setFormatDataLabels("formatDataLabels")
.setIconLoading(IconLoading.CIRCLEBAR)
.setStacking(Stacking.PERCENT)
.setInverted(true)
.setMax(45)
.setTheme("chartTheme")
.setVisible(false)
.setSubtitle("SUBTITLE")
.setChartType(ChartType.BUBBLE)
.setZoomType(ChartAxis.Y_AXIS)
.setChartLegend(new ChartLegendBuilder()
.setChartLayout(ChartLayout.HORIZONTAL)
.setAlign(Align.CENTER)
.setEnabled(true)
.setFloating(true)
.setBorderWidth(2))
.setChartTooltip(new ChartTooltipBuilder()
.setCrosshairs(ChartAxis.ALL)
.setEnabled(true)
.setNumberDecimals(4)
.setPointFormat("pointFormat")
.setPrefix("pre")
.setSuffix("post")
.setDateFormat("yyyymmdd")
.setShared(true))
.addChartParameter(new ChartParameterBuilder()
.setDataType(DataType.DOUBLE)
.setName("parameterName")
.setValue("0.1213"))
.addChartSerieList(new ChartSerieBuilder()
.setDrillDown(true)
.setColor("red")
.setXAxis("xAxis")
.setYAxis("yAxis")
.setXValue("x")
.setYValue("y")
.setZValue("z")
.setDrillDownSerie("drilldownSerie"))
.addContextButton(new ContextButtonBuilder()
.setButtonType(ButtonType.BUTTON)
.setValue("value")
.setIcon("icon")
.setSize("sm")
.setLabel("LABEL"))
.addContextSeparator(new ContextSeparatorBuilder())
.addDependency(new DependencyBuilder()
.setFormule("formule")
.setInitial(true)
.setInvert(true)
.setLabel("LABEL")
.setServerAction(ServerAction.CONTROL)
.setSourceType(SourceType.QUERY)
.setTargetType(TargetType.ATTRIBUTE)
.setType(DependencyType.AND)
.setValue("value")
.addDependencyAction((DependencyActionBuilder) new DependencyActionBuilder()
.setServerAction(ServerAction.GET_SERVER_FILE)
.setTargetAction("TargetAction")
.setTarget("target")
.setAsynchronous(true)
.setContext("context")
.setType(Action.ADD_ROW)
.setSilent(true)
.setValue("value"))
.addDependencyElement(new DependencyElementBuilder()
.setAlias("alias")
.setId("id")
.setCancel(false)
.setView(com.almis.awe.builder.enumerates.View.REPORT)
.setAttribute(Attribute.CURRENT_ROW_VALUE)
.setColumn("column")
.setCondition(Condition.EQUALS)
.setAttribute2(Attribute.EDITABLE)
.setColumn2("column2")
.setEvent(Event.AFTER_ADD_ROW)
.setId2("id2")))
.addAxis(new AxisBuilder()
.setFormatterFunction(FormatterFunction.FORMAT_CURRENCY_MAGNITUDE)
.setType(AxisDataType.CATEGORY))
.addAxis(new AxisBuilder()
.setAllowDecimal(true))
.setChartType(ChartType.BUBBLE)));
Screen screen = builder.build();
To use the dynamic screens, you can now add an option in any of the menus (public or private) with the following structure:
<option name="dynamic-screen-test" dynamic-screen="true" dynamic-screen-service="serviceWhichReturnsAnScreen"
label="DYNAMIC_WINDOW_TEST" .../>
This will call directly to the service...
<service id="serviceWhichReturnsAnScreen">
<java classname="com.almis.awe.service.DummyService" method="serviceWhichReturnsAnScreen"/>
</service>
And the service which returns the screen should be like:
public ServiceData serviceWhichReturnsAnScreen() throws AWException {
return new ServiceData().setData(new ScreenBuilder().setId("...")...
.build())
}
Component builders
For each component designed in AWE you have a builder
to define its behaviour:
TagBuilder
: Builds a<tag>
component.WindowBuilder
: Builds a<window>
component.DialogBuilder
: Builds a<dialog>
component.IncludeBuilder
: Builds a<include>
component.MenuContainerBuilder
: Builds a<menu-container>
component.MessageBuilder
: Builds a<message>
component.PivotTableBuilder
: Builds a<pivot-table>
component.ResizableBuilder
: Builds a<resizable>
component.TagListBuilder
: Builds a<tag-list>
component.ViewBuilder
: Builds a<view>
component.WidgetBuilder
andWidgetParameterBuilder
: Builds a<widget>
component.InfoBuilder
: Builds a<info>
component.TabBuilder
andTabContainerBuilder
: Builds a<tab>
component.WizardBuilder
andWizardPanelBuilder
: Builds a<wizard>
component.ButtonBuilder
andButtonActionBuilders
: Builds<button>
components.ImageBuilder
: Builds an<img>
component.ContextButtonBuilder
andContextSeparatorBuilder
: Builds<context-button>
components.DependencyBuilder
,DependencyActionBuilder
andDependencyElementBuilder
: Builds<dependency>
components.
Criteria builders
There is a builder for each criteria type defined on AWE:
ButtonCheckboxCriteriaBuilder
: Builds a<criteria>
component withbutton-checkbox
component.ButtonRadioCriteriaBuilder
: Builds a<criteria>
component withbutton-radio
component.CalendarCriteriaBuilder
: Builds a<criteria>
component withdate
component.CheckboxCriteriaBuilder
: Builds a<criteria>
component withcheckbox
component.ColorpickerCriteriaBuilder
: Builds a<criteria>
component withcolor
component.FilteredCalendarCriteriaBuilder
: Builds a<criteria>
component withfiltered-calendar
component.HiddenCriteriaBuilder
: Builds a<criteria>
component withhidden
component.MarkdownCriteriaBuilder
: Builds a<criteria>
component withmarkdown-editor
component.NumericCriteriaBuilder
: Builds a<criteria>
component withnumeric
component.PasswordCriteriaBuilder
: Builds a<criteria>
component withpassword
component.RadioCriteriaBuilder
: Builds a<criteria>
component withradio
component.SelectCriteriaBuilder
: Builds a<criteria>
component withselect
component.SelectMultipleCriteriaBuilder
: Builds a<criteria>
component withselect-multiple
component.SuggestCriteriaBuilder
: Builds a<criteria>
component withsuggest
component.SuggestMultipleCriteriaBuilder
: Builds a<criteria>
component withsuggest-multiple
component.TextareaCriteriaBuilder
: Builds a<criteria>
component withtextarea
component.TextCriteriaBuilder
: Builds a<criteria>
component withtext
component.TextViewCriteriaBuilder
: Builds a<criteria>
component withtext-view
component.TimeCriteriaBuilder
: Builds a<criteria>
component withtime
component.UploaderCriteriaBuilder
: Builds a<criteria>
component withuploader
component.
Grid and column builders
There are a couple of builders for grid elements:
GridBuilder
: Builds a<grid>
component.GroupHeaderBuilder
: Builds a<group-header>
component.
And a builder for each column type:
CalendarColumnBuilder
: Builds a column withdate
component.CheckboxColumnBuilder
: Builds a column withcheckbox
component.ColorpickerColumnBuilder
: Builds a column withcolor
component.FilteredCalendarColumnBuilder
: Builds a column withfiltered-calendar
component.MarkdownColumnBuilder
: Builds a column withmarkdown-editor
component.NumericColumnBuilder
: Builds a column withnumeric
component.PasswordColumnBuilder
: Builds a column withpassword
component.SelectColumnBuilder
: Builds a column withselect
component.SelectMultipleColumnBuilder
: Builds a column withselect-multiple
component.SuggestColumnBuilder
: Builds a column withsuggest
component.SuggestMultipleColumnBuilder
: Builds a column withsuggest-multiple
component.TextareaColumnBuilder
: Builds a column withtextarea
component.TextColumnBuilder
: Builds a column withtext
component.TextViewColumnBuilder
: Builds a column withtext-view
component.TimeColumnBuilder
: Builds a column withtime
component.UploaderColumnBuilder
: Builds a column withuploader
component.IconColumnBuilder
: Builds a column withicon
component.ImageColumnBuilder
: Builds a column withimage
component.ProgressColumnBuilder
: Builds a column withprogress
component.
Chart builders
There are also a list of builders for chart components:
AxisBuilder
: Builds chart axis data.ChartBuilder
: Builds a chart component.ChartLegendBuilder
: Builds chart legend data.ChartParameterBuilder
: Builds chart parameter data.ChartSerieBuilder
: Builds chart serie data.ChartTooltipBuilder
: Builds chart tooltip data.