/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * * 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 org.kie.workbench.common.forms.editor.backend.indexing.query; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Predicate; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; import org.kie.workbench.common.services.refactoring.backend.server.query.NamedQuery; import org.kie.workbench.common.services.refactoring.backend.server.query.response.ResponseBuilder; import org.kie.workbench.common.services.refactoring.backend.server.query.standard.FindResourcesQuery; import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueIndexTerm; import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueResourceIndexTerm; import org.kie.workbench.common.services.refactoring.model.query.RefactoringMapPageRow; import org.kie.workbench.common.services.refactoring.model.query.RefactoringPageRow; import org.kie.workbench.common.services.refactoring.service.ResourceType; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.Path; import org.uberfire.ext.metadata.model.KObject; import org.uberfire.ext.metadata.model.KProperty; import org.uberfire.io.IOService; import org.uberfire.paging.PageResponse; @ApplicationScoped public class FindFormDefinitionIdsQuery extends FindResourcesQuery implements NamedQuery { public static final String NAME = FindFormDefinitionIdsQuery.class.getSimpleName(); @Inject private FindFormDefinitionIdsResponseBuilder responseBuilder; @Inject @Named("ioStrategy") private IOService ioService; @Override public String getName() { return NAME; } @Override public ResponseBuilder getResponseBuilder() { responseBuilder.setIOService(ioService); return responseBuilder; } @Override public void validateTerms(Set<ValueIndexTerm> queryTerms) throws IllegalArgumentException { this.checkInvalidAndRequiredTerms(queryTerms, NAME, new String[]{ValueResourceIndexTerm.class.getSimpleName()}, new Predicate[]{t -> { if (!(t instanceof ValueResourceIndexTerm)) { return false; } else { return ((ValueResourceIndexTerm) t).getTerm().equals(ResourceType.FORM.toString()); } }}); this.checkTermsSize(1, queryTerms); } public static class FindFormDefinitionIdsResponseBuilder implements ResponseBuilder { private IOService ioService; public FindFormDefinitionIdsResponseBuilder() { } public FindFormDefinitionIdsResponseBuilder(IOService ioService) { this.ioService = ioService; } public void setIOService(IOService ioService) { this.ioService = ioService; } @Override public PageResponse<RefactoringPageRow> buildResponse(final int pageSize, final int startRow, final List<KObject> kObjects) { final int hits = kObjects.size(); final PageResponse<RefactoringPageRow> response = new PageResponse<RefactoringPageRow>(); final List<RefactoringPageRow> result = buildResponse(kObjects); response.setTotalRowSize(hits); response.setPageRowList(result); response.setTotalRowSizeExact(true); response.setStartRowIndex(startRow); response.setLastPage((pageSize * startRow + 2) >= hits); return response; } @Override public List<RefactoringPageRow> buildResponse(final List<KObject> kObjects) { final List<RefactoringPageRow> result = new ArrayList<RefactoringPageRow>(kObjects.size()); for (final KObject kObject : kObjects) { String formId = findFormId(kObject.getProperties()); if (formId != null) { final Path path = Paths.convert(ioService.get(URI.create(kObject.getKey()))); Map<String, Path> map = new HashMap<String, Path>(); map.put(formId, path); RefactoringMapPageRow row = new RefactoringMapPageRow(); row.setValue(map); result.add(row); } } return result; } public String findFormId(Iterable<KProperty<?>> properties) { for (KProperty property : properties) { if (property.getName().equals(ResourceType.FORM.toString())) { return (String) property.getValue(); } } return null; } } }