From 8d4740b9785e03ec1242660dc7ab99acbee3bdbc Mon Sep 17 00:00:00 2001 From: vga91 Date: Mon, 13 Mar 2023 15:30:22 +0100 Subject: [PATCH 1/2] [TOQo1n9M] Core part - apoc-hadoop dependency is conflicting 5.x (neo4j-contrib/neo4j-apoc-procedures#3450) --- .../test/java/apoc/it/core/StartupTest.java | 6 ++-- .../apoc/processor/ExtensionClassWriter.java | 33 ++++++++++++++++--- .../java/apoc/util/TestContainerUtil.java | 28 +++++++++------- 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/it/src/test/java/apoc/it/core/StartupTest.java b/it/src/test/java/apoc/it/core/StartupTest.java index e3cc2fd71..eb17407ad 100644 --- a/it/src/test/java/apoc/it/core/StartupTest.java +++ b/it/src/test/java/apoc/it/core/StartupTest.java @@ -1,5 +1,5 @@ package apoc.it.core; -import apoc.ApocSignatures; +import apoc.ApocSignaturesCore; import apoc.util.Neo4jContainerExtension; import apoc.util.TestContainerUtil; import apoc.util.TestUtil; @@ -75,8 +75,8 @@ public void compare_with_sources() { .list(record -> record.get("name").asString()); - assertEquals(sorted(ApocSignatures.PROCEDURES), procedureNames); - assertEquals(sorted(ApocSignatures.FUNCTIONS), functionNames); + assertEquals(sorted(ApocSignaturesCore.PROCEDURES), procedureNames); + assertEquals(sorted(ApocSignaturesCore.FUNCTIONS), functionNames); } neo4jContainer.close(); diff --git a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java index 6802e0837..5fe6a1f69 100644 --- a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java +++ b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java @@ -6,9 +6,13 @@ import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeSpec; +import org.apache.commons.lang3.StringUtils; import javax.annotation.processing.Filer; +import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; +import javax.tools.FileObject; +import javax.tools.StandardLocation; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +29,10 @@ public void write(List procedureSignatures, List userFunctionSignatures) { try { - JavaFile.builder("apoc", defineClass(procedureSignatures, userFunctionSignatures)) + String path = getProjectPath(); + final TypeSpec typeSpec = defineClass(procedureSignatures, userFunctionSignatures, path); + + JavaFile.builder("apoc", typeSpec) .build() .writeTo(filer); } catch (IOException e) { @@ -33,8 +40,26 @@ public void write(List procedureSignatures, } } - private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures) { - return TypeSpec.classBuilder("ApocSignatures") + private String getProjectPath() throws IOException { + // create and delete a file to retrieve the current project (`core` or `extended`) + FileObject resource = filer.createResource(StandardLocation.SOURCE_OUTPUT, "", "tmp", (Element[]) null); + String projectPath = resource.getName(); + resource.delete(); + + // in order to ignore test case, i.e. `ApocProcessorTest` + String buildPath = "/build"; + if (!projectPath.contains(buildPath)) { + return ""; + } + + // transform e.g. "myPath/core/build/generated/..." to "Core" + projectPath = StringUtils.substringBefore(projectPath, buildPath); + projectPath = StringUtils.substringAfterLast(projectPath, "/"); + return StringUtils.capitalize(projectPath); + } + + private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures, String projectPath) { + return TypeSpec.classBuilder("ApocSignatures" + projectPath) .addModifiers(Modifier.PUBLIC) .addField(signatureListField("PROCEDURES", procedureSignatures)) .addField(signatureListField("FUNCTIONS", userFunctionSignatures)) @@ -57,4 +82,4 @@ private String placeholders(List signatures) { // FIXME: find a way to manage the indentation automatically return signatures.stream().map((ignored) -> "$S").collect(Collectors.joining(",\n\t\t")); } -} +} \ No newline at end of file diff --git a/test-utils/src/main/java/apoc/util/TestContainerUtil.java b/test-utils/src/main/java/apoc/util/TestContainerUtil.java index 0e7107ac6..45d82e058 100644 --- a/test-utils/src/main/java/apoc/util/TestContainerUtil.java +++ b/test-utils/src/main/java/apoc/util/TestContainerUtil.java @@ -3,6 +3,7 @@ import com.github.dockerjava.api.exception.NotFoundException; import java.time.Duration; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.WildcardFileFilter; import org.apache.commons.lang3.exception.ExceptionUtils; import org.gradle.tooling.BuildLauncher; @@ -46,9 +47,10 @@ public enum ApocPackage { private TestContainerUtil() {} - private static File baseDir = Paths.get("..").toFile(); + public static File baseDir = Paths.get("..").toFile(); + public static File pluginsFolder = new File(baseDir, "build/plugins"); private static File coreDir = new File(baseDir, System.getProperty("coreDir")); - private static File extendedDir = new File(baseDir, "extended"); + public static File extendedDir = new File(baseDir, "extended"); public static String dockerImageForNeo4j(Neo4jVersion version) { if (version == Neo4jVersion.COMMUNITY) @@ -84,7 +86,7 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap dockerImage = neo4jCommunityDockerImageVersion; } - File pluginsFolder = new File(baseDir, "build/plugins"); + pluginsFolder = new File(baseDir, "build/plugins"); try { FileUtils.deleteDirectory( pluginsFolder ); } catch (IOException e) { @@ -113,14 +115,7 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap executeGradleTasks(projectDir, "shadowJar"); - Collection files = FileUtils.listFiles(new File(projectDir, "build/libs"), new WildcardFileFilter(Arrays.asList("*-extended.jar", "*-core.jar")), null); - for (File file: files) { - try { - FileUtils.copyFileToDirectory(file, pluginsFolder); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + copyFilesToPlugin(new File(projectDir, "build/libs"), new WildcardFileFilter(Arrays.asList("*-extended.jar", "*-core.jar")), pluginsFolder); } System.out.println("neo4jDockerImageVersion = " + dockerImage); @@ -165,6 +160,17 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap return neo4jContainer.withWaitForNeo4jDatabaseReady(password, version); } + public static void copyFilesToPlugin(File directory, IOFileFilter instance, File pluginsFolder) { + Collection files = FileUtils.listFiles(directory, instance, null); + for (File file: files) { + try { + FileUtils.copyFileToDirectory(file, pluginsFolder); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + public static void executeGradleTasks(File baseDir, String... tasks) { try (ProjectConnection connection = GradleConnector.newConnector() .forProjectDirectory(baseDir) From feb0a13447298c87976faee0e194c38895d70af9 Mon Sep 17 00:00:00 2001 From: vga91 Date: Thu, 30 Mar 2023 16:14:12 +0200 Subject: [PATCH 2/2] [TOQo1n9M] changed getProjectPath() to isExtendedProject() --- .../test/java/apoc/it/core/StartupTest.java | 6 ++--- .../apoc/processor/ExtensionClassWriter.java | 24 ++++++------------- .../java/apoc/util/TestContainerUtil.java | 1 - 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/it/src/test/java/apoc/it/core/StartupTest.java b/it/src/test/java/apoc/it/core/StartupTest.java index eb17407ad..e3cc2fd71 100644 --- a/it/src/test/java/apoc/it/core/StartupTest.java +++ b/it/src/test/java/apoc/it/core/StartupTest.java @@ -1,5 +1,5 @@ package apoc.it.core; -import apoc.ApocSignaturesCore; +import apoc.ApocSignatures; import apoc.util.Neo4jContainerExtension; import apoc.util.TestContainerUtil; import apoc.util.TestUtil; @@ -75,8 +75,8 @@ public void compare_with_sources() { .list(record -> record.get("name").asString()); - assertEquals(sorted(ApocSignaturesCore.PROCEDURES), procedureNames); - assertEquals(sorted(ApocSignaturesCore.FUNCTIONS), functionNames); + assertEquals(sorted(ApocSignatures.PROCEDURES), procedureNames); + assertEquals(sorted(ApocSignatures.FUNCTIONS), functionNames); } neo4jContainer.close(); diff --git a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java index 5fe6a1f69..03e963198 100644 --- a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java +++ b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java @@ -6,7 +6,6 @@ import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeSpec; -import org.apache.commons.lang3.StringUtils; import javax.annotation.processing.Filer; import javax.lang.model.element.Element; @@ -29,8 +28,8 @@ public void write(List procedureSignatures, List userFunctionSignatures) { try { - String path = getProjectPath(); - final TypeSpec typeSpec = defineClass(procedureSignatures, userFunctionSignatures, path); + String suffix = isExtendedProject() ? "Extended" : ""; + final TypeSpec typeSpec = defineClass(procedureSignatures, userFunctionSignatures, suffix); JavaFile.builder("apoc", typeSpec) .build() @@ -40,26 +39,17 @@ public void write(List procedureSignatures, } } - private String getProjectPath() throws IOException { - // create and delete a file to retrieve the current project (`core` or `extended`) + private boolean isExtendedProject() throws IOException { + // create and delete a file to retrieve the current project path (e.g `ROOT/../core/build/generated/.../tmp`) FileObject resource = filer.createResource(StandardLocation.SOURCE_OUTPUT, "", "tmp", (Element[]) null); String projectPath = resource.getName(); resource.delete(); - // in order to ignore test case, i.e. `ApocProcessorTest` - String buildPath = "/build"; - if (!projectPath.contains(buildPath)) { - return ""; - } - - // transform e.g. "myPath/core/build/generated/..." to "Core" - projectPath = StringUtils.substringBefore(projectPath, buildPath); - projectPath = StringUtils.substringAfterLast(projectPath, "/"); - return StringUtils.capitalize(projectPath); + return projectPath.contains("extended/build/generated"); } - private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures, String projectPath) { - return TypeSpec.classBuilder("ApocSignatures" + projectPath) + private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures, String suffix) { + return TypeSpec.classBuilder("ApocSignatures" + suffix) .addModifiers(Modifier.PUBLIC) .addField(signatureListField("PROCEDURES", procedureSignatures)) .addField(signatureListField("FUNCTIONS", userFunctionSignatures)) diff --git a/test-utils/src/main/java/apoc/util/TestContainerUtil.java b/test-utils/src/main/java/apoc/util/TestContainerUtil.java index 45d82e058..6f7880d27 100644 --- a/test-utils/src/main/java/apoc/util/TestContainerUtil.java +++ b/test-utils/src/main/java/apoc/util/TestContainerUtil.java @@ -86,7 +86,6 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap dockerImage = neo4jCommunityDockerImageVersion; } - pluginsFolder = new File(baseDir, "build/plugins"); try { FileUtils.deleteDirectory( pluginsFolder ); } catch (IOException e) {