summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/market/guess/api/GuessMarketContext.java1
-rw-r--r--api/src/main/java/market/guess/model/event/EventDetailDTO.java4
-rw-r--r--api/src/main/java/market/guess/model/ledger/LedgerDTO.java (renamed from api/src/main/java/market/guess/api/AccountDTO.java)5
-rw-r--r--api/src/main/java/market/guess/model/market/MarketDTO.java (renamed from api/src/main/java/market/guess/api/MarketDTO.java)2
-rw-r--r--api/src/main/java/market/guess/model/market/MarketStateDTO.java (renamed from api/src/main/java/market/guess/api/MarketStateDTO.java)2
-rw-r--r--api/src/main/java/market/guess/model/market/PurchaseReceiptDTO.java (renamed from api/src/main/java/market/guess/api/PurchaseReceiptDTO.java)2
-rw-r--r--api/src/main/java/market/guess/model/market/TradeRowDTO.java (renamed from api/src/main/java/market/guess/api/TradeRowDTO.java)2
-rw-r--r--service/src/main/java/market/guess/service/LocalGuessMarketContext.java4
-rw-r--r--service/src/main/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapper.java10
-rw-r--r--service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapper.java11
-rw-r--r--service/src/main/java/market/guess/service/domain/Event.java6
-rw-r--r--service/src/main/java/market/guess/service/domain/Market.java2
-rw-r--r--service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java (renamed from service/src/test/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapperTest.java)36
-rw-r--r--tools/_util.sh27
-rw-r--r--tools/package.sh75
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java7
16 files changed, 118 insertions, 78 deletions
diff --git a/api/src/main/java/market/guess/api/GuessMarketContext.java b/api/src/main/java/market/guess/api/GuessMarketContext.java
index e11defb..4edb437 100644
--- a/api/src/main/java/market/guess/api/GuessMarketContext.java
+++ b/api/src/main/java/market/guess/api/GuessMarketContext.java
@@ -2,6 +2,7 @@ package market.guess.api;
2 2
3import java.math.BigDecimal; 3import java.math.BigDecimal;
4import market.guess.model.event.EventDetailDTO; 4import market.guess.model.event.EventDetailDTO;
5import market.guess.model.market.PurchaseReceiptDTO;
5 6
6public interface GuessMarketContext { 7public interface GuessMarketContext {
7 Result<PurchaseReceiptDTO> placeOrder( 8 Result<PurchaseReceiptDTO> placeOrder(
diff --git a/api/src/main/java/market/guess/model/event/EventDetailDTO.java b/api/src/main/java/market/guess/model/event/EventDetailDTO.java
index 9f59b53..f5c4edf 100644
--- a/api/src/main/java/market/guess/model/event/EventDetailDTO.java
+++ b/api/src/main/java/market/guess/model/event/EventDetailDTO.java
@@ -1,8 +1,8 @@
1package market.guess.model.event; 1package market.guess.model.event;
2 2
3import java.util.List; 3import java.util.List;
4import market.guess.api.MarketStateDTO; 4import market.guess.model.market.MarketStateDTO;
5import market.guess.api.TradeRowDTO; 5import market.guess.model.market.TradeRowDTO;
6 6
7public record EventDetailDTO( 7public record EventDetailDTO(
8 EventSummaryDTO summary, 8 EventSummaryDTO summary,
diff --git a/api/src/main/java/market/guess/api/AccountDTO.java b/api/src/main/java/market/guess/model/ledger/LedgerDTO.java
index 134c88b..d527c12 100644
--- a/api/src/main/java/market/guess/api/AccountDTO.java
+++ b/api/src/main/java/market/guess/model/ledger/LedgerDTO.java
@@ -1,7 +1,6 @@
1package market.guess.api; 1package market.guess.model.ledger;
2 2
3import java.util.List; 3import java.util.List;
4import market.guess.model.ledger.LedgerEntryDTO;
5 4
6public record AccountDTO( 5public record LedgerDTO(
7 String owner, String balance, boolean blocked, List<LedgerEntryDTO> entries) {} 6 String owner, String balance, boolean blocked, List<LedgerEntryDTO> entries) {}
diff --git a/api/src/main/java/market/guess/api/MarketDTO.java b/api/src/main/java/market/guess/model/market/MarketDTO.java
index b7c48a2..6b31375 100644
--- a/api/src/main/java/market/guess/api/MarketDTO.java
+++ b/api/src/main/java/market/guess/model/market/MarketDTO.java
@@ -1,3 +1,3 @@
1package market.guess.api; 1package market.guess.model.market;
2 2
3public record MarketDTO(String key, String name, String price, String volume) {} 3public record MarketDTO(String key, String name, String price, String volume) {}
diff --git a/api/src/main/java/market/guess/api/MarketStateDTO.java b/api/src/main/java/market/guess/model/market/MarketStateDTO.java
index da2fff0..3e9b967 100644
--- a/api/src/main/java/market/guess/api/MarketStateDTO.java
+++ b/api/src/main/java/market/guess/model/market/MarketStateDTO.java
@@ -1,4 +1,4 @@
1package market.guess.api; 1package market.guess.model.market;
2 2
3import java.util.List; 3import java.util.List;
4import market.guess.model.event.MechanismType; 4import market.guess.model.event.MechanismType;
diff --git a/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java b/api/src/main/java/market/guess/model/market/PurchaseReceiptDTO.java
index 02e8007..0341542 100644
--- a/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java
+++ b/api/src/main/java/market/guess/model/market/PurchaseReceiptDTO.java
@@ -1,4 +1,4 @@
1package market.guess.api; 1package market.guess.model.market;
2 2
3import java.util.List; 3import java.util.List;
4 4
diff --git a/api/src/main/java/market/guess/api/TradeRowDTO.java b/api/src/main/java/market/guess/model/market/TradeRowDTO.java
index 68d159a..d3053b3 100644
--- a/api/src/main/java/market/guess/api/TradeRowDTO.java
+++ b/api/src/main/java/market/guess/model/market/TradeRowDTO.java
@@ -1,4 +1,4 @@
1package market.guess.api; 1package market.guess.model.market;
2 2
3public record TradeRowDTO( 3public record TradeRowDTO(
4 String at, String userName, String optionName, String quantity, String pricePaid) {} 4 String at, String userName, String optionName, String quantity, String pricePaid) {}
diff --git a/service/src/main/java/market/guess/service/LocalGuessMarketContext.java b/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
index f04324b..c85dadf 100644
--- a/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
+++ b/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
@@ -3,10 +3,10 @@ package market.guess.service;
3import java.math.BigDecimal; 3import java.math.BigDecimal;
4import java.time.Instant; 4import java.time.Instant;
5import market.guess.api.GuessMarketContext; 5import market.guess.api.GuessMarketContext;
6import market.guess.api.PurchaseReceiptDTO;
7import market.guess.api.Result; 6import market.guess.api.Result;
8import market.guess.api.TradeRowDTO;
9import market.guess.model.event.EventDetailDTO; 7import market.guess.model.event.EventDetailDTO;
8import market.guess.model.market.PurchaseReceiptDTO;
9import market.guess.model.market.TradeRowDTO;
10import market.guess.service.catalog.infrastructure.MarketContext; 10import market.guess.service.catalog.infrastructure.MarketContext;
11import market.guess.service.domain.Order; 11import market.guess.service.domain.Order;
12import market.guess.service.fulfillment.FulfillmentContext; 12import market.guess.service.fulfillment.FulfillmentContext;
diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapper.java b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapper.java
new file mode 100644
index 0000000..5a46540
--- /dev/null
+++ b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapper.java
@@ -0,0 +1,10 @@
1package market.guess.service.catalog.infrastructure.adapter;
2
3import market.guess.model.ledger.LedgerDTO;
4import market.guess.service.ledger.Ledger;
5import org.mapstruct.Mapper;
6
7@Mapper
8public interface LedgerMapper {
9 LedgerDTO ledgerToLedgerDTO(Ledger ledger);
10}
diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapper.java b/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapper.java
deleted file mode 100644
index fe0ea38..0000000
--- a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapper.java
+++ /dev/null
@@ -1,11 +0,0 @@
1package market.guess.service.catalog.infrastructure.mapper.v2;
2
3import market.guess.api.AccountDTO;
4import market.guess.service.ledger.Ledger;
5import org.mapstruct.Mapper;
6
7@Mapper
8public interface LedgerMapper {
9
10 AccountDTO ledgerToLedgerDTO(Ledger account);
11}
diff --git a/service/src/main/java/market/guess/service/domain/Event.java b/service/src/main/java/market/guess/service/domain/Event.java
index 1e17457..4517a4e 100644
--- a/service/src/main/java/market/guess/service/domain/Event.java
+++ b/service/src/main/java/market/guess/service/domain/Event.java
@@ -4,13 +4,13 @@ import java.math.BigDecimal;
4import java.time.Instant; 4import java.time.Instant;
5import java.util.ArrayList; 5import java.util.ArrayList;
6import java.util.List; 6import java.util.List;
7import market.guess.api.MarketDTO;
8import market.guess.api.MarketStateDTO;
9import market.guess.api.TradeRowDTO;
10import market.guess.model.event.CommissionTiming; 7import market.guess.model.event.CommissionTiming;
11import market.guess.model.event.EventStatus; 8import market.guess.model.event.EventStatus;
12import market.guess.model.event.EventSummaryDTO; 9import market.guess.model.event.EventSummaryDTO;
13import market.guess.model.ledger.LedgerType; 10import market.guess.model.ledger.LedgerType;
11import market.guess.model.market.MarketDTO;
12import market.guess.model.market.MarketStateDTO;
13import market.guess.model.market.TradeRowDTO;
14import market.guess.service.helpers.BigDecimalOptions; 14import market.guess.service.helpers.BigDecimalOptions;
15import market.guess.service.helpers.InstantOptions; 15import market.guess.service.helpers.InstantOptions;
16import market.guess.service.ledger.Ledger; 16import market.guess.service.ledger.Ledger;
diff --git a/service/src/main/java/market/guess/service/domain/Market.java b/service/src/main/java/market/guess/service/domain/Market.java
index 3ff7e2d..c5960e3 100644
--- a/service/src/main/java/market/guess/service/domain/Market.java
+++ b/service/src/main/java/market/guess/service/domain/Market.java
@@ -1,7 +1,7 @@
1package market.guess.service.domain; 1package market.guess.service.domain;
2 2
3import java.math.BigDecimal; 3import java.math.BigDecimal;
4import market.guess.api.MarketDTO; 4import market.guess.model.market.MarketDTO;
5 5
6public final class Market { 6public final class Market {
7 private final String key; 7 private final String key;
diff --git a/service/src/test/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapperTest.java b/service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java
index 9e00411..976442c 100644
--- a/service/src/test/java/market/guess/service/catalog/infrastructure/mapper/v2/LedgerMapperTest.java
+++ b/service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java
@@ -1,4 +1,4 @@
1package market.guess.service.catalog.infrastructure.mapper.v2; 1package market.guess.service.catalog.infrastructure.adapter;
2 2
3import static org.junit.Assert.assertEquals; 3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse; 4import static org.junit.Assert.assertFalse;
@@ -8,7 +8,7 @@ import static org.junit.Assert.assertTrue;
8import java.math.BigDecimal; 8import java.math.BigDecimal;
9import java.time.Instant; 9import java.time.Instant;
10import java.util.List; 10import java.util.List;
11import market.guess.api.AccountDTO; 11import market.guess.model.ledger.LedgerDTO;
12import market.guess.model.ledger.LedgerEntryDTO; 12import market.guess.model.ledger.LedgerEntryDTO;
13import market.guess.model.ledger.LedgerType; 13import market.guess.model.ledger.LedgerType;
14import market.guess.service.ledger.Ledger; 14import market.guess.service.ledger.Ledger;
@@ -29,7 +29,7 @@ public class LedgerMapperTest {
29 public void mapsOwnerAndBalanceAsStrings() { 29 public void mapsOwnerAndBalanceAsStrings() {
30 Ledger ledger = new Ledger("alice", new BigDecimal("100")); 30 Ledger ledger = new Ledger("alice", new BigDecimal("100"));
31 31
32 AccountDTO dto = mapper.ledgerToLedgerDTO(ledger); 32 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
33 33
34 assertEquals("alice", dto.owner()); 34 assertEquals("alice", dto.owner());
35 assertEquals("100.00", dto.balance()); 35 assertEquals("100.00", dto.balance());
@@ -39,7 +39,7 @@ public class LedgerMapperTest {
39 public void emptyEntriesMapToEmptyList() { 39 public void emptyEntriesMapToEmptyList() {
40 Ledger ledger = new Ledger("alice", new BigDecimal("0")); 40 Ledger ledger = new Ledger("alice", new BigDecimal("0"));
41 41
42 AccountDTO dto = mapper.ledgerToLedgerDTO(ledger); 42 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
43 43
44 assertTrue(dto.entries().isEmpty()); 44 assertTrue(dto.entries().isEmpty());
45 } 45 }
@@ -49,12 +49,20 @@ public class LedgerMapperTest {
49 Ledger ledger = new Ledger("bob", new BigDecimal("0")); 49 Ledger ledger = new Ledger("bob", new BigDecimal("0"));
50 ledger.record( 50 ledger.record(
51 new LedgerEntry( 51 new LedgerEntry(
52 1, Instant.parse("2026-01-01T00:00:00Z"), LedgerType.DEPOSIT, 52 1,
53 new BigDecimal("50.00"), new BigDecimal("50.00"), "first")); 53 Instant.parse("2026-01-01T00:00:00Z"),
54 LedgerType.DEPOSIT,
55 new BigDecimal("50.00"),
56 new BigDecimal("50.00"),
57 "first"));
54 ledger.record( 58 ledger.record(
55 new LedgerEntry( 59 new LedgerEntry(
56 2, Instant.parse("2026-01-02T00:00:00Z"), LedgerType.PURCHASE, 60 2,
57 new BigDecimal("-20.00"), new BigDecimal("30.00"), "second")); 61 Instant.parse("2026-01-02T00:00:00Z"),
62 LedgerType.PURCHASE,
63 new BigDecimal("-20.00"),
64 new BigDecimal("30.00"),
65 "second"));
58 66
59 List<LedgerEntryDTO> entries = mapper.ledgerToLedgerDTO(ledger).entries(); 67 List<LedgerEntryDTO> entries = mapper.ledgerToLedgerDTO(ledger).entries();
60 68
@@ -84,16 +92,18 @@ public class LedgerMapperTest {
84 92
85 /** 93 /**
86 * LedgerEntry.id/time and Ledger's account-blocked state have no matching AccountDTO/ 94 * LedgerEntry.id/time and Ledger's account-blocked state have no matching AccountDTO/
87 * LedgerEntryDTO source property, so MapStruct leaves them at their Java defaults. This 95 * LedgerEntryDTO source property, so MapStruct leaves them at their Java defaults. This pins that
88 * pins that known gap; once the mapper is taught to fill seq/at/blocked, update these 96 * known gap; once the mapper is taught to fill seq/at/blocked, update these assertions instead of
89 * assertions instead of deleting them. 97 * deleting them.
90 */ 98 */
91 @Test 99 @Test
92 public void unmappedTargetPropertiesFallBackToDefaults() { 100 public void unmappedTargetPropertiesFallBackToDefaults() {
93 Ledger ledger = new Ledger("dave", new BigDecimal("0")); 101 Ledger ledger = new Ledger("dave", new BigDecimal("0"));
94 ledger.record(new LedgerEntry(7, Instant.now(), LedgerType.COMMISSION, BigDecimal.ONE, BigDecimal.ONE, "n")); 102 ledger.record(
103 new LedgerEntry(
104 7, Instant.now(), LedgerType.COMMISSION, BigDecimal.ONE, BigDecimal.ONE, "n"));
95 105
96 AccountDTO dto = mapper.ledgerToLedgerDTO(ledger); 106 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
97 107
98 assertFalse(dto.blocked()); 108 assertFalse(dto.blocked());
99 LedgerEntryDTO entry = dto.entries().get(0); 109 LedgerEntryDTO entry = dto.entries().get(0);
diff --git a/tools/_util.sh b/tools/_util.sh
index fde4797..a041f2d 100644
--- a/tools/_util.sh
+++ b/tools/_util.sh
@@ -5,15 +5,18 @@ case "$(uname -s)" in
5 *) SEP=":" ;; 5 *) SEP=":" ;;
6esac 6esac
7 7
8MODULES="api service ui-console" 8MODULES="api service ui-console ui-desktop"
9 9
10DEPS_api="" 10DEPS_api=""
11DEPS_service="api" 11DEPS_service="api"
12DEPS_ui_console="api service" 12DEPS_ui_console="api service"
13DEPS_ui_desktop=""
13 14
14RUNTIME_LIB_DIRS="pico jaxb gson" 15RUNTIME_LIB_DIRS="pico jaxb gson openjfx"
15 16
16MAIN_CLASS="market.guess.ui.console.App" 17EXECUTABLES="ui-console ui-desktop"
18MAINCLASS_ui_console="market.guess.ui.console.App"
19MAINCLASS_ui_desktop="market.guess.ui.desktop.Launcher"
17 20
18JAVA_HOME_DIR=$(java -XshowSettings:properties -version 2>&1 | tr -d '\r' | sed -n 's/^ *java\.home = //p') 21JAVA_HOME_DIR=$(java -XshowSettings:properties -version 2>&1 | tr -d '\r' | sed -n 's/^ *java\.home = //p')
19case "$(uname -s)" in 22case "$(uname -s)" in
@@ -45,6 +48,24 @@ deps_of() {
45 eval "printf '%s' \"\${$v}\"" 48 eval "printf '%s' \"\${$v}\""
46} 49}
47 50
51mainclass_of() {
52 local v="MAINCLASS_$(echo "$1" | tr '-' '_')"
53 eval "printf '%s' \"\${$v}\""
54}
55
56# JAR manifest lines are capped at 72 bytes; a raw "Key: value" line trips
57# `line too long` once enough jars are on the Class-Path (openjfx pushed us
58# over it). Fold per spec: continuation lines start with a single space.
59write_manifest_attr() {
60 local file="$1" line="$2: $3"
61 : >"$file"
62 while [ "${#line}" -gt 72 ]; do
63 printf '%s\n' "${line:0:72}" >>"$file"
64 line=" ${line:72}"
65 done
66 printf '%s\n\n' "$line" >>"$file"
67}
68
48module_cp() { 69module_cp() {
49 local cp="" 70 local cp=""
50 for d in "$@"; do cp="$cp${cp:+$SEP}build/classes/$d"; done 71 for d in "$@"; do cp="$cp${cp:+$SEP}build/classes/$d"; done
diff --git a/tools/package.sh b/tools/package.sh
index a85ee6c..186dab5 100644
--- a/tools/package.sh
+++ b/tools/package.sh
@@ -22,63 +22,74 @@ for d in $RUNTIME_LIB_DIRS; do
22 echo " lib/$d/ ($n jars)" 22 echo " lib/$d/ ($n jars)"
23done 23done
24 24
25echo "=== Generating console manifest ===" 25echo "=== Generating executable manifests ==="
26# Generated from what is actually staged, never hand-maintained. Four silent 26# Generated from what is actually staged, never hand-maintained. Four silent
27# failure modes: wildcards match nothing; a missing trailing newline makes jar 27# failure modes: wildcards match nothing; a missing trailing newline makes jar
28# drop the line; paths are relative to this jar; and java -jar ignores -cp, so 28# drop the line; paths are relative to this jar; and java -jar ignores -cp, so
29# this line is the entire classpath at runtime. 29# this line is the entire classpath at runtime.
30MF="$TMP/console-manifest.txt" 30for e in $EXECUTABLES; do
31CPLINE="" 31 CPLINE=""
32for m in $MODULES; do 32 for m in $MODULES; do
33 [ "$m" = ui-console ] && continue 33 [ "$m" = "$e" ] && continue
34 CPLINE="$CPLINE${CPLINE:+ }$m.jar" 34 CPLINE="$CPLINE${CPLINE:+ }$m.jar"
35done 35 done
36for d in $RUNTIME_LIB_DIRS; do 36 for d in $RUNTIME_LIB_DIRS; do
37 for j in "$DIST"/lib/"$d"/*.jar; do 37 for j in "$DIST"/lib/"$d"/*.jar; do
38 [ -f "$j" ] || continue 38 [ -f "$j" ] || continue
39 CPLINE="$CPLINE lib/$d/$(basename "$j")" 39 CPLINE="$CPLINE lib/$d/$(basename "$j")"
40 done
40 done 41 done
42 write_manifest_attr "$TMP/$e-manifest.txt" "Class-Path" "$CPLINE"
43 echo " $e: $CPLINE"
41done 44done
42printf 'Class-Path: %s\n\n' "$CPLINE" >"$MF"
43echo " $CPLINE"
44 45
45echo "=== Packaging ===" 46echo "=== Packaging ==="
46for m in $MODULES; do 47for m in $MODULES; do
47 if [ "$m" = ui-console ]; then 48 case " $EXECUTABLES " in
48 "$JAR" --create --file "$DIST/$m.jar" \ 49 *" $m "*)
49 --main-class "$MAIN_CLASS" --manifest "$MF" -C "build/classes/$m" . 50 "$JAR" --create --file "$DIST/$m.jar" --main-class "$(mainclass_of "$m")" \
50 else 51 --manifest "$TMP/$m-manifest.txt" -C "build/classes/$m" .
52 ;;
53 *)
51 "$JAR" --create --file "$DIST/$m.jar" -C "build/classes/$m" . 54 "$JAR" --create --file "$DIST/$m.jar" -C "build/classes/$m" .
52 fi 55 ;;
56 esac
53 echo " $DIST/$m.jar" 57 echo " $DIST/$m.jar"
54done 58done
55 59
56cat >"$DIST/run.bat" <<'EOF' 60for e in $EXECUTABLES; do
61 cat >"$DIST/run-${e#ui-}.bat" <<EOF
57@echo off 62@echo off
58cd /d "%~dp0" 63cd /d "%~dp0"
59java -jar "%~dp0ui-console.jar" 64java -jar "%~dp0$e.jar"
60if errorlevel 1 pause 65if errorlevel 1 pause
61EOF 66EOF
67done
62 68
63[ -f README.pdf ] && cp README.pdf "$DIST/" 69[ -f README.pdf ] && cp README.pdf "$DIST/"
64 70
65echo "=== Manifest as it actually landed in the jar ===" 71echo "=== Manifest as it actually landed in the jar ==="
66# Cheapest check that prevents a Level-0: if Main-Class or Class-Path didn't 72# Cheapest check that prevents a Level-0: if Main-Class or Class-Path didn't
67# survive, it surfaces here instead of on the grader's machine. 73# survive, it surfaces here instead of on the grader's machine.
68rm -rf "$TMP/mf" && mkdir -p "$TMP/mf" 74for e in $EXECUTABLES; do
69(cd "$TMP/mf" && "$JAR" -xf "$OLDPWD/$DIST/ui-console.jar" META-INF/MANIFEST.MF) 75 rm -rf "$TMP/mf" && mkdir -p "$TMP/mf"
70sed 's/^/ /' "$TMP/mf/META-INF/MANIFEST.MF" 76 (cd "$TMP/mf" && "$JAR" -xf "$OLDPWD/$DIST/$e.jar" META-INF/MANIFEST.MF)
77 echo "-- $e.jar --"
78 sed 's/^/ /' "$TMP/mf/META-INF/MANIFEST.MF"
71 79
72grep -q '^Main-Class:' "$TMP/mf/META-INF/MANIFEST.MF" || { 80 grep -q '^Main-Class:' "$TMP/mf/META-INF/MANIFEST.MF" || {
73 echo "*** Main-Class missing ***" 81 echo "*** Main-Class missing in $e.jar ***"
74 exit 1 82 exit 1
75} 83 }
76grep -q 'Class-Path:' "$TMP/mf/META-INF/MANIFEST.MF" || { 84 grep -q 'Class-Path:' "$TMP/mf/META-INF/MANIFEST.MF" || {
77 echo "*** Class-Path missing ***" 85 echo "*** Class-Path missing in $e.jar ***"
78 exit 1 86 exit 1
79} 87 }
88done
80 89
81echo "======================================" 90echo "======================================"
82echo "Self-contained output in $DIST" 91echo "Self-contained output in $DIST"
83echo " cd $DIST && java -jar ui-console.jar" 92for e in $EXECUTABLES; do
93 echo " cd $DIST && java -jar $e.jar"
94done
84echo "======================================" 95echo "======================================"
diff --git a/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java b/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java
index 3ff752c..69a9a9a 100644
--- a/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java
+++ b/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java
@@ -5,9 +5,9 @@ import java.nio.file.Path;
5import java.util.List; 5import java.util.List;
6import java.util.Scanner; 6import java.util.Scanner;
7import java.util.function.Function; 7import java.util.function.Function;
8import market.guess.api.MarketStateDTO; 8import market.guess.model.market.MarketStateDTO;
9import market.guess.api.PurchaseReceiptDTO; 9import market.guess.model.market.PurchaseReceiptDTO;
10import market.guess.api.TradeRowDTO; 10import market.guess.model.market.TradeRowDTO;
11 11
12public final class InputProcessor { 12public final class InputProcessor {
13 private static final int OPTION_WIDTH = 18; 13 private static final int OPTION_WIDTH = 18;
@@ -192,4 +192,3 @@ public final class InputProcessor {
192 padRight(at, AT_WIDTH)); 192 padRight(at, AT_WIDTH));
193 } 193 }
194} 194}
195