Skip to content

Commit a1fa5c4

Browse files
committed
Relocate default native classifier patterns
Having the SubdirectoryPattern data structure know about them was a conflation of concerns. It makes more sense for KnownPlatforms to have a utility method delivering these subdirectory patterns. This also generalizes the naming for the SubdirectoryPattern fields, in preparation for patterns supporting GAVC rather than only C.
1 parent 4938231 commit a1fa5c4

File tree

4 files changed

+80
-68
lines changed

4 files changed

+80
-68
lines changed

src/it/subdirectory-patterns-custom/pom.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,18 @@
7777
<configuration>
7878
<subdirectoryPatterns>
7979
<subdirectoryPattern>
80-
<name>open</name>
81-
<classifiers>
82-
<classifier>natives-linux</classifier>
83-
</classifiers>
80+
<subdirectory>open</subdirectory>
81+
<patterns>
82+
<pattern>natives-linux</pattern>
83+
</patterns>
8484
</subdirectoryPattern>
8585
<subdirectoryPattern>
86-
<name>closed</name>
87-
<classifiers>
88-
<classifier>natives-macos</classifier>
89-
<classifier>natives-windows</classifier>
90-
<classifier>natives-windows-x86</classifier>
91-
</classifiers>
86+
<subdirectory>closed</subdirectory>
87+
<patterns>
88+
<pattern>natives-macos</pattern>
89+
<pattern>natives-windows</pattern>
90+
<pattern>natives-windows-x86</pattern>
91+
</patterns>
9292
</subdirectoryPattern>
9393
</subdirectoryPatterns>
9494
</configuration>

src/main/java/org/scijava/maven/plugin/install/AbstractInstallMojo.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,17 +292,17 @@ private static boolean isIJ1Plugin(final File file) {
292292
private String subdirectory(final Artifact artifact) {
293293
if (subdirectoryPatterns == null || subdirectoryPatterns.isEmpty()) {
294294
getLog().debug("Using default subdirectory patterns");
295-
subdirectoryPatterns = SubdirectoryPattern.defaultPatterns();
295+
subdirectoryPatterns = KnownPlatforms.nativeClassifierPatterns();
296296
}
297297
getLog().debug("Checking artifact: " + artifact.getGroupId() +
298298
":" + artifact.getArtifactId() + ":" + artifact.getVersion() + ":" +
299299
artifact.getClassifier());
300300
for (final SubdirectoryPattern pattern : subdirectoryPatterns) {
301-
if (pattern.classifiers.contains(artifact.getClassifier())) {
302-
getLog().debug("- Versus pattern " + pattern.name + "? MATCH");
303-
return pattern.name;
301+
if (pattern.matches(artifact)) {
302+
getLog().debug("- Versus pattern " + pattern.subdirectory + "? MATCH");
303+
return pattern.subdirectory;
304304
}
305-
getLog().debug("- Versus pattern " + pattern.name + "? NOPE");
305+
getLog().debug("- Versus pattern " + pattern.subdirectory + "? NOPE");
306306
}
307307
return null;
308308
}

src/main/java/org/scijava/maven/plugin/install/KnownPlatforms.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@
2929

3030
package org.scijava.maven.plugin.install;
3131

32+
import java.util.ArrayList;
3233
import java.util.Arrays;
34+
import java.util.HashMap;
3335
import java.util.List;
36+
import java.util.Map;
37+
import java.util.stream.Collectors;
3438

3539
/**
3640
* Data structure enumerating known platform strings.
@@ -72,6 +76,40 @@ public static String shortName(final String family, final String arch) {
7276
return null;
7377
}
7478

79+
/**
80+
* Gets a list of {@link SubdirectoryPattern}s corresponding to known native
81+
* classifiers. E.g.:
82+
* <ul>
83+
* <li>win32 &rarr; windows-x86, natives-windows-i586, etc.</li>
84+
* <li>win64 &rarr; windows-x86_64, natives-windows-amd64, etc.</li>
85+
* <li>macosx &rarr; macosx-x86_64, natives-macosx-universal, etc.</li>
86+
* <li>linux32 &rarr; linux-x86, natives-linux-i586, etc.</li>
87+
* <li>linux64 &rarr; linux-x86_64, natives-linux-amd64, etc.</li>
88+
* </ul>
89+
*/
90+
public static List<SubdirectoryPattern> nativeClassifierPatterns() {
91+
final Map<String, List<String>> patterns = new HashMap<>();
92+
93+
for (final String family : FAMILIES) {
94+
for (final String arch : ARCHES) {
95+
// NB: Convert family+arch to short name --
96+
// e.g. win32, win64, macosx, linux32, linux64.
97+
final String shortName = shortName(family, arch);
98+
if (shortName == null) continue;
99+
addClassifier(patterns, "jars/" + shortName, family + "-" + arch);
100+
}
101+
// NB: Convert family alone (no arch) to short name --
102+
// e.g. windows -> win64, osx -> macosx, linux -> linux64.
103+
final String shortName = shortName(family, null);
104+
if (shortName == null) continue;
105+
addClassifier(patterns, "jars/" + shortName, family);
106+
}
107+
108+
return patterns.entrySet().stream() //
109+
.map(entry -> pattern(entry.getKey(), entry.getValue())) //
110+
.collect(Collectors.toList());
111+
}
112+
75113
private static boolean isWindows(final String family) {
76114
return "windows".equals(family);
77115
}
@@ -88,4 +126,24 @@ private static boolean isArch32(final String arch) {
88126
private static boolean isArch64(final String arch) {
89127
return arch == null || "amd64".equals(arch) || "x86_64".equals(arch);
90128
}
129+
130+
private static void addClassifier(final Map<String, List<String>> patterns,
131+
final String subdirectory, final String classifier)
132+
{
133+
final String[] prefixes = { "", "native-", "natives-" };
134+
final List<String> classifiers = //
135+
patterns.computeIfAbsent(subdirectory, l -> new ArrayList<>());
136+
for (final String prefix : prefixes) {
137+
classifiers.add("*:*:*:" + prefix + classifier);
138+
}
139+
}
140+
141+
private static SubdirectoryPattern pattern(final String subdirectory,
142+
final List<String> patterns)
143+
{
144+
final SubdirectoryPattern pattern = new SubdirectoryPattern();
145+
pattern.subdirectory = subdirectory;
146+
pattern.patterns = patterns;
147+
return pattern;
148+
}
91149
}

src/main/java/org/scijava/maven/plugin/install/SubdirectoryPattern.java

Lines changed: 7 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -29,67 +29,21 @@
2929

3030
package org.scijava.maven.plugin.install;
3131

32-
import java.util.ArrayList;
33-
import java.util.HashMap;
3432
import java.util.List;
35-
import java.util.Map;
36-
import java.util.stream.Collectors;
33+
34+
import org.apache.maven.artifact.Artifact;
3735

3836
/**
39-
* Data structure for mapping classifiers to subdirectories.
40-
* <p>
41-
* The default use case is for handling installation of native classifier
42-
* artifacts to separate subdirectories. But this class makes the mappings
43-
* configurable downstream.
44-
* </p>
37+
* Data structure for mapping GAV patterns to subdirectories.
4538
*
4639
* @author Curtis Rueden
4740
*/
4841
public class SubdirectoryPattern {
4942

50-
public String name;
51-
public List<String> classifiers;
52-
53-
public static List<SubdirectoryPattern> defaultPatterns() {
54-
final Map<String, List<String>> patterns = new HashMap<>();
55-
56-
for (final String family : KnownPlatforms.FAMILIES) {
57-
for (final String arch : KnownPlatforms.ARCHES) {
58-
// NB: Convert family+arch to short name --
59-
// e.g. win32, win64, macosx, linux32, linux64.
60-
final String shortName = KnownPlatforms.shortName(family, arch);
61-
if (shortName == null) continue;
62-
addClassifier(patterns, "jars/" + shortName, family + "-" + arch);
63-
}
64-
// NB: Convert family alone (no arch) to short name --
65-
// e.g. windows -> win64, osx -> macosx, linux -> linux64.
66-
final String shortName = KnownPlatforms.shortName(family, null);
67-
if (shortName == null) continue;
68-
addClassifier(patterns, "jars/" + shortName, family);
69-
}
70-
71-
return patterns.entrySet().stream() //
72-
.map(entry -> pattern(entry.getKey(), entry.getValue())) //
73-
.collect(Collectors.toList());
74-
}
75-
76-
private static void addClassifier(final Map<String, List<String>> patterns,
77-
final String name, final String classifier)
78-
{
79-
final String[] prefixes = { "", "native-", "natives-" };
80-
final List<String> classifiers = //
81-
patterns.computeIfAbsent(name, l -> new ArrayList<>());
82-
for (final String prefix : prefixes) {
83-
classifiers.add(prefix + classifier);
84-
}
85-
}
43+
public String subdirectory;
44+
public List<String> patterns;
8645

87-
private static SubdirectoryPattern pattern(final String name,
88-
final List<String> classifiers)
89-
{
90-
final SubdirectoryPattern pattern = new SubdirectoryPattern();
91-
pattern.name = name;
92-
pattern.classifiers = classifiers;
93-
return pattern;
46+
public boolean matches(final Artifact artifact) {
47+
return patterns.contains(artifact.getClassifier());
9448
}
9549
}

0 commit comments

Comments
 (0)