All Downloads are FREE. Search and download functionalities are using the official Maven repository.

templates.ListJ.gsp Maven / Gradle / Ivy

<%
	org.devocative.devolcano.vo.ClassVO cls = targetClass
	org.devocative.devolcano.ImportHelper imp = importHelper
	org.devocative.devolcano.ContextVO context = context

	org.devocative.devolcano.GenTargetVO fvo = context.getGenTarget(cls, "FVO")
	org.devocative.devolcano.GenTargetVO iservice = context.getGenTarget(cls, "ServiceI")
	org.devocative.devolcano.GenTargetVO service = context.getGenTarget(cls, "ServiceM")
	org.devocative.devolcano.GenTargetVO formJ = context.getGenTarget(cls, "FormJ")

	Class prvlg = params["privilegeClass"];
	if(prvlg != null) {
		imp.add(prvlg)
	}

	List commonFields = ["rowMod", "creationDate", "creatorUser", "modificationDate", "modifierUser", "version"]

	imp.add(cls)
	imp.add(fvo)
	imp.add(iservice)
	if (formJ != null) {
		imp.add(formJ)
	}

	imp.add(javax.inject.Inject)
	imp.add(List)
	imp.add(Collections)

	imp.add(org.devocative.demeter.web.DPage)
	imp.add(org.devocative.demeter.web.component.DAjaxButton)

	imp.add(org.devocative.wickomp.grid.IGridDataSource)
	imp.add(org.devocative.wickomp.grid.WDataGrid)
	imp.add(org.devocative.wickomp.html.WFloatTable)
	imp.add(org.devocative.wickomp.grid.column.OColumnList)
	imp.add(org.devocative.wickomp.grid.column.OPropertyColumn)
	imp.add(org.devocative.wickomp.grid.OGrid)
	imp.add(org.devocative.wickomp.WModel)
	imp.add(org.devocative.wickomp.opt.OSize)
	imp.add(org.devocative.wickomp.grid.WSortField)

	imp.add(org.apache.wicket.markup.html.form.Form)
	imp.add(org.apache.wicket.model.CompoundPropertyModel)
	imp.add(org.apache.wicket.model.ResourceModel)
	imp.add(org.apache.wicket.ajax.AjaxRequestTarget)
	imp.add(org.apache.wicket.model.IModel)
	imp.add(org.apache.wicket.model.Model)
%>
package ${targetVO.pkg};

@IMPORT@

public class ${targetVO.name} extends DPage implements IGridDataSource<${cls.simpleName}> {
	private static final long serialVersionUID = ${targetVO.fqn.hashCode()}L;

	@Inject
	private ${iservice.name} ${service.name.toUncapital()};

	private ${fvo.name} filter;
	private boolean formVisible = true;
	private String[] invisibleFormItems;

	private WDataGrid<${cls.simpleName}> grid;
	private String[] removeColumns;

	private Boolean gridFit;
	private boolean gridEnabled = false;
	private OSize gridHeight = OSize.fixed(500);
	private OSize gridWidth = OSize.percent(100);

	// ------------------------------

	// Panel Call - New Filter
	public ${targetVO.name}(String id) {
		this(id, Collections.emptyList(), new ${fvo.name}());
	}

	// Panel Call - Open Filter
	public ${targetVO.name}(String id, ${fvo.name} filter) {
		this(id, Collections.emptyList(), filter);
	}

	// REST Call - New Filter
	public ${targetVO.name}(String id, List params) {
		this(id, params, new ${fvo.name}());
	}

	// Main Constructor
	private ${targetVO.name}(String id, List params, ${fvo.name} filter) {
		super(id, params);

		this.filter = filter;
	}

	// ------------------------------

