This is an old revision of the document!


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 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;
    }
Print/export