protected Map<String, Object> prepareDatasourceCustomParams() { Map<String, Object> lastRefreshParameters = new HashMap<>(adapter.getLastRefreshParameters()); for (String paramName : ftsLastDatasourceRefreshParamsNames) { lastRefreshParameters.remove(paramName); } List<FtsCondition> ftsConditions = conditions.toConditionsList().stream() .filter(abstractCondition -> abstractCondition instanceof FtsCondition) .map(abstractCondition -> (FtsCondition) abstractCondition) .collect(Collectors.toList()); for (FtsCondition ftsCondition : ftsConditions) { String searchTerm = (String) ftsCondition.getParam().getValue(); if (!Strings.isNullOrEmpty(searchTerm)) { FtsFilterHelper.FtsSearchResult ftsSearchResult = ftsFilterHelper.search(searchTerm, adapter.getMetaClass().getName()); int queryKey = ftsSearchResult.getQueryKey(); lastRefreshParameters.put(ftsCondition.getSessionIdParamName(), userSessionSource.getUserSession().getId()); lastRefreshParameters.put(ftsCondition.getQueryKeyParamName(), queryKey); ftsLastDatasourceRefreshParamsNames.add(ftsCondition.getSessionIdParamName()); ftsLastDatasourceRefreshParamsNames.add(ftsCondition.getQueryKeyParamName()); } } return lastRefreshParameters; }
@Override public void actionPerform(Component component) { Set<Entity> ownerSelection = target.getSelected(); if (!ownerSelection.isEmpty()) { String entityType; if (target.getItems() instanceof EntityDataUnit) { MetaClass metaClass = ((EntityDataUnit) target.getItems()).getEntityMetaClass(); entityType = metaClass.getName(); } else { throw new UnsupportedOperationException("Unsupported data unit " + target.getItems()); } String[] strings = ValuePathHelper.parse(ComponentsHelper.getFilterComponentPath(filter)); String componentId = ValuePathHelper.format(Arrays.copyOfRange(strings, 1, strings.length)); Map<String, Object> params = new HashMap<>(); params.put("entityType", entityType); params.put("items", ownerSelection); params.put("componentPath", ComponentsHelper.getFilterComponentPath(filter)); params.put("componentId", componentId); params.put("foldersPane", filterHelper.getFoldersPane()); params.put("entityClass", adapter.getMetaClass().getJavaClass().getName()); params.put("query", adapter.getQuery()); WindowManager wm = (WindowManager) ComponentsHelper.getScreenContext(filter).getScreens(); WindowInfo windowInfo = windowConfig.getWindowInfo("saveSetInFolder"); wm.openWindow(windowInfo, OpenType.DIALOG, params); } } }
FtsFilterHelper.FtsSearchResult ftsSearchResult = ftsFilterHelper.search(searchTerm, adapter.getMetaClass().getName()); int queryKey = ftsSearchResult.getQueryKey(); params.put(FtsFilterHelper.SESSION_ID_PARAM_NAME, userSessionSource.getUserSession().getId()); params.put(FtsFilterHelper.QUERY_KEY_PARAM_NAME, queryKey); CustomCondition ftsCondition = ftsFilterHelper.createFtsCondition(adapter.getMetaClass().getName()); conditions = new ConditionsTree(); conditions.getRootNodes().add(new Node<>(ftsCondition));
if (!suitableCondition(condition)) { String message = String.format(getMainMessage("filter.inappropriate.filter"), filterEntity.getName(), adapter.getMetaClass().getName());
boolean pinAppliedActionEnabled = lastAppliedFilter != null && !(lastAppliedFilter.getFilterEntity() == adHocFilter && lastAppliedFilter.getConditions().getRoots().size() == 0) && (adapter == null || Stores.isMain(metadata.getTools().getStoreName(adapter.getMetaClass()))); boolean saveAsSearchFolderActionEnabled = folderActionsEnabled && !isFolder && !hasCode; boolean saveAsAppFolderActionEnabled = folderActionsEnabled && !isFolder && !hasCode && userCanEditGlobalAppFolder;
if (filterMode == FilterMode.FTS_MODE && !isFtsModeEnabled() && !isEntityAvailableForFts()) { log.warn("Unable to switch to the FTS filter mode. FTS mode is not supported for the {} entity", adapter.getMetaClass().getName()); return;
protected void initMaxResults() { checkState(); int maxResults; if (this.maxResults != -1) { maxResults = this.maxResults; } else { maxResults = adapter.getMaxResults(); } if (maxResults == 0 || maxResults == persistenceManager.getMaxFetchUI(adapter.getMetaClass().getName())) { maxResults = persistenceManager.getFetchUI(adapter.getMetaClass().getName()); } if (maxResultsAddedToLayout) { if (!textMaxResults) { List<Integer> optionsList = ((LookupField) maxResultsField).getOptionsList(); if (!optionsList.contains(maxResults)) { maxResults = findClosestValue(maxResults, optionsList); Collections.sort(optionsList); ((LookupField) maxResultsField).setOptionsList(optionsList); } } maxResultsField.setValue(maxResults); } adapter.setMaxResults(maxResults); }
/** * The method is invoked before search. It sets datasource {@code maxResults} value based on the maxResults * field (if visible) or on maxFetchUI value. * Method also resets the datasource {@code firstResult} value */ protected void initDatasourceMaxResults() { checkState(); if (this.maxResults != -1 && !useMaxResults) { adapter.setMaxResults(maxResults); } else if (maxResultsAddedToLayout && useMaxResults) { Integer maxResults = maxResultsField.getValue(); if (maxResults != null && maxResults > 0) { adapter.setMaxResults(maxResults); } else { adapter.setMaxResults(persistenceManager.getFetchUI(adapter.getMetaClass().getName())); } } adapter.setFirstResult(0); }
protected boolean suitableCondition(AbstractCondition condition) { if (condition instanceof PropertyCondition) { return adapter.getMetaClass() .getPropertyPath(condition.getName()) != null; } if (condition instanceof DynamicAttributesCondition) { return DynamicAttributesUtils.getMetaPropertyPath( adapter.getMetaClass(), ((DynamicAttributesCondition) condition).getCategoryAttributeId() ) != null; } return true; }
protected boolean isEntityAvailableForFts() { return adapter != null && ftsFilterHelper != null && ftsFilterHelper.isEntityIndexed(adapter.getMetaClass().getName()) && Stores.isMain(metadata.getTools().getStoreName(adapter.getMetaClass())); }
@Override public String getEntityAlias() { checkState(); String query = adapter.getQuery(); QueryParser parser = QueryTransformerFactory.createParser(query); return parser.getEntityAlias(adapter.getMetaClass().getName()); }
@Override public MetaClass getEntityMetaClass() { checkState(); return adapter.getMetaClass(); }