/*
* 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.impact;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import javax.enterprise.inject.Instance;
import org.apache.lucene.analysis.Analyzer;
import org.junit.Before;
import org.junit.Test;
import org.kie.workbench.common.services.refactoring.backend.server.BaseIndexingTest;
import org.kie.workbench.common.services.refactoring.backend.server.TestIndexer;
import org.kie.workbench.common.services.refactoring.backend.server.drl.TestDrlFileIndexer;
import org.kie.workbench.common.services.refactoring.backend.server.drl.TestDrlFileTypeDefinition;
import org.kie.workbench.common.services.refactoring.backend.server.query.NamedQuery;
import org.kie.workbench.common.services.refactoring.backend.server.query.response.DefaultResponseBuilder;
import org.kie.workbench.common.services.refactoring.backend.server.query.response.ResponseBuilder;
import org.kie.workbench.common.services.refactoring.backend.server.query.standard.FindAllChangeImpactQuery;
import org.kie.workbench.common.services.refactoring.model.index.terms.ProjectRootPathIndexTerm;
import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueIndexTerm.TermSearchType;
import org.kie.workbench.common.services.refactoring.model.query.RefactoringPageRow;
import org.kie.workbench.common.services.refactoring.service.PartType;
import org.kie.workbench.common.services.refactoring.service.ResourceType;
import org.kie.workbench.common.services.refactoring.service.impact.DeleteOperationRequest;
import org.kie.workbench.common.services.refactoring.service.impact.QueryOperationRequest;
import org.kie.workbench.common.services.refactoring.service.impact.RefactorOperationRequest;
import org.uberfire.ext.metadata.backend.lucene.analyzer.FilenameAnalyzer;
import org.uberfire.java.nio.file.Path;
public class QueryOperationRequestTest extends BaseIndexingTest<TestDrlFileTypeDefinition> {
// Setup fields, methods and other logic --------------------------------------------------------------------------------------
@Override
protected TestIndexer<TestDrlFileTypeDefinition> getIndexer() {
return new TestDrlFileIndexer();
}
@Override
public Map<String, Analyzer> getAnalyzers() {
return new HashMap<String, Analyzer>() {
{
put(ProjectRootPathIndexTerm.TERM, new FilenameAnalyzer());
}
};
}
@Override
protected TestDrlFileTypeDefinition getResourceTypeDefinition() {
return new TestDrlFileTypeDefinition();
}
@Override
protected String getRepositoryName() {
return this.getClass().getSimpleName();
}
protected Set<NamedQuery> getQueries() {
return new HashSet<NamedQuery>() {
{
add(new FindAllChangeImpactQuery() {
@Override
public ResponseBuilder getResponseBuilder() {
return new DefaultResponseBuilder(ioService());
}
});
}
};
}
// Tests ----------------------------------------------------------------------------------------------------------------------
@Test
public void workingCodeTest() throws Exception {
//Add test files
final Path path1 = basePath.resolve("drl1.drl");
final String drl1 = loadText("drl1.drl");
ioService().write(path1, drl1);
final Path path2 = basePath.resolve("drl2.drl");
final String drl2 = loadText("drl2.drl");
ioService().write(path2, drl2);
final Path path3 = basePath.resolve( "drl3.drl" );
final String drl3 = loadText( "drl3.drl" );
ioService().write( path3,
drl3 );
Thread.sleep(5000); //wait for events to be consumed from jgit -> (notify changes -> watcher -> index) -> lucene index
{
QueryOperationRequest request = QueryOperationRequest.referencesSharedPart("myRuleFlowGroup", PartType.RULEFLOW_GROUP).inAllProjects().onAllBranches();
try {
final List<RefactoringPageRow> response = service.queryToList(request);
assertNotNull(response);
assertEquals(2, response.size());
assertResponseContains(response, path1);
assertResponseContains(response, path3);
} catch (IllegalArgumentException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
{
QueryOperationRequest request = QueryOperationRequest.referencesSharedPart("*", PartType.RULEFLOW_GROUP, TermSearchType.WILDCARD).inAllProjects().onAllBranches();
try {
final List<RefactoringPageRow> response = service.queryToList(request);
assertNotNull(response);
assertEquals(3, response.size());
assertResponseContains(response, path1);
assertResponseContains(response, path2);
assertResponseContains(response, path3);
} catch (IllegalArgumentException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}
@Test
@SuppressWarnings("unused")
public void exampleCode() {
String className = this.getClass().getName();
String projectName = "org.my.package:my-project:1.0";
String projectRootPathURI = "default://repo/my-project";
String newClassName = Random.class.getName();
DeleteOperationRequest delReq = DeleteOperationRequest.deleteReferences(className, ResourceType.JAVA).inProject(projectName).onAllBranches();
delReq = DeleteOperationRequest.deleteReferences(className, ResourceType.JAVA).inProjectRootPathURI( projectRootPathURI ).onAllBranches();
delReq = DeleteOperationRequest.deletePartReferences(className, "setAge(long)", PartType.METHOD).inProject(projectName).onAllBranches();
delReq = DeleteOperationRequest.deletePartReferences(className, "setAge(long)", PartType.METHOD).inProjectRootPathURI( projectRootPathURI ).onAllBranches();
RefactorOperationRequest refOp = RefactorOperationRequest.refactorReferences(className, ResourceType.JAVA, newClassName).inProject(projectName).onBranch("branch-name");
refOp = RefactorOperationRequest.refactorReferences(className, ResourceType.JAVA, newClassName).inProjectRootPathURI( projectRootPathURI ).onBranch("branch-name");
refOp = RefactorOperationRequest.refactorPartReferences(className, "toName(int)", PartType.METHOD, "toSurName(int)").inProject(projectName).onAllBranches();
refOp = RefactorOperationRequest.refactorPartReferences(className, "toName(int)", PartType.METHOD, "toSurName(int)").inProjectRootPathURI( projectRootPathURI ).onAllBranches();
refOp = RefactorOperationRequest.refactorPartReferences(className, "toName(int)", PartType.METHOD, "toSurName(int)").inProject(projectName).onBranch("branch-name");
QueryOperationRequest queOp = QueryOperationRequest.references(className, ResourceType.JAVA).inProject(projectName).onBranch("branch-name");
queOp = QueryOperationRequest.references(className, ResourceType.JAVA).inProjectRootPathURI( projectRootPathURI ).onBranch("branch-name");
}
}