Some Property/etc. work.

This commit is contained in:
JesseBrault0709 2023-05-03 16:56:45 +02:00
parent 2a4d3d8025
commit 4fa2ba0ac9
6 changed files with 186 additions and 0 deletions

View File

@ -0,0 +1,5 @@
package com.jessebrault.ssg.property
interface CollectionProperty<T> extends Property<T> {
// TODO
}

View File

@ -0,0 +1,7 @@
package com.jessebrault.ssg.property
interface MapProperty<K, V> extends Property<Map<K, V>> {
V get(K key)
void put(K key, V value)
void putAll(Map<? extends K, ? extends V> map)
}

View File

@ -14,6 +14,21 @@ final class Properties {
new SimpleProperty<>(convention, t)
}
static <K, V> MapProperty<K, V> getMap() {
new SimpleMapProperty<K, V>()
}
static <K, V> MapProperty<K, V> getMap(Map<? extends K, ? extends V> convention) {
new SimpleMapProperty<K, V>(convention)
}
static <K, V> MapProperty<K, V> getMap(
Map<? extends K, ? extends V> convention,
Map<? extends K, ? extends V> value
) {
new SimpleMapProperty<K, V>(convention, value)
}
private Properties() {}
}

View File

@ -0,0 +1,122 @@
package com.jessebrault.ssg.property
import com.jessebrault.ssg.provider.CollectionProvider
import com.jessebrault.ssg.provider.Provider
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.PackageScope
import java.util.function.Function
import java.util.function.UnaryOperator
@PackageScope
@NullCheck
@EqualsAndHashCode(includeFields = true)
final class SimpleMapProperty<K, V> implements MapProperty<K, V> {
private final Map<K, V> convention = [:]
private final Map<K, V> m = [:]
SimpleMapProperty(
Map<? extends K, ? extends V> convention,
Map<? extends K, ? extends V> m
) {
this.convention.putAll(convention)
this.m.putAll(m)
}
SimpleMapProperty(Map<? extends K, ? extends V> convention) {
this(convention, [:] as Map<K, V>)
}
SimpleMapProperty() {}
@Override
V get(K key) {
if (m[key] != null) {
m[key]
} else if (convention[key] != null) {
convention[key]
} else {
throw new NullPointerException("no such key: ${ key }")
}
}
@Override
void put(K key, V value) {
this.m.put(key, value)
}
@Override
void putAll(Map<? extends K, ? extends V> map) {
this.m.putAll(map)
}
@Override
void set(Map<K, V> kvMap) {
this.m.clear()
this.m.putAll(kvMap)
}
@Override
void set(Provider<Map<K, V>> provider) {
// TODO
}
@Override
void unset() {
this.m.clear()
}
@Override
Map<K, V> getConvention() {
this.convention
}
@Override
void setConvention(Map<K, V> kvMap) {
this.convention.clear()
this.convention.putAll(kvMap)
}
@Override
void setConvention(Provider<Map<K, V>> provider) {
// TODO
}
@Override
void unsetConvention() {
this.convention.clear()
}
@Override
void map(UnaryOperator<Map<K, V>> operator) {
this.m.putAll(operator.apply(this.convention + this.m))
}
@Override
void flatMap(Function<Map<K, V>, Provider<Map<K, V>>> function) {
// TODO
}
@Override
Map<K, V> provide() {
this.convention + this.m
}
@Override
CollectionProvider<Map<K, V>> plus(Provider<Map<K, V>> other) {
// TODO
}
@Override
CollectionProvider<Map<K, V>> asType(Class<CollectionProvider> collectionProviderClass) {
// TODO
}
@Override
boolean isEmpty() {
return false
}
}

View File

@ -7,6 +7,7 @@ interface Provider<T> {
@Deprecated
CollectionProvider<T> plus(Provider<T> other)
@Deprecated
CollectionProvider<T> asType(Class<CollectionProvider> collectionProviderClass)
boolean isEmpty()

36
sketchingBaseBuild.groovy Normal file
View File

@ -0,0 +1,36 @@
abstractBuild(name: 'redDogAll', extends: 'default') {
siteSpec.merge {
name = 'Red Dog Ensemble'
baseUrl = 'https://reddogensemble.com'
}
globals.merge {
greeting = 'Say hello to good music!'
}
sources { types ->
models.map { acc ->
old + someMethodThatGetsEventModels()
}
}
taskFactories { sources ->
register(name: 'eventToHtml', supplier: ModelToHtmlFactory::new) {
modelsProvider.map { acc ->
acc + CollectionProviders.fromSupplier {
sources.models.provide().findAll { it.name.startsWith('event/') }
}
}
}
}
}
build(name: 'preview', extends: 'redDogAll') {
siteSpec.merge {
baseUrl += '/preview' // if possible
}
globals.merge {
greeting = 'Hello from preview!'
}
}