tools.dynamia.zk.crud.ui.MultiEntityPicker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tools.dynamia.zk Show documentation
Show all versions of tools.dynamia.zk Show documentation
Classes for ZK web application
/*
* Copyright (C) 2023 Dynamia Soluciones IT S.A.S - NIT 900302344-1
* Colombia / South America
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tools.dynamia.zk.crud.ui;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Div;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listhead;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Vlayout;
import tools.dynamia.domain.AbstractEntity;
import tools.dynamia.ui.icons.IconSize;
import tools.dynamia.ui.icons.IconsTheme;
import tools.dynamia.zk.BindingComponentIndex;
import tools.dynamia.zk.ComponentAliasIndex;
import tools.dynamia.zk.util.ZKUtil;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("rawtypes")
public class MultiEntityPicker extends Div {
/**
*
*/
private static final long serialVersionUID = 4761200963821487965L;
private EntityPickerBox entityPicker;
private Listbox listbox;
private List selectedEntities;
static {
BindingComponentIndex.getInstance().put("selectedEntities", MultiEntityPicker.class);
ComponentAliasIndex.getInstance().add(MultiEntityPicker.class);
}
public MultiEntityPicker() {
buildLayout();
}
private void buildLayout() {
Vlayout box = new Vlayout();
box.setWidth("100%");
box.setParent(this);
entityPicker = new EntityPickerBox();
entityPicker.setParent(box);
entityPicker.setWidth("100%");
entityPicker.addEventListener(Events.ON_SELECT, event -> {
addEntity(entityPicker.getSelected());
entityPicker.setSelected(null);
});
listbox = new Listbox();
listbox.setWidth("100%");
listbox.setParent(box);
{
new Listhead().setParent(listbox);
addColumn("Id", "50px");
addColumn("Seleccionados", null);
addColumn("", "40px");
}
listbox.setItemRenderer((ListitemRenderer) (item, data, index) -> renderEntity(item, data));
}
@SuppressWarnings("SuspiciousMethodCalls")
private void addEntity(Object selected) {
if (selectedEntities == null) {
selectedEntities = new ArrayList<>();
}
if (!selectedEntities.contains(selected)) {
selectedEntities.add((AbstractEntity) selected);
renderItems();
Events.postEvent(new Event(Events.ON_SELECT, this, selected));
}
}
public void setListbox(Listbox listbox) {
if (listbox != null) {
this.listbox = listbox;
}
}
private Listheader addColumn(String label, String width) {
Listheader header = new Listheader(label);
if (width != null) {
header.setWidth(width);
}
header.setParent(listbox.getListhead());
return header;
}
public void setEntityClass(String entityClass) {
entityPicker.setEntityClass(entityClass);
}
public Class getEntityClass() {
return entityPicker.getEntityClass();
}
public void setFields(String fields) {
entityPicker.setFields(fields);
}
public List getSelectedEntities() {
return selectedEntities;
}
public void setSelectedEntities(List selectedEntities) {
this.selectedEntities = selectedEntities;
renderItems();
}
private void renderItems() {
ZKUtil.fillListbox(listbox, selectedEntities, true);
}
private void renderEntity(final Listitem item, Object data) {
AbstractEntity entity = (AbstractEntity) data;
if (entity == null || entity.getId() == null) {
return;
}
item.setValue(entity);
String id = entity.getId().toString();
new Listcell(id).setParent(item);
new Listcell(data.toString()).setParent(item);
Listcell cellBtn = new Listcell();
cellBtn.setParent(item);
{
Toolbarbutton removeBtn = new Toolbarbutton();
removeBtn.setParent(cellBtn);
String icon = IconsTheme.get().getIcon("delete").getRealPath(IconSize.SMALL);
if (icon == null) {
removeBtn.setLabel("Borrar");
} else {
removeBtn.setImage(icon);
}
//noinspection unchecked
removeBtn.addEventListener(Events.ON_CLICK, (EventListener) event -> {
item.detach();
selectedEntities.remove(item.getValue());
});
}
}
}