mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-25 00:50:31 +00:00
Add extension module
This commit is contained in:
parent
a4ec9126af
commit
08fc604678
10 changed files with 198 additions and 1 deletions
|
@ -3,6 +3,5 @@ module io.xpipe.api.test {
|
|||
|
||||
requires io.xpipe.api;
|
||||
requires io.xpipe.beacon;
|
||||
requires io.xpipe.app;
|
||||
requires org.junit.jupiter.api;
|
||||
}
|
20
extension/build.gradle
Normal file
20
extension/build.gradle
Normal file
|
@ -0,0 +1,20 @@
|
|||
plugins {
|
||||
id 'java'
|
||||
id "org.moditect.gradleplugin" version "1.0.0-rc3"
|
||||
}
|
||||
|
||||
java {
|
||||
modularity.inferModulePath = true
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
apply from: "$rootDir/deps/javafx.gradle"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':core')
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import io.xpipe.core.source.DataSource;
|
||||
import io.xpipe.core.store.DataStore;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.Region;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public interface DataSourceGuiProvider {
|
||||
|
||||
default boolean isHidden() {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean supportsFile(Path file);
|
||||
|
||||
Region createConfigOptions(DataStore input, Property<? extends DataSource<?>> source);
|
||||
|
||||
DataSource<?> createDefaultDataSource(DataStore input);
|
||||
|
||||
String getDisplayName();
|
||||
|
||||
Image getImage();
|
||||
|
||||
Supplier<String> getFileName();
|
||||
|
||||
Map<Supplier<String>, String> getFileExtensions();
|
||||
|
||||
String getDataSourceDescription(DataSource<?> source);
|
||||
|
||||
Class<? extends DataSource<?>> getType();
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DataSourceGuiProviders {
|
||||
|
||||
private static Set<DataSourceGuiProvider> ALL;
|
||||
|
||||
public static void loadAll(ModuleLayer layer) {
|
||||
if (ALL == null) {
|
||||
ALL = new HashSet<>();
|
||||
ALL.addAll(ServiceLoader.load(layer, DataSourceGuiProvider.class).stream()
|
||||
.map(ServiceLoader.Provider::get).collect(Collectors.toSet()));
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<DataSourceGuiProvider> byClass(Class<?> clazz) {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
return ALL.stream().filter(d -> d.getType().equals(clazz)).findAny();
|
||||
}
|
||||
|
||||
public static Set<DataSourceGuiProvider> getAll() {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
return ALL;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import io.xpipe.core.source.DataSource;
|
||||
|
||||
public interface DataSourceProvider {
|
||||
|
||||
String getId();
|
||||
|
||||
Class<? extends DataSource> getType();
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import io.xpipe.core.source.DataSource;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DataSourceProviders {
|
||||
|
||||
private static Set<DataSourceProvider> ALL;
|
||||
|
||||
public static void init(ModuleLayer layer) {
|
||||
if (ALL == null) {
|
||||
ALL = ServiceLoader.load(layer, DataSourceProvider.class).stream()
|
||||
.map(ServiceLoader.Provider::get).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<DataSourceProvider> byDataSourceClass(Class<?> clazz) {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
|
||||
return ALL.stream().filter(d -> d.getType().equals(clazz)).findAny();
|
||||
}
|
||||
|
||||
public static Optional<DataSourceProvider> byId(String name) {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
|
||||
return ALL.stream().filter(d -> d.getId().equals(name)).findAny();
|
||||
}
|
||||
|
||||
public static Set<DataSourceProvider> getAll() {
|
||||
return ALL;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import io.xpipe.core.source.DataSourceId;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.Region;
|
||||
|
||||
public interface SupportedApplicationProvider {
|
||||
|
||||
Region createRetrieveInstructions(ObservableValue<DataSourceId> id);
|
||||
|
||||
Image getLogo();
|
||||
|
||||
String getId();
|
||||
|
||||
String getName();
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package io.xpipe.extension;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SupportedApplicationProviders {
|
||||
|
||||
private static Set<SupportedApplicationProvider> ALL;
|
||||
|
||||
public static void loadAll(ModuleLayer layer) {
|
||||
if (ALL == null) {
|
||||
ALL = ServiceLoader.load(layer, SupportedApplicationProvider.class).stream()
|
||||
.map(ServiceLoader.Provider::get).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<SupportedApplicationProvider> byId(String id) {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
|
||||
return ALL.stream().filter(d -> d.getId().equals(id)).findAny();
|
||||
}
|
||||
|
||||
public static Set<SupportedApplicationProvider> getAll() {
|
||||
if (ALL == null) {
|
||||
throw new IllegalStateException("Not initialized");
|
||||
}
|
||||
|
||||
return ALL;
|
||||
}
|
||||
}
|
6
extension/src/main/java/module-info.java
Normal file
6
extension/src/main/java/module-info.java
Normal file
|
@ -0,0 +1,6 @@
|
|||
module io.xpipe.extension {
|
||||
requires io.xpipe.core;
|
||||
requires javafx.base;
|
||||
|
||||
exports io.xpipe.extension;
|
||||
}
|
|
@ -3,5 +3,6 @@ rootProject.name = 'xpipe_java'
|
|||
include 'core'
|
||||
include 'beacon'
|
||||
include 'api'
|
||||
include 'extension'
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue