package com.example.vaadin_test.views; import java.util.Map; import java.util.Map.Entry; import java.util.TreeSet; import org.ofbiz.base.util.Debug; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; import org.ofbiz.entity.model.ModelReader; import com.vaadin.annotations.AutoGenerated; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; import com.vaadin.data.util.filter.SimpleStringFilter; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.event.ItemClickEvent; import com.vaadin.navigator.View; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.CssLayout; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.HeaderCell; import com.vaadin.ui.Grid.HeaderRow; import com.vaadin.ui.HorizontalSplitPanel; import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.example.vaadin_test.OfbizComponent; public class EntityView extends OfbizComponent implements View { /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ @AutoGenerated private CssLayout mainLayout; @AutoGenerated private HorizontalSplitPanel mainSplitPanel; @AutoGenerated private VerticalLayout entityInfoLayout; @AutoGenerated private Table entityInfoTable; @AutoGenerated private Label entityNameLabel; @AutoGenerated private VerticalLayout entityListLayout; @AutoGenerated private Grid entityListGrid; /** * The constructor should first build the main layout, set the * composition root and then do any custom initialization. * * The constructor will not be automatically regenerated by the * visual editor. */ public EntityView() { buildMainLayout(); setCompositionRoot(mainLayout); // TODO add user code here initMainSplitPanel(); initEntityListGrid(); initEntityInfoTable(); } @Override public void enter(ViewChangeEvent event) { // TODO Auto-generated method stub } private HorizontalSplitPanel initMainSplitPanel() { mainSplitPanel.setSplitPosition(25.0f, false); return mainSplitPanel; } private Grid initEntityListGrid() { final IndexedContainer entityListContainer = new IndexedContainer(); entityListContainer.addContainerProperty("Name", String.class, null); ModelReader modelReader = delegator.getModelReader(); Map<String, TreeSet<String>> entities = null; try { entities = modelReader.getEntitiesByPackage(null, null); } catch (GenericEntityException e) { Debug.log(e.getMessage()); return entityListGrid; } for (Entry<String, TreeSet<String>> entry : entities.entrySet()) { for (String entityName : entry.getValue()) { Item newItem = entityListContainer.getItem(entityListContainer.addItem()); newItem.getItemProperty("Name").setValue(entityName); } } entityListGrid.setCaption("Entity List"); entityListGrid.setContainerDataSource(entityListContainer); // add grid item click listener entityListGrid.addItemClickListener(new ItemClickEvent.ItemClickListener() { @Override public void itemClick(ItemClickEvent itemClickEvent) { String entityName = itemClickEvent.getItem().getItemProperty("Name").getValue().toString(); ModelEntity entityModel = delegator.getModelEntity(entityName); entityNameLabel.setValue(entityModel.getEntityName()); entityInfoTable.getContainerDataSource().removeAllItems(); int fieldIndex = 0; for (ModelField field : entityModel.getFieldsUnmodifiable()) { entityInfoTable.addItem( new Object[]{ field.getName(), field.getType() // delegator.getEntityFieldType(entityModel, field.getType()).getJavaType() }, fieldIndex++ ); } } }); // add service list filter HeaderRow filterRow = entityListGrid.appendHeaderRow(); HeaderCell cell = filterRow.getCell("Name"); TextField filterField = new TextField(); filterField.addTextChangeListener(new TextChangeListener() { @Override public void textChange(TextChangeEvent event) { entityListContainer.removeContainerFilters("Name"); if (! event.getText().isEmpty()) { entityListContainer.addContainerFilter( new SimpleStringFilter("Name", event.getText(), true, false) ); } } }); cell.setComponent(filterField); return entityListGrid; } private Table initEntityInfoTable() { entityInfoTable.addContainerProperty("Name", String.class, null); entityInfoTable.addContainerProperty("Type", String.class, null); // entityInfoTable.addContainerProperty("Java Type", String.class, null); return entityInfoTable; } @AutoGenerated private CssLayout buildMainLayout() { // common part: create layout mainLayout = new CssLayout(); mainLayout.setImmediate(false); mainLayout.setWidth("100%"); mainLayout.setHeight("100%"); // top-level component properties setWidth("100.0%"); setHeight("100.0%"); // mainSplitPanel mainSplitPanel = buildMainSplitPanel(); mainLayout.addComponent(mainSplitPanel); return mainLayout; } @AutoGenerated private HorizontalSplitPanel buildMainSplitPanel() { // common part: create layout mainSplitPanel = new HorizontalSplitPanel(); mainSplitPanel.setImmediate(false); mainSplitPanel.setWidth("100.0%"); mainSplitPanel.setHeight("100.0%"); // entityListLayout entityListLayout = buildEntityListLayout(); mainSplitPanel.addComponent(entityListLayout); // entityInfoLayout entityInfoLayout = buildEntityInfoLayout(); mainSplitPanel.addComponent(entityInfoLayout); return mainSplitPanel; } @AutoGenerated private VerticalLayout buildEntityListLayout() { // common part: create layout entityListLayout = new VerticalLayout(); entityListLayout.setImmediate(false); entityListLayout.setWidth("100.0%"); entityListLayout.setHeight("100.0%"); entityListLayout.setMargin(false); // entityListGrid entityListGrid = new Grid(); entityListGrid.setImmediate(false); entityListGrid.setWidth("100.0%"); entityListGrid.setHeight("100.0%"); entityListLayout.addComponent(entityListGrid); return entityListLayout; } @AutoGenerated private VerticalLayout buildEntityInfoLayout() { // common part: create layout entityInfoLayout = new VerticalLayout(); entityInfoLayout.setImmediate(false); entityInfoLayout.setWidth("100.0%"); entityInfoLayout.setHeight("100.0%"); entityInfoLayout.setMargin(false); // entityNameLabel entityNameLabel = new Label(); entityNameLabel.setImmediate(false); entityNameLabel.setWidth("-1px"); entityNameLabel.setHeight("-1px"); entityNameLabel.setValue("Label"); entityInfoLayout.addComponent(entityNameLabel); // entityInfoTable entityInfoTable = new Table(); entityInfoTable.setImmediate(false); entityInfoTable.setWidth("100.0%"); entityInfoTable.setHeight("-1px"); entityInfoLayout.addComponent(entityInfoTable); return entityInfoLayout; } }