/* * Copyright 2016 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.services.refactoring.backend.server.query.response; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.kie.workbench.common.services.refactoring.model.query.RefactoringPageRow; import org.kie.workbench.common.services.refactoring.model.query.RefactoringStringPageRow; import org.kie.workbench.common.services.refactoring.service.ResourceType; import org.uberfire.ext.metadata.model.KObject; import org.uberfire.ext.metadata.model.KProperty; import org.uberfire.paging.PageResponse; /** * Custom ResponseBuilder to return a String Rule Names */ public class RuleNameResponseBuilder implements ResponseBuilder { @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 ) { //Both "child" rule and "parent" rule (when one extends another) are stored //in the index. We therefore need to build a set of unique Rule Names final List<RefactoringPageRow> result = new ArrayList<RefactoringPageRow>( kObjects.size() ); final Set<String> uniqueRuleNames = new HashSet<String>(); for (final KObject kObject : kObjects) { final Set<String> ruleNames = getRuleNamesFromKObject( kObject ); uniqueRuleNames.addAll( ruleNames ); } for (String ruleName : uniqueRuleNames) { final RefactoringStringPageRow row = new RefactoringStringPageRow(); row.setValue( ruleName ); result.add( row ); } return result; } private Set<String> getRuleNamesFromKObject( final KObject kObject ) { //Some resources (e.g. Decision Tables etc) contain multiple rule names so add them all final Set<String> ruleNames = new HashSet<String>(); if ( kObject == null ) { return ruleNames; } for (KProperty property : kObject.getProperties()) { if ( property.getName().equals( ResourceType.RULE.toString() ) ) { ruleNames.add( property.getValue().toString() ); } } return ruleNames; } }