This is an old revision of the document!
Table of Contents
Dynamic Panel Sample
This sample introduces often used GUIDynamicContentPanel. Choosing person from combo-box will show its details on the right, details will be bordered by red or blue line depending on the gender of selected person. Also, details will have additional information if selected person is also bank adviser.
Live example
UML Model
Business Logic Code
None.
GUI Code
package rs.sol.sampleapps; import rs.sol.sampleapps.gui.GUIPersonDetails; import rs.sol.soloist.helpers.init.DefaultContextInit; import rs.sol.soloist.helpers.init.Initializer; import rs.sol.soloist.helpers.init.InitializerFailedException; import rs.sol.soloist.server.builtindomains.builtindatatypes.Text; import rs.sol.soloist.server.guiconfiguration.components.GUIApplicationComponent; import rs.sol.soloist.server.guiconfiguration.components.GUILabelComponent; import rs.sol.soloist.server.guiconfiguration.components.GUIPanelComponent; import rs.sol.soloist.server.guiconfiguration.construction.GUIComponentBinding; import rs.sol.soloist.server.guiconfiguration.elementcomponents.GUICollectionInput; import rs.sol.soloist.server.guiconfiguration.elementcomponents.GUIComboWidget; import rs.sol.soloist.server.guiconfiguration.elementcomponents.GUIElementComponent; import rs.sol.soloist.server.guiconfiguration.layout.VerticalAlignment; import rs.sol.soloist.server.guiconfiguration.nonvisualcompoments.GUIFindAllInstancesSAPComponent; import rs.sol.soloist.server.server.SoloistServiceServlet; public enum PersonCombo implements Initializer{ INSTANCE; @Override public void init() throws InitializerFailedException { GUIApplicationComponent page = new GUIApplicationComponent(); page.name.set(Text.fromString("PersonCombo")); SoloistServiceServlet.registerApplication(page); page.context.set(DefaultContextInit.getRoot()); GUIPanelComponent root = GUIPanelComponent.createFlow(page); GUILabelComponent title = GUILabelComponent.create(root, "Dynamic Panel"); title.styleName.set(Text.fromString("titleStyle")); GUIPanelComponent topPanel = GUIPanelComponent.createFlow(root); topPanel.styleName.set(Text.fromString("topPanel")); GUIPanelComponent horizontal = GUIPanelComponent.createHorizontal(topPanel, VerticalAlignment.TOP); GUILabelComponent.create(horizontal, "Choose person:").styleName.set(Text.fromString("margin3")); GUIFindAllInstancesSAPComponent allPersons = GUIFindAllInstancesSAPComponent.create(horizontal, Person.FQ_TYPE_NAME); GUIElementComponent comboBox = GUIElementComponent.createInput(horizontal, new GUIComboWidget(), new GUICollectionInput()); GUIComponentBinding.create(allPersons.value, GUICollectionInput.get(comboBox).collection); GUIPersonDetails pd = new GUIPersonDetails(); pd.parent.set(horizontal); GUIComponentBinding.create(comboBox.value, pd.element); } }
//GUIPersonDetails.java @Override protected GUIContainerComponent getDynamicContents(IElement el) { GUIPanelComponent rootPanel = GUIPanelComponent.createFlow(null); rootPanel.styleName.set(Text.fromString("person_details")); Person p = (Person)el; if (p == null) { GUILabelComponent.create(rootPanel, "No Persons selected."); return rootPanel; } GUIPanelComponent table = GUIPanelComponent.createTable(rootPanel); int row = 0; if (p instanceof BankAdviser) { GUILabelComponent.create(table, "Bank: ", row, 0); GUILabelComponent.create(table, Text.stringValue(((BankAdviser)p).bank), row++, 1); } GUILabelComponent.create(table, "Name: ", row, 0); GUILabelComponent.create(table, Text.stringValue(p.name), row++, 1); GUILabelComponent.create(table, "Is married? ", row, 0); GUILabelComponent.create(table, p.isMarried.val().toBoolean() ? "YES" : "NO", row++, 1); if (Gender.MALE.equals(p.gender.val())) { GUILabelComponent.create(table, "Age: ", row, 0); GUILabelComponent.create(table, p.age.val().toString(), row++, 1); table.styleName.set(Text.fromString("male")); } else { table.styleName.set(Text.fromString("female")); } return rootPanel; }