@@ -218,26 +218,27 @@ public String version() {
218
218
}
219
219
220
220
public String name () {
221
- String appImage = getArgumentValue ("--app-image" );
222
- if (appImage != null ) {
223
- String name = AppImageFile .load (Path .of (appImage )).mainLauncherName ();
224
- // can be null if using foreign app-image
225
- return ((name != null ) ? name : getArgumentValue ("--name" ));
226
- }
227
- return getArgumentValue ("--name" , () -> getArgumentValue ("--main-class" ));
221
+ return nameFromAppImage ().or (this ::nameFromBasicArgs ).or (this ::nameFromRuntimeImage ).orElseThrow ();
228
222
}
229
223
230
224
public String installerName () {
231
225
verifyIsOfType (PackageType .NATIVE );
232
- String installerName = getArgumentValue ("--name" ,
233
- () -> getArgumentValue ("--main-class" , () -> null ));
234
- if (installerName == null ) {
235
- String appImage = getArgumentValue ("--app-image" );
236
- if (appImage != null ) {
237
- installerName = AppImageFile .load (Path .of (appImage )).mainLauncherName ();
238
- }
239
- }
240
- return installerName ;
226
+ return nameFromBasicArgs ().or (this ::nameFromAppImage ).or (this ::nameFromRuntimeImage ).orElseThrow ();
227
+ }
228
+
229
+ private Optional <String > nameFromAppImage () {
230
+ return Optional .ofNullable (getArgumentValue ("--app-image" ))
231
+ .map (Path ::of ).map (AppImageFile ::load ).map (AppImageFile ::mainLauncherName );
232
+ }
233
+
234
+ private Optional <String > nameFromRuntimeImage () {
235
+ return Optional .ofNullable (getArgumentValue ("--runtime-image" ))
236
+ .map (Path ::of ).map (Path ::getFileName ).map (Path ::toString );
237
+ }
238
+
239
+ private Optional <String > nameFromBasicArgs () {
240
+ return Optional .ofNullable (getArgumentValue ("--name" )).or (
241
+ () -> Optional .ofNullable (getArgumentValue ("--main-class" )));
241
242
}
242
243
243
244
public boolean isRuntime () {
@@ -703,7 +704,7 @@ public JPackageCommand ignoreDefaultVerbose(boolean v) {
703
704
}
704
705
705
706
public JPackageCommand validateOutput (TKit .TextStreamVerifier validator ) {
706
- return JPackageCommand . this . validateOutput (validator ::apply );
707
+ return validateOutput (validator ::apply );
707
708
}
708
709
709
710
public JPackageCommand validateOutput (Consumer <Stream <String >> validator ) {
@@ -716,8 +717,43 @@ public JPackageCommand validateOutput(Consumer<Stream<String>> validator) {
716
717
return this ;
717
718
}
718
719
719
- public JPackageCommand validateOutput (CannedFormattedString str ) {
720
- return JPackageCommand .this .validateOutput (TKit .assertTextStream (str .getValue ()));
720
+ @ FunctionalInterface
721
+ public interface CannedArgument {
722
+ public String value (JPackageCommand cmd );
723
+ }
724
+
725
+ public static Object cannedArgument (Function <JPackageCommand , Object > supplier , String label ) {
726
+ Objects .requireNonNull (supplier );
727
+ Objects .requireNonNull (label );
728
+ return new CannedArgument () {
729
+ @ Override
730
+ public String value (JPackageCommand cmd ) {
731
+ return supplier .apply (cmd ).toString ();
732
+ }
733
+
734
+ @ Override
735
+ public String toString ( ) {
736
+ return label ;
737
+ }
738
+ };
739
+ }
740
+
741
+ public String getValue (CannedFormattedString str ) {
742
+ return new CannedFormattedString (str .formatter (), str .key (), Stream .of (str .args ()).map (arg -> {
743
+ if (arg instanceof CannedArgument cannedArg ) {
744
+ return cannedArg .value (this );
745
+ } else {
746
+ return arg ;
747
+ }
748
+ }).toArray ()).getValue ();
749
+ }
750
+
751
+ public JPackageCommand validateOutput (CannedFormattedString ... str ) {
752
+ // Will look up the given errors in the order they are specified.
753
+ return validateOutput (Stream .of (str )
754
+ .map (this ::getValue )
755
+ .map (TKit ::assertTextStream )
756
+ .reduce (TKit .TextStreamVerifier ::andThen ).get ());
721
757
}
722
758
723
759
public boolean isWithToolProvider () {
@@ -876,6 +912,9 @@ private static JPackageCommand convertFromRuntime(JPackageCommand cmd) {
876
912
copy .immutable = false ;
877
913
copy .removeArgumentWithValue ("--runtime-image" );
878
914
copy .dmgInstallDir = cmd .appInstallationDirectory ();
915
+ if (!copy .hasArgument ("--name" )) {
916
+ copy .addArguments ("--name" , cmd .nameFromRuntimeImage ().orElseThrow ());
917
+ }
879
918
return copy ;
880
919
}
881
920
0 commit comments