mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
Cleanup
This commit is contained in:
parent
b80b8121f6
commit
af17d731ab
29 changed files with 60 additions and 308 deletions
|
@ -27,6 +27,11 @@ public class FileStore implements StreamDataStore, FilenameStore {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canOpen() {
|
||||||
|
return machine.exists(file);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toDisplay() {
|
public String toDisplay() {
|
||||||
return file + "@" + machine.toDisplay();
|
return file + "@" + machine.toDisplay();
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class InputStreamDataStore implements StreamDataStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean canOpen() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,11 @@ import java.nio.file.Path;
|
||||||
@JsonTypeName("local")
|
@JsonTypeName("local")
|
||||||
public class LocalMachineStore implements MachineStore {
|
public class LocalMachineStore implements MachineStore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean exists(String file) {
|
||||||
|
return Files.exists(Path.of(file));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toDisplay() {
|
public String toDisplay() {
|
||||||
return "local";
|
return "local";
|
||||||
|
|
|
@ -13,4 +13,5 @@ public interface MachineStore extends DataStore {
|
||||||
|
|
||||||
OutputStream openOutput(String file) throws Exception;
|
OutputStream openOutput(String file) throws Exception;
|
||||||
|
|
||||||
|
public boolean exists(String file);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class OutputStreamStore implements StreamDataStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean canOpen() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class StdinDataStore implements StreamDataStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean canOpen() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class StdoutDataStore implements StreamDataStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean canOpen() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,12 +23,8 @@ public interface StreamDataStore extends DataStore {
|
||||||
throw new UnsupportedOperationException("Can't open store output");
|
throw new UnsupportedOperationException("Can't open store output");
|
||||||
}
|
}
|
||||||
|
|
||||||
default OutputStream openAppendingOutput() throws Exception {
|
default boolean canOpen() {
|
||||||
throw new UnsupportedOperationException("Can't open store output");
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
default boolean exists() {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default boolean persistent() {
|
default boolean persistent() {
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class URLDataStore implements StreamDataStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean canOpen() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
deps
2
deps
|
@ -1 +1 @@
|
||||||
Subproject commit cbac51bc63e727c0ff5038cace4e91daa168a556
|
Subproject commit 49a1ad06bc6872f72c1d20ea864d24f3df59b7c5
|
|
@ -158,6 +158,12 @@ public interface DataSourceProvider<T extends DataSource<?>> {
|
||||||
return getPossibleNames().get(0);
|
return getPossibleNames().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default String getModuleName() {
|
||||||
|
var n = getClass().getPackageName();
|
||||||
|
var i = n.lastIndexOf('.');
|
||||||
|
return i != -1 ? n.substring(i + 1) : n;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to create a useful data source descriptor from a data store.
|
* Attempt to create a useful data source descriptor from a data store.
|
||||||
* The result does not need to be always right, it should only reflect the best effort.
|
* The result does not need to be always right, it should only reflect the best effort.
|
||||||
|
|
|
@ -27,8 +27,14 @@ public interface DataStoreProvider {
|
||||||
return i18n("displayDescription");
|
return i18n("displayDescription");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default String getModuleName() {
|
||||||
|
var n = getClass().getPackageName();
|
||||||
|
var i = n.lastIndexOf('.');
|
||||||
|
return i != -1 ? n.substring(i + 1) : n;
|
||||||
|
}
|
||||||
|
|
||||||
default String getDisplayIconFileName() {
|
default String getDisplayIconFileName() {
|
||||||
return getId() + ":icon.png";
|
return getModuleName() + ":" + getId() + ".png";
|
||||||
}
|
}
|
||||||
|
|
||||||
default Dialog dialogForURL(URL url) {
|
default Dialog dialogForURL(URL url) {
|
||||||
|
@ -50,4 +56,6 @@ public interface DataStoreProvider {
|
||||||
default String getId() {
|
default String getId() {
|
||||||
return getPossibleNames().get(0);
|
return getPossibleNames().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Class<?>> getStoreClasses();
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,16 @@ public class DataStoreProviders {
|
||||||
return ALL.stream().map(d -> d.dialogForString(s)).filter(Objects::nonNull).findAny();
|
return ALL.stream().map(d -> d.dialogForString(s)).filter(Objects::nonNull).findAny();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <T extends DataStoreProvider> T byStoreClass(Class<?> c) {
|
||||||
|
if (ALL == null) {
|
||||||
|
throw new IllegalStateException("Not initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (T) ALL.stream().filter(d -> d.getStoreClasses().contains(c)).findAny()
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException("Provider for " + c.getSimpleName() + " not found"));
|
||||||
|
}
|
||||||
|
|
||||||
public static Set<DataStoreProvider> getAll() {
|
public static Set<DataStoreProvider> getAll() {
|
||||||
return ALL;
|
return ALL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ public interface SupportedApplicationProvider {
|
||||||
APPLICATION
|
APPLICATION
|
||||||
}
|
}
|
||||||
|
|
||||||
Region createRetrieveInstructions(DataSourceProvider provider, ObservableValue<String> id);
|
Region createRetrieveInstructions(DataSourceProvider<?> provider, ObservableValue<String> id);
|
||||||
|
|
||||||
String getId();
|
String getId();
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,21 @@ public record CodeSnippet(List<CodeSnippet.Line> lines) {
|
||||||
}
|
}
|
||||||
return new CodeSnippet(lines);
|
return new CodeSnippet(lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder snippet(CodeSnippet s) {
|
||||||
|
if (s.lines.size() == 0) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
var first = s.lines.get(0);
|
||||||
|
var line = new ArrayList<>(currentLine);
|
||||||
|
line.addAll(first.elements);
|
||||||
|
lines.add(new Line(new ArrayList<>(line)));
|
||||||
|
currentLine.clear();
|
||||||
|
|
||||||
|
s.lines.stream().skip(1).forEach(l -> lines.add(l));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static record StaticElement(String value, Color color) implements Element {
|
public static record StaticElement(String value, Color color) implements Element {
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
plugins {
|
|
||||||
id 'java'
|
|
||||||
id "org.moditect.gradleplugin" version "1.0.0-rc3"
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "$rootDir/deps/lombok.gradle"
|
|
||||||
apply from: "$rootDir/deps/extension.gradle"
|
|
||||||
|
|
||||||
configurations {
|
|
||||||
compileOnly.extendsFrom(dep)
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
package io.xpipe.ext.json;
|
|
||||||
|
|
||||||
import io.xpipe.core.source.RawDataSourceDescriptor;
|
|
||||||
import io.xpipe.core.source.RawReadConnection;
|
|
||||||
import io.xpipe.core.source.RawWriteConnection;
|
|
||||||
import io.xpipe.core.store.StreamDataStore;
|
|
||||||
|
|
||||||
public class MyRawFileDescriptor extends RawDataSourceDescriptor<StreamDataStore> {
|
|
||||||
@Override
|
|
||||||
protected RawWriteConnection newWriteConnection(StreamDataStore store) {
|
|
||||||
return new MyRawFileWriteConnection(store);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected RawReadConnection newReadConnection(StreamDataStore store) {
|
|
||||||
return new MyRawFileReadConnection(store);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package io.xpipe.ext.json;
|
|
||||||
|
|
||||||
import io.xpipe.core.source.DataSourceDescriptor;
|
|
||||||
import io.xpipe.core.source.DataSourceType;
|
|
||||||
import io.xpipe.extension.DataSourceProvider;
|
|
||||||
import io.xpipe.extension.SimpleFileDataSourceProvider;
|
|
||||||
import io.xpipe.extension.UniformDataSourceProvider;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class MyRawFileProvider implements UniformDataSourceProvider, SimpleFileDataSourceProvider, DataSourceProvider {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataSourceType getPrimaryType() {
|
|
||||||
return DataSourceType.RAW;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, String> getSupportedExtensions() {
|
|
||||||
var map = new LinkedHashMap<String, String>();
|
|
||||||
map.put(i18nKey("fileName"), "myf");
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends DataSourceDescriptor<?>> getDescriptorClass() {
|
|
||||||
return MyRawFileDescriptor.class;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
package io.xpipe.ext.json;
|
|
||||||
|
|
||||||
import io.xpipe.core.source.RawReadConnection;
|
|
||||||
import io.xpipe.core.store.StreamDataStore;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
public class MyRawFileReadConnection implements RawReadConnection {
|
|
||||||
|
|
||||||
private InputStream inputStream;
|
|
||||||
private final StreamDataStore store;
|
|
||||||
|
|
||||||
public MyRawFileReadConnection(StreamDataStore store) {
|
|
||||||
this.store = store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() throws Exception {
|
|
||||||
if (inputStream != null) {
|
|
||||||
throw new IllegalStateException("Already initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
inputStream = store.openInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws Exception {
|
|
||||||
if (inputStream == null) {
|
|
||||||
throw new IllegalStateException("Not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
inputStream.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] readBytes(int max) throws Exception {
|
|
||||||
if (inputStream == null) {
|
|
||||||
throw new IllegalStateException("Not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
return inputStream.readNBytes(max);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
package io.xpipe.ext.json;
|
|
||||||
|
|
||||||
import io.xpipe.core.source.RawWriteConnection;
|
|
||||||
import io.xpipe.core.store.StreamDataStore;
|
|
||||||
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
public class MyRawFileWriteConnection implements RawWriteConnection {
|
|
||||||
|
|
||||||
private final StreamDataStore store;
|
|
||||||
private OutputStream outputStream;
|
|
||||||
|
|
||||||
public MyRawFileWriteConnection(StreamDataStore store) {
|
|
||||||
this.store = store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() throws Exception {
|
|
||||||
if (outputStream != null) {
|
|
||||||
throw new IllegalStateException("Already initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
outputStream = store.openOutput();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws Exception {
|
|
||||||
if (outputStream == null) {
|
|
||||||
throw new IllegalStateException("Not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
outputStream.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(byte[] bytes) throws Exception {
|
|
||||||
if (outputStream == null) {
|
|
||||||
throw new IllegalStateException("Not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
outputStream.write(bytes);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import io.xpipe.ext.json.MyRawFileProvider;
|
|
||||||
import io.xpipe.extension.DataSourceProvider;
|
|
||||||
|
|
||||||
module io.xpipe.ext.file_data_source_sample {
|
|
||||||
exports io.xpipe.ext.json;
|
|
||||||
|
|
||||||
opens io.xpipe.ext.json;
|
|
||||||
|
|
||||||
requires io.xpipe.core;
|
|
||||||
requires io.xpipe.extension;
|
|
||||||
|
|
||||||
provides DataSourceProvider with MyRawFileProvider;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 23 KiB |
|
@ -1,3 +0,0 @@
|
||||||
displayName=Mein Dateiformat
|
|
||||||
description=Meine Dateiformat-Beschreibung
|
|
||||||
fileName=Mein Dateiformat Datei
|
|
|
@ -1,3 +0,0 @@
|
||||||
displayName=My file format
|
|
||||||
description=My file format description
|
|
||||||
fileName=My file format file
|
|
|
@ -1,28 +0,0 @@
|
||||||
plugins {
|
|
||||||
id 'application'
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
modularity.inferModulePath = true
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
// The used X-Pipe API version.
|
|
||||||
// In your case, you have to fix this value to the target API version,
|
|
||||||
// which you can find at https://search.maven.org/artifact/io.xpipe/api/
|
|
||||||
def apiVersion = file('../../misc/version').text
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation project(':core')
|
|
||||||
implementation project(':api')
|
|
||||||
}
|
|
||||||
|
|
||||||
application {
|
|
||||||
mainModule = 'io.xpipe.sample'
|
|
||||||
mainClass = 'io.xpipe.sample.HomePricesSample'
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
package io.xpipe.sample;
|
|
||||||
|
|
||||||
|
|
||||||
import io.xpipe.api.DataSource;
|
|
||||||
import io.xpipe.api.DataTable;
|
|
||||||
import io.xpipe.core.data.node.TupleNode;
|
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class HomePricesSample {
|
|
||||||
|
|
||||||
private static DataTable homePricesTable;
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
var resource = HomePricesSample.class.getResource("homes.csv");
|
|
||||||
|
|
||||||
// Creates a wrapped data source using the url.
|
|
||||||
// Note that while this is possible, it is not recommended as
|
|
||||||
// all queries are routed through the XPipe client anyway.
|
|
||||||
// It allows us however to bundle the data with this sample program.
|
|
||||||
homePricesTable = DataSource.createAnonymous("csv", Map.of(), resource).asTable();
|
|
||||||
|
|
||||||
// As we didn't pass any configuration parameters, X-Pipe will try to automatically detect
|
|
||||||
// the correct configuration parameters. You can access these parameters like this:
|
|
||||||
System.out.println("Determined configuration: " + homePricesTable.getConfig());
|
|
||||||
// In case these some parameters are not chosen correctly, you can pass the proper values
|
|
||||||
// to the wrap() method.
|
|
||||||
|
|
||||||
System.out.println("The highest selling house entry is: " + getHighestSellingHouse());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TupleNode getHighestSellingHouse() {
|
|
||||||
return homePricesTable.stream()
|
|
||||||
.min(Comparator.comparingInt(t -> t.forKey("Sell").asInt()))
|
|
||||||
.get();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
module io.xpipe.sample {
|
|
||||||
requires io.xpipe.api;
|
|
||||||
requires io.xpipe.core;
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
"Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres", "Taxes"
|
|
||||||
142, 160, 28, 10, 5, 3, 60, 0.28, 3167
|
|
||||||
175, 180, 18, 8, 4, 1, 12, 0.43, 4033
|
|
||||||
129, 132, 13, 6, 3, 1, 41, 0.33, 1471
|
|
||||||
138, 140, 17, 7, 3, 1, 22, 0.46, 3204
|
|
||||||
232, 240, 25, 8, 4, 3, 5, 2.05, 3613
|
|
||||||
135, 140, 18, 7, 4, 3, 9, 0.57, 3028
|
|
||||||
150, 160, 20, 8, 4, 3, 18, 4.00, 3131
|
|
||||||
207, 225, 22, 8, 4, 2, 16, 2.22, 5158
|
|
||||||
271, 285, 30, 10, 5, 2, 30, 0.53, 5702
|
|
||||||
89, 90, 10, 5, 3, 1, 43, 0.30, 2054
|
|
||||||
153, 157, 22, 8, 3, 3, 18, 0.38, 4127
|
|
||||||
87, 90, 16, 7, 3, 1, 50, 0.65, 1445
|
|
||||||
234, 238, 25, 8, 4, 2, 2, 1.61, 2087
|
|
||||||
106, 116, 20, 8, 4, 1, 13, 0.22, 2818
|
|
||||||
175, 180, 22, 8, 4, 2, 15, 2.06, 3917
|
|
||||||
165, 170, 17, 8, 4, 2, 33, 0.46, 2220
|
|
||||||
166, 170, 23, 9, 4, 2, 37, 0.27, 3498
|
|
||||||
136, 140, 19, 7, 3, 1, 22, 0.63, 3607
|
|
||||||
148, 160, 17, 7, 3, 2, 13, 0.36, 3648
|
|
||||||
151, 153, 19, 8, 4, 2, 24, 0.34, 3561
|
|
||||||
180, 190, 24, 9, 4, 2, 10, 1.55, 4681
|
|
||||||
293, 305, 26, 8, 4, 3, 6, 0.46, 7088
|
|
||||||
167, 170, 20, 9, 4, 2, 46, 0.46, 3482
|
|
||||||
190, 193, 22, 9, 5, 2, 37, 0.48, 3920
|
|
||||||
184, 190, 21, 9, 5, 2, 27, 1.30, 4162
|
|
||||||
157, 165, 20, 8, 4, 2, 7, 0.30, 3785
|
|
||||||
110, 115, 16, 8, 4, 1, 26, 0.29, 3103
|
|
||||||
135, 145, 18, 7, 4, 1, 35, 0.43, 3363
|
|
||||||
567, 625, 64, 11, 4, 4, 4, 0.85, 12192
|
|
||||||
180, 185, 20, 8, 4, 2, 11, 1.00, 3831
|
|
||||||
183, 188, 17, 7, 3, 2, 16, 3.00, 3564
|
|
||||||
185, 193, 20, 9, 3, 2, 56, 6.49, 3765
|
|
||||||
152, 155, 17, 8, 4, 1, 33, 0.70, 3361
|
|
||||||
148, 153, 13, 6, 3, 2, 22, 0.39, 3950
|
|
||||||
152, 159, 15, 7, 3, 1, 25, 0.59, 3055
|
|
||||||
146, 150, 16, 7, 3, 1, 31, 0.36, 2950
|
|
||||||
170, 190, 24, 10, 3, 2, 33, 0.57, 3346
|
|
||||||
127, 130, 20, 8, 4, 1, 65, 0.40, 3334
|
|
||||||
265, 270, 36, 10, 6, 3, 33, 1.20, 5853
|
|
||||||
157, 163, 18, 8, 4, 2, 12, 1.13, 3982
|
|
||||||
128, 135, 17, 9, 4, 1, 25, 0.52, 3374
|
|
||||||
110, 120, 15, 8, 4, 2, 11, 0.59, 3119
|
|
||||||
123, 130, 18, 8, 4, 2, 43, 0.39, 3268
|
|
||||||
212, 230, 39, 12, 5, 3, 202, 4.29, 3648
|
|
||||||
145, 145, 18, 8, 4, 2, 44, 0.22, 2783
|
|
||||||
129, 135, 10, 6, 3, 1, 15, 1.00, 2438
|
|
||||||
143, 145, 21, 7, 4, 2, 10, 1.20, 3529
|
|
||||||
247, 252, 29, 9, 4, 2, 4, 1.25, 4626
|
|
||||||
111, 120, 15, 8, 3, 1, 97, 1.11, 3205
|
|
||||||
133, 145, 26, 7, 3, 1, 42, 0.36, 3059
|
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 52.
|
|
@ -4,11 +4,3 @@ include 'api'
|
||||||
include 'core'
|
include 'core'
|
||||||
include 'beacon'
|
include 'beacon'
|
||||||
include 'extension'
|
include 'extension'
|
||||||
|
|
||||||
include 'sample_extension'
|
|
||||||
project(":sample_extension").projectDir = file("samples/sample_extension")
|
|
||||||
|
|
||||||
include 'sample_program'
|
|
||||||
project(":sample_program").projectDir = file("samples/sample_program")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue