public LoaderAdapter(CollectionLoader loader, Filter filter) { this.filter = filter; if (loader.getContainer() == null) { throw new IllegalStateException("DataLoader must be connected to a Container"); } this.loader = loader; }
@Override public int getFirstResult() { return loader.getFirstResult(); }
@Override public int getMaxResults() { return loader.getMaxResults(); }
@Override public void refresh(Map<String, Object> parameters) { loader.setParameters(parameters); loader.load(); }
protected void setLoaderParameter(String key, Object value) { if (value == null || (value instanceof String && value.equals(""))) { loader.removeParameter(key); } else { loader.setParameter(key, value); } }
@Override public void refreshIfNotSuspended(Map<String, Object> parameters) { for (String paramName : lastQueryFilterParameters) { loader.removeParameter(paramName); loader.setCondition(condition); } else { loader.setCondition(dataLoaderCondition); preventDataLoading = false; } else { loader.load();
@SuppressWarnings("unchecked") @Override public int getCount() { if (loader == null) { return container.getItems().size(); } if (loader instanceof CollectionLoader) { return (int) dataManager.getCount(((CollectionLoader) loader).createLoadContext()); } else if (loader instanceof KeyValueCollectionLoader) { ValueLoadContext context = ((KeyValueCollectionLoader) loader).createLoadContext(); QueryTransformer transformer = QueryTransformerFactory.createTransformer(context.getQuery().getQueryString()); // TODO it doesn't work for query containing scalars in select transformer.replaceWithCount(); context.getQuery().setQueryString(transformer.getResult()); context.setProperties(Collections.singletonList("cnt")); List<KeyValueEntity> list = dataManager.loadValues(context); Number count = list.get(0).getValue("cnt"); return count == null ? 0 : count.intValue(); } else { log.warn("Unsupported loader type: {}", loader.getClass().getName()); return 0; } }
@Override public void setDataLoader(CollectionLoader dataLoader) { this.dataLoader = dataLoader; this.adapter = new LoaderAdapter(dataLoader, filter); this.adapter.setDataLoaderCondition(dataLoader.getCondition()); if (getResultingManualApplyRequired()) { // set initial denying condition to get empty datasource before explicit filter applying JpqlCondition denyingCondition = new JpqlCondition("0<>0"); this.dataLoader.setCondition(denyingCondition); } if (useMaxResults) { initMaxResults(); // set to false because it's initial value maxResultValueChanged = false; } }
@Override public String getQuery() { return loader.getQuery(); }
protected void loadCacheable(Element element, CollectionLoader<Entity> loader) { String cacheableVal = element.attributeValue("cacheable"); if (!Strings.isNullOrEmpty(cacheableVal)) loader.setCacheable(Boolean.valueOf(cacheableVal)); }
protected void printAll() { MetaClass metaClass; LoadContext loadContext; if (listComponent.getItems() instanceof ContainerDataUnit) { ContainerDataUnit unit = (ContainerDataUnit) listComponent.getItems(); CollectionContainer container = unit.getContainer(); CollectionLoader loader = (CollectionLoader) ((HasLoader) unit.getContainer()).getLoader(); metaClass = container.getEntityMetaClass(); loadContext = loader.createLoadContext(); } else { CollectionDatasource ds = listComponent.getDatasource(); metaClass = ds.getMetaClass(); loadContext = ds.getCompiledLoadContext(); } ParameterPrototype parameterPrototype = new ParameterPrototype(metaClass.getName()); parameterPrototype.setMetaClassName(metaClass.getName()); LoadContext.Query query = loadContext.getQuery(); parameterPrototype.setQueryString(query.getQueryString()); parameterPrototype.setQueryParams(query.getParameters()); parameterPrototype.setViewName(loadContext.getView().getName()); Window window = ComponentsHelper.getWindowNN(listComponent); openRunReportScreen(window.getFrameOwner(), parameterPrototype, metaClass); } }
@Override public MetaClass getMetaClass() { return loader.getContainer().getEntityMetaClass(); }
protected MetaClass getFilterMetaClass(Filter filter) { if (filter.getDataLoader() != null && filter.getDataLoader().getContainer() != null) { return filter.getDataLoader().getContainer().getEntityMetaClass(); } if (filter.getDatasource() != null) { return filter.getDatasource().getMetaClass(); } throw new IllegalStateException("No MetaClass related to a filter"); }