</processorPath>
<module name="lis-app" />
<module name="lis-ui" />
- <module name="zk-user-components" />
<module name="lis-db" />
<module name="lis-workflow" />
<module name="lis-service" />
</profile>
</annotationProcessing>
+ <bytecodeTargetLevel>
+ <module name="zk-user-components" target="1.8" />
+ </bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
public String queryInboundInvoiceDataAsString(String invoiceNumber, String supplierTaxNumber) throws Exception {
InvoiceNumberQueryType query = new InvoiceNumberQueryType();
- query.setInvoiceDirection(InvoiceDirectionType.INBOUND);
+ //query.setInvoiceDirection(InvoiceDirectionType.INBOUND);
query.setInvoiceNumber(invoiceNumber);
query.setSupplierTaxNumber(supplierTaxNumber);
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
-import org.zkoss.json.JSONObject;
+import org.zkoss.bind.BindUtils;
import org.zkoss.zul.FieldComparator;
-import java.util.Comparator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
@Component
@Log4j2
@Getter
@Setter
- JSONObject columnSettings = new JSONObject();
+ ColDef[] columnSettings = {};
@Autowired
CurrentProfile currentProfile;
@Autowired
- EntityDataService<JSONObject> entityDataService;
+ EntityDataService<ColDef[]> entityDataService;
- public void addColumns(Map<String, String> columns) {
+ public void addColumns(List<ColDef> columns) {
Profile profile = currentProfile.getSetting(getClass().getSimpleName());
- columns.keySet().forEach(colName -> addColumn(colName, columns.get(colName)));
- if (Objects.isNull(profile)) {
+ ColDef[] savedColumns = validSavedColumns(profile, columns);
+ if (Objects.isNull(savedColumns)) {
+ columnSettings = columns.toArray(new ColDef[]{});
saveProfileSetting();
} else {
- JSONObject savedColumns = entityDataService.fromJSON(profile.getSetting(), JSONObject.class);
- if (savedColumns.keySet().equals(columns.keySet())) {
-// log.info("{}", Strings.join(objects, ','));
- columnSettings.keySet().forEach(colName -> {
- LinkedHashMap<String, Object> colSetting = (LinkedHashMap<String, Object>) savedColumns.get(colName);
- if (!colSetting.containsKey("visible")) {
- colSetting.put("visible", true);
- }
- });
- columnSettings = savedColumns;
- } else {
- saveProfileSetting();
- }
+ columnSettings = savedColumns;
}
+ columns.forEach(this::setSortDirection);
+ }
+
+ private ColDef[] validSavedColumns(Profile profile, List<ColDef> columns) {
+ ColDef[] savedColumns;
+ if (Objects.isNull(profile)) {
+ return null;
+ }
+ try {
+ savedColumns = entityDataService.fromJSON(profile.getSetting(), ColDef[].class);
+ } catch (Exception e) {
+ log.warn(e.getMessage());
+ return null;
+ }
+
+ if (Objects.isNull(savedColumns)) {
+ return null;
+ }
+
+ Set<String> savedColumnNames = Arrays.stream(savedColumns).map(ColDef::getName).collect(Collectors.toSet());
+ Set<String> currentColumnNames = columns.stream().map(ColDef::getName).collect(Collectors.toSet());
+ if (!currentColumnNames.equals(savedColumnNames)) {
+ return null;
+ }
+
+ return savedColumns;
+ }
+
+ public void addColumns(Map<String, String> columns) {
+ throw new RuntimeException("OBSOLATE");
}
private void saveProfileSetting() {
currentProfile.persistSetting(columnProfile);
}
- private void addColumn(String name, String direction) {
- JSONObject sort = new JSONObject();
- sort.put("sortDirection", direction);
- sort.put("visible", true);
- columnSettings.put(name, sort);
-
- if (!direction.equals(NATURAL)) {
- setSortComparator(new FieldComparator(name, direction.equals(ASCENDING)));
+ private void setSortDirection(ColDef colDef) {
+ if (!colDef.getSortDirection().equals(NATURAL)) {
+ setSortComparator(new FieldComparator(colDef.getName(), colDef.getSortDirection().equals(ASCENDING)));
}
}
super.sort(cmpr, ascending);
FieldComparator sortComparator = (FieldComparator) cmpr;
- columnSettings.keySet().forEach(colName -> {
- LinkedHashMap<String, String> col = (LinkedHashMap<String, String>) columnSettings.get(colName);
- if (colName.equals(sortComparator.getRawOrderBy())) {
- col.put("sortDirection", ascending ? ASCENDING : DESCENDING);
+ Arrays.stream(columnSettings).forEach(colDef -> {
+ if (colDef.getName().equals(sortComparator.getRawOrderBy())) {
+ colDef.setSortDirection(ascending ? ASCENDING : DESCENDING);
} else {
- col.put("sortDirection", NATURAL);
+ colDef.setSortDirection(NATURAL);
}
});
saveProfileSetting();
- log.info("Sort settings for {} : {}", getClass().getSimpleName(), columnSettings.toJSONString());
+ log.info("Sort settings for {} : {}", getClass().getSimpleName(), columnSettings);
+ }
+
+ public void onHeaderMenuClicked(ColDef node) {
+ node.setVisible(!node.isVisible());
+ saveProfileSetting();
+ BindUtils.postNotifyChange(this, "columnSettings");
}
}
--- /dev/null
+package hu.user.lis.ui.data.common;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Builder
+public class ColDef {
+ private String name;
+ private String align;
+ private String label;
+ private String sortDirection;
+ @Builder.Default
+ private boolean visible = true;
+
+ public String getSort() {
+ return String.format("auto(%s)", name);
+ }
+}
package hu.user.lis.ui.view;
-import com.google.common.collect.ImmutableMap;
import hu.user.lis.db.Partner;
import hu.user.lis.ui.Constants;
import hu.user.lis.ui.data.PartnersDataModel;
import hu.user.lis.ui.data.common.CachedSpringDataModel;
+import hu.user.lis.ui.data.common.ColDef;
import hu.user.lis.ui.editor.common.Editors;
import hu.user.lis.ui.event.SaveEntityEvent;
import hu.user.lis.ui.view.common.FilterActiveViewModel;
import lombok.Getter;
import lombok.extern.log4j.Log4j2;
import org.zkoss.bind.BindUtils;
+import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;
-import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING;
-import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL;
+import java.util.Arrays;
@Log4j2
public class PartnersViewModel extends FilterActiveViewModel<Partner> {
@Init
public void init() {
super.init();
- addColumns(ImmutableMap.of(
- "name", ASCENDING,
- "vatNr", NATURAL,
- "address", NATURAL,
- "active", NATURAL
+ addColumns(Arrays.asList(
+ "name,Név,ascending,left,true",
+ "vatNr,Adószám,natural,left,true",
+ "address,Cím,natural,left,true",
+ "active,Aktív,natural,left,true"
));
}
});
}
+ @Command
+ public void onHeaderMenuClicked(@BindingParam("node") ColDef node) {
+ partnersDataModel.onHeaderMenuClicked(node);
+ }
+
}
import hu.user.lis.service.data.EntityDataService;
import hu.user.lis.ui.data.common.CachedSpringDataModel;
+import hu.user.lis.ui.data.common.ColDef;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.zkoss.bind.annotation.*;
-import org.zkoss.json.JSONObject;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.Selectors;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zkplus.spring.DelegatingVariableResolver;
import java.io.Serializable;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
@Log4j2
getDataModel().addColumns(columns);
}
- public JSONObject getCols() {
+ protected void addColumns(List<String> colDefs) {
+ List<ColDef> columns = colDefs.stream().map(colDefStr -> {
+ String[] tokens = colDefStr.split(",");
+ return ColDef.builder()
+ .name(tokens[0])
+ .label(tokens[1])
+ .sortDirection(tokens[2])
+ .align(tokens[3])
+ .visible(Boolean.parseBoolean(tokens[4]))
+ .build();
+ }).collect(Collectors.toList());
+ getDataModel().addColumns(columns);
+ }
+
+ public ColDef[] getCols() {
return getDataModel().getColumnSettings();
}
</north>
<center border="none" flex="true">
<vlayout>
- <!-- https://www.zkoss.org/wiki/ZK_Developer%27s_Reference/MVVM/Data_Binding/Children_Binding-->
- <menupopup id="editPopup">
- <menuitem label="Group" image="~./zul/img/grid/menu-group.png"/>
- <menuitem label="Sort Ascending" image="~./zul/img/grid/menu-arrowup.png"/>
- <menuitem label="Sort Descending" image="~./zul/img/grid/menu-arrowdown.png"/>
+ <menupopup id="editPopup"
+ children="@bind(vm.partnersDataModel.columnSettings) @template('menu-item')">
+ <template name="menu-item" var="node">
+ <menuitem label="@load(node.label)" checked="@load(node.visible)"
+ onClick="@command('onHeaderMenuClicked', node=node)"/>
+ </template>
</menupopup>
<listbox vflex="true" model="@load(vm.partnersDataModel)"
autopaging="true" mold="paging" pagingPosition="top" multiple="false"
onSelect="@command('onListSelection')">
- <listhead sizable="true" menupopup="editPopup">
- <listheader label="Név" sort="auto(name)" align="left"
- visible="@bind(vm.cols['name'].visible)"
- sortDirection="@load(vm.cols['name'].sortDirection)"/>
- <listheader label="Adószám" sort="auto(vatNr)" align="left"
- sortDirection="@load(vm.cols['vatNr'].sortDirection)"/>
- <listheader label="Cím" sort="auto(address)" align="left"
- sortDirection="@load(vm.cols['address'].sortDirection)"/>
- <listheader label="Aktív" sort="auto(active)" align="left"
- sortDirection="@load(vm.cols['active'].sortDirection)"/>
+ <listhead sizable="true" menupopup="editPopup"
+ children="@bind(vm.partnersDataModel.columnSettings) @template('head-item')">
+ <template name="head-item" var="node">
+ <listheader label="@load(node.label)" sort="@load(node.sort)" align="@load(node.align)"
+ visible="@load(node.visible)" sortDirection="@load(node.sortDirection)"/>
+ </template>
+ <!-- -->
+ <!-- <listheader label="Név" sort="auto(name)" align="left"-->
+ <!-- visible="true"-->
+ <!-- sortDirection="@load(vm.cols['name'].sortDirection)"/>-->
+ <!-- <listheader label="Adószám" sort="auto(vatNr)" align="left"-->
+ <!-- sortDirection="@load(vm.cols['vatNr'].sortDirection)"/>-->
+ <!-- <listheader label="Cím" sort="auto(address)" align="left"-->
+ <!-- sortDirection="@load(vm.cols['address'].sortDirection)"/>-->
+ <!-- <listheader label="Aktív" sort="auto(active)" align="left"-->
+ <!-- sortDirection="@load(vm.cols['active'].sortDirection)"/>-->
</listhead>
<template name="model">