/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.venky.swf.views.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang3.StringEscapeUtils; import com.venky.core.collections.SequenceSet; import com.venky.swf.db.model.Model; import com.venky.swf.db.model.reflection.ModelReflector; import com.venky.swf.path.Path; import com.venky.swf.path._IPath; import com.venky.swf.views.controls.Control; import com.venky.swf.views.controls._IControl; import com.venky.swf.views.controls.model.ModelListTable; import com.venky.swf.views.controls.page.Form; import com.venky.swf.views.controls.page.Form.SubmitMethod; import com.venky.swf.views.controls.page.HotLink; import com.venky.swf.views.controls.page.buttons.Submit; import com.venky.swf.views.controls.page.layout.Div; import com.venky.swf.views.controls.page.layout.FluidContainer; import com.venky.swf.views.controls.page.layout.FluidContainer.Column; import com.venky.swf.views.controls.page.layout.FluidContainer.Row; import com.venky.swf.views.controls.page.layout.Glyphicon; import com.venky.swf.views.controls.page.layout.Panel; import com.venky.swf.views.controls.page.layout.Panel.PanelHeading; import com.venky.swf.views.controls.page.layout.Span; import com.venky.swf.views.controls.page.layout.headings.H; import com.venky.swf.views.controls.page.text.TextBox; /** * * @author venky */ public class ModelListView<M extends Model> extends AbstractModelView<M> { private FluidContainer container ; private PanelHeading headingPanel ; private Panel contentPanel; public PanelHeading getHeadingPanel() { return headingPanel; } public ModelListView(Path path, String[] includeFields, List<M> records, boolean isCompleteList) { super(path, includeFields); ModelReflector<M> reflector = getModelAwareness().getReflector(); if (includeFields == null){ Iterator<String> fi = getIncludedFields().iterator(); while (fi.hasNext()){ String field = fi.next(); if (reflector.isHouseKeepingField(field) || !reflector.isFieldVisible(field)) { fi.remove(); } } } container = new FluidContainer(); Row containerRow = container.createRow(); contentPanel = new Panel(); containerRow.createColumn(0, 12).addControl(contentPanel); headingPanel = contentPanel.createPanelHeading(); headingPanel.setTitle(getModelAwareness().getLiteral(getModelAwareness().getReflector().getModelClass().getSimpleName())); if (!isCompleteList){ List<H> hunted = new ArrayList<H>(); Control.hunt(headingPanel, H.class, hunted); Span alertIcon = new Span(); alertIcon.addClass("glyphicon glyphicon-alert"); alertIcon.setToolTip("Listing is possibly incomplete, Refine your search to find what you need"); hunted.get(0).addControl(alertIcon); } boolean indexedModel = !getModelAwareness().getReflector().getIndexedFieldGetters().isEmpty(); if (indexedModel){ createSearchForm(getPath(),headingPanel); } Row tableCellRow = new Row(); contentPanel.addControl(tableCellRow); Column tableCell = tableCellRow.createColumn(0,12); ModelListTable<M> modelListTable = createModelListTable(path); tableCell.addControl(modelListTable); modelListTable.addRecords(records); } @Override public boolean isFieldVisible(String fieldName) { return getIncludedFields().contains(fieldName); } protected ModelListTable<M> createModelListTable(Path path){ return new ModelListTable<M>(path,getModelAwareness(),this); } public static void createSearchForm(_IPath path, Div container){ Row row = new Row(); container.addControl(row); Column col = row.createColumn(0, 12); Form searchForm = new Form(); searchForm.setAction(StringEscapeUtils.escapeHtml4(path.controllerPath()),"search"); searchForm.setMethod(SubmitMethod.GET); col.addControl(searchForm); Row contentRow = new Row(); searchForm.addControl(contentRow); col = contentRow.createColumn(0, 6); TextBox search = new TextBox(); search.setName("q"); search.setValue(path.getFormFields().get("q")); search.setWaterMark("Refine your search here..."); search.addClass("form-control"); col.addControl(search); col = contentRow.createColumn(0, 2); col.addControl(new Submit("Search")); } private SequenceSet<HotLink> links = null; @Override public SequenceSet<HotLink> getHotLinks(){ if (links == null ){ links = super.getHotLinks(); if (getPath().canAccessControllerAction("blank") && getPath().canAccessControllerAction("save")){ HotLink create = new HotLink(); create.setUrl(getPath().controllerPath()+"/blank"); create.addControl(new Glyphicon("glyphicon-plus","New")); links.add(create); } if (getPath().canAccessControllerAction("importxls") && getPath().canAccessControllerAction("save")){ HotLink importxls = new HotLink(); importxls.setUrl(getPath().controllerPath()+"/importxls"); importxls.addControl(new Glyphicon("glyphicon-cloud-upload","Upload XLS data")); links.add(importxls); } if (getPath().canAccessControllerAction("exportxls")){ HotLink exportxls = new HotLink(); exportxls.setUrl(getPath().controllerPath()+"/exportxls"); exportxls.addControl(new Glyphicon("glyphicon-cloud-download","Download data as xls")); links.add(exportxls); } } return links; } @Override protected void createBody(_IControl b) { b.addControl(container); } }