Skip to content

Commit dd22ea3

Browse files
authored
Merge pull request #9156 from mP1/feature/mP1-walkingkooka-storage-pull-345-StorageContext-implements-MediaTypeDetector
mP1/walkingkooka-storage#345 StorageContext i…
2 parents 89456f0 + 5edc3e2 commit dd22ea3

42 files changed

Lines changed: 403 additions & 14 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/walkingkooka/spreadsheet/FakeSpreadsheetContext.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package walkingkooka.spreadsheet;
1919

20+
import walkingkooka.Binary;
2021
import walkingkooka.convert.BinaryNumberConverterFunction;
2122
import walkingkooka.currency.CurrencyCode;
2223
import walkingkooka.currency.CurrencyExchange;
@@ -28,6 +29,7 @@
2829
import walkingkooka.math.DecimalNumberSymbols;
2930
import walkingkooka.net.AbsoluteUrl;
3031
import walkingkooka.net.email.EmailAddress;
32+
import walkingkooka.net.header.MediaType;
3133
import walkingkooka.net.http.server.HttpHandler;
3234
import walkingkooka.net.http.server.HttpRequestAttribute;
3335
import walkingkooka.plugin.ProviderContext;
@@ -60,7 +62,13 @@ public class FakeSpreadsheetContext extends FakeSpreadsheetProvider implements S
6062
public FakeSpreadsheetContext() {
6163
super();
6264
}
63-
65+
66+
@Override
67+
public MediaType detect(final String filename,
68+
final Binary content) {
69+
throw new UnsupportedOperationException();
70+
}
71+
6472
@Override
6573
public Optional<StoragePath> currentWorkingDirectory() {
6674
throw new UnsupportedOperationException();

src/main/java/walkingkooka/spreadsheet/SpreadsheetContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import walkingkooka.currency.CurrencyLocaleContext;
2323
import walkingkooka.environment.EnvironmentContext;
2424
import walkingkooka.net.email.EmailAddress;
25+
import walkingkooka.net.header.MediaTypeDetector;
2526
import walkingkooka.net.http.server.HttpHandler;
2627
import walkingkooka.net.http.server.HttpRequestAttribute;
2728
import walkingkooka.plugin.HasProviderContext;
@@ -52,6 +53,7 @@ public interface SpreadsheetContext extends SpreadsheetProvider,
5253
HasSpreadsheetMetadata,
5354
HasSpreadsheetServerUrl,
5455
CurrencyLocaleContext,
56+
MediaTypeDetector,
5557
SpreadsheetMetadataContext {
5658

5759
// SpreadsheetMetadataContext.......................................................................................

src/main/java/walkingkooka/spreadsheet/SpreadsheetContextDelegator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
package walkingkooka.spreadsheet;
1919

20+
import walkingkooka.Binary;
2021
import walkingkooka.convert.BinaryNumberConverterFunction;
2122
import walkingkooka.currency.CurrencyContext;
2223
import walkingkooka.currency.CurrencyContextDelegator;
2324
import walkingkooka.locale.LocaleContext;
2425
import walkingkooka.locale.LocaleContextDelegator;
2526
import walkingkooka.net.email.EmailAddress;
27+
import walkingkooka.net.header.MediaType;
2628
import walkingkooka.net.http.server.HttpHandler;
2729
import walkingkooka.net.http.server.HttpRequestAttribute;
2830
import walkingkooka.plugin.ProviderContext;
@@ -58,6 +60,16 @@ default Charset charset() {
5860
.charset();
5961
}
6062

63+
@Override
64+
default MediaType detect(final String filename,
65+
final Binary content) {
66+
return this.spreadsheetContext()
67+
.detect(
68+
filename,
69+
content
70+
);
71+
}
72+
6173
@Override
6274
default SpreadsheetStoreRepository storeRepository() {
6375
return this.spreadsheetContext()

src/main/java/walkingkooka/spreadsheet/SpreadsheetContextShared.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717

1818
package walkingkooka.spreadsheet;
1919

20+
import walkingkooka.Binary;
2021
import walkingkooka.convert.BinaryNumberConverterFunction;
2122
import walkingkooka.currency.CurrencyLocaleContext;
2223
import walkingkooka.currency.CurrencyLocaleContextDelegator;
2324
import walkingkooka.currency.CurrencyLocaleContexts;
2425
import walkingkooka.environment.EnvironmentContext;
2526
import walkingkooka.environment.EnvironmentValueName;
2627
import walkingkooka.net.email.EmailAddress;
28+
import walkingkooka.net.header.MediaType;
29+
import walkingkooka.net.header.MediaTypeDetector;
2730
import walkingkooka.plugin.ProviderContext;
2831
import walkingkooka.spreadsheet.convert.SpreadsheetConverterContext;
2932
import walkingkooka.spreadsheet.engine.SpreadsheetEngine;
@@ -51,7 +54,8 @@ abstract class SpreadsheetContextShared implements SpreadsheetContext,
5154
CurrencyLocaleContextDelegator,
5255
SpreadsheetProviderDelegator {
5356

54-
SpreadsheetContextShared(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
57+
SpreadsheetContextShared(final MediaTypeDetector mediaTypeDetector,
58+
BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
5559
final SpreadsheetEngine spreadsheetEngine,
5660
final SpreadsheetEngineContext spreadsheetEngineContext,
5761
final CurrencyLocaleContext currencyLocaleContext,
@@ -60,6 +64,8 @@ abstract class SpreadsheetContextShared implements SpreadsheetContext,
6064
final ProviderContext providerContext) {
6165
super();
6266

67+
this.mediaTypeDetector = mediaTypeDetector;
68+
6369
this.multiplier = multiplier;
6470

6571
this.spreadsheetEngine = spreadsheetEngine;
@@ -80,6 +86,19 @@ public final BinaryNumberConverterFunction<SpreadsheetConverterContext> multipli
8086

8187
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier;
8288

89+
// MediaTypeDetector................................................................................................
90+
91+
@Override
92+
public final MediaType detect(final String filename,
93+
final Binary binary) {
94+
return this.mediaTypeDetector.detect(
95+
filename,
96+
binary
97+
);
98+
}
99+
100+
final MediaTypeDetector mediaTypeDetector;
101+
83102
// spreadsheetEngine................................................................................................
84103

85104
@Override

src/main/java/walkingkooka/spreadsheet/SpreadsheetContextSharedFixedSpreadsheetId.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import walkingkooka.convert.BinaryNumberConverterFunction;
2121
import walkingkooka.currency.CurrencyLocaleContext;
22+
import walkingkooka.net.header.MediaTypeDetector;
2223
import walkingkooka.net.http.server.HttpHandler;
2324
import walkingkooka.net.http.server.HttpRequestAttribute;
2425
import walkingkooka.plugin.ProviderContext;
@@ -44,14 +45,16 @@
4445
*/
4546
final class SpreadsheetContextSharedFixedSpreadsheetId extends SpreadsheetContextShared {
4647

47-
static SpreadsheetContextSharedFixedSpreadsheetId with(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
48+
static SpreadsheetContextSharedFixedSpreadsheetId with(final MediaTypeDetector mediaTypeDetector,
49+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
4850
final SpreadsheetEngine spreadsheetEngine,
4951
final SpreadsheetStoreRepository storeRepository,
5052
final Function<SpreadsheetEngineContext, Router<HttpRequestAttribute<?>, HttpHandler>> httpRouterFactory,
5153
final CurrencyLocaleContext currencyLocaleContext,
5254
final SpreadsheetEnvironmentContext spreadsheetEnvironmentContext,
5355
final SpreadsheetProvider spreadsheetProvider,
5456
final ProviderContext providerContext) {
57+
Objects.requireNonNull(mediaTypeDetector, "mediaTypeDetector");
5558
Objects.requireNonNull(multiplier, "multiplier");
5659
Objects.requireNonNull(spreadsheetEngine, "spreadsheetEngine");
5760
Objects.requireNonNull(storeRepository, "storeRepository");
@@ -62,6 +65,7 @@ static SpreadsheetContextSharedFixedSpreadsheetId with(final BinaryNumberConvert
6265
Objects.requireNonNull(providerContext, "providerContext");
6366

6467
return new SpreadsheetContextSharedFixedSpreadsheetId(
68+
mediaTypeDetector,
6569
multiplier,
6670
spreadsheetEngine,
6771
storeRepository,
@@ -76,7 +80,8 @@ static SpreadsheetContextSharedFixedSpreadsheetId with(final BinaryNumberConvert
7680
);
7781
}
7882

79-
private SpreadsheetContextSharedFixedSpreadsheetId(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
83+
private SpreadsheetContextSharedFixedSpreadsheetId(final MediaTypeDetector mediaTypeDetector,
84+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
8085
final SpreadsheetEngine spreadsheetEngine,
8186
final SpreadsheetStoreRepository storeRepository,
8287
final SpreadsheetMetadataContext spreadsheetMetadataContext,
@@ -88,6 +93,7 @@ private SpreadsheetContextSharedFixedSpreadsheetId(final BinaryNumberConverterFu
8893
final SpreadsheetProvider spreadsheetProvider,
8994
final ProviderContext providerContext) {
9095
super(
96+
mediaTypeDetector,
9197
multiplier,
9298
spreadsheetEngine,
9399
spreadsheetEngineContext,
@@ -166,6 +172,7 @@ SpreadsheetContext replaceEnvironmentContext(final SpreadsheetEngineContext spre
166172
final SpreadsheetProvider spreadsheetProvider,
167173
final ProviderContext providerContext) {
168174
return new SpreadsheetContextSharedFixedSpreadsheetId(
175+
this.mediaTypeDetector,
169176
this.multiplier,
170177
this.spreadsheetEngine,
171178
this.storeRepository, // keep

src/main/java/walkingkooka/spreadsheet/SpreadsheetContextSharedMutableSpreadsheetId.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import walkingkooka.convert.BinaryNumberConverterFunction;
2121
import walkingkooka.currency.CurrencyLocaleContext;
22+
import walkingkooka.net.header.MediaTypeDetector;
2223
import walkingkooka.net.http.server.HttpHandler;
2324
import walkingkooka.net.http.server.HttpRequestAttribute;
2425
import walkingkooka.plugin.ProviderContext;
@@ -44,14 +45,16 @@
4445
*/
4546
final class SpreadsheetContextSharedMutableSpreadsheetId extends SpreadsheetContextShared {
4647

47-
static SpreadsheetContextSharedMutableSpreadsheetId with(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
48+
static SpreadsheetContextSharedMutableSpreadsheetId with(final MediaTypeDetector mediaTypeDetector,
49+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
4850
final SpreadsheetEngine spreadsheetEngine,
4951
final SpreadsheetContextSupplier spreadsheetContextSupplier,
5052
final SpreadsheetMetadataContext spreadsheetMetadataContext,
5153
final CurrencyLocaleContext currencyLocaleContext,
5254
final SpreadsheetEnvironmentContext spreadsheetEnvironmentContext,
5355
final SpreadsheetProvider spreadsheetProvider,
5456
final ProviderContext providerContext) {
57+
Objects.requireNonNull(mediaTypeDetector, "mediaTypeDetector");
5558
Objects.requireNonNull(multiplier, "multiplier");
5659
Objects.requireNonNull(spreadsheetEngine, "spreadsheetEngine");
5760
Objects.requireNonNull(spreadsheetContextSupplier, "spreadsheetContextSupplier");
@@ -62,6 +65,7 @@ static SpreadsheetContextSharedMutableSpreadsheetId with(final BinaryNumberConve
6265
Objects.requireNonNull(providerContext, "providerContext");
6366

6467
return new SpreadsheetContextSharedMutableSpreadsheetId(
68+
mediaTypeDetector,
6569
multiplier,
6670
spreadsheetEngine,
6771
spreadsheetContextSupplier,
@@ -74,7 +78,8 @@ static SpreadsheetContextSharedMutableSpreadsheetId with(final BinaryNumberConve
7478
);
7579
}
7680

77-
private SpreadsheetContextSharedMutableSpreadsheetId(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
81+
private SpreadsheetContextSharedMutableSpreadsheetId(final MediaTypeDetector mediaTypeDetector,
82+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
7883
final SpreadsheetEngine spreadsheetEngine,
7984
final SpreadsheetContextSupplier spreadsheetContextSupplier,
8085
final SpreadsheetMetadataContext spreadsheetMetadataContext,
@@ -84,6 +89,7 @@ private SpreadsheetContextSharedMutableSpreadsheetId(final BinaryNumberConverter
8489
final SpreadsheetProvider spreadsheetProvider,
8590
final ProviderContext providerContext) {
8691
super(
92+
mediaTypeDetector,
8793
multiplier,
8894
spreadsheetEngine,
8995
spreadsheetEngineContext,
@@ -124,6 +130,7 @@ public SpreadsheetMetadataContext spreadsheetMetadataContext() {
124130
@Override
125131
SpreadsheetEngineContext createSpreadsheetEngineContext() {
126132
return SpreadsheetEngineContexts.spreadsheetEnvironmentContext(
133+
this.mediaTypeDetector,
127134
this.multiplier,
128135
this.spreadsheetContextSupplier,
129136
this.currencyContext()
@@ -154,6 +161,7 @@ SpreadsheetContext replaceEnvironmentContext(final SpreadsheetEngineContext spre
154161
final SpreadsheetProvider spreadsheetProvider,
155162
final ProviderContext providerContext) {
156163
return new SpreadsheetContextSharedMutableSpreadsheetId(
164+
this.mediaTypeDetector,
157165
this.multiplier,
158166
this.spreadsheetEngine,
159167
this.spreadsheetContextSupplier,

src/main/java/walkingkooka/spreadsheet/SpreadsheetContextTesting.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.junit.jupiter.api.Test;
2121
import walkingkooka.currency.CurrencyLocaleContextTesting2;
22+
import walkingkooka.net.header.MediaTypeDetectorTesting2;
2223
import walkingkooka.plugin.HasProviderContextTesting;
2324
import walkingkooka.spreadsheet.engine.SpreadsheetEngine;
2425
import walkingkooka.spreadsheet.environment.SpreadsheetEnvironmentContextTesting2;
@@ -35,6 +36,7 @@ public interface SpreadsheetContextTesting<C extends SpreadsheetContext> extends
3536
HasSpreadsheetMetadataTesting,
3637
HasSpreadsheetServerUrlTesting,
3738
CurrencyLocaleContextTesting2<C>,
39+
MediaTypeDetectorTesting2<C>,
3840
SpreadsheetMetadataContextTesting<C> {
3941

4042
// setCurrency......................................................................................................
@@ -76,6 +78,13 @@ default void spreadsheetEngineAndCheck(final C context,
7678
);
7779
}
7880

81+
// MediaTypeDetector................................................................................................
82+
83+
@Override
84+
default C createMediaTypeDetector() {
85+
return this.createContext();
86+
}
87+
7988
// class............................................................................................................
8089

8190
@Override

src/main/java/walkingkooka/spreadsheet/SpreadsheetContexts.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import walkingkooka.convert.BinaryNumberConverterFunction;
2121
import walkingkooka.currency.CurrencyLocaleContext;
22+
import walkingkooka.net.header.MediaTypeDetector;
2223
import walkingkooka.net.http.server.HttpHandler;
2324
import walkingkooka.net.http.server.HttpRequestAttribute;
2425
import walkingkooka.plugin.ProviderContext;
@@ -39,7 +40,8 @@ public final class SpreadsheetContexts implements PublicStaticHelper {
3940
/**
4041
* {@see SpreadsheetContextSharedFixedSpreadsheetId}
4142
*/
42-
public static SpreadsheetContext fixedSpreadsheetId(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
43+
public static SpreadsheetContext fixedSpreadsheetId(final MediaTypeDetector mediaTypeDetector,
44+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
4345
final SpreadsheetEngine spreadsheetEngine,
4446
final SpreadsheetStoreRepository storeRepository,
4547
final Function<SpreadsheetEngineContext, Router<HttpRequestAttribute<?>, HttpHandler>> httpRouterFactory,
@@ -48,6 +50,7 @@ public static SpreadsheetContext fixedSpreadsheetId(final BinaryNumberConverterF
4850
final SpreadsheetProvider spreadsheetProvider,
4951
final ProviderContext providerContext) {
5052
return SpreadsheetContextSharedFixedSpreadsheetId.with(
53+
mediaTypeDetector,
5154
multiplier,
5255
spreadsheetEngine,
5356
storeRepository,
@@ -69,7 +72,8 @@ public static SpreadsheetContext fake() {
6972
/**
7073
* {@see SpreadsheetContextSharedMutableSpreadsheetId}
7174
*/
72-
public static SpreadsheetContext mutableSpreadsheetId(final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
75+
public static SpreadsheetContext mutableSpreadsheetId(final MediaTypeDetector mediaTypeDetector,
76+
final BinaryNumberConverterFunction<SpreadsheetConverterContext> multiplier,
7377
final SpreadsheetEngine spreadsheetEngine,
7478
final SpreadsheetContextSupplier spreadsheetContextSupplier,
7579
final SpreadsheetMetadataContext spreadsheetMetadataContext,
@@ -78,6 +82,7 @@ public static SpreadsheetContext mutableSpreadsheetId(final BinaryNumberConverte
7882
final SpreadsheetProvider spreadsheetProvider,
7983
final ProviderContext providerContext) {
8084
return SpreadsheetContextSharedMutableSpreadsheetId.with(
85+
mediaTypeDetector,
8186
multiplier,
8287
spreadsheetEngine,
8388
spreadsheetContextSupplier,

src/main/java/walkingkooka/spreadsheet/engine/FakeSpreadsheetEngineContext.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package walkingkooka.spreadsheet.engine;
1919

20+
import walkingkooka.Binary;
2021
import walkingkooka.Either;
2122
import walkingkooka.convert.BinaryNumberConverterFunction;
2223
import walkingkooka.currency.CurrencyCode;
@@ -29,6 +30,7 @@
2930
import walkingkooka.math.DecimalNumberSymbols;
3031
import walkingkooka.net.AbsoluteUrl;
3132
import walkingkooka.net.email.EmailAddress;
33+
import walkingkooka.net.header.MediaType;
3234
import walkingkooka.net.http.server.HttpHandler;
3335
import walkingkooka.net.http.server.HttpRequestAttribute;
3436
import walkingkooka.plugin.ProviderContext;
@@ -68,6 +70,12 @@
6870

6971
public class FakeSpreadsheetEngineContext extends FakeSpreadsheetProvider implements SpreadsheetEngineContext, Fake {
7072

73+
@Override
74+
public MediaType detect(final String filename,
75+
final Binary content) {
76+
throw new UnsupportedOperationException();
77+
}
78+
7179
@Override
7280
public Optional<StoragePath> currentWorkingDirectory() {
7381
throw new UnsupportedOperationException();

src/main/java/walkingkooka/spreadsheet/engine/SpreadsheetEngineContextSharedSpreadsheetContext.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
package walkingkooka.spreadsheet.engine;
1919

20+
import walkingkooka.Binary;
2021
import walkingkooka.ToStringBuilder;
2122
import walkingkooka.convert.BinaryNumberConverterFunction;
2223
import walkingkooka.convert.ConverterLike;
2324
import walkingkooka.currency.CurrencyContext;
2425
import walkingkooka.environment.EnvironmentContext;
2526
import walkingkooka.locale.LocaleContext;
27+
import walkingkooka.net.header.MediaType;
2628
import walkingkooka.plugin.ProviderContext;
2729
import walkingkooka.spreadsheet.SpreadsheetContext;
2830
import walkingkooka.spreadsheet.convert.SpreadsheetConverterContext;
@@ -427,6 +429,17 @@ public LocaleContext localeContext() {
427429
return this.spreadsheetContext;
428430
}
429431

432+
// MediaTypeDetector................................................................................................
433+
434+
@Override
435+
public MediaType detect(final String filename,
436+
final Binary content) {
437+
return this.spreadsheetContext.detect(
438+
filename,
439+
content
440+
);
441+
}
442+
430443
// HasProviderContext...............................................................................................
431444

432445
@Override

0 commit comments

Comments
 (0)