	@Override
	protected void onInitialize() {
		super.onInitialize();
<%
    if(params["ajaxEditColumn"] && formJ != null) { %>
		final ${imp.add(org.devocative.wickomp.html.window.WModalWindow)} window = new WModalWindow("window");
		add(window);
<%
    	if(cls.hasAdd) { %>
		add(new ${imp.add(org.devocative.wickomp.html.WAjaxLink)}("add", ${imp.add(params["iconClass"])}.ADD) {
			private static final long serialVersionUID = ${(targetVO.fqn + ".WAjaxLink").hashCode()}L;

			@Override
			public void onClick(AjaxRequestTarget target) {
				window.setContent(new ${formJ.name}(window.getContentId()));
				window.show(target);
			}
		}<%= prvlg != null ? ".setVisible(hasPermission(${prvlg.simpleName}.${cls.simpleName}Add))":"" %>);
<% 		}
	} %>
		WFloatTable floatTable = new WFloatTable("floatTable");
<%
	cls.allFieldsMap.each { String name, org.devocative.devolcano.vo.FieldVO field ->
		if (field.ok && field.hasFVO) {
			String component

			if (field.isOf(Number)) {
				component = """${imp.add(org.devocative.wickomp.form.range.WNumberRangeInput)}("${name}", ${imp.add(field.type)}.class)"""
			} else if (field.isOf(Date)) {
				component = """${imp.add(org.devocative.wickomp.form.range.WDateRangeInput)}("${name}")\n\t\t\t.setTimePartVisible(${field.info.hasTimePart})"""
			} else if (field.isOf(Boolean)) {
				component = """${imp.add(org.devocative.wickomp.form.WBooleanInput)}("${name}")"""
			} else if (field.embedded) {
				component = """${imp.add(org.devocative.wickomp.form.WSelectionInput)}("${name}", ${imp.add(field.mainType)}.list(), true)"""
			} else if (field.association) {
				if (field.listType == "simple") {
					component = """${imp.add(org.devocative.wickomp.form.WSelectionInput)}("${name}", ${service.name.toUncapital()}.get${name.toCapital()}List(), true)"""
				} else {
					throw new RuntimeException("'search' is not implemented: field = ${name}")
				}
			} else {
				component = """${imp.add(org.devocative.wickomp.form.WTextInput)}("${name}")""";
			}

			String visibility = ""
			if(field.isOf(org.devocative.demeter.entity.ERowMod)) {
				visibility = "\n\t\t\t.setVisible(getCurrentUser().isRoot())"
			}

			out << """\t\tfloatTable.add(new ${component}\n\t\t\t.setLabel(new ResourceModel("${commonFields.contains(name) ? "entity" : cls.simpleName}.${name}", "${name}"))${visibility});\n"""
		}
	}
%>
		Form<${fvo.name}> form = new Form<>("form", new CompoundPropertyModel<>(filter));
		form.add(floatTable);
		form.add(new DAjaxButton("search", new ResourceModel("label.search"), ${imp.add(params["iconClass"])}.SEARCH) {
			private static final long serialVersionUID = ${(targetVO.fqn + ".DAjaxButton").hashCode()}L;

			@Override
			protected void onSubmit(AjaxRequestTarget target) {
				grid.setEnabled(true);
				grid.loadData(target);
			}
		});
		add(form);

		OColumnList<${cls.simpleName}> columnList = new OColumnList<>();
<%
	cls.allFieldsMap.each { String name, org.devocative.devolcano.vo.FieldVO field ->
		if (field.ok && field.hasList) {
			String cellFormatter = ""
			String genericType = ""

			if (field.isOf(Date)) {
				cellFormatter = "\n\t\t\t"
				genericType = cls.simpleName;

				if (field.info.hasTimePart) {
					cellFormatter += ".setFormatter(${imp.add(org.devocative.wickomp.formatter.ODateFormatter)}.getDateTimeByUserPreference())"
				} else {
					cellFormatter += ".setFormatter(${imp.add(org.devocative.wickomp.formatter.ODateFormatter)}.getDateByUserPreference())"
				}

				cellFormatter += """\n\t\t\t.setStyle("direction:ltr")""";
			} else if (field.isOf(Boolean)) {
				cellFormatter = "\n\t\t\t"
				genericType = cls.simpleName;
				cellFormatter += ".setFormatter(${imp.add(org.devocative.wickomp.formatter.OBooleanFormatter)}.bool())"
			} else if (field.isOf(Number)) {
				cellFormatter = "\n\t\t\t"
				genericType = cls.simpleName;
				if (field.real) {
					cellFormatter += ".setFormatter(${imp.add(org.devocative.wickomp.formatter.ONumberFormatter)}.real())"
				} else {
					cellFormatter += ".setFormatter(${imp.add(org.devocative.wickomp.formatter.ONumberFormatter)}.integer())"
				}
				cellFormatter += """\n\t\t\t.setStyle("direction:ltr")""";
			}

			if(field.isOf(org.devocative.demeter.entity.ERowMod)) {
				out << "\t\tif(getCurrentUser().isRoot()) {\n\t"
			}
			out << """\t\tcolumnList.add(new OPropertyColumn<${genericType}>(new ResourceModel("${commonFields.contains(name) ? "entity" : cls.simpleName}.${name}", "${name}"), "${name}")${cellFormatter});\n"""
			if(field.isOf(org.devocative.demeter.entity.ERowMod)) {
				out << "\t\t}\n"
			}
		}
	}

	if(formJ != null) {
		if(params["ajaxEditColumn"]) {
			if(prvlg != null) {
%>
		if (hasPermission(${prvlg.simpleName}.${cls.simpleName}Edit)) {
			columnList.add(new ${imp.add(org.devocative.demeter.web.component.grid.OEditAjaxColumn)}<${cls.simpleName}>() {
				private static final long serialVersionUID = ${(targetVO.fqn + ".OEditAjaxColumn").hashCode()}L;

				@Override
				public void onClick(AjaxRequestTarget target, IModel<${cls.simpleName}> rowData) {
					window.setContent(new ${formJ.name}(window.getContentId(), rowData.getObject()));
					window.show(target);
				}
			});
		}
<%
			} else {
%>
		columnList.add(new ${imp.add(org.devocative.demeter.web.component.grid.OEditAjaxColumn)}<${cls.simpleName}>() {
			private static final long serialVersionUID = ${(targetVO.fqn + ".OEditAjaxColumn").hashCode()}L;

			@Override
			public void onClick(AjaxRequestTarget target, IModel<${cls.simpleName}> rowData) {
				window.setContent(new ${formJ.name}(window.getContentId(), rowData.getObject()));
				window.show(target);
			}
		});
<%
			}
		} else {
%>
		columnList.add(new ${imp.add(org.devocative.demeter.web.component.grid.ORESTLinkColumn)}<${cls.simpleName}>(new Model(), ${formJ.name}.class, "${cls.idField.name}", ${imp.add(params["iconClass"])}.EDIT));
<%
		}
	}
%>
		OGrid<${cls.simpleName}> oGrid = new OGrid<>();
		oGrid
			.setColumns(columnList)
			.setMultiSort(false)
			.setHeight(gridHeight)
			.setWidth(gridWidth)
			.setFit(gridFit);

		grid = new WDataGrid<>("grid", oGrid, this);
		add(grid);

		// ---------------

		form.setVisible(formVisible);
		grid.setEnabled(gridEnabled || !formVisible);

		if (invisibleFormItems != null) {
			for (String formItem : invisibleFormItems) {
				floatTable.get(formItem).setVisible(false);
			}
		}

		if (removeColumns != null) {
			for (String column : removeColumns) {
				columnList.removeColumn(column);
			}
		}
	}

