Skip to content

Commit

Permalink
[WIP]
Browse files Browse the repository at this point in the history
  • Loading branch information
dmikurube committed Nov 29, 2023
1 parent bc33fdd commit 5360e57
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 6 deletions.
63 changes: 63 additions & 0 deletions src/main/java/org/embulk/gradle/runset/EmbulkRunsetExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,18 @@

package org.embulk.gradle.runset;

import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.gradle.api.IllegalDependencyNotation;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.Property;

/**
* Configuration options for the {@link org.embulk.gradle.runset.RunsetPlugin}.
Expand All @@ -27,7 +37,60 @@ public EmbulkRunsetExtension(final Project project) {
final ObjectFactory objectFactory = project.getObjects();

this.project = project;
this.dependencies = new ArrayList<>();
this.targetDirectory = objectFactory.property(String.class);
}

/**
* Adds a Maven artifact to be installed.
*
* <p>It tries to simulate Gradle's dependency notations, but it is yet far from perfect.
*
* @see <a href="https://github.com/gradle/gradle/blob/v8.4.0/subprojects/dependency-management/src/main/java/org/gradle/api/internal/notations/DependencyNotationParser.java#L49-L86">org.gradle.api.internal.notations.DependencyNotationParser#create</a>
*/
public void artifact(final Object dependencyNotation) {
if (dependencyNotation instanceof CharSequence) {
this.dependencies.add(this.mapFromCharSequence((CharSequence) dependencyNotation));
} else if (dependencyNotation instanceof Map) {
this.dependencies.add(this.mapFromMap((Map) dependencyNotation));
} else {
throw new IllegalDependencyNotation("Supplied module notation is invalid.");
}
}

public Property<String> getTargetDirectory() {
return this.targetDirectory;
}

List<Configuration> buildDetachedConfigurations() {
final ArrayList<Configuration> configurations = new ArrayList<>();
for (final Map.Entry<Object, Dependency> dependency : this.dependencies) {
final Configuration configuration = this.project.getConfigurations().detachedConfiguration(dependency.getValue());
configurations.add(configuration);
}
return Collections.unmodifiableList(configurations);
}

// https://github.com/gradle/gradle/blob/v8.4.0/subprojects/dependency-management/src/main/java/org/gradle/api/internal/notations/DependencyStringNotationConverter.java
private Map.Entry<Object, Dependency> mapFromCharSequence(final CharSequence dependencyNotation) {
System.out.println(dependencyNotation);
return new AbstractMap.SimpleImmutableEntry<>(
dependencyNotation.toString(),
this.project.getDependencies().create(dependencyNotation));
}

// https://github.com/gradle/gradle/blob/v8.4.0/subprojects/core/src/main/java/org/gradle/internal/typeconversion/MapNotationConverter.java
private Map.Entry<Object, Dependency> mapFromMap(final Map dependencyNotation) {
System.out.println(dependencyNotation);

return new AbstractMap.SimpleImmutableEntry<>(
new LinkedHashMap((Map) dependencyNotation),
this.project.getDependencies().create(dependencyNotation));
}

private final Project project;

private final ArrayList<Map.Entry<Object, Dependency>> dependencies;

private final Property<String> targetDirectory;
}
6 changes: 0 additions & 6 deletions src/test/java/org/embulk/gradle/runset/TestRunsetPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,8 @@

package org.embulk.gradle.runset;

import static org.embulk.gradle.runset.Util.assertExcludeAll;
import static org.embulk.gradle.runset.Util.assertNoElement;
import static org.embulk.gradle.runset.Util.assertSingleTextContentByTagName;
import static org.embulk.gradle.runset.Util.getSingleElementByTagName;
import static org.embulk.gradle.runset.Util.openJarUrlConnection;
import static org.embulk.gradle.runset.Util.prepareProjectDir;
import static org.embulk.gradle.runset.Util.runGradle;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.IOException;
import java.nio.file.Path;
Expand Down
5 changes: 5 additions & 0 deletions src/test/resources/simple/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ plugins {
repositories {
mavenCentral()
}

embulkRunset {
artifact "org.embulk:embulk-input-postgresql:0.13.2"
artifact group: "org.embulk", name: "embulk-input-s3", version: "0.6.0"
}

0 comments on commit 5360e57

Please sign in to comment.