Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
# .github/workflows/publish.yml

name: Publish
on:
release:
types: [released, prereleased]

jobs:
publish:
name: Release build and publish
runs-on: macOS-latest
permissions:
contents: read
packages: write
steps:
- name: Check out code
uses: actions/checkout@v4
Expand All @@ -16,12 +19,19 @@ jobs:
with:
distribution: 'zulu'
java-version: 21
- name: Publish to MavenCentral
- name: Publish SNAPSHOT to snapshot repo
if: github.event.action == 'prereleased'
run: ./gradlew publishAllPublicationsToSnapshotsRepository --no-configuration-cache
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Publish release to Maven Central
if: github.event.action == 'released'
run: ./gradlew publishToMavenCentral --no-configuration-cache
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }}

ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }}
14 changes: 13 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {

group = "io.github.learn-monitor"

version = "v2.0.0-SNAPSHOT-3"
version = "s2607b1-SNAPSHOT"

application {
mainClass.set("de.igslandstuhl.database.Application")
Expand Down Expand Up @@ -96,4 +96,16 @@ mavenPublishing {
}
tasks.withType<AbstractPublishToMaven>().configureEach {
dependsOn(tasks.withType<Sign>())
}
publishing {
repositories {
maven {
name = "snapshots"
url = uri("https://maven.pkg.github.com/Learn-Monitor/student-database")
credentials {
username = System.getenv("GITHUB_ACTOR") ?: findProperty("gpr.user") as String?
password = System.getenv("GITHUB_TOKEN") ?: findProperty("gpr.key") as String?
}
}
}
}
18 changes: 18 additions & 0 deletions src/main/java/de/igslandstuhl/database/events/Event.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package de.igslandstuhl.database.events;

public abstract class Event {
private boolean cancelled = false;

public abstract EventType<? extends Event> getType();
protected void onCancel() {
// Override this method to handle cancellation logic in subclasses
}

public boolean isCancelled() {
return this.cancelled;
}
public void cancel() {
this.cancelled = true;
onCancel();
}
}
17 changes: 17 additions & 0 deletions src/main/java/de/igslandstuhl/database/events/EventFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package de.igslandstuhl.database.events;

@FunctionalInterface
public interface EventFilter<T extends Event> {
public boolean filter(T event);
@SafeVarargs
public static <T extends Event> EventFilter<T> linked(EventFilter<T>... filters) {
return event -> {
for (EventFilter<T> filter : filters) {
if (!filter.filter(event)) {
return false;
}
}
return true;
};
}
}
55 changes: 55 additions & 0 deletions src/main/java/de/igslandstuhl/database/events/EventListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package de.igslandstuhl.database.events;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;

import de.igslandstuhl.database.Registry;

public abstract class EventListener<T extends Event> {
private static final Registry<EventType<?>, Set<EventListener<?>>> listeners = new Registry<>();

private final ListenerPriority priority;

public EventListener(ListenerPriority priority) {
this.priority = priority;
}

public abstract void onEvent(T event);
public abstract EventType<T> getEventType();
public EventFilter<T> getFilter() {
return event -> true;
}

public ListenerPriority getPriority() {
return priority;
}
public void register() {
listeners.get(getEventType()).add(this);
}

public static void register(EventType<?> type) {
listeners.register(type, new HashSet<>());
}

@SuppressWarnings("unchecked")
private static <T extends Event> Set<EventListener<T>> getListeners(EventType<T> type) {
return (Set<EventListener<T>>) (Set<?>) listeners.get(type);
}
public static <T extends Event> void fireEvent(T event) {
Set<EventListener<T>> eventListeners = getListeners(EventType.of(event));
if (eventListeners != null) {
new LinkedList<>(eventListeners).stream()
.filter(listener -> listener.getFilter().filter(event))
.sorted((a, b) -> a.getPriority().compareTo(b.getPriority()))
.forEach(listener -> {
if (!event.isCancelled()) {
listener.onEvent(event);
if (event.isCancelled() && listener.getPriority() == ListenerPriority.MONITOR) {
throw new IllegalStateException("Event was cancelled but a monitor listener was called.");
}
}
});
}
}
}
8 changes: 8 additions & 0 deletions src/main/java/de/igslandstuhl/database/events/EventType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package de.igslandstuhl.database.events;

public record EventType<T extends Event>(String name) {
@SuppressWarnings("unchecked")
public static <T extends Event> EventType<T> of(T event) {
return (EventType<T>) event.getType();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.igslandstuhl.database.events;

public enum ListenerPriority {
LOWEST,
LOW,
HIGH,
HIGHEST,
MONITOR
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import de.igslandstuhl.database.Registry;
import de.igslandstuhl.database.server.Server;
import de.igslandstuhl.database.server.resources.ResourceLocation;
import de.igslandstuhl.database.server.webserver.access.AccessLevel;
import de.igslandstuhl.database.server.webserver.requests.RequestType;

public record WebPath(RequestType type, String handlerType, List<String> namespaces, String context, AccessLevel accessLevel) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package de.igslandstuhl.database.server.webserver;
package de.igslandstuhl.database.server.webserver.access;

import de.igslandstuhl.database.api.User;

Expand Down
Loading
Loading