	// ------------------------------

	public ${targetVO.name} setFormVisible(boolean formVisible) {
		this.formVisible = formVisible;
		return this;
	}

	public ${targetVO.name} setInvisibleFormItems(String... invisibleFormItems) {
		this.invisibleFormItems = invisibleFormItems;
		return this;
	}

	public ${targetVO.name} setGridHeight(OSize gridHeight) {
		this.gridHeight = gridHeight;
		return this;
	}

	public ${targetVO.name} setGridWidth(OSize gridWidth) {
		this.gridWidth = gridWidth;
		return this;
	}

	public ${targetVO.name} setGridFit(Boolean gridFit) {
		this.gridFit = gridFit;
		return this;
	}

	public ${targetVO.name} setGridEnabled(boolean gridEnabled) {
		this.gridEnabled = gridEnabled;
		return this;
	}

	public ${targetVO.name} setRemoveColumns(String... removeColumns) {
		this.removeColumns = removeColumns;
		return this;
	}

	// ------------------------------ IGridDataSource

	@Override
	public List<${cls.simpleName}> list(long pageIndex, long pageSize, List sortFields) {
		return ${service.name.toUncapital()}.search(filter, pageIndex, pageSize);
	}

	@Override
	public long count() {
		return ${service.name.toUncapital()}.count(filter);
	}

	@Override
	public IModel<${cls.simpleName}> model(${cls.simpleName} object) {
		return new WModel<>(object);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy