package com.constellio.app.entities.navigation; import java.io.Serializable; import java.util.Collections; import java.util.List; import org.joda.time.LocalDateTime; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.components.contextmenu.BaseContextMenu; import com.constellio.app.ui.framework.data.RecordLazyTreeDataProvider; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.services.schemas.builders.CommonMetadataBuilder; import com.vaadin.ui.Component; public abstract class PageItem implements CodedItem, Serializable { public enum Type {RECENT_ITEM_TABLE, RECORD_TABLE, RECORD_TREE, CUSTOM_ITEM} private final String code; private final Type type; protected PageItem(String code, Type type) { this.code = code; this.type = type; } @Override public String getCode() { return code; } public Type getType() { return type; } public static abstract class RecentItemTable extends PageItem { protected RecentItemTable(String code) { super(code, Type.RECENT_ITEM_TABLE); } public abstract List<RecentItem> getItems(AppLayerFactory appLayerFactory, SessionContext sessionContext); public static class RecentItem implements Serializable { public static final String CAPTION = "caption"; public static final String LAST_ACCESS = "lastAccess"; private final RecordVO record; private final String caption; public RecentItem(RecordVO record, String caption) { this.record = record; this.caption = caption; } public RecordVO getRecord() { return record; } public String getCaption() { return caption; } public String getId() { return record.getId(); } public LocalDateTime getLastAccess() { return record.get(CommonMetadataBuilder.MODIFIED_ON); } } } public static abstract class RecordTable extends PageItem { public RecordTable(String code) { super(code, Type.RECORD_TABLE); } public abstract RecordVODataProvider getDataProvider( AppLayerFactory appLayerFactory, SessionContext sessionContext); } public static abstract class RecordTree extends PageItem { private int defaultDataProvider = -1; private List<String> expandedRecordIds = Collections.emptyList(); public RecordTree(String code) { super(code, Type.RECORD_TREE); } public int getDefaultDataProvider() { return defaultDataProvider; } public void setDefaultDataProvider(int defaultDataProvider) { this.defaultDataProvider = defaultDataProvider; } public List<String> getExpandedRecordIds() { return expandedRecordIds; } public void setExpandedRecordIds(List<String> expandedRecordIds) { this.expandedRecordIds = expandedRecordIds; } public abstract List<RecordLazyTreeDataProvider> getDataProviders( AppLayerFactory appLayerFactory, SessionContext sessionContext); public abstract BaseContextMenu getContextMenu(); } public static abstract class CustomItem extends PageItem { public CustomItem(String code) { super(code, Type.CUSTOM_ITEM); } public abstract Component buildCustomComponent(ConstellioFactories factories, SessionContext context); } }