package com.constellio.app.ui.framework.containers;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.ArrayList;
import java.util.List;
import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition;
import org.vaadin.addons.lazyquerycontainer.Query;
import org.vaadin.addons.lazyquerycontainer.QueryDefinition;
import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.framework.data.MetadataVODataProvider;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.util.ObjectProperty;
@SuppressWarnings("serial")
public class MetadataVOLazyContainer extends LazyQueryContainer {
private static final String LABEL = "caption";
private static final String ENABLED = "enabledCaption";
private static final String TYPE = "valueCaption";
private static final String DISPLAY_TYPE = "inputCaption";
private static final String REQUIRED = "requiredCaption";
public MetadataVOLazyContainer(MetadataVODataProvider dataProvider, int batchSize) {
super(new SchemaVOLazyQueryDefinition(dataProvider, batchSize), new SchemaVOLazyQueryFactory(dataProvider));
}
public static class SchemaVOLazyQueryDefinition extends LazyQueryDefinition {
MetadataVODataProvider dataProvider;
public SchemaVOLazyQueryDefinition(MetadataVODataProvider dataProvider, int batchSize) {
super(true, batchSize, null);
this.dataProvider = dataProvider;
super.addProperty(LABEL, String.class, null, true, true);
super.addProperty(TYPE, String.class, null, true, false);
super.addProperty(DISPLAY_TYPE, String.class, null, true, false);
super.addProperty(REQUIRED, String.class, null, true, false);
super.addProperty(ENABLED, String.class, null, true, false);
}
}
public static class SchemaVOLazyQueryFactory implements SerializableQueryFactory {
MetadataVODataProvider dataProvider;
public SchemaVOLazyQueryFactory(MetadataVODataProvider dataProvider) {
this.dataProvider = dataProvider;
}
@Override
public Query constructQuery(final QueryDefinition queryDefinition) {
if (queryDefinition.getSortPropertyIds().length > 0) {
dataProvider.sort(queryDefinition.getSortPropertyIds(), queryDefinition.getSortPropertyAscendingStates());
}
return new SerializableQuery() {
@Override
public int size() {
return dataProvider.size();
}
@Override
public void saveItems(List<Item> addedItems, List<Item> modifiedItems, List<Item> removedItems) {
throw new UnsupportedOperationException("Query is read-only");
}
@Override
public List<Item> loadItems(int startIndex, int count) {
List<Item> items = new ArrayList<>();
List<MetadataVO> schemaVOs = dataProvider.listMetadataVO(startIndex, count);
for (MetadataVO schemaVO : schemaVOs) {
Item item = new BeanItem<>(schemaVO);
item.addItemProperty("caption", new ObjectProperty<>(
schemaVO.getLabel()));
item.addItemProperty("valueCaption", new ObjectProperty<>(
$(MetadataValueType.getCaptionFor(schemaVO.getType()))));
item.addItemProperty("inputCaption", new ObjectProperty<>(
$(MetadataInputType.getCaptionFor(schemaVO.getMetadataInputType()))));
item.addItemProperty("requiredCaption", new ObjectProperty<>(
$("AddEditSchemaMetadataView." + schemaVO.isRequired())));
item.addItemProperty("enabledCaption", new ObjectProperty<>(
$("AddEditSchemaMetadataView." + schemaVO.isEnabled())));
items.add(item);
}
return items;
}
@Override
public boolean deleteAllItems() {
throw new UnsupportedOperationException("Query is read-only");
}
@Override
public Item constructItem() {
throw new UnsupportedOperationException("Query is read-only");
}
};
}
}
}