diff --git a/pom.xml b/pom.xml
index 68d69c5..20f0979 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,6 @@ cobbzilla-wizard is available under the Apache License, version 2: http://www.ap
wizard-common
wizard-server
- wizard-client
wizard-server-test
diff --git a/wizard-client/pom.xml b/wizard-client/pom.xml
deleted file mode 100644
index ca103f4..0000000
--- a/wizard-client/pom.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
- 4.0.0
-
-
- org.cobbzilla
- cobbzilla-wizard
- 1.0.0-SNAPSHOT
-
-
- wizard-client
- 1.0.0-SNAPSHOT
-
-
-
-
- org.cobbzilla
- wizard-common
- 1.0.0-SNAPSHOT
-
-
-
- org.cobbzilla
- cobbzilla-utils
- 1.0.0-SNAPSHOT
-
-
-
-
-
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScript.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScript.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScript.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScript.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScriptRunMode.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScriptRunMode.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScriptRunMode.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiInnerScriptRunMode.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiMultiScriptDriver.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiMultiScriptDriver.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiMultiScriptDriver.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiMultiScriptDriver.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunner.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunner.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunner.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunner.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListener.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListener.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListener.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListener.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerStreamLogger.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerStreamLogger.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerStreamLogger.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerListenerStreamLogger.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerMultiListener.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerMultiListener.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerMultiListener.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerMultiListener.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerWithEnv.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerWithEnv.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerWithEnv.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiRunnerWithEnv.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScript.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScript.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScript.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScript.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandler.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandler.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandler.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandler.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandlerBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandlerBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandlerBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptIncludeHandlerBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptRequest.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptRequest.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptRequest.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptRequest.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponse.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponse.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponse.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponse.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponseCheck.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponseCheck.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponseCheck.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ApiScriptResponseCheck.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ListenerFunction.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ListenerFunction.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/ListenerFunction.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/ListenerFunction.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/NamedApiConnectionInfo.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/NamedApiConnectionInfo.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/NamedApiConnectionInfo.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/NamedApiConnectionInfo.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/README.md b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/README.md
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/README.md
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/README.md
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/client/script/SimpleApiRunnerListener.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/script/SimpleApiRunnerListener.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/client/script/SimpleApiRunnerListener.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/client/script/SimpleApiRunnerListener.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/MainApiBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/MainApiBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/MainApiBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/MainApiBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/MainApiOptionsBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/MainApiOptionsBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/MainApiOptionsBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/MainApiOptionsBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/MainBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/MainBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/MainBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/MainBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/ModelSetupMainBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/ModelSetupMainBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/ModelSetupMainBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/ModelSetupMainBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/ModelSetupOptionsBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/ModelSetupOptionsBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/ModelSetupOptionsBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/ModelSetupOptionsBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/ScriptMainBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/ScriptMainBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/ScriptMainBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/ScriptMainBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/main/ScriptMainOptionsBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/main/ScriptMainOptionsBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/main/ScriptMainOptionsBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/main/ScriptMainOptionsBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestClasspathResolver.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestClasspathResolver.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestClasspathResolver.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestClasspathResolver.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestFileResolver.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestFileResolver.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestFileResolver.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ManifestFileResolver.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelDiffEntry.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelDiffEntry.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelDiffEntry.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelDiffEntry.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelEntity.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelEntity.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelEntity.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelEntity.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelManifestResolver.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelManifestResolver.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelManifestResolver.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelManifestResolver.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigration.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigration.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigration.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigration.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigrationListener.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigrationListener.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigrationListener.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelMigrationListener.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetup.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetup.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetup.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetup.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListener.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListener.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListener.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListener.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListenerBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListenerBase.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListenerBase.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelSetupListenerBase.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelVerifyLog.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelVerifyLog.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelVerifyLog.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/ModelVerifyLog.java
diff --git a/wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/StandardModelVerifyLog.java b/wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/StandardModelVerifyLog.java
similarity index 100%
rename from wizard-client/src/main/java/org/cobbzilla/wizard/model/entityconfig/StandardModelVerifyLog.java
rename to wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/StandardModelVerifyLog.java
diff --git a/wizard-client/src/main/resources/org/cobbzilla/wizard/model/entityconfig/model_verify_template.html.hbs b/wizard-common/src/main/resources/org/cobbzilla/wizard/model/entityconfig/model_verify_template.html.hbs
similarity index 100%
rename from wizard-client/src/main/resources/org/cobbzilla/wizard/model/entityconfig/model_verify_template.html.hbs
rename to wizard-common/src/main/resources/org/cobbzilla/wizard/model/entityconfig/model_verify_template.html.hbs
diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/ModelSetupService.java b/wizard-server/src/main/java/org/cobbzilla/wizard/ModelSetupService.java
new file mode 100644
index 0000000..ab0a6e7
--- /dev/null
+++ b/wizard-server/src/main/java/org/cobbzilla/wizard/ModelSetupService.java
@@ -0,0 +1,125 @@
+package org.cobbzilla.wizard;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.cobbzilla.util.io.FileUtil;
+import org.cobbzilla.wizard.api.CrudOperation;
+import org.cobbzilla.wizard.client.ApiClientBase;
+import org.cobbzilla.wizard.model.Identifiable;
+import org.cobbzilla.wizard.model.entityconfig.EntityConfig;
+import org.cobbzilla.wizard.model.entityconfig.ManifestFileResolver;
+import org.cobbzilla.wizard.model.entityconfig.ModelSetup;
+import org.cobbzilla.wizard.model.entityconfig.ModelSetupListenerBase;
+import org.cobbzilla.wizard.server.config.PgRestServerConfiguration;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.cobbzilla.util.daemon.ZillaRuntime.now;
+import static org.cobbzilla.util.daemon.ZillaRuntime.shortError;
+import static org.cobbzilla.util.io.FileUtil.extension;
+import static org.cobbzilla.util.json.JsonUtil.json;
+import static org.cobbzilla.util.json.JsonUtil.newArrayNode;
+import static org.cobbzilla.wizard.Unroll.unrollOrInvalid;
+import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx;
+
+public abstract class ModelSetupService {
+
+ protected abstract PgRestServerConfiguration getConfiguration();
+ protected abstract String getEntityConfigsEndpoint();
+ protected abstract void setOwner(Identifiable owner, Identifiable entity);
+
+ public Map> setupModel(Identifiable owner, File modelFile) {
+ File modelDir;
+ final String ext = extension(modelFile);
+ switch (ext.toLowerCase()) {
+ case ".zip": case ".gz": case ".tgz":
+ modelDir = unrollOrInvalid(modelFile, "err.entity.fileZipFormat.invalid");
+ break;
+ case ".json":
+ modelDir = null;
+ break;
+ default: throw invalidEx("err.entity.filenameExtension.invalid");
+ }
+
+ final LinkedHashMap models = new LinkedHashMap<>();
+
+ final ManifestFileResolver resolver;
+ if (modelDir == null) {
+ resolver = null;
+
+ // It's a JSON file, determine type
+ final String filename = modelFile.getName();
+ final int dotPos = filename.indexOf('.');
+ final int uPos = filename.indexOf('_');
+ final String entityClassInFilename = filename.substring(0, Math.min(dotPos == -1 ? filename.length() : dotPos, uPos == -1 ? filename.length() : uPos));
+ final Class extends Identifiable> entityClass = getConfiguration().getEntityClasses().stream()
+ .filter(c -> c.getSimpleName().equalsIgnoreCase(entityClassInFilename))
+ .findFirst().orElse(null);
+ if (entityClass == null) throw invalidEx("err.entity.classInFilename.invalid");
+
+ // Does the file contain a single object? if so, wrap in array
+ final JsonNode node = json(FileUtil.toStringOrDie(modelFile), JsonNode.class);
+ if (!node.isArray()) {
+ final JsonNode arrayNode = newArrayNode().add(node);
+ models.put(entityClass.getName(), json(arrayNode));
+ } else {
+ models.put(entityClass.getName(), json(node));
+ }
+ } else {
+ resolver = new ManifestFileResolver(modelDir);
+ final File manifest = new File(modelDir, "manifest.json");
+ if (!manifest.exists()) {
+ throw invalidEx("err.entity.manifest.required");
+ }
+ models.put("manifest", manifest.getName());
+ }
+
+ try {
+ final ApiClientBase api = getConfiguration().newApiClient();
+ final ModelSetupForOwner setup = new ModelSetupForOwner(owner);
+ return setup.setup(api, models, resolver);
+
+ } catch (Exception e) {
+ throw invalidEx("err.entity.setupError", shortError(e));
+ }
+ }
+
+ @AllArgsConstructor
+ private class ModelSetupForOwner extends ModelSetupListenerBase {
+
+ private final Identifiable owner;
+ @Getter private final Map> status = new ConcurrentHashMap<>();
+
+ @Override public void preCreate(EntityConfig entityConfig, Identifiable entity) {
+ setOwner(owner, entity);
+ super.preCreate(entityConfig, entity);
+ }
+
+ @Override public void postCreate(EntityConfig entityConfig, Identifiable entity, Identifiable created) {
+ status.computeIfAbsent(CrudOperation.create, k -> new ArrayList<>()).add(created);
+ }
+
+ @Override public void preUpdate(EntityConfig entityConfig, Identifiable entity) {
+ setOwner(owner, entity);
+ super.preUpdate(entityConfig, entity);
+ }
+
+ @Override public void postUpdate(EntityConfig entityConfig, Identifiable entity, Identifiable updated) {
+ status.computeIfAbsent(CrudOperation.update, k -> new ArrayList<>()).add(updated);
+ }
+
+ public Map> setup(ApiClientBase api,
+ LinkedHashMap models,
+ ManifestFileResolver resolver) throws Exception {
+ ModelSetup.setupModel(api, getEntityConfigsEndpoint(), models,
+ resolver, this, true, getClass().getName()+"_"+ owner.getUuid()+"_"+now());
+ return status;
+ }
+ }
+}
diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/Unroll.java b/wizard-server/src/main/java/org/cobbzilla/wizard/Unroll.java
new file mode 100644
index 0000000..f040c82
--- /dev/null
+++ b/wizard-server/src/main/java/org/cobbzilla/wizard/Unroll.java
@@ -0,0 +1,16 @@
+package org.cobbzilla.wizard;
+
+import org.cobbzilla.util.io.TempDir;
+
+import java.io.File;
+
+import static org.cobbzilla.util.io.Decompressors.unroll;
+import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx;
+
+public class Unroll {
+
+ public static TempDir unrollOrInvalid (File file, String err) {
+ try { return unroll(file); } catch (Exception e) { throw invalidEx(err); }
+ }
+
+}
diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java
index b775bb7..57d892e 100644
--- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java
+++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java
@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.exec.CommandLine;
import org.cobbzilla.util.collection.ArrayUtil;
import org.cobbzilla.util.collection.NameAndValue;
+import org.cobbzilla.util.http.ApiConnectionInfo;
import org.cobbzilla.util.io.FileUtil;
import org.cobbzilla.util.jdbc.DbDumpMode;
import org.cobbzilla.util.jdbc.ResultSetBean;
@@ -15,6 +16,7 @@ import org.cobbzilla.util.jdbc.UncheckedSqlException;
import org.cobbzilla.util.string.StringUtil;
import org.cobbzilla.util.system.Command;
import org.cobbzilla.util.system.CommandResult;
+import org.cobbzilla.wizard.client.ApiClientBase;
import org.cobbzilla.wizard.model.Identifiable;
import org.cobbzilla.wizard.model.entityconfig.EntityReferences;
import org.springframework.context.annotation.Bean;
@@ -336,4 +338,8 @@ public class PgRestServerConfiguration extends RestServerConfiguration implement
.generateConstraintSql(includeIndexes).toArray(new String[0]);
}
+ // warning: default ApiClientBase does not have an auth header set, will not work.
+ // override in subclass
+ public ApiClientBase newApiClient() { return new ApiClientBase(new ApiConnectionInfo(getLoopbackApiBase())); }
+
}