From: Mathieu Baudier
Date: Sat, 16 Mar 2024 07:10:41 +0000 (+0100)
Subject: Merge tag 'v2.3.15' into testing
X-Git-Tag: v2.1.26~1
X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=d07cf3c7dfdeafa2b1efafe547b54d56a8b52ced;hp=8596685647867307b862b8a89742b6a62ba75fcd;p=gpl%2Fargeo-slc.git
Merge tag 'v2.3.15' into testing
---
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..99f26c020
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/Makefile b/Makefile
index 65c241c94..562eba3be 100644
--- a/Makefile
+++ b/Makefile
@@ -1,22 +1,23 @@
include sdk.mk
.PHONY: clean all osgi jni
-all: osgi jni
+all: osgi-all
$(MAKE) -f Makefile-rcp.mk all
install: osgi-install
uninstall: osgi-uninstall
-jni:
- $(MAKE) -C jni
+#jni:
+# $(MAKE) -C jni
A2_CATEGORY = org.argeo.slc
BUNDLES = \
-org.argeo.slc.api \
+org.argeo.api.slc \
org.argeo.slc.runtime \
org.argeo.slc.cms \
+org.argeo.rt.cms \
lib/linux/org.argeo.slc.systemd \
swt/org.argeo.cms.e4 \
swt/rap/org.argeo.cms.e4.rap \
@@ -29,7 +30,7 @@ log/syslogger/org.argeo.tp \
org.argeo.tp \
org.argeo.tp.httpd \
org.argeo.tp.sys \
-osgi/api/org.argeo.tp.osgi \
+osgi/equinox/org.argeo.tp.osgi \
osgi/equinox/org.argeo.tp.eclipse \
swt/rap/org.argeo.tp.swt \
swt/rap/org.argeo.tp.swt.workbench \
@@ -38,9 +39,12 @@ swt/org.argeo.cms \
swt/rap/org.argeo.cms \
$(A2_CATEGORY)
-clean:
- rm -rf $(BUILD_BASE)
- $(MAKE) -C jni clean
+NATIVE_PACKAGES= \
+org_argeo_api_uuid_libuuid
+
+clean: osgi-clean
+# rm -rf $(BUILD_BASE)
+# $(MAKE) -C jni clean
$(MAKE) -f Makefile-rcp.mk clean
native-deps-debian:
diff --git a/Makefile-rcp.mk b/Makefile-rcp.mk
index eb3fc7042..439563147 100644
--- a/Makefile-rcp.mk
+++ b/Makefile-rcp.mk
@@ -12,7 +12,7 @@ swt/rcp/org.argeo.tool.desktop \
DEP_CATEGORIES = \
org.argeo.tp \
-osgi/api/org.argeo.tp.osgi \
+osgi/equinox/org.argeo.tp.osgi \
osgi/equinox/org.argeo.tp.eclipse \
swt/rcp/org.argeo.tp.swt \
lib/linux/x86_64/swt/rcp/org.argeo.tp.swt \
diff --git a/jni/Makefile b/jni/Makefile
deleted file mode 100644
index e0b2ed4bb..000000000
--- a/jni/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-include ../sdk.mk
-
-JNIDIRS = org_argeo_api_uuid_libuuid
-
-.PHONY: clean all
-
-all:
- $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir) all;)
-
-clean:
- $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir) clean;)
-
-
-
diff --git a/jni/jni.mk b/jni/jni.mk
deleted file mode 100644
index e4d7bdec9..000000000
--- a/jni/jni.mk
+++ /dev/null
@@ -1,65 +0,0 @@
-include $(SDK_SRC_BASE)/sdk/argeo-build/osgi.mk
-
-A2_NATIVE_CATEGORY=$(A2_OUTPUT)/lib/linux/$(shell uname -m)/$(A2_CATEGORY)
-TARGET_EXEC := libJava_$(NATIVE_PACKAGE).so
-
-LDFLAGS = -shared -fPIC -Wl,-soname,$(TARGET_EXEC).$(MAJOR).$(MINOR) $(ADDITIONAL_LIBS)
-CFLAGS = -O3 -fPIC
-
-SRC_DIRS := .
-
-#
-# Generic Argeo
-#
-BUILD_DIR := $(SDK_BUILD_BASE)/jni/$(NATIVE_PACKAGE)
-
-# Every folder in ./src will need to be passed to GCC so that it can find header files
-INC_DIRS := $(shell find $(SRC_DIRS) -type d) $(JAVA_HOME)/include $(JAVA_HOME)/include/linux $(ADDITIONAL_INCLUDES)
-
-
-.PHONY: clean all ide
-all: $(A2_NATIVE_CATEGORY)/$(TARGET_EXEC)
-
-clean:
- $(RM) $(A2_NATIVE_CATEGORY)/$(TARGET_EXEC)
-
-# Find all the C and C++ files we want to compile
-# Note the single quotes around the * expressions. Make will incorrectly expand these otherwise.
-SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
-
-# String substitution for every C/C++ file.
-# As an example, hello.cpp turns into ./build/hello.cpp.o
-OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
-
-# String substitution (suffix version without %).
-# As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d
-DEPS := $(OBJS:.o=.d)
-
-# Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag
-INC_FLAGS := $(addprefix -I,$(INC_DIRS))
-
-# The -MMD and -MP flags together generate Makefiles for us!
-# These files will have .d instead of .o as the output.
-CPPFLAGS := $(INC_FLAGS) -MMD -MP
-
-# The final build step.
-$(A2_NATIVE_CATEGORY)/$(TARGET_EXEC): $(OBJS)
- mkdir -p $(A2_NATIVE_CATEGORY)
- $(CC) $(OBJS) -o $@ $(LDFLAGS)
-
-# Build step for C source
-$(BUILD_DIR)/%.c.o: %.c
- mkdir -p $(dir $@)
- $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
-
-# Build step for C++ source
-$(BUILD_DIR)/%.cpp.o: %.cpp
- mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
-
-# Include the .d makefiles. The - at the front suppresses the errors of missing
-# Makefiles. Initially, all the .d files will be missing, and we don't want those
-# errors to show up.
--include $(DEPS)
-
-# MAKEFILE_DIR := $(dir $(firstword $(MAKEFILE_LIST)))
diff --git a/jni/org_argeo_api_uuid_libuuid/Makefile b/jni/org_argeo_api_uuid_libuuid/Makefile
index 2e98253b8..bf9a1ecdc 100644
--- a/jni/org_argeo_api_uuid_libuuid/Makefile
+++ b/jni/org_argeo_api_uuid_libuuid/Makefile
@@ -2,9 +2,7 @@ A2_CATEGORY = org.argeo.slc
NATIVE_PACKAGE := org_argeo_api_uuid_libuuid
-ADDITIONAL_INCLUDES = /usr/include/uuid
-ADDITIONAL_LIBS = -luuid
+DEP_NATIVE=uuid
include ../../sdk.mk
-include ../jni.mk
-
+include $(SDK_SRC_BASE)/sdk/argeo-build/jni.mk
diff --git a/org.argeo.api.slc/.classpath b/org.argeo.api.slc/.classpath
new file mode 100644
index 000000000..d499d3059
--- /dev/null
+++ b/org.argeo.api.slc/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/org.argeo.api.slc/.gitignore b/org.argeo.api.slc/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/org.argeo.api.slc/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.argeo.api.slc/.project b/org.argeo.api.slc/.project
new file mode 100644
index 000000000..e8b4199d9
--- /dev/null
+++ b/org.argeo.api.slc/.project
@@ -0,0 +1,28 @@
+
+
+ org.argeo.api.slc
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/org.argeo.api.slc/META-INF/.gitignore b/org.argeo.api.slc/META-INF/.gitignore
new file mode 100644
index 000000000..4854a41b9
--- /dev/null
+++ b/org.argeo.api.slc/META-INF/.gitignore
@@ -0,0 +1 @@
+/MANIFEST.MF
diff --git a/org.argeo.api.slc/bnd.bnd b/org.argeo.api.slc/bnd.bnd
new file mode 100644
index 000000000..e69de29bb
diff --git a/org.argeo.api.slc/build.properties b/org.argeo.api.slc/build.properties
new file mode 100644
index 000000000..07891d987
--- /dev/null
+++ b/org.argeo.api.slc/build.properties
@@ -0,0 +1,2 @@
+bin.includes = META-INF/,.
+source..=src/
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/BasicNameVersion.java b/org.argeo.api.slc/src/org/argeo/api/slc/BasicNameVersion.java
new file mode 100644
index 000000000..47bd2d4d7
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/BasicNameVersion.java
@@ -0,0 +1,33 @@
+package org.argeo.api.slc;
+
+import java.io.Serializable;
+
+/** @deprecated use {@link DefaultNameVersion} instead. */
+@Deprecated
+public class BasicNameVersion extends DefaultNameVersion implements
+ Serializable {
+ private static final long serialVersionUID = -5127304279136195127L;
+
+ public BasicNameVersion() {
+ }
+
+ /** Interprets string in OSGi-like format my.module.name;version=0.0.0 */
+ public BasicNameVersion(String nameVersion) {
+ int index = nameVersion.indexOf(";version=");
+ if (index < 0) {
+ setName(nameVersion);
+ setVersion(null);
+ } else {
+ setName(nameVersion.substring(0, index));
+ setVersion(nameVersion.substring(index + ";version=".length()));
+ }
+ }
+
+ public BasicNameVersion(String name, String version) {
+ super(name, version);
+ }
+
+ public BasicNameVersion(NameVersion nameVersion) {
+ super(nameVersion);
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/CategoryNameVersion.java b/org.argeo.api.slc/src/org/argeo/api/slc/CategoryNameVersion.java
new file mode 100644
index 000000000..afb812103
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/CategoryNameVersion.java
@@ -0,0 +1,25 @@
+package org.argeo.api.slc;
+
+/**
+ * Adds a dimension to {@link NameVersion} by adding an arbitrary category (e.g.
+ * Maven groupId, yum repository ID, etc.)
+ */
+public interface CategoryNameVersion extends NameVersion {
+ /** The category of the component. */
+ String getCategory();
+
+ static CategoryNameVersion parseCategoryNameVersion(String str) {
+ if (str == null || "".equals(str.trim()))
+ throw new IllegalArgumentException("At least one character required.");
+ String[] arr = str.trim().split(":");
+ if (arr.length > 3)
+ throw new IllegalArgumentException(str + " does not respect the [category]:[name]:[version] pattern");
+ DefaultCategoryNameVersion res = new DefaultCategoryNameVersion();
+ res.setCategory(arr[0]);
+ if (arr.length > 1)
+ res.setName(arr[1]);
+ if (arr.length > 2)
+ res.setVersion(arr[2]);
+ return res;
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/Condition.java b/org.argeo.api.slc/src/org/argeo/api/slc/Condition.java
new file mode 100644
index 000000000..f028b58fc
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/Condition.java
@@ -0,0 +1,11 @@
+package org.argeo.api.slc;
+
+/** Binary check on an arbitrary object. */
+public interface Condition {
+ /**
+ * Checks the condition.
+ *
+ * @return true, if the condition is verified, false if not.
+ */
+ public Boolean check(T obj);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/DefaultCategoryNameVersion.java b/org.argeo.api.slc/src/org/argeo/api/slc/DefaultCategoryNameVersion.java
new file mode 100644
index 000000000..1303e43fc
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/DefaultCategoryNameVersion.java
@@ -0,0 +1,34 @@
+package org.argeo.api.slc;
+
+/** Canonical implementation of {@link CategoryNameVersion} */
+public class DefaultCategoryNameVersion extends DefaultNameVersion implements CategoryNameVersion {
+ private String category;
+
+ public DefaultCategoryNameVersion() {
+ }
+
+ public DefaultCategoryNameVersion(String category, String name, String version) {
+ super(name, version);
+ this.category = category;
+ }
+
+ public DefaultCategoryNameVersion(String category, NameVersion nameVersion) {
+ super(nameVersion);
+ this.category = category;
+ }
+
+ @Override
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ @Override
+ public String toString() {
+ return category + ":" + super.toString();
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/DefaultNameVersion.java b/org.argeo.api.slc/src/org/argeo/api/slc/DefaultNameVersion.java
new file mode 100644
index 000000000..7ae25cb51
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/DefaultNameVersion.java
@@ -0,0 +1,77 @@
+package org.argeo.api.slc;
+
+
+/** Canonical implementation of {@link NameVersion} */
+public class DefaultNameVersion implements NameVersion,
+ Comparable {
+ private String name;
+ private String version;
+
+ public DefaultNameVersion() {
+ }
+
+ /** Interprets string in OSGi-like format my.module.name;version=0.0.0 */
+ public DefaultNameVersion(String nameVersion) {
+ int index = nameVersion.indexOf(";version=");
+ if (index < 0) {
+ setName(nameVersion);
+ setVersion(null);
+ } else {
+ setName(nameVersion.substring(0, index));
+ setVersion(nameVersion.substring(index + ";version=".length()));
+ }
+ }
+
+ public DefaultNameVersion(String name, String version) {
+ this.name = name;
+ this.version = version;
+ }
+
+ public DefaultNameVersion(NameVersion nameVersion) {
+ this.name = nameVersion.getName();
+ this.version = nameVersion.getVersion();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof NameVersion) {
+ NameVersion nameVersion = (NameVersion) obj;
+ return name.equals(nameVersion.getName())
+ && version.equals(nameVersion.getVersion());
+ } else
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return name + ":" + version;
+ }
+
+ public int compareTo(NameVersion o) {
+ if (o.getName().equals(name))
+ return version.compareTo(o.getVersion());
+ else
+ return name.compareTo(o.getName());
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/ManifestConstants.java b/org.argeo.api.slc/src/org/argeo/api/slc/ManifestConstants.java
new file mode 100644
index 000000000..8aa781554
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/ManifestConstants.java
@@ -0,0 +1,32 @@
+package org.argeo.api.slc;
+
+public enum ManifestConstants {
+ // OSGi
+ BUNDLE_SYMBOLICNAME("Bundle-SymbolicName"), //
+ BUNDLE_VERSION("Bundle-Version"), //
+ BUNDLE_LICENSE("Bundle-License"), //
+ EXPORT_PACKAGE("Export-Package"), //
+ IMPORT_PACKAGE("Import-Package"), //
+ // JAVA
+ AUTOMATIC_MODULE_NAME("Automatic-Module-Name"), //
+ // SLC
+ SLC_CATEGORY("SLC-Category"), //
+ SLC_ORIGIN_M2("SLC-Origin-M2"), //
+ SLC_ORIGIN_M2_MERGE("SLC-Origin-M2-Merge"), //
+ SLC_ORIGIN_M2_REPO("SLC-Origin-M2-Repo"), //
+ SLC_ORIGIN_MANIFEST_NOT_MODIFIED("SLC-Origin-ManifestNotModified"), //
+ SLC_ORIGIN_URI("SLC-Origin-URI"),//
+ ;
+
+ final String value;
+
+ private ManifestConstants(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/ModuleSet.java b/org.argeo.api.slc/src/org/argeo/api/slc/ModuleSet.java
new file mode 100644
index 000000000..1a544dfe6
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/ModuleSet.java
@@ -0,0 +1,8 @@
+package org.argeo.api.slc;
+
+import java.util.Iterator;
+
+/** A set of {@link NameVersion}. */
+public interface ModuleSet {
+ Iterator extends NameVersion> nameVersions();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/NameVersion.java b/org.argeo.api.slc/src/org/argeo/api/slc/NameVersion.java
new file mode 100644
index 000000000..0101d594a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/NameVersion.java
@@ -0,0 +1,24 @@
+package org.argeo.api.slc;
+
+/**
+ * Abstraction of a name / version pair, typically used as coordinates for a
+ * software module either deployed or packaged as an archive.
+ */
+public interface NameVersion {
+ /** The name of the component. */
+ String getName();
+
+ /** The version of the component. */
+ String getVersion();
+
+ /**
+ * The forward compatible branch of this version, by default it is
+ * [major].[minor].
+ */
+ default String getBranch() {
+ String[] parts = getVersion().split("\\.");
+ if (parts.length < 2)
+ throw new IllegalStateException("Version " + getVersion() + " cannot be interpreted as branch.");
+ return parts[0] + "." + parts[1];
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/SlcConstants.java b/org.argeo.api.slc/src/org/argeo/api/slc/SlcConstants.java
new file mode 100644
index 000000000..d20a5e761
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/SlcConstants.java
@@ -0,0 +1,10 @@
+package org.argeo.api.slc;
+
+/** Constants useful across all SLC components */
+public interface SlcConstants {
+ /** Read-write role. */
+ public final static String ROLE_SLC = "cn=org.argeo.slc.user,ou=roles,ou=node";
+
+ /** Read only unlogged user */
+ public final static String USER_ANONYMOUS = "anonymous";
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/SlcException.java b/org.argeo.api.slc/src/org/argeo/api/slc/SlcException.java
new file mode 100644
index 000000000..8ced2acad
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/SlcException.java
@@ -0,0 +1,17 @@
+package org.argeo.api.slc;
+
+/** Basis for all SLC exceptions. This is an unchecked exception. */
+public class SlcException extends RuntimeException {
+ private static final long serialVersionUID = 6373738619304106445L;
+
+ /** Constructor. */
+ public SlcException(String message) {
+ super(message);
+ }
+
+ /** Constructor. */
+ public SlcException(String message, Throwable e) {
+ super(message, e);
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/SlcNames.java b/org.argeo.api.slc/src/org/argeo/api/slc/SlcNames.java
new file mode 100644
index 000000000..4ece0535f
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/SlcNames.java
@@ -0,0 +1,113 @@
+package org.argeo.api.slc;
+
+/** JCR names used by SLC */
+public interface SlcNames {
+ public final static String SLC_ = "slc:";
+
+ /*
+ * GENERAL
+ */
+ public final static String SLC_UUID = "slc:uuid";
+ public final static String SLC_STATUS = "slc:status";
+ // generic name for result parts of a given test result (slc:testResult)
+ // note that corresponding nodes can be retrieved using
+ // myTestResultNode.getNodes(SLC_RESULT_PART+"*") method
+ public final static String SLC_RESULT_PART = "slc:resultPart";
+ // Fixed name of the child node of a slc:testResult of type
+ // slc:check that aggregate status of all result parts of a given test
+ // result
+ public final static String SLC_AGGREGATED_STATUS = "slc:aggregatedStatus";
+
+ public final static String SLC_TYPE = "slc:type";
+ public final static String SLC_NAME = "slc:name";
+ public final static String SLC_VERSION = "slc:version";
+ public final static String SLC_CATEGORY = "slc:category";
+ public final static String SLC_VALUE = "slc:value";
+ public final static String SLC_ADDRESS = "slc:address";
+ public final static String SLC_METADATA = "slc:metadata";
+
+ public final static String SLC_TIMESTAMP = "slc:timestamp";
+ public final static String SLC_STARTED = "slc:started";
+ public final static String SLC_COMPLETED = "slc:completed";
+
+ public final static String SLC_VM = "slc:vm";
+ /*
+ * SLC RUNTIME
+ */
+ // execution
+ public final static String SLC_SPEC = "slc:spec";
+ public final static String SLC_EXECUTION_SPECS = "slc:executionSpecs";
+ public final static String SLC_FLOW = "slc:flow";
+ public final static String SLC_LOG = "slc:log";
+ public final static String SLC_AGENTS = "slc:agents";
+
+ // spec attribute
+ public final static String SLC_IS_IMMUTABLE = "slc:isImmutable";
+ public final static String SLC_IS_CONSTANT = "slc:isConstant";
+ public final static String SLC_IS_HIDDEN = "slc:isHidden";
+
+ // base directories
+ public final static String SLC_SYSTEM = "slc:system";
+ public final static String SLC_RESULTS = "slc:results";
+ public final static String SLC_MY_RESULTS = "slc:myResults";
+ public final static String SLC_PROCESSES = "slc:processes";
+
+ // result
+ public final static String SLC_SUCCESS = "slc:success";
+ public final static String SLC_MESSAGE = "slc:message";
+ public final static String SLC_TAG = "slc:tag";
+ public final static String SLC_ERROR_MESSAGE = "slc:errorMessage";
+ public final static String SLC_TEST_CASE = "slc:testCase";
+ public final static String SLC_TEST_CASE_TYPE = "slc:testCaseType";
+
+ // diff result
+ public final static String SLC_SUMMARY = "slc:summary";
+ public final static String SLC_ISSUES = "slc:issues";
+
+ /*
+ * SLC REPO
+ */
+ // shared
+ public final static String SLC_URL = "slc:url";
+ public final static String SLC_OPTIONAL = "slc:optional";
+ public final static String SLC_AS_STRING = "slc:asString";
+
+ // origin
+ public final static String SLC_ORIGIN = "slc:origin";
+ public final static String SLC_PROXY = "slc:proxy";
+
+ // slc:artifact
+ public final static String SLC_ARTIFACT_ID = "slc:artifactId";
+ public final static String SLC_GROUP_ID = "slc:groupId";
+ public final static String SLC_GROUP_BASE_ID = "slc:groupBaseId";
+ public final static String SLC_ARTIFACT_VERSION = "slc:artifactVersion";
+ public final static String SLC_ARTIFACT_EXTENSION = "slc:artifactExtension";
+ public final static String SLC_ARTIFACT_CLASSIFIER = "slc:artifactClassifier";
+
+ // slc:jarArtifact
+ public final static String SLC_MANIFEST = "slc:manifest";
+
+ // shared OSGi
+ public final static String SLC_SYMBOLIC_NAME = "slc:symbolic-name";
+ public final static String SLC_BUNDLE_VERSION = "slc:bundle-version";
+
+ // slc:osgiBaseVersion
+ public final static String SLC_MAJOR = "slc:major";
+ public final static String SLC_MINOR = "slc:minor";
+ public final static String SLC_MICRO = "slc:micro";
+ // slc:osgiVersion
+ public final static String SLC_QUALIFIER = "slc:qualifier";
+
+ // slc:exportedPackage
+ public final static String SLC_USES = "slc:uses";
+
+ // slc:modularDistribution
+ public final static String SLC_MODULES = "slc:modules";
+
+ // RPM
+ // slc:rpm
+ public final static String SLC_RPM_VERSION = "slc:rpmVersion";
+ public final static String SLC_RPM_RELEASE = "slc:rpmRelease";
+ public final static String SLC_RPM_ARCH = "slc:rpmArch";
+ public final static String SLC_RPM_ARCHIVE_SIZE = "slc:rpmArchiveSize";
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/SlcTypes.java b/org.argeo.api.slc/src/org/argeo/api/slc/SlcTypes.java
new file mode 100644
index 000000000..effd3f3a0
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/SlcTypes.java
@@ -0,0 +1,68 @@
+package org.argeo.api.slc;
+
+/** JCR node types used by SLC */
+public interface SlcTypes {
+
+ public final static String SLC_NAME_VERSION = "slc:nameVersion";
+ public final static String SLC_CATEGORIZED_NAME_VERSION = "slc:categorizedNameVersion";
+
+ public final static String SLC_AGENT_FACTORY = "slc:agentFactory";
+ public final static String SLC_AGENT = "slc:agent";
+ public final static String SLC_MODULE = "slc:module";
+ public final static String SLC_EXECUTION_MODULE = "slc:executionModule";
+ public final static String SLC_EXECUTION_SPEC = "slc:executionSpec";
+ public final static String SLC_EXECUTION_FLOW = "slc:executionFlow";
+ public final static String SLC_PROCESS = "slc:process";
+ public final static String SLC_REALIZED_FLOW = "slc:realizedFlow";
+
+ public final static String SLC_EXECUTION_SPEC_ATTRIBUTE = "slc:executionSpecAttribute";
+ public final static String SLC_PRIMITIVE_SPEC_ATTRIBUTE = "slc:primitiveSpecAttribute";
+ public final static String SLC_REF_SPEC_ATTRIBUTE = "slc:refSpecAttribute";
+
+ public final static String SLC_TEST_RESULT = "slc:testResult";
+ public final static String SLC_CHECK = "slc:check";
+ public final static String SLC_PROPERTY = "slc:property";
+ public final static String SLC_DIFF_RESULT = "slc:diffResult";
+
+ // Node types used for user defined and managed result UI tree
+ public final static String SLC_MY_RESULT_ROOT_FOLDER = "slc:myResultRootFolder";
+ public final static String SLC_RESULT_FOLDER = "slc:resultFolder";
+
+ // Log levels
+ public final static String SLC_LOG_ENTRY = "slc:logEntry";
+ public final static String SLC_LOG_TRACE = "slc:logTrace";
+ public final static String SLC_LOG_DEBUG = "slc:logDebug";
+ public final static String SLC_LOG_INFO = "slc:logInfo";
+ public final static String SLC_LOG_WARNING = "slc:logWarning";
+ public final static String SLC_LOG_ERROR = "slc:logError";
+
+ /*
+ * REPO
+ */
+ public final static String SLC_ARTIFACT = "slc:artifact";
+ public final static String SLC_ARTIFACT_VERSION_BASE = "slc:artifactVersion";
+ public final static String SLC_ARTIFACT_BASE = "slc:artifactBase";
+ public final static String SLC_GROUP_BASE = "slc:groupBase";
+ public final static String SLC_JAR_FILE = "slc:jarFile";
+ public final static String SLC_BUNDLE_ARTIFACT = "slc:bundleArtifact";
+ public final static String SLC_OSGI_VERSION = "slc:osgiVersion";
+ public final static String SLC_JAVA_PACKAGE = "slc:javaPackage";
+ public final static String SLC_EXPORTED_PACKAGE = "slc:exportedPackage";
+ public final static String SLC_IMPORTED_PACKAGE = "slc:importedPackage";
+ public final static String SLC_DYNAMIC_IMPORTED_PACKAGE = "slc:dynamicImportedPackage";
+ public final static String SLC_REQUIRED_BUNDLE = "slc:requiredBundle";
+ public final static String SLC_FRAGMENT_HOST = "slc:fragmentHost";
+
+ // Distribution management
+ // public final static String SLC_CATEGORY = "slc:category";
+ public final static String SLC_MODULAR_DISTRIBUTION_BASE = "slc:modularDistributionBase";
+ public final static String SLC_MODULAR_DISTRIBUTION = "slc:modularDistribution";
+ public final static String SLC_MODULE_COORDINATES = "slc:moduleCoordinates";
+
+ // origin
+ public final static String SLC_KNOWN_ORIGIN = "slc:knownOrigin";
+ public final static String SLC_PROXIED = "slc:proxied";
+
+ // rpm
+ public final static String SLC_RPM = "slc:rpm";
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/StreamReadable.java b/org.argeo.api.slc/src/org/argeo/api/slc/StreamReadable.java
new file mode 100644
index 000000000..fdda17e33
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/StreamReadable.java
@@ -0,0 +1,7 @@
+package org.argeo.api.slc;
+
+import java.io.InputStream;
+
+public interface StreamReadable {
+ public InputStream getInputStream();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/UnsupportedException.java b/org.argeo.api.slc/src/org/argeo/api/slc/UnsupportedException.java
new file mode 100644
index 000000000..3a7c766c8
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/UnsupportedException.java
@@ -0,0 +1,54 @@
+package org.argeo.api.slc;
+
+/** Exception for unsupported features or actions. */
+public class UnsupportedException extends SlcException {
+ static final long serialVersionUID = 1l;
+
+ /** Action not supported. */
+ public UnsupportedException() {
+ this("Action not supported");
+ }
+
+ /** Constructor with a message. */
+ public UnsupportedException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor generating a message.
+ *
+ * @param nature
+ * the nature of the unsupported object
+ * @param obj
+ * the object itself (its class name will be used in message)
+ */
+ public UnsupportedException(String nature, Object obj) {
+ super("Unsupported " + nature + ": "
+ + (obj != null ? obj.getClass() : "[object is null]"));
+ }
+
+ /**
+ * Constructor generating a message.
+ *
+ * @param nature
+ * the nature of the unsupported object
+ * @param clss
+ * the class itself (will be used in message)
+ */
+ public UnsupportedException(String nature, Class> clss) {
+ super("Unsupported " + nature + ": " + clss);
+ }
+
+ /**
+ * Constructor generating a message.
+ *
+ * @param nature
+ * the nature of the unsupported object
+ * @param value
+ * the problematic value itself
+ */
+ public UnsupportedException(String nature, String value) {
+ super("Unsupported " + nature + ": " + value);
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/WellKnownConstants.java b/org.argeo.api.slc/src/org/argeo/api/slc/WellKnownConstants.java
new file mode 100644
index 000000000..034c16d9f
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/WellKnownConstants.java
@@ -0,0 +1,17 @@
+package org.argeo.api.slc;
+
+/**
+ * Centralises constant values related to software systems, which are well
+ * defined and not expected to change within a major version cycle of SLC, but
+ * which are not necessarily defined in core Java.
+ */
+public interface WellKnownConstants {
+
+ /*
+ * OSGi
+ */
+ final static String OSGI_INSTANCE_AREA = "osgi.instance.area";
+ final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area";
+
+// final static String OSGI_HTTP_PORT = "org.osgi.service.http.port";
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/attachment/Attachment.java b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/Attachment.java
new file mode 100644
index 000000000..1a61bc63a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/Attachment.java
@@ -0,0 +1,11 @@
+package org.argeo.api.slc.attachment;
+
+public interface Attachment {
+ public String getUuid();
+
+ public void setUuid(String uuid);
+
+ public String getName();
+
+ public String getContentType();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsEnabled.java b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsEnabled.java
new file mode 100644
index 000000000..45478a2ac
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsEnabled.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.attachment;
+
+public interface AttachmentsEnabled {
+ public void addAttachment(Attachment attachment);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsStorage.java b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsStorage.java
new file mode 100644
index 000000000..735a44db0
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/attachment/AttachmentsStorage.java
@@ -0,0 +1,12 @@
+package org.argeo.api.slc.attachment;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public interface AttachmentsStorage {
+ public void retrieveAttachment(Attachment attachment,
+ OutputStream outputStream);
+
+ /** Does NOT close the provided input stream. */
+ public void storeAttachment(Attachment attachment, InputStream inputStream);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/build/Distribution.java b/org.argeo.api.slc/src/org/argeo/api/slc/build/Distribution.java
new file mode 100644
index 000000000..b6e9f39e5
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/build/Distribution.java
@@ -0,0 +1,7 @@
+package org.argeo.api.slc.build;
+
+/** A packaged software component */
+public interface Distribution {
+ public String getDistributionId();
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/build/License.java b/org.argeo.api.slc/src/org/argeo/api/slc/build/License.java
new file mode 100644
index 000000000..4bbb8ecb5
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/build/License.java
@@ -0,0 +1,12 @@
+package org.argeo.api.slc.build;
+
+/** A software license */
+public interface License {
+ public String getName();
+
+ public String getUri();
+
+ public String getLink();
+
+ public String getText();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/build/ModularDistribution.java b/org.argeo.api.slc/src/org/argeo/api/slc/build/ModularDistribution.java
new file mode 100644
index 000000000..73f194a70
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/build/ModularDistribution.java
@@ -0,0 +1,19 @@
+package org.argeo.api.slc.build;
+
+import org.argeo.api.slc.ModuleSet;
+import org.argeo.api.slc.NameVersion;
+
+/**
+ * A distribution of modules, that is components that can be identified by a
+ * name / version couple.
+ *
+ * @see NameVersion
+ */
+public interface ModularDistribution extends Distribution, NameVersion,
+ ModuleSet {
+ public Distribution getModuleDistribution(String moduleName,
+ String moduleVersion);
+
+ /** A descriptor such as P2, OBR or yum metadata. */
+ public Object getModulesDescriptor(String descriptorType);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/build/package.html b/org.argeo.api.slc/src/org/argeo/api/slc/build/package.html
new file mode 100644
index 000000000..5da205278
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/build/package.html
@@ -0,0 +1,6 @@
+
+
+
+SLC Build: building of software systems.
+
+
\ No newline at end of file
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployEnvironment.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployEnvironment.java
new file mode 100644
index 000000000..2f40f3db6
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployEnvironment.java
@@ -0,0 +1,9 @@
+package org.argeo.api.slc.deploy;
+
+import java.io.File;
+import java.util.Map;
+
+public interface DeployEnvironment {
+ public void unpackTo(Object packg, File targetLocation,
+ Map filter);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystem.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystem.java
new file mode 100644
index 000000000..7c264cc29
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystem.java
@@ -0,0 +1,18 @@
+package org.argeo.api.slc.deploy;
+
+import org.argeo.api.slc.build.Distribution;
+
+/** An instance of a software system. */
+public interface DeployedSystem extends TargetData {
+ /** Unique ID for this system instance. */
+ public String getDeployedSystemId();
+
+ /** Underlying packages */
+ public Distribution getDistribution();
+
+ /** Data required to initialize the instance (e.g. DB dump, etc.). */
+ public DeploymentData getDeploymentData();
+
+ /** Resources required by the system (ports, disk location, etc.) */
+ public TargetData getTargetData();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystemManager.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystemManager.java
new file mode 100644
index 000000000..a142ae535
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeployedSystemManager.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.deploy;
+
+public interface DeployedSystemManager {
+ public void setDeployedSystem(T deployedSystem);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Deployment.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Deployment.java
new file mode 100644
index 000000000..8efca64f9
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Deployment.java
@@ -0,0 +1,13 @@
+package org.argeo.api.slc.deploy;
+
+import org.argeo.api.slc.build.Distribution;
+
+public interface Deployment extends Runnable{
+ public DeployedSystem getDeployedSystem();
+
+ public void setTargetData(TargetData targetData);
+
+ public void setDeploymentData(DeploymentData deploymentData);
+
+ public void setDistribution(Distribution distribution);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeploymentData.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeploymentData.java
new file mode 100644
index 000000000..9fcaf76f5
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DeploymentData.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.deploy;
+
+public interface DeploymentData {
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DynamicRuntime.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DynamicRuntime.java
new file mode 100644
index 000000000..5e5adc19b
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/DynamicRuntime.java
@@ -0,0 +1,18 @@
+package org.argeo.api.slc.deploy;
+
+import org.argeo.api.slc.NameVersion;
+import org.argeo.api.slc.build.Distribution;
+
+public interface DynamicRuntime extends
+ ModularDeployedSystem {
+ public void shutdown();
+
+ public M installModule(Distribution distribution);
+
+ public void uninstallModule(NameVersion nameVersion);
+
+ public void updateModule(NameVersion nameVersion);
+
+ public void startModule(NameVersion nameVersion);
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/InstalledExecutables.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/InstalledExecutables.java
new file mode 100644
index 000000000..bf416b916
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/InstalledExecutables.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.deploy;
+
+public interface InstalledExecutables extends DeployedSystem {
+ public String getExecutablePath(String key);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModularDeployedSystem.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModularDeployedSystem.java
new file mode 100644
index 000000000..7bca5af8d
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModularDeployedSystem.java
@@ -0,0 +1,8 @@
+package org.argeo.api.slc.deploy;
+
+import java.util.List;
+
+public interface ModularDeployedSystem extends DeployedSystem {
+ /** List the underlying deployed modules (in real time) */
+ public List listModules();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Module.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Module.java
new file mode 100644
index 000000000..0be609c71
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/Module.java
@@ -0,0 +1,12 @@
+package org.argeo.api.slc.deploy;
+
+import org.argeo.api.slc.NameVersion;
+
+/**
+ * Represents a deployed module of a broader deployed system. A module is
+ * uniquely identifiable via a name / version.
+ */
+public interface Module extends DeployedSystem, NameVersion {
+ /** A serializable stateless description of the module */
+ public ModuleDescriptor getModuleDescriptor();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModuleDescriptor.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModuleDescriptor.java
new file mode 100644
index 000000000..74e0c090e
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModuleDescriptor.java
@@ -0,0 +1,59 @@
+package org.argeo.api.slc.deploy;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.argeo.api.slc.DefaultNameVersion;
+
+/** The description of a versioned module. */
+public class ModuleDescriptor extends DefaultNameVersion implements Serializable {
+ private static final long serialVersionUID = 4310820315478645419L;
+ private String title;
+ private String description;
+ private Map metadata = new HashMap();
+ private Boolean started = false;
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /** @deprecated use {@link #getTitle()} instead */
+ public String getLabel() {
+ return title;
+ }
+
+ /** @deprecated use {@link #setTitle(String)} instead */
+ public void setLabel(String label) {
+ this.title = label;
+ }
+
+ public Map getMetadata() {
+ return metadata;
+ }
+
+ public void setMetadata(Map metadata) {
+ this.metadata = metadata;
+ }
+
+ public Boolean getStarted() {
+ return started;
+ }
+
+ public void setStarted(Boolean started) {
+ this.started = started;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModulesManager.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModulesManager.java
new file mode 100644
index 000000000..5654acb6c
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/ModulesManager.java
@@ -0,0 +1,26 @@
+package org.argeo.api.slc.deploy;
+
+import java.util.List;
+
+import org.argeo.api.slc.NameVersion;
+
+/** Provides access to deployed modules */
+public interface ModulesManager {
+ /** @return a full fledged module descriptor. */
+ public ModuleDescriptor getModuleDescriptor(String moduleName,
+ String version);
+
+ /**
+ * @return a list of minimal module descriptors of the deployed modules
+ */
+ public List listModules();
+
+ /** Synchronously upgrades the module referenced by this name version */
+ public void upgrade(NameVersion nameVersion);
+
+ /** Starts the module */
+ public void start(NameVersion nameVersion);
+
+ /** Stops the module */
+ public void stop(NameVersion nameVersion);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/TargetData.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/TargetData.java
new file mode 100644
index 000000000..7ae0243b3
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/TargetData.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.deploy;
+
+public interface TargetData {
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/VersioningDriver.java b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/VersioningDriver.java
new file mode 100644
index 000000000..42ed9f047
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/VersioningDriver.java
@@ -0,0 +1,33 @@
+package org.argeo.api.slc.deploy;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.util.List;
+
+/** Abstracts common versioning operations */
+public interface VersioningDriver {
+ public void getFileFromRepository(String repositoryBaseUrl,
+ String location, OutputStream out);
+
+ public List getChangedPaths(File repositoryRoot, Long revision);
+
+ public String getRepositoryRoot(String repositoryUrl);
+
+ public String getRelativePath(String repositoryUrl);
+
+ public void updateToHead(File fileOrDir);
+
+ public void importFileOrDir(String repositoryUrl, File fileOrDir);
+
+ /**
+ * Checks out or update this versioned directory
+ *
+ * @return true if the content has changed, false otherwise
+ */
+ public Boolean checkout(String repositoryUrl, File destDir,
+ Boolean recursive);
+
+ public void createRepository(String filePath);
+
+ public void commit(File fileOrDir, String commitMessage);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/deploy/package.html b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/package.html
new file mode 100644
index 000000000..f3a4c5bd6
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/deploy/package.html
@@ -0,0 +1,6 @@
+
+
+
+SLC Deploy: deployment of software systems.
+
+
\ No newline at end of file
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractExecutionValue.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractExecutionValue.java
new file mode 100644
index 000000000..c16ca3774
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractExecutionValue.java
@@ -0,0 +1,8 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+
+/** Value to be used by an execution */
+public abstract class AbstractExecutionValue implements Serializable {
+ private static final long serialVersionUID = 1558444746120706961L;
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractSpecAttribute.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractSpecAttribute.java
new file mode 100644
index 000000000..c48baa397
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/AbstractSpecAttribute.java
@@ -0,0 +1,73 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+
+/** Canonical implementation of the execution spec attribute booleans. */
+public abstract class AbstractSpecAttribute implements ExecutionSpecAttribute,
+ Serializable {
+ private static final long serialVersionUID = 6494963738891709440L;
+ private Boolean isImmutable = false;
+ private Boolean isConstant = false;
+ private Boolean isHidden = false;
+
+ private String description;
+
+ /** Has to be set at instantiation */
+ public Boolean getIsImmutable() {
+ return isImmutable;
+ }
+
+ public void setIsImmutable(Boolean isImmutable) {
+ this.isImmutable = isImmutable;
+ }
+
+ /** Cannot be overridden at runtime */
+ public Boolean getIsConstant() {
+ return isConstant;
+ }
+
+ public void setIsConstant(Boolean isConstant) {
+ this.isConstant = isConstant;
+ }
+
+ /** Should not be shown to the end user */
+ public Boolean getIsHidden() {
+ return isHidden;
+ }
+
+ public void setIsHidden(Boolean isHidden) {
+ this.isHidden = isHidden;
+ }
+
+ /*
+ * DEPRECATED
+ */
+ /** @deprecated use {@link #getIsImmutable()} instead */
+ public Boolean getIsParameter() {
+ return isImmutable;
+ }
+
+ /** @deprecated use {@link #getIsConstant()} instead */
+ public Boolean getIsFrozen() {
+ return isConstant;
+ }
+
+ /** @deprecated use {@link #setIsImmutable(Boolean)} instead */
+ public void setIsParameter(Boolean isParameter) {
+ this.isImmutable = isParameter;
+ }
+
+ /** @deprecated use {@link #setIsConstant(Boolean)} instead */
+ public void setIsFrozen(Boolean isFrozen) {
+ this.isConstant = isFrozen;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionContext.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionContext.java
new file mode 100644
index 000000000..201f6e2ae
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionContext.java
@@ -0,0 +1,20 @@
+package org.argeo.api.slc.execution;
+
+/** Variables or references attached to an execution (typically thread bounded).*/
+public interface ExecutionContext {
+ public final static String VAR_EXECUTION_CONTEXT_ID = "slcVar.executionContext.id";
+ public final static String VAR_EXECUTION_CONTEXT_CREATION_DATE = "slcVar.executionContext.creationDate";
+ public final static String VAR_FLOW_ID = "slcVar.flow.id";
+ public final static String VAR_FLOW_NAME = "slcVar.flow.name";
+
+ public String getUuid();
+
+ /** @return the variable value, or null
if not found. */
+ public Object getVariable(String key);
+
+ public void setVariable(String key, Object value);
+
+ public void beforeFlow(ExecutionFlow executionFlow);
+
+ public void afterFlow(ExecutionFlow executionFlow);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlow.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlow.java
new file mode 100644
index 000000000..c3de07b78
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlow.java
@@ -0,0 +1,33 @@
+package org.argeo.api.slc.execution;
+
+import java.util.Iterator;
+
+/** Abstraction of an execution that can be identified and configured. */
+public interface ExecutionFlow extends Runnable {
+ /** Retrieve an immutable parameter */
+ public Object getParameter(String key);
+
+ /** Whether this immutable parameter is set */
+ public Boolean isSetAsParameter(String key);
+
+ /** The specifications of the execution flow. */
+ public ExecutionSpec getExecutionSpec();
+
+ /**
+ * List sub-runnables that would be executed if run() method would be
+ * called.
+ */
+ public Iterator runnables();
+
+ /**
+ * If there is one and only one runnable wrapped return it, throw an
+ * exception otherwise.
+ */
+ public Runnable getRunnable();
+
+ /**
+ * The name of this execution flow. Can contains '/' which will be
+ * interpreted by UIs as a hierarchy;
+ */
+ public String getName();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java
new file mode 100644
index 000000000..9c31f4010
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java
@@ -0,0 +1,119 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * Implements both archetype and implementation of a given process.
+ *
+ * At specification time, executionSpec
represents the spec of the
+ * parameters accepted by the process, with, among others: type, default value
+ * and, optionally, possible values for each parameter. Thus ExecutionSpec might
+ * be a huge object. Note that when marshalling only a reference to a specific
+ * ExecutionSpec is stored in the XML to optimize performance and avoid
+ * redundancy between various ExecutionFlowDesciptor that might have the same
+ * ExecutionSpec.
+ *
+ * At runtime, we build a RealizedFlow which references an
+ * ExecutionFlowDescriptor. As it happens AFTER marshalling / unmarshalling
+ * process, the ExecutionSpec is null but we manage to retrieve the
+ * ExecutionSpec and store it in the RealizedFlow, whereas set values of the
+ * parameters are stored in the values
map.
+ *
+ * Generally, values object are either a PrimitiveAccessor
or a
+ * RefValue
but can be other objects.
+ */
+public class ExecutionFlowDescriptor implements Serializable, Cloneable {
+ private static final long serialVersionUID = 7101944857038041216L;
+ private String name;
+ private String description;
+ private String path;
+ private Map values;
+ private ExecutionSpec executionSpec;
+
+ public ExecutionFlowDescriptor() {
+ }
+
+ public ExecutionFlowDescriptor(String name, String description,
+ Map values, ExecutionSpec executionSpec) {
+ this.name = name;
+ this.values = values;
+ this.executionSpec = executionSpec;
+ }
+
+ /** The referenced {@link ExecutionSpec} is NOT cloned. */
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ return new ExecutionFlowDescriptor(name, description,
+ new HashMap(values), executionSpec);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @deprecated will be removed in SLC 2.x, the path should be the part of
+ * the name with '/'
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * @deprecated will be removed in SLC 2.0, the path should be the part of
+ * the name with '/'
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public Map getValues() {
+ return values;
+ }
+
+ public ExecutionSpec getExecutionSpec() {
+ return executionSpec;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setValues(Map values) {
+ this.values = values;
+ }
+
+ public void setExecutionSpec(ExecutionSpec executionSpec) {
+ this.executionSpec = executionSpec;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof ExecutionFlowDescriptor)
+ return name.equals(((ExecutionFlowDescriptor) obj).getName());
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return (path != null && !path.trim().equals("") ? path + "/" : "")
+ + name;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptorConverter.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptorConverter.java
new file mode 100644
index 000000000..dfedc844a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptorConverter.java
@@ -0,0 +1,18 @@
+package org.argeo.api.slc.execution;
+
+import java.util.Map;
+
+/**
+ * Maps back and forth between {@link ExecutionFlowDescriptor} and
+ * {@link ExecutionFlow}
+ */
+public interface ExecutionFlowDescriptorConverter {
+ public Map convertValues(
+ ExecutionFlowDescriptor executionFlowDescriptor);
+
+ public void addFlowsToDescriptor(ExecutionModuleDescriptor md,
+ Map executionFlows);
+
+ public ExecutionFlowDescriptor getExecutionFlowDescriptor(
+ ExecutionFlow executionFlow);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModule.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModule.java
new file mode 100644
index 000000000..8f8c8fdfd
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModule.java
@@ -0,0 +1,12 @@
+package org.argeo.api.slc.execution;
+
+@Deprecated
+public interface ExecutionModule {
+/* public String getName();
+
+ public String getVersion();
+
+ public ExecutionModuleDescriptor getDescriptor();
+
+ public void execute(ExecutionFlowDescriptor descriptor);*/
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModuleDescriptor.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModuleDescriptor.java
new file mode 100644
index 000000000..bc6a3ddf9
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModuleDescriptor.java
@@ -0,0 +1,64 @@
+package org.argeo.api.slc.execution;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.deploy.ModuleDescriptor;
+
+/** Describes the information required to launch a flow */
+public class ExecutionModuleDescriptor extends ModuleDescriptor {
+ /** Metadata header identifying an SLC execution module */
+ public final static String SLC_EXECUTION_MODULE = "SLC-ExecutionModule";
+
+ private static final long serialVersionUID = -2394473464513029512L;
+ private List executionSpecs = new ArrayList();
+ private List executionFlows = new ArrayList();
+
+ public List getExecutionSpecs() {
+ return executionSpecs;
+ }
+
+ public List getExecutionFlows() {
+ return executionFlows;
+ }
+
+ /**
+ * Returns a new {@link ExecutionModuleDescriptor} that can be used to build
+ * a {@link RealizedFlow}.
+ */
+ public ExecutionFlowDescriptor cloneFlowDescriptor(String name) {
+ ExecutionFlowDescriptor res = null;
+ for (ExecutionFlowDescriptor efd : executionFlows) {
+ if (efd.getName().equals(name)
+ || ("/" + efd.getName()).equals(name)) {
+ try {
+ res = (ExecutionFlowDescriptor) efd.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new SlcException("Cannot clone " + efd, e);
+ }
+ }
+ }
+ if (res == null)
+ throw new SlcException("Flow " + name + " not found.");
+ return res;
+ }
+
+ public RealizedFlow asRealizedFlow(String flow, Map values) {
+ RealizedFlow realizedFlow = new RealizedFlow();
+ realizedFlow.setFlowDescriptor(cloneFlowDescriptor(flow));
+ realizedFlow.setModuleName(getName());
+ realizedFlow.setModuleVersion(getVersion());
+ realizedFlow.getFlowDescriptor().getValues().putAll(values);
+ return realizedFlow;
+ }
+
+ public void setExecutionSpecs(List executionSpecs) {
+ this.executionSpecs = executionSpecs;
+ }
+
+ public void setExecutionFlows(List executionFlows) {
+ this.executionFlows = executionFlows;
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesListener.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesListener.java
new file mode 100644
index 000000000..d2ff928ba
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesListener.java
@@ -0,0 +1,16 @@
+package org.argeo.api.slc.execution;
+
+import org.argeo.api.slc.deploy.ModuleDescriptor;
+
+/** Listen to events on execution modules. */
+public interface ExecutionModulesListener {
+ public void executionModuleAdded(ModuleDescriptor moduleDescriptor);
+
+ public void executionModuleRemoved(ModuleDescriptor moduleDescriptor);
+
+ public void executionFlowAdded(ModuleDescriptor moduleDescriptor,
+ ExecutionFlowDescriptor executionFlowDescriptor);
+
+ public void executionFlowRemoved(ModuleDescriptor moduleDescriptor,
+ ExecutionFlowDescriptor executionFlowDescriptor);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesManager.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesManager.java
new file mode 100644
index 000000000..42b8e4db1
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionModulesManager.java
@@ -0,0 +1,49 @@
+package org.argeo.api.slc.execution;
+
+import java.util.List;
+
+import org.argeo.api.slc.deploy.ModulesManager;
+
+/** Provides access to the execution modules */
+public interface ExecutionModulesManager extends ModulesManager {
+ /** Used to filter event notified to an execution notifier. */
+ public static String SLC_PROCESS_ID = "slc.process.id";
+
+ /** Unique launch module */
+ public static String UNIQUE_LAUNCH_MODULE_PROPERTY = "slc.launch.module";
+
+ /** Unique launch flow */
+ public static String UNIQUE_LAUNCH_FLOW_PROPERTY = "slc.launch.flow";
+
+ /** @return a full fledged module descriptor. */
+ public ExecutionModuleDescriptor getExecutionModuleDescriptor(
+ String moduleName, String version);
+
+ /**
+ * @return a list of minimal execution module descriptors (only the module
+ * meta data, not the flows)
+ */
+ public List listExecutionModules();
+
+ /** Synchronously finds and executes an {@link ExecutionFlow}. */
+ public void execute(RealizedFlow realizedFlow);
+
+ // /** Notify of a status update status of the {@link ExecutionProcess} */
+// public void dispatchUpdateStatus(ExecutionProcess process,
+// String oldStatus, String newStatus);
+ //
+ // /** Notify that a step was added in an {@link ExecutionProcess} */
+ // public void dispatchAddSteps(ExecutionProcess process,
+ // List steps);
+ //
+ // /**
+ // * Register a notifier which will be notified based on the provided
+ // * properties.
+ // */
+ // public void registerProcessNotifier(ExecutionProcessNotifier notifier,
+ // Map properties);
+ //
+ // /** Unregisters a notifier */
+ // public void unregisterProcessNotifier(ExecutionProcessNotifier notifier,
+ // Map properties);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionProcess.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionProcess.java
new file mode 100644
index 000000000..68f8d221e
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionProcess.java
@@ -0,0 +1,52 @@
+package org.argeo.api.slc.execution;
+
+import java.util.List;
+
+/**
+ * A process is the functional representation of a combination of executions.
+ * While an execution is the actual java code running, a process exists before,
+ * during and after the execution actually took place, providing an entry point
+ * for the definition of executions, their monitoring (e.g. logging) and
+ * tracking. A process can be distributed or parallelized.
+ * NEW => INITIALIZED => SCHEDULED => RUNNING
+ * RUNNING => {COMPLETED | ERROR | KILLED}
+ * {COMPLETED | ERROR | KILLED} => PURGED
+ * UNKOWN : this is a bug if this status occurs
+ */
+public interface ExecutionProcess {
+ /** The process is not yet usable. */
+ public final static String NEW = "NEW";
+ /** The process is usable but not yet scheduled to run. */
+ public final static String INITIALIZED = "INITIALIZED";
+ /** The process is usable and scheduled to run, but not yet running. */
+ public final static String SCHEDULED = "SCHEDULED";
+ /** The process is currently running. */
+ public final static String RUNNING = "RUNNING";
+ /** The process has properly completed. */
+ public final static String COMPLETED = "COMPLETED";
+ /** The process failed because of an unexpected error. */
+ public final static String ERROR = "ERROR";
+ /** The process was killed explicitly or through a crash. */
+ public final static String KILLED = "KILLED";
+ /** The status cannot be retrieved (probably because of unexpected errors). */
+ public final static String UNKOWN = "UNKOWN";
+
+ /**
+ * Only a reference to the process has been kept, all monitoring data such
+ * as logs have been purged.
+ */
+ public final static String PURGED = "PURGED";
+
+ /** The UUID of this process. */
+ public String getUuid();
+
+ /** The current status of this process. */
+ public String getStatus();
+
+ /** Sets the current status of this process */
+ public void setStatus(String status);
+
+ public void addSteps(List steps);
+
+ public List getRealizedFlows();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionResources.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionResources.java
new file mode 100644
index 000000000..6026912ef
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionResources.java
@@ -0,0 +1,31 @@
+package org.argeo.api.slc.execution;
+
+import java.io.File;
+import java.nio.file.Path;
+
+/** Provides write access to resources during execution */
+public interface ExecutionResources {
+ /** The base directory where this execution can write */
+ public File getWritableBaseDir();
+
+ /** Allocates a local file in the writable area and return it as a resource. */
+ public Path getWritableResource(String relativePath);
+
+ /**
+ * Allocates a local file in the writable area and return it as a fully
+ * qualified OS path.
+ */
+ public String getWritableOsPath(String relativePath);
+
+ /**
+ * Allocates a local file in the writable area and return it as a {@link File}.
+ */
+ public File getWritableOsFile(String relativePath);
+
+ /**
+ * Returns the resource as a file path. If the resource is not writable it is
+ * copied as a file in the writable area and the path to this local file is
+ * returned.
+ */
+ public String getAsOsPath(Path resource, Boolean overwrite);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpec.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpec.java
new file mode 100644
index 000000000..079c63b2c
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpec.java
@@ -0,0 +1,29 @@
+package org.argeo.api.slc.execution;
+
+import java.util.Map;
+
+/**
+ * The class implementing this interface defines the map of attributes that are
+ * necessary for the corresponding ExecutionFlow.
+ */
+public interface ExecutionSpec {
+ /**
+ * The name for an internal spec (for backward compatibility where a
+ * non-null name is expected)
+ */
+ public final static String INTERNAL_NAME = "__SLC_EXECUTION_SPEC_INTERNAL";
+
+ /**
+ * The name identifying the execution spec within its application context.
+ * Can be null. An execution spec can be referenced only if its name is not
+ * null or different from {@link #INTERNAL_NAME}
+ */
+ public String getName();
+
+ /** An optional description. Can be null. */
+ public String getDescription();
+
+ /** The attributes managed by this execution spec */
+ public Map getAttributes();
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpecAttribute.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpecAttribute.java
new file mode 100644
index 000000000..0ca92bfc2
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionSpecAttribute.java
@@ -0,0 +1,53 @@
+package org.argeo.api.slc.execution;
+
+/**
+ * Possible attribute of an execution flow.
+ *
+ * There are mainly two implementations :
+ * + Primitive attributes (no predefined choice, the end user must compute a
+ * String, a Float, an Integer...)
+ * + RefSpecAttribute which enable two things
+ * ++ a reference to another object of the application context
+ * ++ the display of some choices among which the end user can choose.
+ *
+ * @see org.argeo.slc.core.execution.PrimitiveSpecAttribute
+ * @see org.argeo.slc.core.execution.RefSpecAttribute
+ * @see org.argeo.slc.core.execution.PrimitiveUtils : this class offers some
+ * helper, among others to cast the various type of primitive attribute.
+ */
+public interface ExecutionSpecAttribute {
+ /**
+ * Whether this attribute has to be set at instantiation of the flow and
+ * cannot be modified afterwards. If the attribute is not immutable (that
+ * is, this method returns false), it can be set at execution time.
+ */
+ public Boolean getIsImmutable();
+
+ /**
+ * Whether this attribute must be explicitly set and cannot be modified.
+ * This attribute is then basically a constant within a given application
+ * context. {@link #getValue()} cannot return null if the attribute is a
+ * constant.
+ */
+ public Boolean getIsConstant();
+
+ /** Whether this attribute will be hidden to end users. */
+ public Boolean getIsHidden();
+
+ /**
+ * The default value for this attribute. Can be null, except if
+ * {@link #getIsFrozen()} is true
, in which case it represents
+ * the constant value of this attribute.
+ */
+ public Object getValue();
+
+ /** Description of this attribute, can be null */
+ public String getDescription();
+
+ /** @deprecated use {@link #getIsImmutable()} instead */
+ public Boolean getIsParameter();
+
+ /** @deprecated use {@link #getIsConstant()} instead */
+ public Boolean getIsFrozen();
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStack.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStack.java
new file mode 100644
index 000000000..468a04a48
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStack.java
@@ -0,0 +1,23 @@
+package org.argeo.api.slc.execution;
+
+/** Deal with nested level of executions using different variables. */
+public interface ExecutionStack {
+ /**
+ * @param name
+ * @return null if no object is found
+ */
+ public Object findScopedObject(String name);
+
+ public void addScopedObject(String name, Object obj);
+
+ public void enterFlow(ExecutionFlow executionFlow);
+
+ /** @return internal stack level UUID. */
+ public String getCurrentStackLevelUuid();
+
+ public Integer getStackSize();
+
+ public void leaveFlow(ExecutionFlow executionFlow);
+
+ Object findLocalVariable(String key);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStackLevel.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStackLevel.java
new file mode 100644
index 000000000..5fb875ed7
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStackLevel.java
@@ -0,0 +1,14 @@
+package org.argeo.api.slc.execution;
+
+import java.util.Map;
+
+public interface ExecutionStackLevel {
+ public ExecutionFlow getExecutionFlow();
+
+ public Map getScopedObjects();
+
+ public String getUuid();
+
+ public Map getLocalVariables();
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStep.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStep.java
new file mode 100644
index 000000000..b536fe1ad
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionStep.java
@@ -0,0 +1,96 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * An atomic step to be notified in during an {@link ExecutionProcess}. Can be a
+ * log or the start/end of a phase, etc.
+ */
+public class ExecutionStep implements Serializable {
+ private static final long serialVersionUID = 798640526532912161L;
+
+ public final static String PHASE_START = "PHASE_START";
+ public final static String PHASE_END = "PHASE_END";
+ public final static String ERROR = "ERROR";
+ public final static String WARNING = "WARNING";
+ public final static String INFO = "INFO";
+ public final static String DEBUG = "DEBUG";
+ public final static String TRACE = "TRACE";
+
+ /** @deprecated */
+ public final static String START = "START";
+ /** @deprecated */
+ public final static String END = "END";
+
+ // TODO make the fields final and private when we don't need POJO support
+ // anymore (that
+ // is when SlcExecutionStep is removed)
+ protected String type;
+ protected String thread;
+ protected Date timestamp;
+ protected String log;
+
+ private String location;
+
+ /** Empty constructor */
+ public ExecutionStep() {
+ Thread currentThread = Thread.currentThread();
+ thread = currentThread.getName();
+ }
+
+ /** Creates a step at the current date */
+ public ExecutionStep(String location, String type, String log) {
+ this(location, new Date(), type, log);
+ }
+
+ /** Creates a step of the given type. */
+ public ExecutionStep(String location, Date timestamp, String type,
+ String log) {
+ this(location, timestamp, type, log, Thread.currentThread().getName());
+ }
+
+ public ExecutionStep(String location, Date timestamp, String type,
+ String log, String thread) {
+ this.location = location;
+ this.type = type;
+ this.timestamp = timestamp;
+ this.thread = thread;
+ this.log = addLog(log);
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public Date getTimestamp() {
+ return timestamp;
+ }
+
+ public String getThread() {
+ return thread;
+ }
+
+ /**
+ * Return the string that should be stored in the log field. Can be null if
+ * another mechanism is used to store log lines.
+ */
+ protected String addLog(String log) {
+ return log;
+ }
+
+ public String getLog() {
+ return log;
+ }
+
+ @Override
+ public String toString() {
+ return "Execution step, thread=" + thread + ", type=" + type;
+ }
+
+ /** Typically the logging category */
+ public String getLocation() {
+ return location;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/FlowConfigurationException.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/FlowConfigurationException.java
new file mode 100644
index 000000000..ddc95d64a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/FlowConfigurationException.java
@@ -0,0 +1,12 @@
+package org.argeo.api.slc.execution;
+
+import org.argeo.api.slc.SlcException;
+
+/** The stack trace of such exceptions does not need to be displayed */
+public class FlowConfigurationException extends SlcException {
+ private static final long serialVersionUID = 8456260596346797321L;
+
+ public FlowConfigurationException(String message) {
+ super(message);
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/RealizedFlow.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RealizedFlow.java
new file mode 100644
index 000000000..202a1a422
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RealizedFlow.java
@@ -0,0 +1,71 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.argeo.api.slc.DefaultNameVersion;
+import org.argeo.api.slc.NameVersion;
+
+/** A fully configured execution flow, ready to be executed. */
+public class RealizedFlow implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String moduleName;
+ private String moduleVersion;
+ private ExecutionFlowDescriptor flowDescriptor;
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public NameVersion getModuleNameVersion() {
+ return new DefaultNameVersion(getModuleName(), getModuleVersion());
+ }
+
+ public String getModuleVersion() {
+ return moduleVersion;
+ }
+
+ public void setModuleVersion(String moduleVersion) {
+ this.moduleVersion = moduleVersion;
+ }
+
+ public ExecutionFlowDescriptor getFlowDescriptor() {
+ return flowDescriptor;
+ }
+
+ public void setFlowDescriptor(ExecutionFlowDescriptor flowDescriptor) {
+ this.flowDescriptor = flowDescriptor;
+ }
+
+ /** Create a simple realized flow */
+ public static RealizedFlow create(String module, String version,
+ String flowName, Map args) {
+ final RealizedFlow realizedFlow = new RealizedFlow();
+ realizedFlow.setModuleName(module);
+ // TODO deal with version
+ if (version == null)
+ version = "0.0.0";
+ realizedFlow.setModuleVersion(version);
+ ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor();
+ efd.setName(flowName);
+
+ // arguments
+ if (args != null && args.size() > 0) {
+ Map values = new HashMap();
+ for (String key : args.keySet()) {
+ String value = args.get(key);
+ values.put(key, value);
+ }
+ efd.setValues(values);
+ }
+
+ realizedFlow.setFlowDescriptor(efd);
+ return realizedFlow;
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefSpecAttribute.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefSpecAttribute.java
new file mode 100644
index 000000000..8096504cb
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefSpecAttribute.java
@@ -0,0 +1,62 @@
+package org.argeo.api.slc.execution;
+
+import java.util.List;
+
+/** A spec attribute whose value is a reference to a full fledged object. */
+public class RefSpecAttribute extends AbstractSpecAttribute implements
+ Cloneable {
+ private static final long serialVersionUID = -3427797452955753574L;
+ private transient Class> targetClass = String.class;
+ /** Read only. */
+ private String targetClassName;
+ private transient Object value = null;
+
+ /** List to be chosen from */
+ private List choices = null;
+
+ public Object getValue() {
+ return value;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ /** Default is {@link String} */
+ public Class> getTargetClass() {
+ return targetClass;
+ }
+
+ public void setTargetClass(Class> targetClass) {
+ this.targetClass = targetClass;
+ this.targetClassName = targetClass.getName();
+ }
+
+ public String getTargetClassName() {
+ return targetClassName;
+ }
+
+ /** @return can be null */
+ public List getChoices() {
+ return choices;
+ }
+
+ public void setChoices(List choices) {
+ this.choices = choices;
+ }
+
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ RefSpecAttribute rsa = new RefSpecAttribute();
+ rsa.setTargetClass(targetClass);
+ rsa.setChoices(choices);
+ return rsa;
+ }
+
+ @Override
+ public String toString() {
+ return "Ref spec attribute [" + targetClass + "]"
+ + (value != null ? "=" + value : "");
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValue.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValue.java
new file mode 100644
index 000000000..69109ce56
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValue.java
@@ -0,0 +1,38 @@
+package org.argeo.api.slc.execution;
+
+/** Reference value to be used by an execution */
+public class RefValue extends AbstractExecutionValue {
+ private static final long serialVersionUID = -8951231456757181687L;
+ private String ref;
+ private String type;
+
+ public RefValue() {
+ }
+
+ public RefValue(String ref) {
+ super();
+ this.ref = ref;
+ }
+
+ public String getRef() {
+ return ref;
+ }
+
+ public void setRef(String ref) {
+ this.ref = ref;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @Override
+ public String toString() {
+ return "Ref Value [" + type + "=" + ref + "]";
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValueChoice.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValueChoice.java
new file mode 100644
index 000000000..5d98a2417
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefValueChoice.java
@@ -0,0 +1,35 @@
+package org.argeo.api.slc.execution;
+
+import java.io.Serializable;
+
+/** A choice of ref value to be shown to the end user. */
+public class RefValueChoice implements Serializable {
+ private static final long serialVersionUID = -1133645722307507774L;
+ private String name;
+ private String description;
+
+ public RefValueChoice() {
+ }
+
+ public RefValueChoice(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgent.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgent.java
new file mode 100644
index 000000000..ff7161b38
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgent.java
@@ -0,0 +1,51 @@
+package org.argeo.api.slc.execution;
+
+import java.net.URI;
+import java.util.List;
+
+/**
+ * A local agent can run SLC processes. It is responsible for creating their
+ * threads and integrating them with various UIs. It typically wraps
+ * {@link ExecutionModulesManager} which is used to run flows synchronously at a
+ * lower level.
+ */
+public interface SlcAgent {
+ /** Agent unique identifier */
+ public String getAgentUuid();
+
+ /** Execute / take part to this process */
+ public void process(ExecutionProcess process);
+
+ /**
+ * Asynchronously processes the flows defined as URIs, or interpret a single
+ * UUID URN as a scheduled or template process.
+ *
+ * @return the UUID of the process launched.
+ */
+ public String process(List uris);
+
+ /** Kills this process */
+ public void kill(String processUuid);
+
+ /**
+ * Wait for this process to finish. returns immediately if it does not
+ * exist.
+ *
+ * @param millis
+ * can be null
+ */
+ public void waitFor(String processUuid, Long millis);
+
+ /**
+ * Describe all the flows provided by this execution module. Typically
+ * called in order to build a realized flow.
+ */
+ public ExecutionModuleDescriptor getExecutionModuleDescriptor(
+ String moduleName, String version);
+
+ /** List all execution modules which can be processed by this agent. */
+ public List listExecutionModuleDescriptors();
+
+ /** @return true if still alive. */
+ public boolean ping();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgentCli.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgentCli.java
new file mode 100644
index 000000000..e128dd79e
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/SlcAgentCli.java
@@ -0,0 +1,14 @@
+package org.argeo.api.slc.execution;
+
+/**
+ * Interpret a command line and run it in the underlying agent, with the proper
+ * authentication.
+ */
+public interface SlcAgentCli {
+ /**
+ * Synchronously executes.
+ *
+ * @return the UUID of the process
+ */
+ public String process(String[] args);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/package.html b/org.argeo.api.slc/src/org/argeo/api/slc/package.html
new file mode 100644
index 000000000..db808c822
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/package.html
@@ -0,0 +1,6 @@
+
+
+
+Common classes of teh SLC framework.
+
+
\ No newline at end of file
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveAccessor.java b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveAccessor.java
new file mode 100644
index 000000000..9b8880f71
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveAccessor.java
@@ -0,0 +1,22 @@
+package org.argeo.api.slc.primitive;
+
+/** Abstraction of access to primitive values */
+public interface PrimitiveAccessor {
+ public final static String TYPE_STRING = "string";
+ /**
+ * As of Argeo 1, passwords are NOT stored encrypted, just hidden in the UI,
+ * but stored in plain text in JCR. Use keyring instead.
+ */
+ public final static String TYPE_PASSWORD = "password";
+ public final static String TYPE_INTEGER = "integer";
+ public final static String TYPE_LONG = "long";
+ public final static String TYPE_FLOAT = "float";
+ public final static String TYPE_DOUBLE = "double";
+ public final static String TYPE_BOOLEAN = "boolean";
+
+ public String getType();
+
+ public Object getValue();
+
+ public void setValue(Object value);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveSpecAttribute.java b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveSpecAttribute.java
new file mode 100644
index 000000000..404b5f86f
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveSpecAttribute.java
@@ -0,0 +1,51 @@
+package org.argeo.api.slc.primitive;
+
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.AbstractSpecAttribute;
+
+/**
+ * A spec attribute wrapping a primitive value.
+ *
+ * @see PrimitiveAccessor
+ */
+public class PrimitiveSpecAttribute extends AbstractSpecAttribute implements
+ PrimitiveAccessor {
+ private static final long serialVersionUID = -566676381839825483L;
+ private String type = "string";
+ private Object value = null;
+
+ public PrimitiveSpecAttribute() {
+ }
+
+ public PrimitiveSpecAttribute(String type, Object value) {
+ this.type = type;
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ // check whether type is recognized.
+ if (PrimitiveUtils.typeAsClass(type) == null)
+ throw new SlcException("Unrecognized type " + type);
+ this.type = type;
+
+ }
+
+ @Override
+ public String toString() {
+ return "Primitive spec attribute [" + type + "]"
+ + (value != null ? "=" + value : "");
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveUtils.java b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveUtils.java
new file mode 100644
index 000000000..bc8445d16
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveUtils.java
@@ -0,0 +1,95 @@
+package org.argeo.api.slc.primitive;
+
+/** Converts to and from primitive types. */
+public class PrimitiveUtils {
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_STRING} instead
+ */
+ public final static String TYPE_STRING = PrimitiveAccessor.TYPE_STRING;
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_INTEGER} instead
+ */
+ public final static String TYPE_INTEGER = PrimitiveAccessor.TYPE_INTEGER;
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_LONG} instead
+ */
+ public final static String TYPE_LONG = PrimitiveAccessor.TYPE_LONG;
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_FLOAT} instead
+ */
+ public final static String TYPE_FLOAT = PrimitiveAccessor.TYPE_FLOAT;
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_DOUBLE} instead
+ */
+ public final static String TYPE_DOUBLE = PrimitiveAccessor.TYPE_DOUBLE;
+ /**
+ * @deprecated Use {@link PrimitiveAccessor#TYPE_BOOLEAN} instead
+ */
+ public final static String TYPE_BOOLEAN = PrimitiveAccessor.TYPE_BOOLEAN;
+
+ private PrimitiveUtils() {
+
+ }
+
+ /** @return the class or null if the provided type is not a primitive */
+ public static Class> typeAsClass(String type) {
+ if (PrimitiveAccessor.TYPE_STRING.equals(type))
+ return String.class;
+ else if (PrimitiveAccessor.TYPE_PASSWORD.equals(type))
+ return char[].class;
+ else if (PrimitiveAccessor.TYPE_INTEGER.equals(type))
+ return Integer.class;
+ else if (PrimitiveAccessor.TYPE_LONG.equals(type))
+ return Long.class;
+ else if (PrimitiveAccessor.TYPE_FLOAT.equals(type))
+ return Float.class;
+ else if (PrimitiveAccessor.TYPE_DOUBLE.equals(type))
+ return Double.class;
+ else if (PrimitiveAccessor.TYPE_BOOLEAN.equals(type))
+ return Boolean.class;
+ else
+ return null;
+ }
+
+ /** @return the type or null if the provided class is not a primitive */
+ public static String classAsType(Class> clss) {
+ if (String.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_STRING;
+ else if (char[].class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_PASSWORD;
+ else if (Integer.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_INTEGER;
+ else if (Long.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_LONG;
+ else if (Float.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_FLOAT;
+ else if (Double.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_DOUBLE;
+ else if (Boolean.class.isAssignableFrom(clss))
+ return PrimitiveAccessor.TYPE_BOOLEAN;
+ else
+ return null;
+ }
+
+ /** Parse string as an object. Passwords are returned as String.*/
+ public static Object convert(String type, String str) {
+ if (PrimitiveAccessor.TYPE_STRING.equals(type)) {
+ return str;
+ } else if (PrimitiveAccessor.TYPE_PASSWORD.equals(type)) {
+ return str;
+ } else if (PrimitiveAccessor.TYPE_INTEGER.equals(type)) {
+ return (Integer.parseInt(str));
+ } else if (PrimitiveAccessor.TYPE_LONG.equals(type)) {
+ return (Long.parseLong(str));
+ } else if (PrimitiveAccessor.TYPE_FLOAT.equals(type)) {
+ return (Float.parseFloat(str));
+ } else if (PrimitiveAccessor.TYPE_DOUBLE.equals(type)) {
+ return (Double.parseDouble(str));
+ } else if (PrimitiveAccessor.TYPE_BOOLEAN.equals(type)) {
+ return (Boolean.parseBoolean(str));
+ } else {
+ return str;
+ }
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveValue.java b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveValue.java
new file mode 100644
index 000000000..136eaf7a1
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/primitive/PrimitiveValue.java
@@ -0,0 +1,39 @@
+package org.argeo.api.slc.primitive;
+
+import org.argeo.api.slc.execution.AbstractExecutionValue;
+
+/** Primitive value to be used by an execution. */
+public class PrimitiveValue extends AbstractExecutionValue implements
+ PrimitiveAccessor {
+ private static final long serialVersionUID = 533414290998374166L;
+
+ private String type;
+
+ private Object value;
+
+ public PrimitiveValue() {
+ }
+
+ public PrimitiveValue(String type, Object value) {
+ super();
+ this.type = type;
+ this.value = value;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/ExecutableTestRun.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/ExecutableTestRun.java
new file mode 100644
index 000000000..49f8098e6
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/ExecutableTestRun.java
@@ -0,0 +1,7 @@
+package org.argeo.api.slc.test;
+
+
+/** A test run that can be executed */
+public interface ExecutableTestRun extends TestRun, Runnable {
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/IncompatibleTestDataException.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/IncompatibleTestDataException.java
new file mode 100644
index 000000000..fdced669d
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/IncompatibleTestDataException.java
@@ -0,0 +1,24 @@
+package org.argeo.api.slc.test;
+
+import org.argeo.api.slc.SlcException;
+
+/**
+ * Exception to throw when a test definition cannot interpret the provided test
+ * data.
+ */
+public class IncompatibleTestDataException extends SlcException {
+ static final long serialVersionUID = 1l;
+
+ public IncompatibleTestDataException(TestData testData,
+ TestDefinition testDefinition) {
+ super("TestData " + testData.getClass()
+ + " is not compatible with TestDefinition "
+ + testDefinition.getClass());
+ }
+
+ public IncompatibleTestDataException(TestRun testRun) {
+ super("TestData " + ((TestData) testRun.getTestData()).getClass()
+ + " is not compatible with TestDefinition "
+ + ((TestDefinition) testRun.getTestDefinition()).getClass());
+ }
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestData.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestData.java
new file mode 100644
index 000000000..9be3253e8
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestData.java
@@ -0,0 +1,9 @@
+package org.argeo.api.slc.test;
+
+/**
+ * Any data required by a test in order to run: configuration, expected,
+ * reached, etc.
+ */
+public interface TestData {
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDataProvider.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDataProvider.java
new file mode 100644
index 000000000..4a8202f91
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDataProvider.java
@@ -0,0 +1,5 @@
+package org.argeo.api.slc.test;
+
+public interface TestDataProvider {
+ public T getTestData(Class clss, String key);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDefinition.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDefinition.java
new file mode 100644
index 000000000..729201ac7
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestDefinition.java
@@ -0,0 +1,10 @@
+package org.argeo.api.slc.test;
+
+/**
+ * The programmatic definition of a test, which will be associated with
+ * transient objects within a test run.
+ */
+public interface TestDefinition extends TestStatus {
+ /** Performs the test. */
+ public void execute(TestRun testRun);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResult.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResult.java
new file mode 100644
index 000000000..76e9b7efa
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResult.java
@@ -0,0 +1,27 @@
+package org.argeo.api.slc.test;
+
+import java.util.Date;
+import java.util.Map;
+
+/** The result of a test */
+public interface TestResult extends TestStatus, TestRunAware {
+ public String getUuid();
+
+ /** Adds a part of the result. */
+ public void addResultPart(TestResultPart part);
+
+ /**
+ * Marks that the collection of test results is completed and free the
+ * related resources (also closing listeners).
+ */
+ public void close();
+
+ /**
+ * The date when this test result was closed. Can be null, which means the
+ * result is not closed.
+ */
+ public Date getCloseDate();
+
+ /** Additional arbitrary meta data */
+ public Map getAttributes();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultListener.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultListener.java
new file mode 100644
index 000000000..5bce3cf0a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultListener.java
@@ -0,0 +1,10 @@
+package org.argeo.api.slc.test;
+
+/** Listener to the operations on a test result. */
+public interface TestResultListener {
+ /** Notified when a part was added to a test result. */
+ public void resultPartAdded(T testResult, TestResultPart testResultPart);
+
+ /** Stops listening and release the related resources. */
+ public void close(T testResult);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultPart.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultPart.java
new file mode 100644
index 000000000..f8d25779a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestResultPart.java
@@ -0,0 +1,17 @@
+package org.argeo.api.slc.test;
+
+/**
+ * Part of a test result.
+ *
+ * @see TestResult
+ */
+public interface TestResultPart {
+ /** The status, as defined in {@link TestStatus}. */
+ public Integer getStatus();
+
+ /** The related message. */
+ public String getMessage();
+
+ /** The underlying Exception
. Can be null. */
+ public String getExceptionMessage();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRun.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRun.java
new file mode 100644
index 000000000..f0d3b98ad
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRun.java
@@ -0,0 +1,21 @@
+package org.argeo.api.slc.test;
+
+import org.argeo.api.slc.deploy.DeployedSystem;
+
+/** The actual run of a test */
+public interface TestRun {
+ /** Gets UUID */
+ public String getUuid();
+
+ /** Gets the related test definition. */
+ public T getTestDefinition();
+
+ /** Gets the related test data */
+ public T getTestData();
+
+ /** Gets the related deployed system. */
+ public T getDeployedSystem();
+
+ /** Gets the related result where to record results. */
+ public T getTestResult();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRunAware.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRunAware.java
new file mode 100644
index 000000000..77479f4cb
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestRunAware.java
@@ -0,0 +1,8 @@
+package org.argeo.api.slc.test;
+
+/** Allows a test run to notify other objects. */
+public interface TestRunAware {
+ /** Notifies the current test run. */
+ public void notifyTestRun(TestRun testRun);
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/TestStatus.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestStatus.java
new file mode 100644
index 000000000..763c5b4dc
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/TestStatus.java
@@ -0,0 +1,31 @@
+package org.argeo.api.slc.test;
+
+/**
+ * Simple statuses. Ordering of the flags can be relied upon in aggregation: if
+ * one element is failed, the aggregation is failed. Is one element is in ERROR,
+ * the aggregation is in ERROR.
+ *
+ *
+ * - {@link #PASSED}: the test succeeded
+ * - {@link #FAILED}: the test could run, but did not reach the expected
+ * result
+ * - {@link #ERROR}: an error during the test run prevented to get a
+ * significant information on the tested system.
+ *
+ *
+ */
+public interface TestStatus {
+ /** The flag for a passed test: 0 */
+ public final static Integer PASSED = 0;
+ /** The flag for a failed test: 1 */
+ public final static Integer FAILED = 1;
+ /**
+ * The flag for a test which could not properly run because of an error
+ * (there is no feedback on the behavior of the tested component): 2
+ */
+ public final static Integer ERROR = 2;
+ public final static String STATUSSTR_PASSED = "PASSED";
+ public final static String STATUSSTR_FAILED = "FAILED";
+ public final static String STATUSSTR_ERROR = "ERROR";
+
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/WritableTestRun.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/WritableTestRun.java
new file mode 100644
index 000000000..b4bc8a38f
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/WritableTestRun.java
@@ -0,0 +1,14 @@
+package org.argeo.api.slc.test;
+
+import org.argeo.api.slc.deploy.DeployedSystem;
+
+/** Test run whose various components can be externally set. */
+public interface WritableTestRun extends ExecutableTestRun {
+ public void setDeployedSystem(DeployedSystem deployedSystem);
+
+ public void setTestData(TestData testData);
+
+ public void setTestDefinition(TestDefinition testDefinition);
+
+ public void setTestResult(TestResult testResult);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ContextAware.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ContextAware.java
new file mode 100644
index 000000000..44eeb38a8
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ContextAware.java
@@ -0,0 +1,22 @@
+package org.argeo.api.slc.test.context;
+
+import java.util.Map;
+
+/** Access to an SLC test context that is, maps of reached and expected values. */
+public interface ContextAware {
+ public final static String DEFAULT_SKIP_FLAG = "!";
+ public final static String DEFAULT_ANY_FLAG = "*";
+
+ /** Retrieves reached values. */
+ public Map getValues();
+
+ /** Set reached values. */
+ public void setValues(Map values);
+
+ /** Retrieves expected values. */
+ public Map getExpectedValues();
+
+ public String getContextSkipFlag();
+
+ public String getContextAnyFlag();
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ParentContextAware.java b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ParentContextAware.java
new file mode 100644
index 000000000..21397267a
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/ParentContextAware.java
@@ -0,0 +1,9 @@
+package org.argeo.api.slc.test.context;
+
+import java.util.Collection;
+
+public interface ParentContextAware extends ContextAware {
+ public Collection getChildContexts();
+
+ public void addChildContext(ContextAware contextAware);
+}
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/context/package.html b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/package.html
new file mode 100644
index 000000000..cd08d63f3
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/context/package.html
@@ -0,0 +1,6 @@
+
+
+
+Context variables to be passed between parts of tests.
+
+
\ No newline at end of file
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/test/package.html b/org.argeo.api.slc/src/org/argeo/api/slc/test/package.html
new file mode 100644
index 000000000..c70d2d151
--- /dev/null
+++ b/org.argeo.api.slc/src/org/argeo/api/slc/test/package.html
@@ -0,0 +1,6 @@
+
+
+
+SLC Test: test of software systems.
+
+
\ No newline at end of file
diff --git a/org.argeo.rt.cms/.project b/org.argeo.rt.cms/.project
new file mode 100644
index 000000000..cec581265
--- /dev/null
+++ b/org.argeo.rt.cms/.project
@@ -0,0 +1,22 @@
+
+
+ org.argeo.rt.cms
+
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+
+
diff --git a/org.argeo.rt.cms/.settings/org.eclipse.pde.core.prefs b/org.argeo.rt.cms/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 000000000..f29e940a0
--- /dev/null
+++ b/org.argeo.rt.cms/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.argeo.rt.cms/bnd.bnd b/org.argeo.rt.cms/bnd.bnd
new file mode 100644
index 000000000..d1ce58d93
--- /dev/null
+++ b/org.argeo.rt.cms/bnd.bnd
@@ -0,0 +1,11 @@
+Bundle-Activator: org.argeo.init.osgi.SubFrameworkActivator
+
+#Import-Package:\
+#org.eclipse.osgi.launch;resolution:=optional,\
+#*
+
+#org.argeo.api.cms,\
+#org.argeo.api.cms.directory,\
+#org.argeo.api.cms.keyring,\
+#org.argeo.api.cms.transaction,\
+#org.argeo.api.cms.ux,\
diff --git a/org.argeo.rt.cms/build.properties b/org.argeo.rt.cms/build.properties
new file mode 100644
index 000000000..34d2e4d2d
--- /dev/null
+++ b/org.argeo.rt.cms/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.argeo.rt.cms/config.ini b/org.argeo.rt.cms/config.ini
new file mode 100644
index 000000000..94ccd5b68
--- /dev/null
+++ b/org.argeo.rt.cms/config.ini
@@ -0,0 +1,69 @@
+argeo.osgi.sources=\
+a2+reference:///\
+?osgi=equinox\
+&crypto=fips\
+&swt=rap\
+&exclude=org.argeo.tp\
+&exclude=org.argeo.tp.sys\
+&exclude=org.argeo.tp.httpd\
+&exclude=org.argeo.tp.sshd\
+
+argeo.http.port=7070
+argeo.ssh.port=2222
+
+argeo.osgi.start.2=\
+org.eclipse.equinox.http.servlet,\
+org.apache.felix.scr,\
+org.eclipse.equinox.console,\
+org.eclipse.rap.rwt.osgi,\
+
+argeo.osgi.start.3=\
+org.argeo.cms,\
+org.argeo.cms.ee,\
+org.argeo.cms.lib.sshd,\
+org.argeo.cms.lib.equinox,\
+org.argeo.cms.lib.jetty,\
+org.argeo.cms.swt.rap,\
+
+argeo.osgi.start.4=\
+org.argeo.cms.jcr
+
+argeo.osgi.start.5=\
+org.argeo.app.profile.acr.fs,\
+org.argeo.app.core,\
+org.argeo.app.jcr,\
+org.argeo.app.ui,\
+org.argeo.app.theme.default,\
+org.argeo.app.geo,\
+
+
+osgi.clean=true
+
+org.osgi.framework.system.packages.extra=\
+com.sun.jna,\
+com.sun.jna.internal,\
+com.sun.jna.ptr,\
+com.sun.jna.win32,\
+org.eclipse.angus.mail.mbox,\
+org.apache.tomcat.jni,\
+sun.security.util,\
+sun.security.internal.spec,\
+sun.security.provider,\
+sun.awt.X11,\
+com.sun.net.httpserver,\
+com.sun.jndi.ldap,\
+com.sun.jndi.ldap.sasl,\
+com.sun.jndi.dns,\
+com.sun.security.jgss,\
+com.sun.nio.file,\
+com.sun.nio.sctp
+
+## Launch context
+osgi.framework.useSystemProperties=false
+osgi.frameworkParentClassloader=app
+osgi.parentClassLoader=app
+osgi.contextClassLoaderParent=app
+
+# Disable Equinox Jetty autostart
+org.eclipse.equinox.http.jetty.autostart=false
+
diff --git a/org.argeo.rt.cms/src/.gitignore b/org.argeo.rt.cms/src/.gitignore
new file mode 100644
index 000000000..e69de29bb
diff --git a/org.argeo.slc.api/.classpath b/org.argeo.slc.api/.classpath
deleted file mode 100644
index d499d3059..000000000
--- a/org.argeo.slc.api/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/org.argeo.slc.api/.gitignore b/org.argeo.slc.api/.gitignore
deleted file mode 100644
index b83d22266..000000000
--- a/org.argeo.slc.api/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target/
diff --git a/org.argeo.slc.api/.project b/org.argeo.slc.api/.project
deleted file mode 100644
index 301fef6e1..000000000
--- a/org.argeo.slc.api/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- org.argeo.slc.api
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.pde.ManifestBuilder
-
-
-
-
- org.eclipse.pde.SchemaBuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.pde.PluginNature
-
-
diff --git a/org.argeo.slc.api/META-INF/.gitignore b/org.argeo.slc.api/META-INF/.gitignore
deleted file mode 100644
index 4854a41b9..000000000
--- a/org.argeo.slc.api/META-INF/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/MANIFEST.MF
diff --git a/org.argeo.slc.api/bnd.bnd b/org.argeo.slc.api/bnd.bnd
deleted file mode 100644
index e69de29bb..000000000
diff --git a/org.argeo.slc.api/build.properties b/org.argeo.slc.api/build.properties
deleted file mode 100644
index 07891d987..000000000
--- a/org.argeo.slc.api/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-bin.includes = META-INF/,.
-source..=src/
diff --git a/org.argeo.slc.api/src/org/argeo/slc/BasicNameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/BasicNameVersion.java
deleted file mode 100644
index 61ed5eb12..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/BasicNameVersion.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.argeo.slc;
-
-import java.io.Serializable;
-
-/** @deprecated use {@link DefaultNameVersion} instead. */
-@Deprecated
-public class BasicNameVersion extends DefaultNameVersion implements
- Serializable {
- private static final long serialVersionUID = -5127304279136195127L;
-
- public BasicNameVersion() {
- }
-
- /** Interprets string in OSGi-like format my.module.name;version=0.0.0 */
- public BasicNameVersion(String nameVersion) {
- int index = nameVersion.indexOf(";version=");
- if (index < 0) {
- setName(nameVersion);
- setVersion(null);
- } else {
- setName(nameVersion.substring(0, index));
- setVersion(nameVersion.substring(index + ";version=".length()));
- }
- }
-
- public BasicNameVersion(String name, String version) {
- super(name, version);
- }
-
- public BasicNameVersion(NameVersion nameVersion) {
- super(nameVersion);
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/CategoryNameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/CategoryNameVersion.java
deleted file mode 100644
index b335996dd..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/CategoryNameVersion.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.argeo.slc;
-
-/**
- * Adds a dimension to {@link NameVersion} by adding an arbitrary category (e.g.
- * Maven groupId, yum repository ID, etc.)
- */
-public interface CategoryNameVersion extends NameVersion {
- /** The category of the component. */
- String getCategory();
-
- static CategoryNameVersion parseCategoryNameVersion(String str) {
- if (str == null || "".equals(str.trim()))
- throw new IllegalArgumentException("At least one character required.");
- String[] arr = str.trim().split(":");
- if (arr.length > 3)
- throw new IllegalArgumentException(str + " does not respect the [category]:[name]:[version] pattern");
- DefaultCategoryNameVersion res = new DefaultCategoryNameVersion();
- res.setCategory(arr[0]);
- if (arr.length > 1)
- res.setName(arr[1]);
- if (arr.length > 2)
- res.setVersion(arr[2]);
- return res;
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/Condition.java b/org.argeo.slc.api/src/org/argeo/slc/Condition.java
deleted file mode 100644
index f476961f0..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/Condition.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.argeo.slc;
-
-/** Binary check on an arbitrary object. */
-public interface Condition {
- /**
- * Checks the condition.
- *
- * @return true, if the condition is verified, false if not.
- */
- public Boolean check(T obj);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/DefaultCategoryNameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/DefaultCategoryNameVersion.java
deleted file mode 100644
index 6506599a9..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/DefaultCategoryNameVersion.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.argeo.slc;
-
-/** Canonical implementation of {@link CategoryNameVersion} */
-public class DefaultCategoryNameVersion extends DefaultNameVersion implements CategoryNameVersion {
- private String category;
-
- public DefaultCategoryNameVersion() {
- }
-
- public DefaultCategoryNameVersion(String category, String name, String version) {
- super(name, version);
- this.category = category;
- }
-
- public DefaultCategoryNameVersion(String category, NameVersion nameVersion) {
- super(nameVersion);
- this.category = category;
- }
-
- @Override
- public String getCategory() {
- return category;
- }
-
- public void setCategory(String category) {
- this.category = category;
- }
-
- @Override
- public String toString() {
- return category + ":" + super.toString();
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java
deleted file mode 100644
index 61cc66e2a..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.argeo.slc;
-
-
-/** Canonical implementation of {@link NameVersion} */
-public class DefaultNameVersion implements NameVersion,
- Comparable {
- private String name;
- private String version;
-
- public DefaultNameVersion() {
- }
-
- /** Interprets string in OSGi-like format my.module.name;version=0.0.0 */
- public DefaultNameVersion(String nameVersion) {
- int index = nameVersion.indexOf(";version=");
- if (index < 0) {
- setName(nameVersion);
- setVersion(null);
- } else {
- setName(nameVersion.substring(0, index));
- setVersion(nameVersion.substring(index + ";version=".length()));
- }
- }
-
- public DefaultNameVersion(String name, String version) {
- this.name = name;
- this.version = version;
- }
-
- public DefaultNameVersion(NameVersion nameVersion) {
- this.name = nameVersion.getName();
- this.version = nameVersion.getVersion();
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof NameVersion) {
- NameVersion nameVersion = (NameVersion) obj;
- return name.equals(nameVersion.getName())
- && version.equals(nameVersion.getVersion());
- } else
- return false;
- }
-
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- @Override
- public String toString() {
- return name + ":" + version;
- }
-
- public int compareTo(NameVersion o) {
- if (o.getName().equals(name))
- return version.compareTo(o.getVersion());
- else
- return name.compareTo(o.getName());
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/ManifestConstants.java b/org.argeo.slc.api/src/org/argeo/slc/ManifestConstants.java
deleted file mode 100644
index 4f43cdab1..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/ManifestConstants.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.argeo.slc;
-
-public enum ManifestConstants {
- // OSGi
- BUNDLE_SYMBOLICNAME("Bundle-SymbolicName"), //
- BUNDLE_VERSION("Bundle-Version"), //
- BUNDLE_LICENSE("Bundle-License"), //
- EXPORT_PACKAGE("Export-Package"), //
- IMPORT_PACKAGE("Import-Package"), //
- // JAVA
- AUTOMATIC_MODULE_NAME("Automatic-Module-Name"), //
- // SLC
- SLC_CATEGORY("SLC-Category"), //
- SLC_ORIGIN_M2("SLC-Origin-M2"), //
- SLC_ORIGIN_M2_MERGE("SLC-Origin-M2-Merge"), //
- SLC_ORIGIN_M2_REPO("SLC-Origin-M2-Repo"), //
- SLC_ORIGIN_MANIFEST_NOT_MODIFIED("SLC-Origin-ManifestNotModified"), //
- SLC_ORIGIN_URI("SLC-Origin-URI"),//
- ;
-
- final String value;
-
- private ManifestConstants(String value) {
- this.value = value;
- }
-
- @Override
- public String toString() {
- return value;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/ModuleSet.java b/org.argeo.slc.api/src/org/argeo/slc/ModuleSet.java
deleted file mode 100644
index fd125a244..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/ModuleSet.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.slc;
-
-import java.util.Iterator;
-
-/** A set of {@link NameVersion}. */
-public interface ModuleSet {
- Iterator extends NameVersion> nameVersions();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/NameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/NameVersion.java
deleted file mode 100644
index 45ce5835d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/NameVersion.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.argeo.slc;
-
-/**
- * Abstraction of a name / version pair, typically used as coordinates for a
- * software module either deployed or packaged as an archive.
- */
-public interface NameVersion {
- /** The name of the component. */
- String getName();
-
- /** The version of the component. */
- String getVersion();
-
- /**
- * The forward compatible branch of this version, by default it is
- * [major].[minor].
- */
- default String getBranch() {
- String[] parts = getVersion().split("\\.");
- if (parts.length < 2)
- throw new IllegalStateException("Version " + getVersion() + " cannot be interpreted as branch.");
- return parts[0] + "." + parts[1];
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/SlcConstants.java b/org.argeo.slc.api/src/org/argeo/slc/SlcConstants.java
deleted file mode 100644
index 7da9708f3..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/SlcConstants.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.argeo.slc;
-
-/** Constants useful across all SLC components */
-public interface SlcConstants {
- /** Read-write role. */
- public final static String ROLE_SLC = "cn=org.argeo.slc.user,ou=roles,ou=node";
-
- /** Read only unlogged user */
- public final static String USER_ANONYMOUS = "anonymous";
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/SlcException.java b/org.argeo.slc.api/src/org/argeo/slc/SlcException.java
deleted file mode 100644
index d2e5e2b0b..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/SlcException.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.argeo.slc;
-
-/** Basis for all SLC exceptions. This is an unchecked exception. */
-public class SlcException extends RuntimeException {
- private static final long serialVersionUID = 6373738619304106445L;
-
- /** Constructor. */
- public SlcException(String message) {
- super(message);
- }
-
- /** Constructor. */
- public SlcException(String message, Throwable e) {
- super(message, e);
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/SlcNames.java b/org.argeo.slc.api/src/org/argeo/slc/SlcNames.java
deleted file mode 100644
index 557d4792d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/SlcNames.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.argeo.slc;
-
-/** JCR names used by SLC */
-public interface SlcNames {
- public final static String SLC_ = "slc:";
-
- /*
- * GENERAL
- */
- public final static String SLC_UUID = "slc:uuid";
- public final static String SLC_STATUS = "slc:status";
- // generic name for result parts of a given test result (slc:testResult)
- // note that corresponding nodes can be retrieved using
- // myTestResultNode.getNodes(SLC_RESULT_PART+"*") method
- public final static String SLC_RESULT_PART = "slc:resultPart";
- // Fixed name of the child node of a slc:testResult of type
- // slc:check that aggregate status of all result parts of a given test
- // result
- public final static String SLC_AGGREGATED_STATUS = "slc:aggregatedStatus";
-
- public final static String SLC_TYPE = "slc:type";
- public final static String SLC_NAME = "slc:name";
- public final static String SLC_VERSION = "slc:version";
- public final static String SLC_CATEGORY = "slc:category";
- public final static String SLC_VALUE = "slc:value";
- public final static String SLC_ADDRESS = "slc:address";
- public final static String SLC_METADATA = "slc:metadata";
-
- public final static String SLC_TIMESTAMP = "slc:timestamp";
- public final static String SLC_STARTED = "slc:started";
- public final static String SLC_COMPLETED = "slc:completed";
-
- public final static String SLC_VM = "slc:vm";
- /*
- * SLC RUNTIME
- */
- // execution
- public final static String SLC_SPEC = "slc:spec";
- public final static String SLC_EXECUTION_SPECS = "slc:executionSpecs";
- public final static String SLC_FLOW = "slc:flow";
- public final static String SLC_LOG = "slc:log";
- public final static String SLC_AGENTS = "slc:agents";
-
- // spec attribute
- public final static String SLC_IS_IMMUTABLE = "slc:isImmutable";
- public final static String SLC_IS_CONSTANT = "slc:isConstant";
- public final static String SLC_IS_HIDDEN = "slc:isHidden";
-
- // base directories
- public final static String SLC_SYSTEM = "slc:system";
- public final static String SLC_RESULTS = "slc:results";
- public final static String SLC_MY_RESULTS = "slc:myResults";
- public final static String SLC_PROCESSES = "slc:processes";
-
- // result
- public final static String SLC_SUCCESS = "slc:success";
- public final static String SLC_MESSAGE = "slc:message";
- public final static String SLC_TAG = "slc:tag";
- public final static String SLC_ERROR_MESSAGE = "slc:errorMessage";
- public final static String SLC_TEST_CASE = "slc:testCase";
- public final static String SLC_TEST_CASE_TYPE = "slc:testCaseType";
-
- // diff result
- public final static String SLC_SUMMARY = "slc:summary";
- public final static String SLC_ISSUES = "slc:issues";
-
- /*
- * SLC REPO
- */
- // shared
- public final static String SLC_URL = "slc:url";
- public final static String SLC_OPTIONAL = "slc:optional";
- public final static String SLC_AS_STRING = "slc:asString";
-
- // origin
- public final static String SLC_ORIGIN = "slc:origin";
- public final static String SLC_PROXY = "slc:proxy";
-
- // slc:artifact
- public final static String SLC_ARTIFACT_ID = "slc:artifactId";
- public final static String SLC_GROUP_ID = "slc:groupId";
- public final static String SLC_GROUP_BASE_ID = "slc:groupBaseId";
- public final static String SLC_ARTIFACT_VERSION = "slc:artifactVersion";
- public final static String SLC_ARTIFACT_EXTENSION = "slc:artifactExtension";
- public final static String SLC_ARTIFACT_CLASSIFIER = "slc:artifactClassifier";
-
- // slc:jarArtifact
- public final static String SLC_MANIFEST = "slc:manifest";
-
- // shared OSGi
- public final static String SLC_SYMBOLIC_NAME = "slc:symbolic-name";
- public final static String SLC_BUNDLE_VERSION = "slc:bundle-version";
-
- // slc:osgiBaseVersion
- public final static String SLC_MAJOR = "slc:major";
- public final static String SLC_MINOR = "slc:minor";
- public final static String SLC_MICRO = "slc:micro";
- // slc:osgiVersion
- public final static String SLC_QUALIFIER = "slc:qualifier";
-
- // slc:exportedPackage
- public final static String SLC_USES = "slc:uses";
-
- // slc:modularDistribution
- public final static String SLC_MODULES = "slc:modules";
-
- // RPM
- // slc:rpm
- public final static String SLC_RPM_VERSION = "slc:rpmVersion";
- public final static String SLC_RPM_RELEASE = "slc:rpmRelease";
- public final static String SLC_RPM_ARCH = "slc:rpmArch";
- public final static String SLC_RPM_ARCHIVE_SIZE = "slc:rpmArchiveSize";
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/SlcTypes.java b/org.argeo.slc.api/src/org/argeo/slc/SlcTypes.java
deleted file mode 100644
index e0b86e6a6..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/SlcTypes.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.argeo.slc;
-
-/** JCR node types used by SLC */
-public interface SlcTypes {
-
- public final static String SLC_NAME_VERSION = "slc:nameVersion";
- public final static String SLC_CATEGORIZED_NAME_VERSION = "slc:categorizedNameVersion";
-
- public final static String SLC_AGENT_FACTORY = "slc:agentFactory";
- public final static String SLC_AGENT = "slc:agent";
- public final static String SLC_MODULE = "slc:module";
- public final static String SLC_EXECUTION_MODULE = "slc:executionModule";
- public final static String SLC_EXECUTION_SPEC = "slc:executionSpec";
- public final static String SLC_EXECUTION_FLOW = "slc:executionFlow";
- public final static String SLC_PROCESS = "slc:process";
- public final static String SLC_REALIZED_FLOW = "slc:realizedFlow";
-
- public final static String SLC_EXECUTION_SPEC_ATTRIBUTE = "slc:executionSpecAttribute";
- public final static String SLC_PRIMITIVE_SPEC_ATTRIBUTE = "slc:primitiveSpecAttribute";
- public final static String SLC_REF_SPEC_ATTRIBUTE = "slc:refSpecAttribute";
-
- public final static String SLC_TEST_RESULT = "slc:testResult";
- public final static String SLC_CHECK = "slc:check";
- public final static String SLC_PROPERTY = "slc:property";
- public final static String SLC_DIFF_RESULT = "slc:diffResult";
-
- // Node types used for user defined and managed result UI tree
- public final static String SLC_MY_RESULT_ROOT_FOLDER = "slc:myResultRootFolder";
- public final static String SLC_RESULT_FOLDER = "slc:resultFolder";
-
- // Log levels
- public final static String SLC_LOG_ENTRY = "slc:logEntry";
- public final static String SLC_LOG_TRACE = "slc:logTrace";
- public final static String SLC_LOG_DEBUG = "slc:logDebug";
- public final static String SLC_LOG_INFO = "slc:logInfo";
- public final static String SLC_LOG_WARNING = "slc:logWarning";
- public final static String SLC_LOG_ERROR = "slc:logError";
-
- /*
- * REPO
- */
- public final static String SLC_ARTIFACT = "slc:artifact";
- public final static String SLC_ARTIFACT_VERSION_BASE = "slc:artifactVersion";
- public final static String SLC_ARTIFACT_BASE = "slc:artifactBase";
- public final static String SLC_GROUP_BASE = "slc:groupBase";
- public final static String SLC_JAR_FILE = "slc:jarFile";
- public final static String SLC_BUNDLE_ARTIFACT = "slc:bundleArtifact";
- public final static String SLC_OSGI_VERSION = "slc:osgiVersion";
- public final static String SLC_JAVA_PACKAGE = "slc:javaPackage";
- public final static String SLC_EXPORTED_PACKAGE = "slc:exportedPackage";
- public final static String SLC_IMPORTED_PACKAGE = "slc:importedPackage";
- public final static String SLC_DYNAMIC_IMPORTED_PACKAGE = "slc:dynamicImportedPackage";
- public final static String SLC_REQUIRED_BUNDLE = "slc:requiredBundle";
- public final static String SLC_FRAGMENT_HOST = "slc:fragmentHost";
-
- // Distribution management
- // public final static String SLC_CATEGORY = "slc:category";
- public final static String SLC_MODULAR_DISTRIBUTION_BASE = "slc:modularDistributionBase";
- public final static String SLC_MODULAR_DISTRIBUTION = "slc:modularDistribution";
- public final static String SLC_MODULE_COORDINATES = "slc:moduleCoordinates";
-
- // origin
- public final static String SLC_KNOWN_ORIGIN = "slc:knownOrigin";
- public final static String SLC_PROXIED = "slc:proxied";
-
- // rpm
- public final static String SLC_RPM = "slc:rpm";
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/StreamReadable.java b/org.argeo.slc.api/src/org/argeo/slc/StreamReadable.java
deleted file mode 100644
index f1bef22fd..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/StreamReadable.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.argeo.slc;
-
-import java.io.InputStream;
-
-public interface StreamReadable {
- public InputStream getInputStream();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/UnsupportedException.java b/org.argeo.slc.api/src/org/argeo/slc/UnsupportedException.java
deleted file mode 100644
index aa050e30d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/UnsupportedException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.argeo.slc;
-
-/** Exception for unsupported features or actions. */
-public class UnsupportedException extends SlcException {
- static final long serialVersionUID = 1l;
-
- /** Action not supported. */
- public UnsupportedException() {
- this("Action not supported");
- }
-
- /** Constructor with a message. */
- public UnsupportedException(String message) {
- super(message);
- }
-
- /**
- * Constructor generating a message.
- *
- * @param nature
- * the nature of the unsupported object
- * @param obj
- * the object itself (its class name will be used in message)
- */
- public UnsupportedException(String nature, Object obj) {
- super("Unsupported " + nature + ": "
- + (obj != null ? obj.getClass() : "[object is null]"));
- }
-
- /**
- * Constructor generating a message.
- *
- * @param nature
- * the nature of the unsupported object
- * @param clss
- * the class itself (will be used in message)
- */
- public UnsupportedException(String nature, Class> clss) {
- super("Unsupported " + nature + ": " + clss);
- }
-
- /**
- * Constructor generating a message.
- *
- * @param nature
- * the nature of the unsupported object
- * @param value
- * the problematic value itself
- */
- public UnsupportedException(String nature, String value) {
- super("Unsupported " + nature + ": " + value);
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/WellKnownConstants.java b/org.argeo.slc.api/src/org/argeo/slc/WellKnownConstants.java
deleted file mode 100644
index f0ce61445..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/WellKnownConstants.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.argeo.slc;
-
-/**
- * Centralises constant values related to software systems, which are well
- * defined and not expected to change within a major version cycle of SLC, but
- * which are not necessarily defined in core Java.
- */
-public interface WellKnownConstants {
-
- /*
- * OSGi
- */
- final static String OSGI_INSTANCE_AREA = "osgi.instance.area";
- final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area";
-
-// final static String OSGI_HTTP_PORT = "org.osgi.service.http.port";
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/attachment/Attachment.java b/org.argeo.slc.api/src/org/argeo/slc/attachment/Attachment.java
deleted file mode 100644
index 65732511e..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/attachment/Attachment.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.argeo.slc.attachment;
-
-public interface Attachment {
- public String getUuid();
-
- public void setUuid(String uuid);
-
- public String getName();
-
- public String getContentType();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsEnabled.java b/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsEnabled.java
deleted file mode 100644
index 0b44e5b9e..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsEnabled.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.attachment;
-
-public interface AttachmentsEnabled {
- public void addAttachment(Attachment attachment);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsStorage.java b/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsStorage.java
deleted file mode 100644
index 48cd0e650..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/attachment/AttachmentsStorage.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.attachment;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public interface AttachmentsStorage {
- public void retrieveAttachment(Attachment attachment,
- OutputStream outputStream);
-
- /** Does NOT close the provided input stream. */
- public void storeAttachment(Attachment attachment, InputStream inputStream);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/build/Distribution.java b/org.argeo.slc.api/src/org/argeo/slc/build/Distribution.java
deleted file mode 100644
index b438a8f9a..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/build/Distribution.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.argeo.slc.build;
-
-/** A packaged software component */
-public interface Distribution {
- public String getDistributionId();
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/build/License.java b/org.argeo.slc.api/src/org/argeo/slc/build/License.java
deleted file mode 100644
index d115f450b..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/build/License.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.build;
-
-/** A software license */
-public interface License {
- public String getName();
-
- public String getUri();
-
- public String getLink();
-
- public String getText();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/build/ModularDistribution.java b/org.argeo.slc.api/src/org/argeo/slc/build/ModularDistribution.java
deleted file mode 100644
index 3c7f625c1..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/build/ModularDistribution.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.argeo.slc.build;
-
-import org.argeo.slc.ModuleSet;
-import org.argeo.slc.NameVersion;
-
-/**
- * A distribution of modules, that is components that can be identified by a
- * name / version couple.
- *
- * @see NameVersion
- */
-public interface ModularDistribution extends Distribution, NameVersion,
- ModuleSet {
- public Distribution getModuleDistribution(String moduleName,
- String moduleVersion);
-
- /** A descriptor such as P2, OBR or yum metadata. */
- public Object getModulesDescriptor(String descriptorType);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/build/package.html b/org.argeo.slc.api/src/org/argeo/slc/build/package.html
deleted file mode 100644
index 5da205278..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/build/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-SLC Build: building of software systems.
-
-
\ No newline at end of file
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployEnvironment.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployEnvironment.java
deleted file mode 100644
index dd4736929..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployEnvironment.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.argeo.slc.deploy;
-
-import java.io.File;
-import java.util.Map;
-
-public interface DeployEnvironment {
- public void unpackTo(Object packg, File targetLocation,
- Map filter);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystem.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystem.java
deleted file mode 100644
index be28154fe..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystem.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.argeo.slc.deploy;
-
-import org.argeo.slc.build.Distribution;
-
-/** An instance of a software system. */
-public interface DeployedSystem extends TargetData {
- /** Unique ID for this system instance. */
- public String getDeployedSystemId();
-
- /** Underlying packages */
- public Distribution getDistribution();
-
- /** Data required to initialize the instance (e.g. DB dump, etc.). */
- public DeploymentData getDeploymentData();
-
- /** Resources required by the system (ports, disk location, etc.) */
- public TargetData getTargetData();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystemManager.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystemManager.java
deleted file mode 100644
index 411bcb6b9..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeployedSystemManager.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.deploy;
-
-public interface DeployedSystemManager {
- public void setDeployedSystem(T deployedSystem);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/Deployment.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/Deployment.java
deleted file mode 100644
index 74be42ab0..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/Deployment.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.argeo.slc.deploy;
-
-import org.argeo.slc.build.Distribution;
-
-public interface Deployment extends Runnable{
- public DeployedSystem getDeployedSystem();
-
- public void setTargetData(TargetData targetData);
-
- public void setDeploymentData(DeploymentData deploymentData);
-
- public void setDistribution(Distribution distribution);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeploymentData.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/DeploymentData.java
deleted file mode 100644
index 18e63f829..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/DeploymentData.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.deploy;
-
-public interface DeploymentData {
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/DynamicRuntime.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/DynamicRuntime.java
deleted file mode 100644
index ed29ce280..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/DynamicRuntime.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.argeo.slc.deploy;
-
-import org.argeo.slc.NameVersion;
-import org.argeo.slc.build.Distribution;
-
-public interface DynamicRuntime extends
- ModularDeployedSystem {
- public void shutdown();
-
- public M installModule(Distribution distribution);
-
- public void uninstallModule(NameVersion nameVersion);
-
- public void updateModule(NameVersion nameVersion);
-
- public void startModule(NameVersion nameVersion);
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/InstalledExecutables.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/InstalledExecutables.java
deleted file mode 100644
index 2d65a716c..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/InstalledExecutables.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.deploy;
-
-public interface InstalledExecutables extends DeployedSystem {
- public String getExecutablePath(String key);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModularDeployedSystem.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/ModularDeployedSystem.java
deleted file mode 100644
index 18fd4fe6d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModularDeployedSystem.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.slc.deploy;
-
-import java.util.List;
-
-public interface ModularDeployedSystem extends DeployedSystem {
- /** List the underlying deployed modules (in real time) */
- public List listModules();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/Module.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/Module.java
deleted file mode 100644
index 10973c999..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/Module.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.deploy;
-
-import org.argeo.slc.NameVersion;
-
-/**
- * Represents a deployed module of a broader deployed system. A module is
- * uniquely identifiable via a name / version.
- */
-public interface Module extends DeployedSystem, NameVersion {
- /** A serializable stateless description of the module */
- public ModuleDescriptor getModuleDescriptor();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java
deleted file mode 100644
index f1d664283..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.argeo.slc.deploy;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.argeo.slc.DefaultNameVersion;
-
-/** The description of a versioned module. */
-public class ModuleDescriptor extends DefaultNameVersion implements Serializable {
- private static final long serialVersionUID = 4310820315478645419L;
- private String title;
- private String description;
- private Map metadata = new HashMap();
- private Boolean started = false;
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- /** @deprecated use {@link #getTitle()} instead */
- public String getLabel() {
- return title;
- }
-
- /** @deprecated use {@link #setTitle(String)} instead */
- public void setLabel(String label) {
- this.title = label;
- }
-
- public Map getMetadata() {
- return metadata;
- }
-
- public void setMetadata(Map metadata) {
- this.metadata = metadata;
- }
-
- public Boolean getStarted() {
- return started;
- }
-
- public void setStarted(Boolean started) {
- this.started = started;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModulesManager.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/ModulesManager.java
deleted file mode 100644
index 1288592d6..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModulesManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.argeo.slc.deploy;
-
-import java.util.List;
-
-import org.argeo.slc.NameVersion;
-
-/** Provides access to deployed modules */
-public interface ModulesManager {
- /** @return a full fledged module descriptor. */
- public ModuleDescriptor getModuleDescriptor(String moduleName,
- String version);
-
- /**
- * @return a list of minimal module descriptors of the deployed modules
- */
- public List listModules();
-
- /** Synchronously upgrades the module referenced by this name version */
- public void upgrade(NameVersion nameVersion);
-
- /** Starts the module */
- public void start(NameVersion nameVersion);
-
- /** Stops the module */
- public void stop(NameVersion nameVersion);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/TargetData.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/TargetData.java
deleted file mode 100644
index f1c7e7d13..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/TargetData.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.deploy;
-
-public interface TargetData {
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/VersioningDriver.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/VersioningDriver.java
deleted file mode 100644
index dba57970c..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/VersioningDriver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.argeo.slc.deploy;
-
-import java.io.File;
-import java.io.OutputStream;
-import java.util.List;
-
-/** Abstracts common versioning operations */
-public interface VersioningDriver {
- public void getFileFromRepository(String repositoryBaseUrl,
- String location, OutputStream out);
-
- public List getChangedPaths(File repositoryRoot, Long revision);
-
- public String getRepositoryRoot(String repositoryUrl);
-
- public String getRelativePath(String repositoryUrl);
-
- public void updateToHead(File fileOrDir);
-
- public void importFileOrDir(String repositoryUrl, File fileOrDir);
-
- /**
- * Checks out or update this versioned directory
- *
- * @return true if the content has changed, false otherwise
- */
- public Boolean checkout(String repositoryUrl, File destDir,
- Boolean recursive);
-
- public void createRepository(String filePath);
-
- public void commit(File fileOrDir, String commitMessage);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/package.html b/org.argeo.slc.api/src/org/argeo/slc/deploy/package.html
deleted file mode 100644
index f3a4c5bd6..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/deploy/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-SLC Deploy: deployment of software systems.
-
-
\ No newline at end of file
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractExecutionValue.java b/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractExecutionValue.java
deleted file mode 100644
index 7f6362601..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractExecutionValue.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-
-/** Value to be used by an execution */
-public abstract class AbstractExecutionValue implements Serializable {
- private static final long serialVersionUID = 1558444746120706961L;
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractSpecAttribute.java b/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractSpecAttribute.java
deleted file mode 100644
index d720db61e..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/AbstractSpecAttribute.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-
-/** Canonical implementation of the execution spec attribute booleans. */
-public abstract class AbstractSpecAttribute implements ExecutionSpecAttribute,
- Serializable {
- private static final long serialVersionUID = 6494963738891709440L;
- private Boolean isImmutable = false;
- private Boolean isConstant = false;
- private Boolean isHidden = false;
-
- private String description;
-
- /** Has to be set at instantiation */
- public Boolean getIsImmutable() {
- return isImmutable;
- }
-
- public void setIsImmutable(Boolean isImmutable) {
- this.isImmutable = isImmutable;
- }
-
- /** Cannot be overridden at runtime */
- public Boolean getIsConstant() {
- return isConstant;
- }
-
- public void setIsConstant(Boolean isConstant) {
- this.isConstant = isConstant;
- }
-
- /** Should not be shown to the end user */
- public Boolean getIsHidden() {
- return isHidden;
- }
-
- public void setIsHidden(Boolean isHidden) {
- this.isHidden = isHidden;
- }
-
- /*
- * DEPRECATED
- */
- /** @deprecated use {@link #getIsImmutable()} instead */
- public Boolean getIsParameter() {
- return isImmutable;
- }
-
- /** @deprecated use {@link #getIsConstant()} instead */
- public Boolean getIsFrozen() {
- return isConstant;
- }
-
- /** @deprecated use {@link #setIsImmutable(Boolean)} instead */
- public void setIsParameter(Boolean isParameter) {
- this.isImmutable = isParameter;
- }
-
- /** @deprecated use {@link #setIsConstant(Boolean)} instead */
- public void setIsFrozen(Boolean isFrozen) {
- this.isConstant = isFrozen;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getDescription() {
- return description;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionContext.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionContext.java
deleted file mode 100644
index 46c448f41..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionContext.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.argeo.slc.execution;
-
-/** Variables or references attached to an execution (typically thread bounded).*/
-public interface ExecutionContext {
- public final static String VAR_EXECUTION_CONTEXT_ID = "slcVar.executionContext.id";
- public final static String VAR_EXECUTION_CONTEXT_CREATION_DATE = "slcVar.executionContext.creationDate";
- public final static String VAR_FLOW_ID = "slcVar.flow.id";
- public final static String VAR_FLOW_NAME = "slcVar.flow.name";
-
- public String getUuid();
-
- /** @return the variable value, or null
if not found. */
- public Object getVariable(String key);
-
- public void setVariable(String key, Object value);
-
- public void beforeFlow(ExecutionFlow executionFlow);
-
- public void afterFlow(ExecutionFlow executionFlow);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlow.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlow.java
deleted file mode 100644
index 7dd3a74af..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlow.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.Iterator;
-
-/** Abstraction of an execution that can be identified and configured. */
-public interface ExecutionFlow extends Runnable {
- /** Retrieve an immutable parameter */
- public Object getParameter(String key);
-
- /** Whether this immutable parameter is set */
- public Boolean isSetAsParameter(String key);
-
- /** The specifications of the execution flow. */
- public ExecutionSpec getExecutionSpec();
-
- /**
- * List sub-runnables that would be executed if run() method would be
- * called.
- */
- public Iterator runnables();
-
- /**
- * If there is one and only one runnable wrapped return it, throw an
- * exception otherwise.
- */
- public Runnable getRunnable();
-
- /**
- * The name of this execution flow. Can contains '/' which will be
- * interpreted by UIs as a hierarchy;
- */
- public String getName();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptor.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptor.java
deleted file mode 100644
index d38bb8524..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptor.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * Implements both archetype and implementation of a given process.
- *
- * At specification time, executionSpec
represents the spec of the
- * parameters accepted by the process, with, among others: type, default value
- * and, optionally, possible values for each parameter. Thus ExecutionSpec might
- * be a huge object. Note that when marshalling only a reference to a specific
- * ExecutionSpec is stored in the XML to optimize performance and avoid
- * redundancy between various ExecutionFlowDesciptor that might have the same
- * ExecutionSpec.
- *
- * At runtime, we build a RealizedFlow which references an
- * ExecutionFlowDescriptor. As it happens AFTER marshalling / unmarshalling
- * process, the ExecutionSpec is null but we manage to retrieve the
- * ExecutionSpec and store it in the RealizedFlow, whereas set values of the
- * parameters are stored in the values
map.
- *
- * Generally, values object are either a PrimitiveAccessor
or a
- * RefValue
but can be other objects.
- */
-public class ExecutionFlowDescriptor implements Serializable, Cloneable {
- private static final long serialVersionUID = 7101944857038041216L;
- private String name;
- private String description;
- private String path;
- private Map values;
- private ExecutionSpec executionSpec;
-
- public ExecutionFlowDescriptor() {
- }
-
- public ExecutionFlowDescriptor(String name, String description,
- Map values, ExecutionSpec executionSpec) {
- this.name = name;
- this.values = values;
- this.executionSpec = executionSpec;
- }
-
- /** The referenced {@link ExecutionSpec} is NOT cloned. */
- @Override
- protected Object clone() throws CloneNotSupportedException {
- return new ExecutionFlowDescriptor(name, description,
- new HashMap(values), executionSpec);
- }
-
- public String getName() {
- return name;
- }
-
- /**
- * @deprecated will be removed in SLC 2.x, the path should be the part of
- * the name with '/'
- */
- public String getPath() {
- return path;
- }
-
- /**
- * @deprecated will be removed in SLC 2.0, the path should be the part of
- * the name with '/'
- */
- public void setPath(String path) {
- this.path = path;
- }
-
- public Map getValues() {
- return values;
- }
-
- public ExecutionSpec getExecutionSpec() {
- return executionSpec;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValues(Map values) {
- this.values = values;
- }
-
- public void setExecutionSpec(ExecutionSpec executionSpec) {
- this.executionSpec = executionSpec;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof ExecutionFlowDescriptor)
- return name.equals(((ExecutionFlowDescriptor) obj).getName());
- return false;
- }
-
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- @Override
- public String toString() {
- return (path != null && !path.trim().equals("") ? path + "/" : "")
- + name;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptorConverter.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptorConverter.java
deleted file mode 100644
index 13ff63876..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionFlowDescriptorConverter.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.Map;
-
-/**
- * Maps back and forth between {@link ExecutionFlowDescriptor} and
- * {@link ExecutionFlow}
- */
-public interface ExecutionFlowDescriptorConverter {
- public Map convertValues(
- ExecutionFlowDescriptor executionFlowDescriptor);
-
- public void addFlowsToDescriptor(ExecutionModuleDescriptor md,
- Map executionFlows);
-
- public ExecutionFlowDescriptor getExecutionFlowDescriptor(
- ExecutionFlow executionFlow);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModule.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModule.java
deleted file mode 100644
index 11021f60e..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModule.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.execution;
-
-@Deprecated
-public interface ExecutionModule {
-/* public String getName();
-
- public String getVersion();
-
- public ExecutionModuleDescriptor getDescriptor();
-
- public void execute(ExecutionFlowDescriptor descriptor);*/
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModuleDescriptor.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModuleDescriptor.java
deleted file mode 100644
index cad6efb81..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModuleDescriptor.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.argeo.slc.SlcException;
-import org.argeo.slc.deploy.ModuleDescriptor;
-
-/** Describes the information required to launch a flow */
-public class ExecutionModuleDescriptor extends ModuleDescriptor {
- /** Metadata header identifying an SLC execution module */
- public final static String SLC_EXECUTION_MODULE = "SLC-ExecutionModule";
-
- private static final long serialVersionUID = -2394473464513029512L;
- private List executionSpecs = new ArrayList();
- private List executionFlows = new ArrayList();
-
- public List getExecutionSpecs() {
- return executionSpecs;
- }
-
- public List getExecutionFlows() {
- return executionFlows;
- }
-
- /**
- * Returns a new {@link ExecutionModuleDescriptor} that can be used to build
- * a {@link RealizedFlow}.
- */
- public ExecutionFlowDescriptor cloneFlowDescriptor(String name) {
- ExecutionFlowDescriptor res = null;
- for (ExecutionFlowDescriptor efd : executionFlows) {
- if (efd.getName().equals(name)
- || ("/" + efd.getName()).equals(name)) {
- try {
- res = (ExecutionFlowDescriptor) efd.clone();
- } catch (CloneNotSupportedException e) {
- throw new SlcException("Cannot clone " + efd, e);
- }
- }
- }
- if (res == null)
- throw new SlcException("Flow " + name + " not found.");
- return res;
- }
-
- public RealizedFlow asRealizedFlow(String flow, Map values) {
- RealizedFlow realizedFlow = new RealizedFlow();
- realizedFlow.setFlowDescriptor(cloneFlowDescriptor(flow));
- realizedFlow.setModuleName(getName());
- realizedFlow.setModuleVersion(getVersion());
- realizedFlow.getFlowDescriptor().getValues().putAll(values);
- return realizedFlow;
- }
-
- public void setExecutionSpecs(List executionSpecs) {
- this.executionSpecs = executionSpecs;
- }
-
- public void setExecutionFlows(List executionFlows) {
- this.executionFlows = executionFlows;
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesListener.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesListener.java
deleted file mode 100644
index aa0b16df4..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.argeo.slc.execution;
-
-import org.argeo.slc.deploy.ModuleDescriptor;
-
-/** Listen to events on execution modules. */
-public interface ExecutionModulesListener {
- public void executionModuleAdded(ModuleDescriptor moduleDescriptor);
-
- public void executionModuleRemoved(ModuleDescriptor moduleDescriptor);
-
- public void executionFlowAdded(ModuleDescriptor moduleDescriptor,
- ExecutionFlowDescriptor executionFlowDescriptor);
-
- public void executionFlowRemoved(ModuleDescriptor moduleDescriptor,
- ExecutionFlowDescriptor executionFlowDescriptor);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesManager.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesManager.java
deleted file mode 100644
index 1cedd12a2..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionModulesManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.List;
-
-import org.argeo.slc.deploy.ModulesManager;
-
-/** Provides access to the execution modules */
-public interface ExecutionModulesManager extends ModulesManager {
- /** Used to filter event notified to an execution notifier. */
- public static String SLC_PROCESS_ID = "slc.process.id";
-
- /** Unique launch module */
- public static String UNIQUE_LAUNCH_MODULE_PROPERTY = "slc.launch.module";
-
- /** Unique launch flow */
- public static String UNIQUE_LAUNCH_FLOW_PROPERTY = "slc.launch.flow";
-
- /** @return a full fledged module descriptor. */
- public ExecutionModuleDescriptor getExecutionModuleDescriptor(
- String moduleName, String version);
-
- /**
- * @return a list of minimal execution module descriptors (only the module
- * meta data, not the flows)
- */
- public List listExecutionModules();
-
- /** Synchronously finds and executes an {@link ExecutionFlow}. */
- public void execute(RealizedFlow realizedFlow);
-
- // /** Notify of a status update status of the {@link ExecutionProcess} */
-// public void dispatchUpdateStatus(ExecutionProcess process,
-// String oldStatus, String newStatus);
- //
- // /** Notify that a step was added in an {@link ExecutionProcess} */
- // public void dispatchAddSteps(ExecutionProcess process,
- // List steps);
- //
- // /**
- // * Register a notifier which will be notified based on the provided
- // * properties.
- // */
- // public void registerProcessNotifier(ExecutionProcessNotifier notifier,
- // Map properties);
- //
- // /** Unregisters a notifier */
- // public void unregisterProcessNotifier(ExecutionProcessNotifier notifier,
- // Map properties);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionProcess.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionProcess.java
deleted file mode 100644
index d894e1c23..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionProcess.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.List;
-
-/**
- * A process is the functional representation of a combination of executions.
- * While an execution is the actual java code running, a process exists before,
- * during and after the execution actually took place, providing an entry point
- * for the definition of executions, their monitoring (e.g. logging) and
- * tracking. A process can be distributed or parallelized.
- * NEW => INITIALIZED => SCHEDULED => RUNNING
- * RUNNING => {COMPLETED | ERROR | KILLED}
- * {COMPLETED | ERROR | KILLED} => PURGED
- * UNKOWN : this is a bug if this status occurs
- */
-public interface ExecutionProcess {
- /** The process is not yet usable. */
- public final static String NEW = "NEW";
- /** The process is usable but not yet scheduled to run. */
- public final static String INITIALIZED = "INITIALIZED";
- /** The process is usable and scheduled to run, but not yet running. */
- public final static String SCHEDULED = "SCHEDULED";
- /** The process is currently running. */
- public final static String RUNNING = "RUNNING";
- /** The process has properly completed. */
- public final static String COMPLETED = "COMPLETED";
- /** The process failed because of an unexpected error. */
- public final static String ERROR = "ERROR";
- /** The process was killed explicitly or through a crash. */
- public final static String KILLED = "KILLED";
- /** The status cannot be retrieved (probably because of unexpected errors). */
- public final static String UNKOWN = "UNKOWN";
-
- /**
- * Only a reference to the process has been kept, all monitoring data such
- * as logs have been purged.
- */
- public final static String PURGED = "PURGED";
-
- /** The UUID of this process. */
- public String getUuid();
-
- /** The current status of this process. */
- public String getStatus();
-
- /** Sets the current status of this process */
- public void setStatus(String status);
-
- public void addSteps(List steps);
-
- public List getRealizedFlows();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionResources.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionResources.java
deleted file mode 100644
index 9ddbca988..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionResources.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.File;
-import java.nio.file.Path;
-
-/** Provides write access to resources during execution */
-public interface ExecutionResources {
- /** The base directory where this execution can write */
- public File getWritableBaseDir();
-
- /** Allocates a local file in the writable area and return it as a resource. */
- public Path getWritableResource(String relativePath);
-
- /**
- * Allocates a local file in the writable area and return it as a fully
- * qualified OS path.
- */
- public String getWritableOsPath(String relativePath);
-
- /**
- * Allocates a local file in the writable area and return it as a {@link File}.
- */
- public File getWritableOsFile(String relativePath);
-
- /**
- * Returns the resource as a file path. If the resource is not writable it is
- * copied as a file in the writable area and the path to this local file is
- * returned.
- */
- public String getAsOsPath(Path resource, Boolean overwrite);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpec.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpec.java
deleted file mode 100644
index 0037b6d67..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpec.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.Map;
-
-/**
- * The class implementing this interface defines the map of attributes that are
- * necessary for the corresponding ExecutionFlow.
- */
-public interface ExecutionSpec {
- /**
- * The name for an internal spec (for backward compatibility where a
- * non-null name is expected)
- */
- public final static String INTERNAL_NAME = "__SLC_EXECUTION_SPEC_INTERNAL";
-
- /**
- * The name identifying the execution spec within its application context.
- * Can be null. An execution spec can be referenced only if its name is not
- * null or different from {@link #INTERNAL_NAME}
- */
- public String getName();
-
- /** An optional description. Can be null. */
- public String getDescription();
-
- /** The attributes managed by this execution spec */
- public Map getAttributes();
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpecAttribute.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpecAttribute.java
deleted file mode 100644
index 39f87d9a1..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionSpecAttribute.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.argeo.slc.execution;
-
-/**
- * Possible attribute of an execution flow.
- *
- * There are mainly two implementations :
- * + Primitive attributes (no predefined choice, the end user must compute a
- * String, a Float, an Integer...)
- * + RefSpecAttribute which enable two things
- * ++ a reference to another object of the application context
- * ++ the display of some choices among which the end user can choose.
- *
- * @see org.argeo.slc.core.execution.PrimitiveSpecAttribute
- * @see org.argeo.slc.core.execution.RefSpecAttribute
- * @see org.argeo.slc.core.execution.PrimitiveUtils : this class offers some
- * helper, among others to cast the various type of primitive attribute.
- */
-public interface ExecutionSpecAttribute {
- /**
- * Whether this attribute has to be set at instantiation of the flow and
- * cannot be modified afterwards. If the attribute is not immutable (that
- * is, this method returns false), it can be set at execution time.
- */
- public Boolean getIsImmutable();
-
- /**
- * Whether this attribute must be explicitly set and cannot be modified.
- * This attribute is then basically a constant within a given application
- * context. {@link #getValue()} cannot return null if the attribute is a
- * constant.
- */
- public Boolean getIsConstant();
-
- /** Whether this attribute will be hidden to end users. */
- public Boolean getIsHidden();
-
- /**
- * The default value for this attribute. Can be null, except if
- * {@link #getIsFrozen()} is true
, in which case it represents
- * the constant value of this attribute.
- */
- public Object getValue();
-
- /** Description of this attribute, can be null */
- public String getDescription();
-
- /** @deprecated use {@link #getIsImmutable()} instead */
- public Boolean getIsParameter();
-
- /** @deprecated use {@link #getIsConstant()} instead */
- public Boolean getIsFrozen();
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStack.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStack.java
deleted file mode 100644
index 0a15e33b5..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStack.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.argeo.slc.execution;
-
-/** Deal with nested level of executions using different variables. */
-public interface ExecutionStack {
- /**
- * @param name
- * @return null if no object is found
- */
- public Object findScopedObject(String name);
-
- public void addScopedObject(String name, Object obj);
-
- public void enterFlow(ExecutionFlow executionFlow);
-
- /** @return internal stack level UUID. */
- public String getCurrentStackLevelUuid();
-
- public Integer getStackSize();
-
- public void leaveFlow(ExecutionFlow executionFlow);
-
- Object findLocalVariable(String key);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStackLevel.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStackLevel.java
deleted file mode 100644
index 790404b58..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStackLevel.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.Map;
-
-public interface ExecutionStackLevel {
- public ExecutionFlow getExecutionFlow();
-
- public Map getScopedObjects();
-
- public String getUuid();
-
- public Map getLocalVariables();
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStep.java b/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStep.java
deleted file mode 100644
index 47c69180d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/ExecutionStep.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * An atomic step to be notified in during an {@link ExecutionProcess}. Can be a
- * log or the start/end of a phase, etc.
- */
-public class ExecutionStep implements Serializable {
- private static final long serialVersionUID = 798640526532912161L;
-
- public final static String PHASE_START = "PHASE_START";
- public final static String PHASE_END = "PHASE_END";
- public final static String ERROR = "ERROR";
- public final static String WARNING = "WARNING";
- public final static String INFO = "INFO";
- public final static String DEBUG = "DEBUG";
- public final static String TRACE = "TRACE";
-
- /** @deprecated */
- public final static String START = "START";
- /** @deprecated */
- public final static String END = "END";
-
- // TODO make the fields final and private when we don't need POJO support
- // anymore (that
- // is when SlcExecutionStep is removed)
- protected String type;
- protected String thread;
- protected Date timestamp;
- protected String log;
-
- private String location;
-
- /** Empty constructor */
- public ExecutionStep() {
- Thread currentThread = Thread.currentThread();
- thread = currentThread.getName();
- }
-
- /** Creates a step at the current date */
- public ExecutionStep(String location, String type, String log) {
- this(location, new Date(), type, log);
- }
-
- /** Creates a step of the given type. */
- public ExecutionStep(String location, Date timestamp, String type,
- String log) {
- this(location, timestamp, type, log, Thread.currentThread().getName());
- }
-
- public ExecutionStep(String location, Date timestamp, String type,
- String log, String thread) {
- this.location = location;
- this.type = type;
- this.timestamp = timestamp;
- this.thread = thread;
- this.log = addLog(log);
- }
-
- public String getType() {
- return type;
- }
-
- public Date getTimestamp() {
- return timestamp;
- }
-
- public String getThread() {
- return thread;
- }
-
- /**
- * Return the string that should be stored in the log field. Can be null if
- * another mechanism is used to store log lines.
- */
- protected String addLog(String log) {
- return log;
- }
-
- public String getLog() {
- return log;
- }
-
- @Override
- public String toString() {
- return "Execution step, thread=" + thread + ", type=" + type;
- }
-
- /** Typically the logging category */
- public String getLocation() {
- return location;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/FlowConfigurationException.java b/org.argeo.slc.api/src/org/argeo/slc/execution/FlowConfigurationException.java
deleted file mode 100644
index d476483aa..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/FlowConfigurationException.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.execution;
-
-import org.argeo.slc.SlcException;
-
-/** The stack trace of such exceptions does not need to be displayed */
-public class FlowConfigurationException extends SlcException {
- private static final long serialVersionUID = 8456260596346797321L;
-
- public FlowConfigurationException(String message) {
- super(message);
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java b/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java
deleted file mode 100644
index c1290a958..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.argeo.slc.DefaultNameVersion;
-import org.argeo.slc.NameVersion;
-
-/** A fully configured execution flow, ready to be executed. */
-public class RealizedFlow implements Serializable {
- private static final long serialVersionUID = 1L;
-
- private String moduleName;
- private String moduleVersion;
- private ExecutionFlowDescriptor flowDescriptor;
-
- public String getModuleName() {
- return moduleName;
- }
-
- public void setModuleName(String moduleName) {
- this.moduleName = moduleName;
- }
-
- public NameVersion getModuleNameVersion() {
- return new DefaultNameVersion(getModuleName(), getModuleVersion());
- }
-
- public String getModuleVersion() {
- return moduleVersion;
- }
-
- public void setModuleVersion(String moduleVersion) {
- this.moduleVersion = moduleVersion;
- }
-
- public ExecutionFlowDescriptor getFlowDescriptor() {
- return flowDescriptor;
- }
-
- public void setFlowDescriptor(ExecutionFlowDescriptor flowDescriptor) {
- this.flowDescriptor = flowDescriptor;
- }
-
- /** Create a simple realized flow */
- public static RealizedFlow create(String module, String version,
- String flowName, Map args) {
- final RealizedFlow realizedFlow = new RealizedFlow();
- realizedFlow.setModuleName(module);
- // TODO deal with version
- if (version == null)
- version = "0.0.0";
- realizedFlow.setModuleVersion(version);
- ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor();
- efd.setName(flowName);
-
- // arguments
- if (args != null && args.size() > 0) {
- Map values = new HashMap();
- for (String key : args.keySet()) {
- String value = args.get(key);
- values.put(key, value);
- }
- efd.setValues(values);
- }
-
- realizedFlow.setFlowDescriptor(efd);
- return realizedFlow;
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/RefSpecAttribute.java b/org.argeo.slc.api/src/org/argeo/slc/execution/RefSpecAttribute.java
deleted file mode 100644
index b9bded031..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/RefSpecAttribute.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.util.List;
-
-/** A spec attribute whose value is a reference to a full fledged object. */
-public class RefSpecAttribute extends AbstractSpecAttribute implements
- Cloneable {
- private static final long serialVersionUID = -3427797452955753574L;
- private transient Class> targetClass = String.class;
- /** Read only. */
- private String targetClassName;
- private transient Object value = null;
-
- /** List to be chosen from */
- private List choices = null;
-
- public Object getValue() {
- return value;
- }
-
- public void setValue(Object value) {
- this.value = value;
- }
-
- /** Default is {@link String} */
- public Class> getTargetClass() {
- return targetClass;
- }
-
- public void setTargetClass(Class> targetClass) {
- this.targetClass = targetClass;
- this.targetClassName = targetClass.getName();
- }
-
- public String getTargetClassName() {
- return targetClassName;
- }
-
- /** @return can be null */
- public List getChoices() {
- return choices;
- }
-
- public void setChoices(List choices) {
- this.choices = choices;
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- RefSpecAttribute rsa = new RefSpecAttribute();
- rsa.setTargetClass(targetClass);
- rsa.setChoices(choices);
- return rsa;
- }
-
- @Override
- public String toString() {
- return "Ref spec attribute [" + targetClass + "]"
- + (value != null ? "=" + value : "");
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/RefValue.java b/org.argeo.slc.api/src/org/argeo/slc/execution/RefValue.java
deleted file mode 100644
index 02be2a6ba..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/RefValue.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.argeo.slc.execution;
-
-/** Reference value to be used by an execution */
-public class RefValue extends AbstractExecutionValue {
- private static final long serialVersionUID = -8951231456757181687L;
- private String ref;
- private String type;
-
- public RefValue() {
- }
-
- public RefValue(String ref) {
- super();
- this.ref = ref;
- }
-
- public String getRef() {
- return ref;
- }
-
- public void setRef(String ref) {
- this.ref = ref;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- @Override
- public String toString() {
- return "Ref Value [" + type + "=" + ref + "]";
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/RefValueChoice.java b/org.argeo.slc.api/src/org/argeo/slc/execution/RefValueChoice.java
deleted file mode 100644
index c4c403e6e..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/RefValueChoice.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.io.Serializable;
-
-/** A choice of ref value to be shown to the end user. */
-public class RefValueChoice implements Serializable {
- private static final long serialVersionUID = -1133645722307507774L;
- private String name;
- private String description;
-
- public RefValueChoice() {
- }
-
- public RefValueChoice(String name, String description) {
- this.name = name;
- this.description = description;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgent.java b/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgent.java
deleted file mode 100644
index 039724f50..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.argeo.slc.execution;
-
-import java.net.URI;
-import java.util.List;
-
-/**
- * A local agent can run SLC processes. It is responsible for creating their
- * threads and integrating them with various UIs. It typically wraps
- * {@link ExecutionModulesManager} which is used to run flows synchronously at a
- * lower level.
- */
-public interface SlcAgent {
- /** Agent unique identifier */
- public String getAgentUuid();
-
- /** Execute / take part to this process */
- public void process(ExecutionProcess process);
-
- /**
- * Asynchronously processes the flows defined as URIs, or interpret a single
- * UUID URN as a scheduled or template process.
- *
- * @return the UUID of the process launched.
- */
- public String process(List uris);
-
- /** Kills this process */
- public void kill(String processUuid);
-
- /**
- * Wait for this process to finish. returns immediately if it does not
- * exist.
- *
- * @param millis
- * can be null
- */
- public void waitFor(String processUuid, Long millis);
-
- /**
- * Describe all the flows provided by this execution module. Typically
- * called in order to build a realized flow.
- */
- public ExecutionModuleDescriptor getExecutionModuleDescriptor(
- String moduleName, String version);
-
- /** List all execution modules which can be processed by this agent. */
- public List listExecutionModuleDescriptors();
-
- /** @return true if still alive. */
- public boolean ping();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgentCli.java b/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgentCli.java
deleted file mode 100644
index 497d1104d..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/execution/SlcAgentCli.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.slc.execution;
-
-/**
- * Interpret a command line and run it in the underlying agent, with the proper
- * authentication.
- */
-public interface SlcAgentCli {
- /**
- * Synchronously executes.
- *
- * @return the UUID of the process
- */
- public String process(String[] args);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/package.html b/org.argeo.slc.api/src/org/argeo/slc/package.html
deleted file mode 100644
index db808c822..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-Common classes of teh SLC framework.
-
-
\ No newline at end of file
diff --git a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveAccessor.java b/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveAccessor.java
deleted file mode 100644
index b3f87ba1a..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveAccessor.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.argeo.slc.primitive;
-
-/** Abstraction of access to primitive values */
-public interface PrimitiveAccessor {
- public final static String TYPE_STRING = "string";
- /**
- * As of Argeo 1, passwords are NOT stored encrypted, just hidden in the UI,
- * but stored in plain text in JCR. Use keyring instead.
- */
- public final static String TYPE_PASSWORD = "password";
- public final static String TYPE_INTEGER = "integer";
- public final static String TYPE_LONG = "long";
- public final static String TYPE_FLOAT = "float";
- public final static String TYPE_DOUBLE = "double";
- public final static String TYPE_BOOLEAN = "boolean";
-
- public String getType();
-
- public Object getValue();
-
- public void setValue(Object value);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveSpecAttribute.java b/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveSpecAttribute.java
deleted file mode 100644
index cc3ee6722..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveSpecAttribute.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.argeo.slc.primitive;
-
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.AbstractSpecAttribute;
-
-/**
- * A spec attribute wrapping a primitive value.
- *
- * @see PrimitiveAccessor
- */
-public class PrimitiveSpecAttribute extends AbstractSpecAttribute implements
- PrimitiveAccessor {
- private static final long serialVersionUID = -566676381839825483L;
- private String type = "string";
- private Object value = null;
-
- public PrimitiveSpecAttribute() {
- }
-
- public PrimitiveSpecAttribute(String type, Object value) {
- this.type = type;
- this.value = value;
- }
-
- public Object getValue() {
- return value;
- }
-
- public void setValue(Object value) {
- this.value = value;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- // check whether type is recognized.
- if (PrimitiveUtils.typeAsClass(type) == null)
- throw new SlcException("Unrecognized type " + type);
- this.type = type;
-
- }
-
- @Override
- public String toString() {
- return "Primitive spec attribute [" + type + "]"
- + (value != null ? "=" + value : "");
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveUtils.java b/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveUtils.java
deleted file mode 100644
index 679e808e9..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveUtils.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.argeo.slc.primitive;
-
-/** Converts to and from primitive types. */
-public class PrimitiveUtils {
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_STRING} instead
- */
- public final static String TYPE_STRING = PrimitiveAccessor.TYPE_STRING;
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_INTEGER} instead
- */
- public final static String TYPE_INTEGER = PrimitiveAccessor.TYPE_INTEGER;
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_LONG} instead
- */
- public final static String TYPE_LONG = PrimitiveAccessor.TYPE_LONG;
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_FLOAT} instead
- */
- public final static String TYPE_FLOAT = PrimitiveAccessor.TYPE_FLOAT;
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_DOUBLE} instead
- */
- public final static String TYPE_DOUBLE = PrimitiveAccessor.TYPE_DOUBLE;
- /**
- * @deprecated Use {@link PrimitiveAccessor#TYPE_BOOLEAN} instead
- */
- public final static String TYPE_BOOLEAN = PrimitiveAccessor.TYPE_BOOLEAN;
-
- private PrimitiveUtils() {
-
- }
-
- /** @return the class or null if the provided type is not a primitive */
- public static Class> typeAsClass(String type) {
- if (PrimitiveAccessor.TYPE_STRING.equals(type))
- return String.class;
- else if (PrimitiveAccessor.TYPE_PASSWORD.equals(type))
- return char[].class;
- else if (PrimitiveAccessor.TYPE_INTEGER.equals(type))
- return Integer.class;
- else if (PrimitiveAccessor.TYPE_LONG.equals(type))
- return Long.class;
- else if (PrimitiveAccessor.TYPE_FLOAT.equals(type))
- return Float.class;
- else if (PrimitiveAccessor.TYPE_DOUBLE.equals(type))
- return Double.class;
- else if (PrimitiveAccessor.TYPE_BOOLEAN.equals(type))
- return Boolean.class;
- else
- return null;
- }
-
- /** @return the type or null if the provided class is not a primitive */
- public static String classAsType(Class> clss) {
- if (String.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_STRING;
- else if (char[].class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_PASSWORD;
- else if (Integer.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_INTEGER;
- else if (Long.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_LONG;
- else if (Float.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_FLOAT;
- else if (Double.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_DOUBLE;
- else if (Boolean.class.isAssignableFrom(clss))
- return PrimitiveAccessor.TYPE_BOOLEAN;
- else
- return null;
- }
-
- /** Parse string as an object. Passwords are returned as String.*/
- public static Object convert(String type, String str) {
- if (PrimitiveAccessor.TYPE_STRING.equals(type)) {
- return str;
- } else if (PrimitiveAccessor.TYPE_PASSWORD.equals(type)) {
- return str;
- } else if (PrimitiveAccessor.TYPE_INTEGER.equals(type)) {
- return (Integer.parseInt(str));
- } else if (PrimitiveAccessor.TYPE_LONG.equals(type)) {
- return (Long.parseLong(str));
- } else if (PrimitiveAccessor.TYPE_FLOAT.equals(type)) {
- return (Float.parseFloat(str));
- } else if (PrimitiveAccessor.TYPE_DOUBLE.equals(type)) {
- return (Double.parseDouble(str));
- } else if (PrimitiveAccessor.TYPE_BOOLEAN.equals(type)) {
- return (Boolean.parseBoolean(str));
- } else {
- return str;
- }
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveValue.java b/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveValue.java
deleted file mode 100644
index 0c2bf23fe..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/primitive/PrimitiveValue.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.argeo.slc.primitive;
-
-import org.argeo.slc.execution.AbstractExecutionValue;
-
-/** Primitive value to be used by an execution. */
-public class PrimitiveValue extends AbstractExecutionValue implements
- PrimitiveAccessor {
- private static final long serialVersionUID = 533414290998374166L;
-
- private String type;
-
- private Object value;
-
- public PrimitiveValue() {
- }
-
- public PrimitiveValue(String type, Object value) {
- super();
- this.type = type;
- this.value = value;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public Object getValue() {
- return value;
- }
-
- public void setValue(Object value) {
- this.value = value;
- }
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/ExecutableTestRun.java b/org.argeo.slc.api/src/org/argeo/slc/test/ExecutableTestRun.java
deleted file mode 100644
index f18196a49..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/ExecutableTestRun.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.argeo.slc.test;
-
-
-/** A test run that can be executed */
-public interface ExecutableTestRun extends TestRun, Runnable {
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/IncompatibleTestDataException.java b/org.argeo.slc.api/src/org/argeo/slc/test/IncompatibleTestDataException.java
deleted file mode 100644
index de5d900af..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/IncompatibleTestDataException.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.argeo.slc.test;
-
-import org.argeo.slc.SlcException;
-
-/**
- * Exception to throw when a test definition cannot interpret the provided test
- * data.
- */
-public class IncompatibleTestDataException extends SlcException {
- static final long serialVersionUID = 1l;
-
- public IncompatibleTestDataException(TestData testData,
- TestDefinition testDefinition) {
- super("TestData " + testData.getClass()
- + " is not compatible with TestDefinition "
- + testDefinition.getClass());
- }
-
- public IncompatibleTestDataException(TestRun testRun) {
- super("TestData " + ((TestData) testRun.getTestData()).getClass()
- + " is not compatible with TestDefinition "
- + ((TestDefinition) testRun.getTestDefinition()).getClass());
- }
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestData.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestData.java
deleted file mode 100644
index 47973adee..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestData.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.argeo.slc.test;
-
-/**
- * Any data required by a test in order to run: configuration, expected,
- * reached, etc.
- */
-public interface TestData {
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestDataProvider.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestDataProvider.java
deleted file mode 100644
index 754a3df00..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestDataProvider.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.argeo.slc.test;
-
-public interface TestDataProvider {
- public T getTestData(Class clss, String key);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestDefinition.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestDefinition.java
deleted file mode 100644
index c7bfeac71..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestDefinition.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.argeo.slc.test;
-
-/**
- * The programmatic definition of a test, which will be associated with
- * transient objects within a test run.
- */
-public interface TestDefinition extends TestStatus {
- /** Performs the test. */
- public void execute(TestRun testRun);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestResult.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestResult.java
deleted file mode 100644
index 767b28613..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestResult.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.argeo.slc.test;
-
-import java.util.Date;
-import java.util.Map;
-
-/** The result of a test */
-public interface TestResult extends TestStatus, TestRunAware {
- public String getUuid();
-
- /** Adds a part of the result. */
- public void addResultPart(TestResultPart part);
-
- /**
- * Marks that the collection of test results is completed and free the
- * related resources (also closing listeners).
- */
- public void close();
-
- /**
- * The date when this test result was closed. Can be null, which means the
- * result is not closed.
- */
- public Date getCloseDate();
-
- /** Additional arbitrary meta data */
- public Map getAttributes();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestResultListener.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestResultListener.java
deleted file mode 100644
index c2ad8ed66..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestResultListener.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.argeo.slc.test;
-
-/** Listener to the operations on a test result. */
-public interface TestResultListener {
- /** Notified when a part was added to a test result. */
- public void resultPartAdded(T testResult, TestResultPart testResultPart);
-
- /** Stops listening and release the related resources. */
- public void close(T testResult);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestResultPart.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestResultPart.java
deleted file mode 100644
index ec984f9cc..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestResultPart.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.argeo.slc.test;
-
-/**
- * Part of a test result.
- *
- * @see TestResult
- */
-public interface TestResultPart {
- /** The status, as defined in {@link TestStatus}. */
- public Integer getStatus();
-
- /** The related message. */
- public String getMessage();
-
- /** The underlying Exception
. Can be null. */
- public String getExceptionMessage();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestRun.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestRun.java
deleted file mode 100644
index a3e8aeb5a..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestRun.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.argeo.slc.test;
-
-import org.argeo.slc.deploy.DeployedSystem;
-
-/** The actual run of a test */
-public interface TestRun {
- /** Gets UUID */
- public String getUuid();
-
- /** Gets the related test definition. */
- public T getTestDefinition();
-
- /** Gets the related test data */
- public T getTestData();
-
- /** Gets the related deployed system. */
- public T getDeployedSystem();
-
- /** Gets the related result where to record results. */
- public T getTestResult();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestRunAware.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestRunAware.java
deleted file mode 100644
index 54585597b..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestRunAware.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.slc.test;
-
-/** Allows a test run to notify other objects. */
-public interface TestRunAware {
- /** Notifies the current test run. */
- public void notifyTestRun(TestRun testRun);
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/TestStatus.java b/org.argeo.slc.api/src/org/argeo/slc/test/TestStatus.java
deleted file mode 100644
index a5e10d365..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/TestStatus.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.argeo.slc.test;
-
-/**
- * Simple statuses. Ordering of the flags can be relied upon in aggregation: if
- * one element is failed, the aggregation is failed. Is one element is in ERROR,
- * the aggregation is in ERROR.
- *
- *
- * - {@link #PASSED}: the test succeeded
- * - {@link #FAILED}: the test could run, but did not reach the expected
- * result
- * - {@link #ERROR}: an error during the test run prevented to get a
- * significant information on the tested system.
- *
- *
- */
-public interface TestStatus {
- /** The flag for a passed test: 0 */
- public final static Integer PASSED = 0;
- /** The flag for a failed test: 1 */
- public final static Integer FAILED = 1;
- /**
- * The flag for a test which could not properly run because of an error
- * (there is no feedback on the behavior of the tested component): 2
- */
- public final static Integer ERROR = 2;
- public final static String STATUSSTR_PASSED = "PASSED";
- public final static String STATUSSTR_FAILED = "FAILED";
- public final static String STATUSSTR_ERROR = "ERROR";
-
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/WritableTestRun.java b/org.argeo.slc.api/src/org/argeo/slc/test/WritableTestRun.java
deleted file mode 100644
index 1a2ab237a..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/WritableTestRun.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.slc.test;
-
-import org.argeo.slc.deploy.DeployedSystem;
-
-/** Test run whose various components can be externally set. */
-public interface WritableTestRun extends ExecutableTestRun {
- public void setDeployedSystem(DeployedSystem deployedSystem);
-
- public void setTestData(TestData testData);
-
- public void setTestDefinition(TestDefinition testDefinition);
-
- public void setTestResult(TestResult testResult);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/context/ContextAware.java b/org.argeo.slc.api/src/org/argeo/slc/test/context/ContextAware.java
deleted file mode 100644
index d2cd86f74..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/context/ContextAware.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.argeo.slc.test.context;
-
-import java.util.Map;
-
-/** Access to an SLC test context that is, maps of reached and expected values. */
-public interface ContextAware {
- public final static String DEFAULT_SKIP_FLAG = "!";
- public final static String DEFAULT_ANY_FLAG = "*";
-
- /** Retrieves reached values. */
- public Map getValues();
-
- /** Set reached values. */
- public void setValues(Map values);
-
- /** Retrieves expected values. */
- public Map getExpectedValues();
-
- public String getContextSkipFlag();
-
- public String getContextAnyFlag();
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/context/ParentContextAware.java b/org.argeo.slc.api/src/org/argeo/slc/test/context/ParentContextAware.java
deleted file mode 100644
index b4044f7ca..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/context/ParentContextAware.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.argeo.slc.test.context;
-
-import java.util.Collection;
-
-public interface ParentContextAware extends ContextAware {
- public Collection getChildContexts();
-
- public void addChildContext(ContextAware contextAware);
-}
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/context/package.html b/org.argeo.slc.api/src/org/argeo/slc/test/context/package.html
deleted file mode 100644
index cd08d63f3..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/context/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-Context variables to be passed between parts of tests.
-
-
\ No newline at end of file
diff --git a/org.argeo.slc.api/src/org/argeo/slc/test/package.html b/org.argeo.slc.api/src/org/argeo/slc/test/package.html
deleted file mode 100644
index c70d2d151..000000000
--- a/org.argeo.slc.api/src/org/argeo/slc/test/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-SLC Test: test of software systems.
-
-
\ No newline at end of file
diff --git a/org.argeo.slc.cms/bnd.bnd b/org.argeo.slc.cms/bnd.bnd
index 93725b673..5decbd1fc 100644
--- a/org.argeo.slc.cms/bnd.bnd
+++ b/org.argeo.slc.cms/bnd.bnd
@@ -1,6 +1,11 @@
+
Import-Package: \
org.apache.commons.logging,\
org.postgresql;version="[42,43)";resolution:=optional,\
-org.apache.commons.vfs2.*resolution:=optional,\
+org.apache.commons.vfs2.*;resolution:=optional,\
org.osgi.*;version="0.0.0",\
+javax.servlet,\
+javax.servlet.http,\
+javax.websocket,\
+javax.websocket.server,\
*
\ No newline at end of file
diff --git a/org.argeo.slc.cms/build.properties b/org.argeo.slc.cms/build.properties
index 5d082eaf6..34d2e4d2d 100644
--- a/org.argeo.slc.cms/build.properties
+++ b/org.argeo.slc.cms/build.properties
@@ -2,4 +2,3 @@ source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
-additional.bundles = org.argeo.init
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java
deleted file mode 100644
index feec64f18..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.argeo.slc.cms.deploy;
-
-import org.argeo.slc.deploy.DeployedSystem;
-
-public interface CmsDeployedSystem extends DeployedSystem {
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java
deleted file mode 100644
index 17cecd829..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.argeo.slc.cms.deploy;
-
-import java.util.List;
-
-import org.argeo.slc.deploy.DeploymentData;
-
-public interface CmsDeploymentData extends DeploymentData {
- List getModulesToActivate(int startLevel);
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java
deleted file mode 100644
index 4616b2029..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.cms.deploy;
-
-import java.nio.file.Path;
-
-import org.argeo.slc.deploy.TargetData;
-
-public interface CmsTargetData extends TargetData {
- Path getInstanceData();
-
- Integer getHttpPort();
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java
deleted file mode 100644
index c95f441e7..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.argeo.slc.cms.deploy;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class SimpleCmsDeploymentData implements CmsDeploymentData {
- private Map> startLevels = new TreeMap<>();
-
- @Override
- public List getModulesToActivate(int startLevel) {
- startLevels.putIfAbsent(startLevel, new ArrayList<>());
- return startLevels.get(startLevel);
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java
deleted file mode 100644
index ecf17d684..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.argeo.slc.cms.deploy;
-
-import java.nio.file.Path;
-
-public class SimpleCmsTargetData implements CmsTargetData {
- private Path instanceData;
- private Integer httpPort;
-
- public SimpleCmsTargetData(Path instanceData, Integer httpPort) {
- this.instanceData = instanceData;
- this.httpPort = httpPort;
- }
-
- public Integer getHttpPort() {
- return httpPort;
- }
-
- public void setHttpPort(Integer httpPort) {
- this.httpPort = httpPort;
- }
-
- public Path getInstanceData() {
- return instanceData;
- }
-
- public void setInstanceData(Path instanceData) {
- this.instanceData = instanceData;
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployedSystem.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployedSystem.java
deleted file mode 100644
index 8de43540a..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployedSystem.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.argeo.slc.cms.deploy.osgi;
-
-import org.argeo.slc.build.Distribution;
-import org.argeo.slc.build.ModularDistribution;
-import org.argeo.slc.cms.deploy.CmsDeployedSystem;
-import org.argeo.slc.cms.deploy.CmsDeploymentData;
-import org.argeo.slc.cms.deploy.CmsTargetData;
-import org.argeo.slc.deploy.DeploymentData;
-import org.argeo.slc.deploy.TargetData;
-import org.osgi.framework.BundleContext;
-
-public class CmsOsgiDeployedSystem implements CmsDeployedSystem {
- private ModularDistribution distribution;
- private CmsTargetData targetData;
- private CmsDeploymentData deploymentData;
-
- private BundleContext systemBundleContext;
-
- public CmsOsgiDeployedSystem(BundleContext systemBundleContext, ModularDistribution distribution,
- CmsTargetData targetData, CmsDeploymentData deploymentData) {
- this.systemBundleContext = systemBundleContext;
-
- this.distribution = distribution;
- this.targetData = targetData;
- this.deploymentData = deploymentData;
- }
-
- @Override
- public String getDeployedSystemId() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Distribution getDistribution() {
- return distribution;
- }
-
- @Override
- public DeploymentData getDeploymentData() {
- return deploymentData;
- }
-
- @Override
- public TargetData getTargetData() {
- return targetData;
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployment.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployment.java
deleted file mode 100644
index 4c9ea2018..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployment.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.argeo.slc.cms.deploy.osgi;
-
-import java.io.IOException;
-import java.lang.System.Logger;
-import java.lang.System.Logger.Level;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringJoiner;
-import java.util.TreeMap;
-
-import org.argeo.cms.CmsDeployProperty;
-import org.argeo.init.a2.A2Source;
-import org.argeo.init.a2.FsA2Source;
-import org.argeo.init.osgi.OsgiBoot;
-import org.argeo.init.osgi.OsgiRuntimeContext;
-import org.argeo.slc.WellKnownConstants;
-import org.argeo.slc.build.Distribution;
-import org.argeo.slc.cms.deploy.CmsDeployedSystem;
-import org.argeo.slc.cms.deploy.CmsDeploymentData;
-import org.argeo.slc.cms.deploy.CmsTargetData;
-import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData;
-import org.argeo.slc.cms.deploy.SimpleCmsTargetData;
-import org.argeo.slc.cms.distribution.A2Distribution;
-import org.argeo.slc.deploy.DeployedSystem;
-import org.argeo.slc.deploy.Deployment;
-import org.argeo.slc.deploy.DeploymentData;
-import org.argeo.slc.deploy.TargetData;
-
-public class CmsOsgiDeployment implements Deployment {
- private final static Logger logger = System.getLogger(CmsOsgiDeployment.class.getName());
-
- private A2Distribution distribution;
- private CmsTargetData targetData;
- private CmsDeploymentData deploymentData;
-
- private CmsDeployedSystem deployedSystem;
-
- private OsgiRuntimeContext runtimeContext;
-
- @Override
- public void run() {
- try {
- Map config = new TreeMap<>();
-
- // sources
- StringJoiner sourcesProperty = new StringJoiner(",");
- for (A2Source a2Source : distribution.getA2Sources()) {
- sourcesProperty.add(a2Source.getUri().toString());
- }
- config.put(OsgiBoot.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString());
-
- // target
- config.put(WellKnownConstants.OSGI_INSTANCE_AREA,
- targetData.getInstanceData().toRealPath().toUri().toString());
- if (targetData.getHttpPort() != null) {
- config.put(CmsDeployProperty.HTTP_PORT.getProperty(), targetData.getHttpPort().toString());
- }
-
- Path configurationArea = Files.createTempDirectory("slc-cms-test");
- config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString());
-
- // modules activation
- for (int startLevel = 0; startLevel <= 6; startLevel++) {
- List modules = deploymentData.getModulesToActivate(startLevel);
- if (modules.size() != 0) {
- String startProperty = String.join(",", modules);
- config.put(OsgiBoot.PROP_ARGEO_OSGI_START + "." + startLevel, startProperty);
- }
- }
-
- config.put("org.eclipse.equinox.http.jetty.autostart", "false");
- config.put("org.osgi.framework.bootdelegation",
- "com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.security.jgss,com.sun.jndi.dns,com.sun.nio.file,com.sun.nio.sctp");
- config.put("eclipse.ignoreApp", "true");
- config.put("osgi.noShutdown", "true");
-
- config.put("osgi.console", "2323");
-
- // initialise
- for (String key : config.keySet()) {
-// System.out.println(key + "=" + config.get(key));
- logger.log(Level.INFO, () -> key + "=" + config.get(key));
- }
-
- runtimeContext = new OsgiRuntimeContext(config);
- runtimeContext.run();
-
- deployedSystem = new CmsOsgiDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
- targetData, deploymentData);
-
- } catch (Exception e) {
- throw new IllegalStateException("Cannot run OSGi deployment", e);
- }
-
- }
-
- @Override
- public DeployedSystem getDeployedSystem() {
- return deployedSystem;
- }
-
- @Override
- public void setTargetData(TargetData targetData) {
- this.targetData = (CmsTargetData) targetData;
- }
-
- @Override
- public void setDeploymentData(DeploymentData deploymentData) {
- this.deploymentData = (CmsDeploymentData) deploymentData;
- }
-
- @Override
- public void setDistribution(Distribution distribution) {
- this.distribution = (A2Distribution) distribution;
- }
-
- public OsgiRuntimeContext getRuntimeContext() {
- return runtimeContext;
- }
-
- public static void main(String[] args) {
- try {
- Path userHome = Paths.get(System.getProperty("user.home"));
-
- // distribution
- Path a2Base = userHome.resolve("dev/git/unstable/output/a2");
- A2Distribution distribution = new A2Distribution();
- Map xOr = new HashMap<>();
- xOr.put("osgi", "equinox");
- xOr.put("swt", "rap");
- distribution.getA2Sources().add(new FsA2Source(a2Base, xOr, true));
-
- // target data
- Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data");
- Files.createDirectories(instanceData);
- Integer httpPort = 7070;
- SimpleCmsTargetData targetData = new SimpleCmsTargetData(instanceData, httpPort);
-
- // deployment data
- SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData();
- deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet");
- deploymentData.getModulesToActivate(2).add("org.apache.felix.scr");
- deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi");
- deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.console");
-
- deploymentData.getModulesToActivate(3).add("org.argeo.cms");
- deploymentData.getModulesToActivate(3).add("org.argeo.cms.ee");
- deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.sshd");
- deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.equinox");
- deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.jetty");
- deploymentData.getModulesToActivate(3).add("org.argeo.cms.swt.rap");
-
- deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr");
- deploymentData.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs");
-
- deploymentData.getModulesToActivate(5).add("org.argeo.app.core");
- deploymentData.getModulesToActivate(5).add("org.argeo.app.ui");
- deploymentData.getModulesToActivate(5).add("org.argeo.app.theme.default");
-
- CmsOsgiDeployment deployment = new CmsOsgiDeployment();
- deployment.setDistribution(distribution);
- deployment.setTargetData(targetData);
- deployment.setDeploymentData(deploymentData);
- deployment.run();
-
- boolean multiple = false;
- if (multiple) {
-
- Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data");
- Files.createDirectories(instanceData2);
- Integer httpPort2 = 7071;
- SimpleCmsTargetData targetData2 = new SimpleCmsTargetData(instanceData2, httpPort2);
-
- CmsOsgiDeployment deployment2 = new CmsOsgiDeployment();
- deployment2.setDistribution(distribution);
- deployment2.setTargetData(targetData2);
- deployment2.setDeploymentData(deploymentData);
- deployment2.run();
- }
-
- deployment.getRuntimeContext().waitForStop(0);
-
- } catch (IOException | InterruptedException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java
deleted file mode 100644
index 6c8bbe76c..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.argeo.slc.cms.distribution;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.argeo.init.a2.A2Branch;
-import org.argeo.init.a2.A2Component;
-import org.argeo.init.a2.A2Contribution;
-import org.argeo.init.a2.A2Module;
-import org.argeo.init.a2.A2Source;
-import org.argeo.slc.CategoryNameVersion;
-import org.argeo.slc.DefaultCategoryNameVersion;
-import org.argeo.slc.NameVersion;
-import org.argeo.slc.build.Distribution;
-import org.argeo.slc.build.ModularDistribution;
-
-public class A2Distribution implements ModularDistribution {
- private List a2Sources = new ArrayList<>();
-
- @Override
- public String getDistributionId() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getName() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getVersion() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Iterator extends NameVersion> nameVersions() {
- List nameVersions = new ArrayList<>();
- for (A2Source a2Source : a2Sources) {
- for (A2Contribution a2Contribution : a2Source.listContributions(null)) {
- for (A2Component a2Component : a2Contribution.listComponents(null)) {
- for (A2Branch a2Branch : a2Component.listBranches(null)) {
- for (A2Module a2Module : a2Branch.listModules(null)) {
- CategoryNameVersion nameVersion = new DefaultCategoryNameVersion(a2Contribution.getId(),
- a2Component.getId(), a2Module.getVersion().toString());
- nameVersions.add(nameVersion);
- }
- }
- }
- }
- }
- return nameVersions.iterator();
- }
-
- @Override
- public Distribution getModuleDistribution(String moduleName, String moduleVersion) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Object getModulesDescriptor(String descriptorType) {
- // TODO Auto-generated method stub
- return null;
- }
-
- public List getA2Sources() {
- return a2Sources;
- }
-
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java
deleted file mode 100644
index cc7e68165..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.slc.cms.distribution;
-
-import org.argeo.init.a2.A2Module;
-import org.argeo.slc.build.Distribution;
-
-public class A2ModuleDistribution implements Distribution {
- private A2Module a2Module;
-
- @Override
- public String getDistributionId() {
- return a2Module.getCoordinates();
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java
deleted file mode 100644
index 10b088c53..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.argeo.slc.cms.test;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-public class CmsSmokeTest {
-
- public static void main(String[] args) throws IOException {
- Path instanceData;
- if (args.length > 0) {
- instanceData = Paths.get(args[0]);
- } else {
- instanceData = Files.createTempDirectory("cms-test");
- }
-
- }
-
-}
diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java
deleted file mode 100644
index 87eefd954..000000000
--- a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.argeo.slc.cms.test;
-
-/**
- * A program doing nothing and loading no classes, to be used as a baseline for
- * memory usage of the JVM.
- */
-public class MinimalJvm {
-
- synchronized void sleep() {
- try {
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- public static void main(String[] args) {
- new MinimalJvm().sleep();
- }
-
-}
diff --git a/org.argeo.slc.runtime/bnd.bnd b/org.argeo.slc.runtime/bnd.bnd
index 6956a159b..971fb5031 100644
--- a/org.argeo.slc.runtime/bnd.bnd
+++ b/org.argeo.slc.runtime/bnd.bnd
@@ -1,4 +1,6 @@
+Bundle-Activator: org.argeo.slc.internal.runtime.osgi.SlcInitActivator
+
Import-Package: \
-org.argeo.slc.deploy,\
+org.argeo.api.slc.deploy,\
org.apache.commons.exec.*;resolution:=optional,\
*
\ No newline at end of file
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java
new file mode 100644
index 000000000..ad33f4a50
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java
@@ -0,0 +1,7 @@
+package org.argeo.slc.cms.deploy;
+
+import org.argeo.api.slc.deploy.DeployedSystem;
+
+public interface CmsDeployedSystem extends DeployedSystem {
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java
new file mode 100644
index 000000000..844c9e7a0
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java
@@ -0,0 +1,9 @@
+package org.argeo.slc.cms.deploy;
+
+import java.util.List;
+
+import org.argeo.api.slc.deploy.DeploymentData;
+
+public interface CmsDeploymentData extends DeploymentData {
+ List getModulesToActivate(int startLevel);
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java
new file mode 100644
index 000000000..eee2f8b79
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java
@@ -0,0 +1,14 @@
+package org.argeo.slc.cms.deploy;
+
+import java.nio.file.Path;
+
+import org.argeo.api.slc.deploy.TargetData;
+
+public interface CmsTargetData extends TargetData {
+ Path getInstanceData();
+
+ String getHost();
+
+ Integer getHttpPort();
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java
new file mode 100644
index 000000000..c95f441e7
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java
@@ -0,0 +1,17 @@
+package org.argeo.slc.cms.deploy;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class SimpleCmsDeploymentData implements CmsDeploymentData {
+ private Map> startLevels = new TreeMap<>();
+
+ @Override
+ public List getModulesToActivate(int startLevel) {
+ startLevels.putIfAbsent(startLevel, new ArrayList<>());
+ return startLevels.get(startLevel);
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java
new file mode 100644
index 000000000..081fb899e
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java
@@ -0,0 +1,40 @@
+package org.argeo.slc.cms.deploy;
+
+import java.nio.file.Path;
+
+public class SimpleCmsTargetData implements CmsTargetData {
+ private Path instanceData;
+ private String host;
+ private Integer httpPort;
+
+ public SimpleCmsTargetData(Path instanceData, String host, Integer httpPort) {
+ this.instanceData = instanceData;
+ this.host = host;
+ this.httpPort = httpPort;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public void setHost(String hostname) {
+ this.host = hostname;
+ }
+
+ public Integer getHttpPort() {
+ return httpPort;
+ }
+
+ public void setHttpPort(Integer httpPort) {
+ this.httpPort = httpPort;
+ }
+
+ public Path getInstanceData() {
+ return instanceData;
+ }
+
+ public void setInstanceData(Path instanceData) {
+ this.instanceData = instanceData;
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java
new file mode 100644
index 000000000..6417e8639
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java
@@ -0,0 +1,50 @@
+package org.argeo.slc.cms.deploy.osgi;
+
+import org.argeo.api.slc.build.Distribution;
+import org.argeo.api.slc.build.ModularDistribution;
+import org.argeo.api.slc.deploy.DeploymentData;
+import org.argeo.api.slc.deploy.TargetData;
+import org.argeo.slc.cms.deploy.CmsDeployedSystem;
+import org.argeo.slc.cms.deploy.CmsDeploymentData;
+import org.argeo.slc.cms.deploy.CmsTargetData;
+import org.osgi.framework.BundleContext;
+
+/** A deployed OSGi-based Argeo CMS system. */
+public class OsgiCmsDeployedSystem implements CmsDeployedSystem {
+ private ModularDistribution distribution;
+ private CmsTargetData targetData;
+ private CmsDeploymentData deploymentData;
+
+ // private BundleContext systemBundleContext;
+
+ public OsgiCmsDeployedSystem(BundleContext systemBundleContext, ModularDistribution distribution,
+ CmsTargetData targetData, CmsDeploymentData deploymentData) {
+ // this.systemBundleContext = systemBundleContext;
+
+ this.distribution = distribution;
+ this.targetData = targetData;
+ this.deploymentData = deploymentData;
+ }
+
+ @Override
+ public String getDeployedSystemId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Distribution getDistribution() {
+ return distribution;
+ }
+
+ @Override
+ public DeploymentData getDeploymentData() {
+ return deploymentData;
+ }
+
+ @Override
+ public TargetData getTargetData() {
+ return targetData;
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java
new file mode 100644
index 000000000..38974a013
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java
@@ -0,0 +1,227 @@
+package org.argeo.slc.cms.deploy.osgi;
+
+import java.io.IOException;
+import java.lang.System.Logger;
+import java.lang.System.Logger.Level;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
+import java.util.TreeMap;
+
+import org.argeo.api.a2.A2Source;
+import org.argeo.api.a2.FsA2Source;
+import org.argeo.api.init.InitConstants;
+import org.argeo.api.init.RuntimeContext;
+import org.argeo.api.slc.WellKnownConstants;
+import org.argeo.api.slc.build.Distribution;
+import org.argeo.api.slc.deploy.DeployedSystem;
+import org.argeo.api.slc.deploy.Deployment;
+import org.argeo.api.slc.deploy.DeploymentData;
+import org.argeo.api.slc.deploy.TargetData;
+import org.argeo.init.osgi.OsgiRuntimeContext;
+import org.argeo.slc.cms.deploy.CmsDeployedSystem;
+import org.argeo.slc.cms.deploy.CmsDeploymentData;
+import org.argeo.slc.cms.deploy.CmsTargetData;
+import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData;
+import org.argeo.slc.cms.distribution.A2Distribution;
+
+/** The process of deploying an OSGi based Argeo CMS system. */
+public class OsgiCmsDeployment implements Deployment {
+ private final static Logger logger = System.getLogger(OsgiCmsDeployment.class.getName());
+
+ private A2Distribution distribution;
+ private CmsTargetData targetData;
+ private CmsDeploymentData deploymentData;
+
+ private CmsDeployedSystem deployedSystem;
+
+ private OsgiRuntimeContext runtimeContext;
+
+ @Override
+ public void run() {
+ try {
+ Map config = new TreeMap<>();
+
+ // sources
+ StringJoiner sourcesProperty = new StringJoiner(",");
+ for (A2Source a2Source : distribution.getA2Sources()) {
+ sourcesProperty.add(a2Source.getUri().toString());
+ }
+ config.put(InitConstants.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString());
+
+ // target
+ config.put(WellKnownConstants.OSGI_INSTANCE_AREA,
+ targetData.getInstanceData().toRealPath().toUri().toString());
+
+ if (targetData.getHost() != null) {
+ config.put("argeo.host", targetData.getHost().toString());
+ }
+
+ if (targetData.getHttpPort() != null) {
+ config.put("argeo.http.port", targetData.getHttpPort().toString());
+ }
+
+ Path configurationArea = Files.createTempDirectory("slc-cms-test");
+ config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString());
+
+ // modules activation
+ for (int startLevel = 0; startLevel <= 6; startLevel++) {
+ List modules = deploymentData.getModulesToActivate(startLevel);
+ if (modules.size() != 0) {
+ String startProperty = String.join(",", modules);
+ config.put(InitConstants.PROP_ARGEO_OSGI_START + "." + startLevel, startProperty);
+ }
+ }
+
+ config.put("org.eclipse.equinox.http.jetty.autostart", "false");
+ config.put("org.osgi.framework.system.packages.extra",
+ "sun.security.util,sun.security.internal.spec,sun.security.provider,com.sun.net.httpserver,com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.jndi.dns,com.sun.security.jgss,com.sun.nio.file,com.sun.nio.sctp");
+ config.put("eclipse.ignoreApp", "true");
+ config.put("osgi.noShutdown", "true");
+ config.put("osgi.clean", "true");
+ config.put("osgi.framework.useSystemProperties", "false");
+
+ config.put("argeo.directory", "dc=example,dc=com.ldif");
+
+ if (targetData instanceof OsgiCmsTargetData osgiCmsTargetData
+ && osgiCmsTargetData.getTelnetPort() != null) {
+ String hostStr = "";
+ if (targetData.getHost() != null) {
+ hostStr = targetData.getHost().toString() + ":";
+ }
+ config.put("osgi.console", hostStr + osgiCmsTargetData.getTelnetPort().toString());
+ }
+
+ // initialise
+ for (String key : config.keySet()) {
+// System.out.println(key + "=" + config.get(key));
+ logger.log(Level.TRACE, () -> key + "=" + config.get(key));
+ }
+
+ // FIXME use runtime manager
+ runtimeContext = new OsgiRuntimeContext(config);
+ runtimeContext.run();
+
+// deployedSystem = new OsgiCmsDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
+// targetData, deploymentData);
+
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot run OSGi deployment", e);
+ }
+
+ }
+
+ @Override
+ public DeployedSystem getDeployedSystem() {
+ return deployedSystem;
+ }
+
+ @Override
+ public void setTargetData(TargetData targetData) {
+ this.targetData = (CmsTargetData) targetData;
+ }
+
+ @Override
+ public void setDeploymentData(DeploymentData deploymentData) {
+ this.deploymentData = (CmsDeploymentData) deploymentData;
+ }
+
+ @Override
+ public void setDistribution(Distribution distribution) {
+ this.distribution = (A2Distribution) distribution;
+ }
+
+ public OsgiRuntimeContext getRuntimeContext() {
+ return runtimeContext;
+ }
+
+ public static void main(String[] args) {
+ RuntimeContext runtimeContext = test();
+ try {
+ runtimeContext.waitForStop(0);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static RuntimeContext test() {
+ try {
+ Path userHome = Paths.get(System.getProperty("user.home"));
+
+ // distribution
+ Path a2Base = userHome.resolve("dev/git/unstable/output/a2");
+ A2Distribution distribution = new A2Distribution();
+ Map xOr = new HashMap<>();
+ xOr.put("osgi", "equinox");
+ xOr.put("swt", "rap");
+ xOr.put("log", "syslogger");
+ xOr.put("crypto", "fips");
+ distribution.getA2Sources().add(new FsA2Source(a2Base, xOr, true, null, null));
+
+ // target data
+ Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data");
+ Files.createDirectories(instanceData);
+ OsgiCmsTargetData targetData = new OsgiCmsTargetData(instanceData, "host1", 7070, 2323);
+
+ // deployment data
+ SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData();
+ deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet");
+ deploymentData.getModulesToActivate(2).add("org.apache.felix.scr");
+ deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi");
+ deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.console");
+
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms");
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms.ee");
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.sshd");
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.equinox");
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.jetty");
+ deploymentData.getModulesToActivate(3).add("org.argeo.cms.swt.rap");
+
+ deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr");
+ deploymentData.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs");
+
+ deploymentData.getModulesToActivate(5).add("org.argeo.app.core");
+ deploymentData.getModulesToActivate(5).add("org.argeo.app.ui");
+ deploymentData.getModulesToActivate(5).add("org.argeo.app.theme.default");
+ deploymentData.getModulesToActivate(5).add("org.argeo.app.jcr");
+
+ deploymentData.getModulesToActivate(5).add("org.example.suite.theme");
+ deploymentData.getModulesToActivate(5).add("org.example.suite.core");
+ deploymentData.getModulesToActivate(5).add("org.example.suite.ui");
+ deploymentData.getModulesToActivate(5).add("org.example.suite.ui.rap");
+
+ OsgiCmsDeployment deployment = new OsgiCmsDeployment();
+ deployment.setDistribution(distribution);
+ deployment.setTargetData(targetData);
+ deployment.setDeploymentData(deploymentData);
+ deployment.run();
+
+ boolean multiple = true;
+ if (multiple) {
+ // wait a bit
+// Thread.sleep(5000);
+
+ Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data");
+ Files.createDirectories(instanceData2);
+ OsgiCmsTargetData targetData2 = new OsgiCmsTargetData(instanceData2, "host2", 7070, 2323);
+
+ OsgiCmsDeployment deployment2 = new OsgiCmsDeployment();
+ deployment2.setDistribution(distribution);
+ deployment2.setTargetData(targetData2);
+ deployment2.setDeploymentData(deploymentData);
+ deployment2.run();
+ }
+
+ return deployment.getRuntimeContext();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.exit(1);
+ return null;
+ }
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java
new file mode 100644
index 000000000..dc4bf3b1d
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java
@@ -0,0 +1,23 @@
+package org.argeo.slc.cms.deploy.osgi;
+
+import java.nio.file.Path;
+
+import org.argeo.slc.cms.deploy.SimpleCmsTargetData;
+
+public class OsgiCmsTargetData extends SimpleCmsTargetData {
+ private Integer telnetPort;
+
+ public OsgiCmsTargetData(Path instanceData, String host, Integer httpPort, Integer telnetPort) {
+ super(instanceData, host, httpPort);
+ this.telnetPort = telnetPort;
+ }
+
+ public Integer getTelnetPort() {
+ return telnetPort;
+ }
+
+ public void setTelnetPort(Integer telnetPort) {
+ this.telnetPort = telnetPort;
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java
new file mode 100644
index 000000000..f0401af53
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java
@@ -0,0 +1,75 @@
+package org.argeo.slc.cms.distribution;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.argeo.api.a2.A2Branch;
+import org.argeo.api.a2.A2Component;
+import org.argeo.api.a2.A2Contribution;
+import org.argeo.api.a2.A2Module;
+import org.argeo.api.a2.A2Source;
+import org.argeo.api.slc.CategoryNameVersion;
+import org.argeo.api.slc.DefaultCategoryNameVersion;
+import org.argeo.api.slc.NameVersion;
+import org.argeo.api.slc.build.Distribution;
+import org.argeo.api.slc.build.ModularDistribution;
+
+public class A2Distribution implements ModularDistribution {
+ private List a2Sources = new ArrayList<>();
+
+ @Override
+ public String getDistributionId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getVersion() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Iterator extends NameVersion> nameVersions() {
+ List nameVersions = new ArrayList<>();
+ for (A2Source a2Source : a2Sources) {
+ for (A2Contribution a2Contribution : a2Source.listContributions(null)) {
+ for (A2Component a2Component : a2Contribution.listComponents(null)) {
+ for (A2Branch a2Branch : a2Component.listBranches(null)) {
+ for (A2Module a2Module : a2Branch.listModules(null)) {
+ CategoryNameVersion nameVersion = new DefaultCategoryNameVersion(a2Contribution.getId(),
+ a2Component.getId(), a2Module.getVersion().toString());
+ nameVersions.add(nameVersion);
+ }
+ }
+ }
+ }
+ }
+ return nameVersions.iterator();
+ }
+
+ @Override
+ public Distribution getModuleDistribution(String moduleName, String moduleVersion) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getModulesDescriptor(String descriptorType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List getA2Sources() {
+ return a2Sources;
+ }
+
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java
new file mode 100644
index 000000000..2a56628f1
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java
@@ -0,0 +1,14 @@
+package org.argeo.slc.cms.distribution;
+
+import org.argeo.api.a2.A2Module;
+import org.argeo.api.slc.build.Distribution;
+
+public class A2ModuleDistribution implements Distribution {
+ private A2Module a2Module;
+
+ @Override
+ public String getDistributionId() {
+ return a2Module.getCoordinates();
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java
new file mode 100644
index 000000000..10b088c53
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java
@@ -0,0 +1,20 @@
+package org.argeo.slc.cms.test;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class CmsSmokeTest {
+
+ public static void main(String[] args) throws IOException {
+ Path instanceData;
+ if (args.length > 0) {
+ instanceData = Paths.get(args[0]);
+ } else {
+ instanceData = Files.createTempDirectory("cms-test");
+ }
+
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java
new file mode 100644
index 000000000..87eefd954
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java
@@ -0,0 +1,21 @@
+package org.argeo.slc.cms.test;
+
+/**
+ * A program doing nothing and loading no classes, to be used as a baseline for
+ * memory usage of the JVM.
+ */
+public class MinimalJvm {
+
+ synchronized void sleep() {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ new MinimalJvm().sleep();
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java b/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java
new file mode 100644
index 000000000..547cda11b
--- /dev/null
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java
@@ -0,0 +1,79 @@
+package org.argeo.slc.internal.runtime.osgi;
+
+import org.argeo.api.init.RuntimeManager;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class SlcInitActivator implements BundleActivator {
+// private final static CmsLog log = CmsLog.getLog(SlcInitActivator.class);
+
+ private ServiceTracker runtimeManagerSt;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+// Path userHome = Paths.get(System.getProperty("user.home"));
+
+// {
+// EquinoxFactory equinoxFactory = new EquinoxFactory();
+// Map config = new HashMap<>();
+// config.put("osgi.console", "host1:2023");
+// config.put("osgi.frameworkParentClassloader", "app");
+// config.put("osgi.parentClassLoader", "app");
+// RuntimeManager.loadConfig(Paths.get("/usr/local/etc/argeo/user/cms/test3"), config);
+// Framework framework = equinoxFactory.newFramework(config);
+// framework.start();
+// OsgiBoot osgiBoot = new OsgiBoot(framework.getBundleContext());
+// osgiBoot.bootstrap(config);
+// }
+
+ // OsgiCmsDeployment.test();
+
+ runtimeManagerSt = new ServiceTracker<>(context, RuntimeManager.class, null) {
+
+ @Override
+ public RuntimeManager addingService(ServiceReference reference) {
+ RuntimeManager runtimeManager = super.addingService(reference);
+ new Thread() {
+ public void run() {
+// try {
+// Thread.sleep(5000);
+// } catch (InterruptedException e) {
+// return;
+// }
+
+// runtimeManager.startRuntime("rcp/test1", (config) -> {
+// config.put("osgi.console", "host1:2023");
+// config.put(CmsDeployProperty.SSHD_PORT.getProperty(), "2222");
+//// config.put(CmsDeployProperty.HTTP_PORT.getProperty(), "7070");
+// config.put(CmsDeployProperty.HOST.getProperty(), "host1");
+//// config.put("argeo.osgi.start.6", "org.argeo.swt.minidesktop");
+// });
+
+ runtimeManager.startRuntime("rap/test2", (config) -> {
+ config.put("osgi.console", "host2:2023");
+ config.put("argeo.sshd.port", "2222");
+ config.put("argeo.http.port", "7070");
+ config.put("argeo.host", "host2");
+ String a2Source = config.get("argeo.osgi.sources");
+ config.put("argeo.osgi.sources", a2Source
+ + ",a2+reference:///home/mbaudier/dev/git/unstable/output/a2?include=eu.netiket.on.apaf");
+ config.put("argeo.osgi.start.6", "eu.netiket.on.apaf");
+//// config.put("argeo.directory", "ipa:///");
+ });
+ }
+ }.start();
+
+ return runtimeManager;
+ }
+
+ };
+ runtimeManagerSt.open(false);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ }
+
+}
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/AbstractExecutionModulesManager.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/AbstractExecutionModulesManager.java
index 149665cdf..257e53d35 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/AbstractExecutionModulesManager.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/AbstractExecutionModulesManager.java
@@ -2,11 +2,11 @@ package org.argeo.slc.runtime;
import java.util.Map;
-import org.argeo.slc.execution.ExecutionContext;
-import org.argeo.slc.execution.ExecutionFlow;
-import org.argeo.slc.execution.ExecutionFlowDescriptorConverter;
-import org.argeo.slc.execution.ExecutionModulesManager;
-import org.argeo.slc.execution.RealizedFlow;
+import org.argeo.api.slc.execution.ExecutionContext;
+import org.argeo.api.slc.execution.ExecutionFlow;
+import org.argeo.api.slc.execution.ExecutionFlowDescriptorConverter;
+import org.argeo.api.slc.execution.ExecutionModulesManager;
+import org.argeo.api.slc.execution.RealizedFlow;
/** Provides the base feature of an execution module manager. */
public abstract class AbstractExecutionModulesManager implements
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgent.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgent.java
index 31b5396cf..1a9dd78ff 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgent.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgent.java
@@ -11,13 +11,13 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import org.argeo.slc.DefaultNameVersion;
-import org.argeo.slc.NameVersion;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionModuleDescriptor;
-import org.argeo.slc.execution.ExecutionModulesManager;
-import org.argeo.slc.execution.ExecutionProcess;
-import org.argeo.slc.execution.SlcAgent;
+import org.argeo.api.slc.DefaultNameVersion;
+import org.argeo.api.slc.NameVersion;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionModuleDescriptor;
+import org.argeo.api.slc.execution.ExecutionModulesManager;
+import org.argeo.api.slc.execution.ExecutionProcess;
+import org.argeo.api.slc.execution.SlcAgent;
/** Implements the base methods of an SLC agent. */
public class DefaultAgent implements SlcAgent {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgentCli.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgentCli.java
index dbe1d7f6e..97d4c616e 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgentCli.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultAgentCli.java
@@ -8,15 +8,15 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.argeo.slc.DefaultNameVersion;
-import org.argeo.slc.NameVersion;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionFlowDescriptor;
-import org.argeo.slc.execution.ExecutionModuleDescriptor;
-import org.argeo.slc.execution.ExecutionSpec;
-import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.execution.SlcAgent;
-import org.argeo.slc.execution.SlcAgentCli;
+import org.argeo.api.slc.DefaultNameVersion;
+import org.argeo.api.slc.NameVersion;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionFlowDescriptor;
+import org.argeo.api.slc.execution.ExecutionModuleDescriptor;
+import org.argeo.api.slc.execution.ExecutionSpec;
+import org.argeo.api.slc.execution.ExecutionSpecAttribute;
+import org.argeo.api.slc.execution.SlcAgent;
+import org.argeo.api.slc.execution.SlcAgentCli;
/**
* Authenticates thread and executes synchronously a command line execution.
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionFlow.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionFlow.java
index 9e31306ad..07d044b77 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionFlow.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionFlow.java
@@ -10,11 +10,11 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionContext;
-import org.argeo.slc.execution.ExecutionFlow;
-import org.argeo.slc.execution.ExecutionSpec;
-import org.argeo.slc.execution.ExecutionSpecAttribute;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionContext;
+import org.argeo.api.slc.execution.ExecutionFlow;
+import org.argeo.api.slc.execution.ExecutionSpec;
+import org.argeo.api.slc.execution.ExecutionSpecAttribute;
/** Default implementation of an execution flow. */
public class DefaultExecutionFlow implements ExecutionFlow {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionSpec.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionSpec.java
index 16790a4dc..d0b2b42d6 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionSpec.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionSpec.java
@@ -6,10 +6,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.argeo.slc.execution.ExecutionSpec;
-import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.execution.RefSpecAttribute;
-import org.argeo.slc.execution.RefValueChoice;
+import org.argeo.api.slc.execution.ExecutionSpec;
+import org.argeo.api.slc.execution.ExecutionSpecAttribute;
+import org.argeo.api.slc.execution.RefSpecAttribute;
+import org.argeo.api.slc.execution.RefValueChoice;
/** Spring based implementation of execution specifications. */
public class DefaultExecutionSpec implements ExecutionSpec, Serializable {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionStack.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionStack.java
index b30d51788..fd0f1f76f 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionStack.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultExecutionStack.java
@@ -5,10 +5,10 @@ import java.util.Map;
import java.util.Stack;
import java.util.UUID;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionFlow;
-import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.execution.ExecutionStack;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionFlow;
+import org.argeo.api.slc.execution.ExecutionSpecAttribute;
+import org.argeo.api.slc.execution.ExecutionStack;
/** Canonical implementation of an execution stack. */
public class DefaultExecutionStack implements ExecutionStack {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultProcess.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultProcess.java
index 9e98685dd..7e43dd13c 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultProcess.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/DefaultProcess.java
@@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import org.argeo.slc.execution.ExecutionProcess;
-import org.argeo.slc.execution.ExecutionStep;
-import org.argeo.slc.execution.RealizedFlow;
+import org.argeo.api.slc.execution.ExecutionProcess;
+import org.argeo.api.slc.execution.ExecutionStep;
+import org.argeo.api.slc.execution.RealizedFlow;
/** Canonical implementation of an {@link ExecutionProcess} as a bean. */
public class DefaultProcess implements ExecutionProcess {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ExecutionThread.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ExecutionThread.java
index 7e0e73778..9e2f06819 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ExecutionThread.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ExecutionThread.java
@@ -12,11 +12,11 @@ import java.util.List;
import javax.security.auth.Subject;
-import org.argeo.slc.execution.ExecutionFlowDescriptor;
-import org.argeo.slc.execution.ExecutionModulesManager;
-import org.argeo.slc.execution.ExecutionStep;
-import org.argeo.slc.execution.FlowConfigurationException;
-import org.argeo.slc.execution.RealizedFlow;
+import org.argeo.api.slc.execution.ExecutionFlowDescriptor;
+import org.argeo.api.slc.execution.ExecutionModulesManager;
+import org.argeo.api.slc.execution.ExecutionStep;
+import org.argeo.api.slc.execution.FlowConfigurationException;
+import org.argeo.api.slc.execution.RealizedFlow;
/** Thread of a single execution */
public class ExecutionThread extends Thread {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/InstantiationManager.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/InstantiationManager.java
index 2e29438e3..911e95aaa 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/InstantiationManager.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/InstantiationManager.java
@@ -3,12 +3,12 @@ package org.argeo.slc.runtime;
import java.lang.System.Logger.Level;
import java.util.Stack;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionFlow;
-import org.argeo.slc.execution.ExecutionSpecAttribute;
-import org.argeo.slc.execution.RefSpecAttribute;
-import org.argeo.slc.primitive.PrimitiveSpecAttribute;
-import org.argeo.slc.primitive.PrimitiveUtils;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionFlow;
+import org.argeo.api.slc.execution.ExecutionSpecAttribute;
+import org.argeo.api.slc.execution.RefSpecAttribute;
+import org.argeo.api.slc.primitive.PrimitiveSpecAttribute;
+import org.argeo.api.slc.primitive.PrimitiveUtils;
/** Manage parameters that need to be set during the instantiation of a flow */
public class InstantiationManager {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThread.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThread.java
index 1bbf9d128..8df7caa8e 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThread.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThread.java
@@ -13,11 +13,11 @@ import java.util.Set;
import javax.security.auth.Subject;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionModulesManager;
-import org.argeo.slc.execution.ExecutionProcess;
-import org.argeo.slc.execution.ExecutionStep;
-import org.argeo.slc.execution.RealizedFlow;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.execution.ExecutionModulesManager;
+import org.argeo.api.slc.execution.ExecutionProcess;
+import org.argeo.api.slc.execution.ExecutionStep;
+import org.argeo.api.slc.execution.RealizedFlow;
/**
* Main thread coordinating an {@link ExecutionProcess}, launching parallel or
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThreadGroup.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThreadGroup.java
index 79f38d77b..b1792ba45 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThreadGroup.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/ProcessThreadGroup.java
@@ -3,8 +3,8 @@ package org.argeo.slc.runtime;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
-import org.argeo.slc.execution.ExecutionProcess;
-import org.argeo.slc.execution.ExecutionStep;
+import org.argeo.api.slc.execution.ExecutionProcess;
+import org.argeo.api.slc.execution.ExecutionStep;
/** The thread group attached to a given {@link SlcExecution}. */
public class ProcessThreadGroup extends ThreadGroup {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/CloseTestResult.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/CloseTestResult.java
index 2bb48b8fa..aa12d78a1 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/CloseTestResult.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/CloseTestResult.java
@@ -1,6 +1,6 @@
package org.argeo.slc.runtime.tasks;
-import org.argeo.slc.test.TestResult;
+import org.argeo.api.slc.test.TestResult;
public class CloseTestResult implements Runnable {
private TestResult testResult;
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/Echo.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/Echo.java
index 6695313a3..290f2160f 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/Echo.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/Echo.java
@@ -7,7 +7,7 @@ import java.lang.System.Logger.Level;
import java.nio.file.Path;
import org.apache.commons.io.FileUtils;
-import org.argeo.slc.SlcException;
+import org.argeo.api.slc.SlcException;
public class Echo implements Runnable {
private final static Logger defaultLogger = System.getLogger(Echo.class.getName());
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/If.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/If.java
index 08eb804cc..0a634cf1a 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/If.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/If.java
@@ -1,6 +1,6 @@
package org.argeo.slc.runtime.tasks;
-import org.argeo.slc.SlcException;
+import org.argeo.api.slc.SlcException;
/** Conditional execution */
public class If implements Runnable {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/JvmProcess.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/JvmProcess.java
index c89f2b814..36f357e5f 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/JvmProcess.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/JvmProcess.java
@@ -11,7 +11,7 @@ import java.util.Map;
import java.util.Properties;
import org.apache.commons.io.IOUtils;
-import org.argeo.slc.SlcException;
+import org.argeo.api.slc.SlcException;
/** A Java Virtual Machine process. */
public class JvmProcess extends SystemCall {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/SystemCall.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/SystemCall.java
index d421cd2f2..07c67c3a1 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/SystemCall.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/tasks/SystemCall.java
@@ -39,12 +39,12 @@ import org.apache.commons.exec.PumpStreamHandler;
import org.apache.commons.exec.ShutdownHookProcessDestroyer;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.UnsupportedException;
-import org.argeo.slc.execution.ExecutionResources;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.UnsupportedException;
+import org.argeo.api.slc.execution.ExecutionResources;
+import org.argeo.api.slc.test.TestResult;
+import org.argeo.api.slc.test.TestStatus;
import org.argeo.slc.runtime.test.SimpleResultPart;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.TestStatus;
/** Execute an OS specific system call. */
public class SystemCall implements Runnable {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestData.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestData.java
index ec6261d68..8c570243a 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestData.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestData.java
@@ -1,6 +1,6 @@
package org.argeo.slc.runtime.test;
-import org.argeo.slc.test.TestData;
+import org.argeo.api.slc.test.TestData;
public class BasicTestData implements TestData {
private Object expected;
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestDefinition.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestDefinition.java
index 3bc49f611..fae387306 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestDefinition.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/BasicTestDefinition.java
@@ -1,13 +1,13 @@
package org.argeo.slc.runtime.test;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.test.IncompatibleTestDataException;
-import org.argeo.slc.test.TestData;
-import org.argeo.slc.test.TestDefinition;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.TestRun;
-import org.argeo.slc.test.TestStatus;
-import org.argeo.slc.test.context.ContextAware;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.test.IncompatibleTestDataException;
+import org.argeo.api.slc.test.TestData;
+import org.argeo.api.slc.test.TestDefinition;
+import org.argeo.api.slc.test.TestResult;
+import org.argeo.api.slc.test.TestRun;
+import org.argeo.api.slc.test.TestStatus;
+import org.argeo.api.slc.test.context.ContextAware;
/** Understands basic test data and context aware test data. */
public class BasicTestDefinition implements TestDefinition {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/ContextUtils.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/ContextUtils.java
index 96ce5e1bf..f3c52fad4 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/ContextUtils.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/ContextUtils.java
@@ -3,10 +3,10 @@ package org.argeo.slc.runtime.test;
import java.util.Map;
import java.util.TreeMap;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.TestStatus;
-import org.argeo.slc.test.context.ContextAware;
-import org.argeo.slc.test.context.ParentContextAware;
+import org.argeo.api.slc.test.TestResult;
+import org.argeo.api.slc.test.TestStatus;
+import org.argeo.api.slc.test.context.ContextAware;
+import org.argeo.api.slc.test.context.ParentContextAware;
/** Utilities for comparing and synchronising contexts. */
public class ContextUtils {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleResultPart.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleResultPart.java
index 7ba746463..f77fa9f39 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleResultPart.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleResultPart.java
@@ -2,10 +2,10 @@ package org.argeo.slc.runtime.test;
import java.io.Serializable;
-import org.argeo.slc.test.TestResultPart;
-import org.argeo.slc.test.TestRun;
-import org.argeo.slc.test.TestRunAware;
-import org.argeo.slc.test.TestStatus;
+import org.argeo.api.slc.test.TestResultPart;
+import org.argeo.api.slc.test.TestRun;
+import org.argeo.api.slc.test.TestRunAware;
+import org.argeo.api.slc.test.TestStatus;
/**
*
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestResult.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestResult.java
index 88f0a24b0..649e5d390 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestResult.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestResult.java
@@ -7,10 +7,10 @@ import java.util.TreeMap;
import java.util.UUID;
import java.util.Vector;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.TestResultPart;
-import org.argeo.slc.test.TestRun;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.test.TestResult;
+import org.argeo.api.slc.test.TestResultPart;
+import org.argeo.api.slc.test.TestRun;
/**
* Basic implementation of a test result containing only a list of result parts.
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestRun.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestRun.java
index bc0145295..44737931d 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestRun.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SimpleTestRun.java
@@ -2,12 +2,12 @@ package org.argeo.slc.runtime.test;
import java.util.UUID;
-import org.argeo.slc.deploy.DeployedSystem;
-import org.argeo.slc.test.ExecutableTestRun;
-import org.argeo.slc.test.TestData;
-import org.argeo.slc.test.TestDefinition;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.WritableTestRun;
+import org.argeo.api.slc.deploy.DeployedSystem;
+import org.argeo.api.slc.test.ExecutableTestRun;
+import org.argeo.api.slc.test.TestData;
+import org.argeo.api.slc.test.TestDefinition;
+import org.argeo.api.slc.test.TestResult;
+import org.argeo.api.slc.test.WritableTestRun;
/**
* A basic bean implementation of a WritableTestRun
, holding
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SlcTestUtils.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SlcTestUtils.java
index 5275d0f54..87409d42c 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SlcTestUtils.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/SlcTestUtils.java
@@ -1,7 +1,7 @@
package org.argeo.slc.runtime.test;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.test.TestStatus;
+import org.argeo.api.slc.SlcException;
+import org.argeo.api.slc.test.TestStatus;
public abstract class SlcTestUtils {
public static String statusToString(Integer status) {
diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/TestDataUtils.java b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/TestDataUtils.java
index 872f1a5ab..e5d8c7b2f 100644
--- a/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/TestDataUtils.java
+++ b/org.argeo.slc.runtime/src/org/argeo/slc/runtime/test/TestDataUtils.java
@@ -1,8 +1,8 @@
package org.argeo.slc.runtime.test;
-import org.argeo.slc.UnsupportedException;
-import org.argeo.slc.test.TestData;
-import org.argeo.slc.test.TestDataProvider;
+import org.argeo.api.slc.UnsupportedException;
+import org.argeo.api.slc.test.TestData;
+import org.argeo.api.slc.test.TestDataProvider;
/** Utilities for dealing with test datas. */
public class TestDataUtils {
diff --git a/sdk/argeo-build b/sdk/argeo-build
index cabcc3462..979b11e35 160000
--- a/sdk/argeo-build
+++ b/sdk/argeo-build
@@ -1 +1 @@
-Subproject commit cabcc3462226b71849ca42301c21e05b63f150c2
+Subproject commit 979b11e352bda7d783c921a62e8cb5ed950a7564
diff --git a/sdk/branches/unstable.bnd b/sdk/branches/unstable.bnd
index 15fd3081b..e179e7691 100644
--- a/sdk/branches/unstable.bnd
+++ b/sdk/branches/unstable.bnd
@@ -1,6 +1,6 @@
major=2
minor=3
-micro=14
+micro=15
qualifier=
Bundle-Copyright= \
diff --git a/sdk/slc-runtime.properties b/sdk/slc-runtime.properties
new file mode 100644
index 000000000..908d5560c
--- /dev/null
+++ b/sdk/slc-runtime.properties
@@ -0,0 +1,3 @@
+argeo.osgi.start.5=\
+org.argeo.init,\
+org.argeo.rt.cms,\
diff --git a/swt/rap/org.argeo.tool.rap.cli/bnd.bnd b/swt/rap/org.argeo.tool.rap.cli/bnd.bnd
index bc893fe0b..246564bb1 100644
--- a/swt/rap/org.argeo.tool.rap.cli/bnd.bnd
+++ b/swt/rap/org.argeo.tool.rap.cli/bnd.bnd
@@ -2,4 +2,6 @@ Import-Package: \
javax.websocket.server,\
org.eclipse.jetty.util.component,\
org.eclipse.jetty.ee8.nested,\
+org.eclipse.jetty.session,\
+org.eclipse.jetty.ee8.security,\
*
\ No newline at end of file
diff --git a/swt/rap/org.argeo.tool.rap.cli/src/org/argeo/tool/rap/cli/RwtRunner.java b/swt/rap/org.argeo.tool.rap.cli/src/org/argeo/tool/rap/cli/RwtRunner.java
index 4cd6de135..0e20b810a 100644
--- a/swt/rap/org.argeo.tool.rap.cli/src/org/argeo/tool/rap/cli/RwtRunner.java
+++ b/swt/rap/org.argeo.tool.rap.cli/src/org/argeo/tool/rap/cli/RwtRunner.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.HashMap;
import java.util.Objects;
import javax.servlet.ServletContextEvent;
@@ -17,10 +18,12 @@ import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import org.eclipse.rap.rwt.application.Application;
import org.eclipse.rap.rwt.application.Application.OperationMode;
import org.eclipse.rap.rwt.application.ApplicationConfiguration;
import org.eclipse.rap.rwt.application.ApplicationRunner;
import org.eclipse.rap.rwt.application.EntryPoint;
+import org.eclipse.rap.rwt.application.EntryPointFactory;
import org.eclipse.rap.rwt.engine.RWTServlet;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
@@ -58,6 +61,7 @@ public class RwtRunner {
// rwt-resources requires a file system
try {
tempDir = Files.createTempDirectory("argeo-rwtRunner");
+ context.setAttribute(ApplicationConfiguration.RESOURCE_ROOT_LOCATION, tempDir.resolve("www").toString());
// FIXME we need a base directory
// context.setBaseResource(new PathResource(tempDir.resolve("www")));
} catch (IOException e) {
@@ -121,17 +125,27 @@ public class RwtRunner {
RwtRunner rwtRunner = new RwtRunner();
String entryPoint = "app";
- ApplicationConfiguration applicationConfiguration = (application) -> {
- application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
- application.addEntryPoint("/" + entryPoint, () -> new EntryPoint() {
- @Override
- public int createUI() {
- MiniDesktopManager miniDesktopManager = new MiniDesktopManager(false, false);
- miniDesktopManager.init();
- miniDesktopManager.run();
- return 0;
- }
- }, null);
+ ApplicationConfiguration applicationConfiguration = new ApplicationConfiguration() {
+
+ @Override
+ public void configure(Application application) {
+ application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
+ application.addEntryPoint("/" + entryPoint, new EntryPointFactory() {
+
+ @Override
+ public EntryPoint create() {
+ return new EntryPoint() {
+ @Override
+ public int createUI() {
+ MiniDesktopManager miniDesktopManager = new MiniDesktopManager(false, false);
+ miniDesktopManager.init();
+ miniDesktopManager.run();
+ return 0;
+ }
+ };
+ }
+ }, new HashMap<>());
+ }
};
rwtRunner.setApplicationConfiguration(applicationConfiguration);