test_class.declarator: testOutBaseDir = new File("target/test-out/OpearPackageMojoTest")
test_class.modifier: private final
test_class.original_string: private final File testOutBaseDir = new File("target/test-out/OpearPackageMojoTest");
test_class.type: File
test_class.var_name: testOutBaseDir
test_class.declarator: srcDir = new File("src/test/resources/OpearPackageMojoTest")
test_class.modifier: private final
test_class.original_string: private final File srcDir = new File("src/test/resources/OpearPackageMojoTest");
test_class.type: File
test_class.var_name: srcDir
test_class.file: maven/src/test/java/net/adamcin/oakpal/maven/mojo/OpearPackageMojoTest.java
test_class.identifier: OpearPackageMojoTest
test_case.body: @Test
      public void testAttachArtifact() throws Exception {
          final File testOutDir = new File(testOutBaseDir, "testAttachArtifact");
          FileUtils.deleteDirectory(testOutDir);
          testOutDir.mkdirs();
          final OpearPackageMojo mojo = newMojo();
          final MavenProject project = mock(MavenProject.class);
          mojo.project = project;
          final String expectGroupId = "com.example.artifacts";
          when(project.getGroupId()).thenReturn(expectGroupId);
          final String expectArtifactId = "sample-project";
          when(project.getArtifactId()).thenReturn(expectArtifactId);
          final String expectVersion = "0.314159";
          when(project.getVersion()).thenReturn(expectVersion);
          when(project.getPackaging()).thenReturn("jar");
  
          final ArtifactHandlerManager artifactHandlerManager = mock(ArtifactHandlerManager.class);
          mojo.artifactHandlerManager = artifactHandlerManager;
          final ArtifactHandler opearHandler = mock(ArtifactHandler.class);
          when(artifactHandlerManager.getArtifactHandler(OPEAR)).thenReturn(opearHandler);
  
          final CompletableFuture<Artifact> attachSlot = new CompletableFuture<>();
          doAnswer(call -> attachSlot.complete(call.getArgument(0, Artifact.class)))
                  .when(project).addAttachedArtifact(any(Artifact.class));
  
          final File finalFile = new File(testOutDir, "finalFile.opear");
          final Artifact jarAttached = mojo.attachArtifact(finalFile);
          assertSame("same attachment", jarAttached, attachSlot.getNow(null));
          assertSame("same file", finalFile, jarAttached.getFile());
          assertSame("same handler", opearHandler, jarAttached.getArtifactHandler());
          assertEquals("same groupId", project.getGroupId(), jarAttached.getGroupId());
          assertEquals("same artifactId", project.getArtifactId(), jarAttached.getArtifactId());
          assertEquals("same version", project.getVersion(), jarAttached.getVersion());
          assertEquals("same type", OPEAR, jarAttached.getType());
  
          final Artifact projectArtifact = mock(Artifact.class);
          when(project.getArtifact()).thenReturn(projectArtifact);
          final CompletableFuture<File> fileSlot = new CompletableFuture<>();
          doAnswer(call -> fileSlot.complete(call.getArgument(0, File.class)))
                  .when(projectArtifact).setFile(any(File.class));
          final CompletableFuture<ArtifactHandler> handlerSlot = new CompletableFuture<>();
          doAnswer(call -> handlerSlot.complete(call.getArgument(0, ArtifactHandler.class)))
                  .when(projectArtifact).setArtifactHandler(any(ArtifactHandler.class));
  
          when(project.getPackaging()).thenReturn(OPEAR);
          final Artifact opearAttached = mojo.attachArtifact(finalFile);
          assertSame("same project artifact", projectArtifact, opearAttached);
          assertSame("same artifact handler", opearHandler, handlerSlot.getNow(null));
      }
test_case.class_method_signature: OpearPackageMojoTest.testAttachArtifact()
test_case.full_signature: @Test public void testAttachArtifact()
test_case.identifier: testAttachArtifact
test_case.invocations: deleteDirectory mkdirs newMojo mock thenReturn when getGroupId thenReturn when getArtifactId thenReturn when getVersion thenReturn when getPackaging mock mock thenReturn when getArtifactHandler addAttachedArtifact when doAnswer complete getArgument any attachArtifact assertSame getNow assertSame getFile assertSame getArtifactHandler assertEquals getGroupId getGroupId assertEquals getArtifactId getArtifactId assertEquals getVersion getVersion assertEquals getType mock thenReturn when getArtifact setFile when doAnswer complete getArgument any setArtifactHandler when doAnswer complete getArgument any thenReturn when getPackaging attachArtifact assertSame assertSame getNow
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testAttachArtifact()
focal_class.declarator: OPEAR = "opear"
focal_class.modifier: public static final
focal_class.original_string: public static final String OPEAR = "opear";
focal_class.type: String
focal_class.var_name: OPEAR
focal_class.declarator: OAKPAL_GROUP_ID = "net.adamcin.oakpal"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_GROUP_ID = "net.adamcin.oakpal";
focal_class.type: String
focal_class.var_name: OAKPAL_GROUP_ID
focal_class.declarator: OAKPAL_API_ARTIFACT_ID = "oakpal-api"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_API_ARTIFACT_ID = "oakpal-api";
focal_class.type: String
focal_class.var_name: OAKPAL_API_ARTIFACT_ID
focal_class.declarator: OAKPAL_CORE_ARTIFACT_ID = "oakpal-core"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_CORE_ARTIFACT_ID = "oakpal-core";
focal_class.type: String
focal_class.var_name: OAKPAL_CORE_ARTIFACT_ID
focal_class.declarator: TEST_IS_OAKPAL_API =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_API_ARTIFACT_ID::equals))
focal_class.modifier: private static final
focal_class.original_string: private static final Predicate<Artifact> TEST_IS_OAKPAL_API =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_API_ARTIFACT_ID::equals));
focal_class.type: Predicate<Artifact>
focal_class.var_name: TEST_IS_OAKPAL_API
focal_class.declarator: TEST_IS_OAKPAL_CORE =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_CORE_ARTIFACT_ID::equals))
focal_class.modifier: private static final
focal_class.original_string: private static final Predicate<Artifact> TEST_IS_OAKPAL_CORE =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_CORE_ARTIFACT_ID::equals));
focal_class.type: Predicate<Artifact>
focal_class.var_name: TEST_IS_OAKPAL_CORE
focal_class.declarator: artifactHandlerManager
focal_class.modifier: @Component
focal_class.original_string: @Component
      ArtifactHandlerManager artifactHandlerManager;
focal_class.type: ArtifactHandlerManager
focal_class.var_name: artifactHandlerManager
focal_class.declarator: finalName
focal_class.modifier: @Parameter(defaultValue = "${project.build.finalName}", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.finalName}", required = true)
      String finalName;
focal_class.type: String
focal_class.var_name: finalName
focal_class.declarator: planFile
focal_class.modifier: @Parameter(defaultValue = "${project.build.directory}/oakpal-plugin/opear-plans/plan.json", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.directory}/oakpal-plugin/opear-plans/plan.json", required = true)
      File planFile;
focal_class.type: File
focal_class.var_name: planFile
focal_class.declarator: additionalPlans = new ArrayList<>()
focal_class.modifier: @Parameter
focal_class.original_string: @Parameter
      List<File> additionalPlans = new ArrayList<>();
focal_class.type: List<File>
focal_class.var_name: additionalPlans
focal_class.declarator: outputDirectory
focal_class.modifier: @Parameter(defaultValue = "${project.build.directory}", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.directory}", required = true)
      File outputDirectory;
focal_class.type: File
focal_class.var_name: outputDirectory
focal_class.file: maven/src/main/java/net/adamcin/oakpal/maven/mojo/OpearPackageMojo.java
focal_class.identifier: OpearPackageMojo
focal_class.class_method_signature: OpearPackageMojo.execute()
focal_class.full_signature: @Override public void execute()
focal_class.identifier: execute
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void execute()
focal_class.class_method_signature: OpearPackageMojo.attachArtifact(final @NotNull File finalFile)
focal_class.full_signature:  Artifact attachArtifact(final @NotNull File finalFile)
focal_class.identifier: attachArtifact
focal_class.parameters: (final @NotNull File finalFile)
focal_class.return: Artifact
focal_class.signature: Artifact attachArtifact(final @NotNull File finalFile)
focal_class.class_method_signature: OpearPackageMojo.getOwnVersion()
focal_class.full_signature:  String getOwnVersion()
focal_class.identifier: getOwnVersion
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getOwnVersion()
focal_class.class_method_signature: OpearPackageMojo.getBundleSymbolicName()
focal_class.full_signature:  String getBundleSymbolicName()
focal_class.identifier: getBundleSymbolicName
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getBundleSymbolicName()
focal_class.class_method_signature: OpearPackageMojo.getOakpalCoreVersion()
focal_class.full_signature:  String getOakpalCoreVersion()
focal_class.identifier: getOakpalCoreVersion
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getOakpalCoreVersion()
focal_class.class_method_signature: OpearPackageMojo.getEmbeddedLibraries()
focal_class.full_signature:  List<File> getEmbeddedLibraries()
focal_class.identifier: getEmbeddedLibraries
focal_class.parameters: ()
focal_class.return: List<File>
focal_class.signature: List<File> getEmbeddedLibraries()
focal_class.class_method_signature: OpearPackageMojo.assembleOpear()
focal_class.full_signature:  File assembleOpear()
focal_class.identifier: assembleOpear
focal_class.parameters: ()
focal_class.return: File
focal_class.signature: File assembleOpear()
focal_class.class_method_signature: OpearPackageMojo.mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.full_signature: static Map<String, T> mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.identifier: mapDestFileNames
focal_class.modifiers: static
focal_class.parameters: (final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.return: Map<String, T>
focal_class.signature: Map<String, T> mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.class_method_signature: OpearPackageMojo.shrinkWrapPlans(final @NotNull File toDir)
focal_class.full_signature:  Result<List<String>> shrinkWrapPlans(final @NotNull File toDir)
focal_class.identifier: shrinkWrapPlans
focal_class.parameters: (final @NotNull File toDir)
focal_class.return: Result<List<String>>
focal_class.signature: Result<List<String>> shrinkWrapPlans(final @NotNull File toDir)
focal_class.class_method_signature: OpearPackageMojo.rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.full_signature: static OakpalPlan rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.identifier: rewritePlan
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.return: OakpalPlan
focal_class.signature: OakpalPlan rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.class_method_signature: OpearPackageMojo.copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.full_signature: static Result<Map<String, OakpalPlan>> copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.identifier: copyPlans
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.return: Result<Map<String, OakpalPlan>>
focal_class.signature: Result<Map<String, OakpalPlan>> copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.class_method_signature: OpearPackageMojo.copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.full_signature: static Result<Map<URL, String>> copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.identifier: copyUrlStreams
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.return: Result<Map<URL, String>>
focal_class.signature: Result<Map<URL, String>> copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.superclass: extends AbstractCommonMojo
focal_method.body: Artifact attachArtifact(final @NotNull File finalFile) {
          final Artifact projectArtifact = this.project.getArtifact();
          final ArtifactHandler opearHandler = this.artifactHandlerManager.getArtifactHandler(OPEAR);
          if (OPEAR.equals(project.getPackaging())) {
              // set project artifact
              projectArtifact.setFile(finalFile);
              projectArtifact.setArtifactHandler(opearHandler);
              return projectArtifact;
          } else {
              // attach artifact
              Artifact attachment = new DefaultArtifact(
                      project.getGroupId(),
                      project.getArtifactId(),
                      project.getVersion(),
                      null,
                      OPEAR,
                      null,
                      opearHandler);
              attachment.setFile(finalFile);
              project.addAttachedArtifact(attachment);
              return attachment;
          }
      }
focal_method.class_method_signature: OpearPackageMojo.attachArtifact(final @NotNull File finalFile)
focal_method.full_signature:  Artifact attachArtifact(final @NotNull File finalFile)
focal_method.identifier: attachArtifact
focal_method.invocations: getArtifact getArtifactHandler equals getPackaging setFile setArtifactHandler getGroupId getArtifactId getVersion setFile addAttachedArtifact
focal_method.parameters: (final @NotNull File finalFile)
focal_method.return: Artifact
focal_method.signature: Artifact attachArtifact(final @NotNull File finalFile)