diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..8c9c62d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+ pom
+ TraQtor
+
+
+ traqtor-framework
+ traqtor-generator
+ traqtor-schema
+ traqtor-schema-ref
+ traqtor-api
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.2
+
+ 11
+ 11
+
+
+
+
+
diff --git a/traqtor-api/pom.xml b/traqtor-api/pom.xml
new file mode 100644
index 0000000..1911a8c
--- /dev/null
+++ b/traqtor-api/pom.xml
@@ -0,0 +1,70 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-api
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor / API
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ org.junit
+ junit-bom
+ 5.7.1
+ pom
+ import
+
+
+
+
+
+ ${project.groupId}
+ traqtor-schema-basic
+ ${project.version}
+
+
+ ${project.groupId}
+ traqtor-generator
+ ${project.version}
+
+
+ ${project.groupId}
+ traqtor-framework
+ ${project.version}
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.1
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
+
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/Command.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/Command.java
new file mode 100644
index 0000000..43e7cfd
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/Command.java
@@ -0,0 +1,45 @@
+package link.pagan.traqtor._api;
+
+import link.pagan.traqtor._api.result.CommandExecResult;
+import link.pagan.traqtor._api.result.message.CommandExecMessage;
+import link.pagan.traqtor._api.result.message.CommandExecMessageStatus;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class Command {
+
+ protected CommandExecResult result;
+
+ public abstract CommandExecResult exec(T object);
+
+ protected CommandExecResult fail(String message) {
+ result.add(new CommandExecMessage(CommandExecMessageStatus.FAIL, message));
+ return result;
+ }
+
+ protected CommandExecResult info(String message) {
+ result.add(new CommandExecMessage(CommandExecMessageStatus.INFO, message));
+ return result;
+ }
+
+ protected CommandExecResult warn(String message) {
+ result.add(new CommandExecMessage(CommandExecMessageStatus.WARN, message));
+ return result;
+ }
+
+ protected CommandExecResult done(String message) {
+ result.add(new CommandExecMessage(CommandExecMessageStatus.DONE, message));
+ return result;
+ }
+
+ protected CommandExecResult done() {
+ result.add(new CommandExecMessage(CommandExecMessageStatus.DONE, "OK"));
+ return result;
+ }
+
+ public void setResultHolder(CommandExecResult result) {
+ this.result = result;
+ }
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/Executor.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/Executor.java
new file mode 100644
index 0000000..24bf67a
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/Executor.java
@@ -0,0 +1,31 @@
+package link.pagan.traqtor._api;
+
+import link.pagan.traqtor._api.result.CommandExecResult;
+import link.pagan.traqtor._api.result.CommandExecResultStatus;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class Executor {
+
+ private static boolean paranoindLoggin = false;
+
+ public CommandExecResult execute(Command> command) {
+ CommandExecResult result = new CommandExecResult();
+ command.setResultHolder(result);
+ command.exec(this);
+ if (paranoindLoggin) {
+ result.print();
+ } else {
+ if (result.getStatus() != CommandExecResultStatus.DONE) {
+ result.print();
+ }
+ }
+ return result;
+ }
+
+ public static void enableParanoindLoggin() {
+ paranoindLoggin = true;
+ }
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResult.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResult.java
new file mode 100644
index 0000000..58e8cb0
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResult.java
@@ -0,0 +1,42 @@
+package link.pagan.traqtor._api.result;
+
+import java.util.ArrayList;
+import link.pagan.traqtor._api.result.message.CommandExecMessage;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class CommandExecResult {
+
+ final ArrayList messages;
+
+ public CommandExecResult() {
+ this.messages = new ArrayList();
+ }
+
+ public void add(CommandExecMessage message) {
+ this.messages.add(message);
+ }
+
+ public boolean OK () {
+ return this.getStatus() == CommandExecResultStatus.DONE;
+ }
+
+ public CommandExecResultStatus getStatus() {
+ int status = 100;
+ for (CommandExecMessage message : messages) {
+ if (status > message.getStatus().getCode()) {
+ status = message.getStatus().getCode();
+ }
+ }
+ return CommandExecResultStatus.ofCode(status);
+ }
+
+ public void print() {
+ for (CommandExecMessage message : messages) {
+ message.print();
+ }
+ }
+
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResultStatus.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResultStatus.java
new file mode 100644
index 0000000..72a82ac
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/CommandExecResultStatus.java
@@ -0,0 +1,27 @@
+package link.pagan.traqtor._api.result;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public enum CommandExecResultStatus {
+ DONE(0),
+ WARN(-1),
+ FAIL(-2);
+
+ int code;
+
+ private CommandExecResultStatus(int code) {
+ this.code = code;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public static CommandExecResultStatus ofCode (int code) {
+ if (code < -1) return FAIL;
+ if (code == -1) return WARN;
+ return DONE;
+ }
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessage.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessage.java
new file mode 100644
index 0000000..da8fb75
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessage.java
@@ -0,0 +1,33 @@
+package link.pagan.traqtor._api.result.message;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class CommandExecMessage {
+
+ final CommandExecMessageStatus status;
+ final String message;
+
+ public CommandExecMessage(CommandExecMessageStatus status, String message) {
+ this.status = status;
+ this.message = message;
+ }
+
+ public CommandExecMessageStatus getStatus() {
+ return status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void print() {
+// if (status.getCode() < 0) {
+ System.out.println(status.toString() + " : " + message);
+// } else {
+// System.out.println(status.toString() + " : " + message);
+// }
+ }
+
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessageStatus.java b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessageStatus.java
new file mode 100644
index 0000000..b947457
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/_api/result/message/CommandExecMessageStatus.java
@@ -0,0 +1,28 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor._api.result.message;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public enum CommandExecMessageStatus {
+ INFO(1),
+ DONE(0),
+ WARN(-1),
+ FAIL(-2);
+
+ int code;
+
+ private CommandExecMessageStatus(int code) {
+ this.code = code;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/api/Traqtor.java b/traqtor-api/src/main/java/link/pagan/traqtor/api/Traqtor.java
new file mode 100644
index 0000000..56e5954
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/api/Traqtor.java
@@ -0,0 +1,155 @@
+package link.pagan.traqtor.api;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import link.pagan.traqtor._api.Command;
+import link.pagan.traqtor._api.Executor;
+import link.pagan.traqtor._api.result.CommandExecResult;
+import link.pagan.traqtor.api.workspace.Workspace;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Traqtor extends Executor {
+
+ private static Traqtor env = new Traqtor();
+
+ public static CommandExecResult exec(Command command) {
+ return env.execute(command);
+ }
+
+ static void reset() {
+ env = new Traqtor();
+ }
+
+ Workspace workspace;
+
+ public static Workspace getWorkspace() {
+ return env.workspace;
+ }
+
+
+ public static class CreateWorkspace extends Command {
+
+ private final String name;
+ private final String path;
+
+ public CreateWorkspace() {
+ this(Workspace.DEFAULT_WORKSPACE_NAME);
+ }
+
+ public CreateWorkspace(String name) {
+ this(name, null);
+ }
+
+ public CreateWorkspace(String name, String path) {
+ this.name = name;
+ this.path = path;
+ }
+
+ @Override
+ public CommandExecResult exec(Traqtor traqtor) {
+ if (traqtor.workspace != null) {
+ return fail("There is an open workspace - please close this first, before creating new one");
+ }
+ traqtor.workspace = new Workspace();
+ traqtor.workspace.setName(name);
+ if (path != null) {
+ SaveAsWorkspace saveAsWorkspace = new SaveAsWorkspace(path);
+ saveAsWorkspace.setResultHolder(result);
+ saveAsWorkspace.exec(traqtor);
+ if (!result.OK()) {
+ traqtor.workspace = null;
+ return result;
+ }
+ }
+ return done();
+ }
+
+ }
+
+ public static class SaveAsWorkspace extends Command {
+
+ private String workspacePath;
+
+ public SaveAsWorkspace(String workspacePath) {
+ this.workspacePath = workspacePath;
+ }
+
+ @Override
+ public CommandExecResult exec(Traqtor traqtor) {
+ File workspaceDir = new File(workspacePath);
+ if (!workspaceDir.exists()) {
+ if (!workspaceDir.mkdir()) {
+ return fail("Failed to create workspace root directory at " + workspacePath);
+ } else {
+ info("Workspace root directory created at " + workspacePath);
+ }
+ } else {
+ if (workspaceDir.listFiles().length > 0) {
+ return fail("Root directory is not empty, failed to assing " + workspacePath + " as root for workspace");
+ }
+ }
+ File workspaceFile = new File(workspacePath, Workspace.JSON_FILENAME + ".json");
+ if (!workspaceFile.exists()) {
+ try {
+ if (!workspaceFile.createNewFile()){
+ return fail("Failed to create " + Workspace.JSON_FILENAME + ".json in workspace root directory");
+ }
+ } catch (IOException ex) {
+ return fail("IO erorr while creating " + Workspace.JSON_FILENAME + ".json in workspace root directory");
+ }
+ }
+
+ String hold = traqtor.workspace.getRoot();
+ traqtor.workspace.setRoot(workspacePath);
+
+ SaveWorkspace saveWorkspace = new SaveWorkspace();
+ saveWorkspace.setResultHolder(result);
+ saveWorkspace.exec(traqtor);
+ if (!result.OK()) {
+ traqtor.workspace.setRoot(hold);
+ return result;
+ }
+
+ return done();
+ }
+
+ }
+
+ public static class SaveWorkspace extends Command {
+
+ @Override
+ public CommandExecResult exec(Traqtor traqtor) {
+ String workspacePath = traqtor.workspace.getRoot();
+ if (traqtor.workspace.getRoot() == null) {
+ return fail("Workspace was not saved before - use \"save as\" command for the first save");
+ }
+ File workspaceFile = new File(workspacePath, Workspace.JSON_FILENAME + ".json");
+
+ if (!workspaceFile.exists()) {
+ return fail("Failed to save, " + Workspace.JSON_FILENAME + ".json does not exist, workspace corrupted?");
+ }
+
+ if (!workspaceFile.canWrite()) {
+ return fail("Can not write " + Workspace.JSON_FILENAME + ".json - permission denied");
+ }
+
+ try {
+ traqtor.workspace.getMapper().writeValue(workspaceFile, traqtor.workspace);
+ } catch (IOException ex) {
+ return fail("Failed to write " + Workspace.JSON_FILENAME + ".json");
+ }
+
+ traqtor.workspace.setDirty(false);
+
+ return done();
+ }
+
+ }
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/api/project/Project.java b/traqtor-api/src/main/java/link/pagan/traqtor/api/project/Project.java
new file mode 100644
index 0000000..78288c0
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/api/project/Project.java
@@ -0,0 +1,36 @@
+package link.pagan.traqtor.api.project;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.generator.blueprint.database.DatabaseBlueprint;
+import link.pagan.traqtor.schema.basic.EndpointSchemaImpl;
+import link.pagan.traqtor.schema.basic.data.DataTypeSchemaImpl;
+import link.pagan.traqtor.schema.data.DataTypeSchema;
+import link.pagan.traqtor.schema.logic.EndpointSchema;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Project {
+
+ private EndpointSchema endpointSchema;
+ private DataTypeSchema dataTypeSchema;
+
+ private List dataBases;
+
+ static Project init() {
+ return new Project(new EndpointSchemaImpl(), new DataTypeSchemaImpl());
+ }
+
+ public Project(EndpointSchema endpointSchema, DataTypeSchema dataTypeSchema) {
+ this.endpointSchema = endpointSchema;
+ this.dataTypeSchema = dataTypeSchema;
+ this.dataBases = new ArrayList();
+ }
+
+ void addDataBaseBlueprint(DatabaseBlueprint dataBaseBlueprint) {
+ this.dataBases.add(dataBaseBlueprint);
+ }
+
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/Workspace.java b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/Workspace.java
new file mode 100644
index 0000000..0117696
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/Workspace.java
@@ -0,0 +1,61 @@
+package link.pagan.traqtor.api.workspace;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import link.pagan.traqtor._api.Executor;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Workspace extends Executor {
+
+ public static final String JSON_FILENAME = "workspace";
+ public static final String DEFAULT_WORKSPACE_NAME = "I'm too lazy to think of a name for this workspace";
+
+ private String name;
+
+ @JsonIgnore
+ private boolean dirty;
+
+ @JsonIgnore
+ private final ObjectMapper mapper;
+
+ @JsonIgnore
+ private String root;
+
+ public Workspace() {
+ this.mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
+ this.dirty = true;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getRoot() {
+ return root;
+ }
+
+ public void setRoot(String root) {
+ this.root = root;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public ObjectMapper getMapper() {
+ return mapper;
+ }
+
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ public void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSave.java b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSave.java
new file mode 100644
index 0000000..b3cc1cc
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSave.java
@@ -0,0 +1,35 @@
+package link.pagan.traqtor.api.workspace.command;
+
+//package link.pagan.traqtor.api.workbench.command;
+//
+//import java.io.File;
+//import java.io.IOException;
+//import link.pagan.traqtor._api.Command;
+//import link.pagan.traqtor._api.result.CommandExecResult;
+//import link.pagan.traqtor.api.workbench.Workbench;
+//
+///**
+// *
+// * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+// */
+//public class WorkbenchCommandSave extends Command {
+//
+// @Override
+// public CommandExecResult exec(Workbench workbench) {
+// if (workbench.getRoot() == null) {
+// return fail("Workspace was not saved before - use \"save as\" command for the first save");
+// }
+// File demoDir = new File(workbench.getRoot());
+// File workbenchFile = new File(demoDir, Workbench.JSON_FILENAME + ".json");
+// if (!workbenchFile.exists()) {
+// return fail("Workspace lock file (" + (workbenchFile.getAbsolutePath()) + ") does not exit ");
+// }
+// try {
+// workbench.getMapper().writeValue(workbenchFile, workbench);
+// } catch (IOException ex) {
+// return fail("Failed to write" + Workbench.JSON_FILENAME + ".json");
+// }
+// return done();
+// }
+//
+//}
diff --git a/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSaveAs.java b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSaveAs.java
new file mode 100644
index 0000000..0b0d6e7
--- /dev/null
+++ b/traqtor-api/src/main/java/link/pagan/traqtor/api/workspace/command/WorkbenchCommandSaveAs.java
@@ -0,0 +1,47 @@
+package link.pagan.traqtor.api.workspace.command;
+
+//package link.pagan.traqtor.api.workbench.command;
+//
+//import java.io.File;
+//import java.io.IOException;
+//import link.pagan.traqtor._api.Command;
+//import link.pagan.traqtor._api.result.CommandExecResult;
+//import link.pagan.traqtor.api.workbench.Workbench;
+//
+///**
+// *
+// * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+// */
+//public class WorkbenchCommandSaveAs extends Command {
+//
+// String path;
+//
+// public WorkbenchCommandSaveAs(String path) {
+// this.path = path;
+// }
+//
+// @Override
+// public CommandExecResult exec(Workbench workbench) {
+// File demoDir = new File(path);
+// if (!demoDir.exists()) {
+// if (!demoDir.mkdir()) {
+// return fail("Failed to create workbench root directory at " + path);
+// } else {
+// info("Create workbench root directory at " + path);
+// }
+// } else {
+// if (demoDir.listFiles().length > 0) {
+// return fail("Root directory is not empty, failed to assing " + path + " as root for workspace");
+// }
+// }
+// File workbenchFile = new File(demoDir, Workbench.JSON_FILENAME + ".json");
+// try {
+// workbench.getMapper().writeValue(workbenchFile, workbench);
+// } catch (IOException ex) {
+// return fail("Failed to write " + Workbench.JSON_FILENAME + ".json");
+// }
+// workbench.setRoot(path);
+// return done();
+// }
+//
+//}
diff --git a/traqtor-api/src/test/java/link/pagan/traqtor/_api/TraqtorApiTestUtils.java b/traqtor-api/src/test/java/link/pagan/traqtor/_api/TraqtorApiTestUtils.java
new file mode 100644
index 0000000..722c6aa
--- /dev/null
+++ b/traqtor-api/src/test/java/link/pagan/traqtor/_api/TraqtorApiTestUtils.java
@@ -0,0 +1,28 @@
+package link.pagan.traqtor._api;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Comparator;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TraqtorApiTestUtils {
+
+ public static final String TEST_WORKSPACE_ROOT = new File(new File("").getAbsoluteFile().getParentFile(), "traqtor-demo-workspace").getAbsolutePath();
+ public static final String TEST_WORKSPACE_NAME = "TRAQTOR_DEMO_WORKSPACE";
+
+ public static final void killTestRoot() throws IOException {
+ File root = new File(TEST_WORKSPACE_ROOT);
+ if (root.exists()) {
+ Files.walk(new File(TEST_WORKSPACE_ROOT).toPath())
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+ }
+ }
+
+}
diff --git a/traqtor-api/src/test/java/link/pagan/traqtor/api/TraqtorTest.java b/traqtor-api/src/test/java/link/pagan/traqtor/api/TraqtorTest.java
new file mode 100644
index 0000000..cd669b6
--- /dev/null
+++ b/traqtor-api/src/test/java/link/pagan/traqtor/api/TraqtorTest.java
@@ -0,0 +1,71 @@
+package link.pagan.traqtor.api;
+
+import java.io.IOException;
+import link.pagan.traqtor._api.Executor;
+import link.pagan.traqtor._api.TraqtorApiTestUtils;
+import link.pagan.traqtor._api.result.CommandExecResult;
+import static link.pagan.traqtor._api.result.CommandExecResultStatus.DONE;
+import static link.pagan.traqtor._api.result.CommandExecResultStatus.FAIL;
+import org.junit.jupiter.api.AfterEach;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TraqtorTest {
+
+ CommandExecResult result;
+
+ @BeforeAll
+ public static void setup() {
+ Executor.enableParanoindLoggin();
+ }
+
+ @BeforeEach
+ public void cleanTestDir() throws IOException {
+ TraqtorApiTestUtils.killTestRoot();
+ }
+
+
+ @AfterEach
+ public void killCore() {
+ Traqtor.reset();
+ System.out.println("TEST_WORKSPACE_ROOT = " + TraqtorApiTestUtils.TEST_WORKSPACE_ROOT);
+ }
+
+ @Test
+ void newWorkspace() {
+ result = Traqtor.exec(new Traqtor.CreateWorkspace());
+ assertEquals(result.getStatus(), DONE);
+ assertEquals(Traqtor.getWorkspace().isDirty(), true);
+ }
+
+ @Test
+ void newWorkspaceSave() {
+ result = Traqtor.exec(new Traqtor.CreateWorkspace());
+ assertEquals(DONE, result.getStatus());
+ assertEquals(Traqtor.getWorkspace().isDirty(), true);
+ result = Traqtor.exec(new Traqtor.SaveWorkspace());
+ assertEquals(FAIL, result.getStatus());
+ assertEquals(Traqtor.getWorkspace().isDirty(), true);
+ }
+
+ @Test
+ void newWorkspaceWithName() {
+ result = Traqtor.exec(new Traqtor.CreateWorkspace(TraqtorApiTestUtils.TEST_WORKSPACE_NAME));
+ assertEquals(DONE, result.getStatus());
+ assertEquals(Traqtor.getWorkspace().isDirty(), true);
+ }
+
+ @Test
+ void newWorkspaceWithNameAndPath() {
+ result = Traqtor.exec(new Traqtor.CreateWorkspace(TraqtorApiTestUtils.TEST_WORKSPACE_NAME, TraqtorApiTestUtils.TEST_WORKSPACE_ROOT));
+ assertEquals(DONE, result.getStatus());
+ assertEquals(Traqtor.getWorkspace().isDirty(), false);
+ }
+
+}
diff --git a/traqtor-api/src/test/java/link/pagan/traqtor/api/workspace/WorkspaceTest.java b/traqtor-api/src/test/java/link/pagan/traqtor/api/workspace/WorkspaceTest.java
new file mode 100644
index 0000000..6320889
--- /dev/null
+++ b/traqtor-api/src/test/java/link/pagan/traqtor/api/workspace/WorkspaceTest.java
@@ -0,0 +1,55 @@
+package link.pagan.traqtor.api.workspace;
+
+//package link.pagan.traqtor.api.workbench;
+//
+//import link.pagan.traqtor.api.workbench.command.WorkbenchCommandSaveAs;
+//import link.pagan.traqtor.api.workbench.command.WorkbenchCommandSave;
+//import java.io.IOException;
+//import link.pagan.traqtor._api.PrimedTest;
+//import link.pagan.traqtor._api.Executor;
+//import link.pagan.traqtor._api.result.CommandExecResult;
+//import static link.pagan.traqtor._api.result.CommandExecResultStatus.DONE;
+//import static link.pagan.traqtor._api.result.CommandExecResultStatus.FAIL;
+//import static org.junit.jupiter.api.Assertions.assertEquals;
+//import org.junit.jupiter.api.BeforeAll;
+//import org.junit.jupiter.api.BeforeEach;
+//import org.junit.jupiter.api.Test;
+//
+///**
+// *
+// * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+// */
+//public class WorkbenchTest {
+//
+// @BeforeAll
+// public static void setup() throws IOException {
+// Executor.enableParanoindLoggin();
+// }
+//
+// @BeforeEach
+// public void clean() throws IOException {
+// killTestRoot();
+// }
+//
+//// @Test
+//// void initSave() {
+//// CommandExecResult result = Workbench.init().exec(new WorkbenchCommandSave());
+//// assertEquals(FAIL, result.getStatus());
+//// }
+////
+//// @Test
+//// void initSaveAs() {
+//// CommandExecResult result = Workbench.init().exec(new WorkbenchCommandSaveAs(TEST_ROOT));
+//// assertEquals(DONE, result.getStatus());
+//// }
+////
+//// @Test
+//// void initSaveAsSave() {
+//// Workbench workbench = Workbench.init();
+//// CommandExecResult result = workbench.exec(new WorkbenchCommandSaveAs(TEST_ROOT));
+//// assertEquals(DONE, result.getStatus());
+//// result = workbench.exec(new WorkbenchCommandSave());
+//// assertEquals(DONE, result.getStatus());
+//// }
+//
+//}
diff --git a/traqtor-framework/pom.xml b/traqtor-framework/pom.xml
new file mode 100644
index 0000000..8d1da00
--- /dev/null
+++ b/traqtor-framework/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-framework
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor / Framework
+
+ UTF-8
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+ 6.2.0.Final
+
+
+ org.glassfish
+ jakarta.el
+ 3.0.3
+
+
+ org.apache.cayenne
+ cayenne-server
+ 4.1
+
+
+
diff --git a/traqtor-framework/src/main/java/link/pagan/traqtor/framework/data/DatabaseDataObject.java b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/data/DatabaseDataObject.java
new file mode 100644
index 0000000..b9f1bf3
--- /dev/null
+++ b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/data/DatabaseDataObject.java
@@ -0,0 +1,13 @@
+package link.pagan.traqtor.framework.data;
+
+import org.apache.cayenne.BaseDataObject;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DatabaseDataObject extends BaseDataObject {
+
+ private static final long serialVersionUID = 1448137394405559485L;
+
+}
diff --git a/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Registry.java b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Registry.java
new file mode 100644
index 0000000..c18fcc6
--- /dev/null
+++ b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Registry.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.framework.logic;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Registry {
+
+}
diff --git a/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Resource.java b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Resource.java
new file mode 100644
index 0000000..945f7fa
--- /dev/null
+++ b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Resource.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.framework.logic;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Resource {
+
+}
diff --git a/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Service.java b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Service.java
new file mode 100644
index 0000000..eee8d1b
--- /dev/null
+++ b/traqtor-framework/src/main/java/link/pagan/traqtor/framework/logic/Service.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.framework.logic;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Service {
+
+}
diff --git a/traqtor-generator/pom.xml b/traqtor-generator/pom.xml
new file mode 100644
index 0000000..ae83bfa
--- /dev/null
+++ b/traqtor-generator/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-generator
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor / Source generator
+
+
+ ${project.groupId}
+ traqtor-schema
+ ${project.version}
+
+
+
+ UTF-8
+ 11
+ 11
+
+
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/ProjectBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/ProjectBlueprint.java
new file mode 100644
index 0000000..4fbe7f0
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/ProjectBlueprint.java
@@ -0,0 +1,25 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint;
+
+import link.pagan.traqtor.generator.blueprint.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ProjectBlueprint {
+
+ String name;
+ Name rootPackage;
+ String description;
+
+
+ public void assemble() {
+
+ }
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/R.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/R.java
new file mode 100644
index 0000000..c81c9cc
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/R.java
@@ -0,0 +1,30 @@
+package link.pagan.traqtor.generator.blueprint;
+
+import link.pagan.traqtor.generator.blueprint.database.builder.ColumnBlueprintBuilder;
+import link.pagan.traqtor.generator.blueprint.database.builder.DatabaseBlueprintBuilder;
+import link.pagan.traqtor.generator.blueprint.database.builder.SchemeBlueprintBuilder;
+import link.pagan.traqtor.generator.blueprint.database.builder.TableBlueprintBuilder;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class R {
+
+ public static DatabaseBlueprintBuilder database() {
+ return new DatabaseBlueprintBuilder();
+ }
+
+ public static SchemeBlueprintBuilder schema() {
+ return new SchemeBlueprintBuilder();
+ }
+
+ public static TableBlueprintBuilder table() {
+ return new TableBlueprintBuilder();
+ }
+
+ public static ColumnBlueprintBuilder column() {
+ return new ColumnBlueprintBuilder();
+ }
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/backend/BackendBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/backend/BackendBlueprint.java
new file mode 100644
index 0000000..04f59d8
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/backend/BackendBlueprint.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.backend;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class BackendBlueprint {
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/ColumnBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/ColumnBlueprint.java
new file mode 100644
index 0000000..4cd237d
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/ColumnBlueprint.java
@@ -0,0 +1,27 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.database;
+
+import link.pagan.traqtor.generator.blueprint.util.Name;
+import link.pagan.traqtor.schema.data.DataType;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ColumnBlueprint {
+
+ Name name;
+ DataType dataType;
+
+ public ColumnBlueprint(Name name) {
+ this.name = name;
+ }
+
+
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/DatabaseBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/DatabaseBlueprint.java
new file mode 100644
index 0000000..518cec1
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/DatabaseBlueprint.java
@@ -0,0 +1,22 @@
+package link.pagan.traqtor.generator.blueprint.database;
+
+import java.util.List;
+import link.pagan.traqtor.schema.data.mapping.database.DatabaseAdapter;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DatabaseBlueprint {
+
+ String name;
+ private List schemas;
+ private DatabaseAdapter databaseAdapter;
+
+ public DatabaseBlueprint(String name) {
+ this.name = name;
+ }
+
+
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/SchemeBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/SchemeBlueprint.java
new file mode 100644
index 0000000..be693cc
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/SchemeBlueprint.java
@@ -0,0 +1,19 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.database;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class SchemeBlueprint {
+
+ String name;
+ ArrayList tables;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/TableBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/TableBlueprint.java
new file mode 100644
index 0000000..8f695be
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/TableBlueprint.java
@@ -0,0 +1,19 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.database;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TableBlueprint {
+
+ String name;
+ ArrayList columns;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/ColumnBlueprintBuilder.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/ColumnBlueprintBuilder.java
new file mode 100644
index 0000000..4d87762
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/ColumnBlueprintBuilder.java
@@ -0,0 +1,55 @@
+package link.pagan.traqtor.generator.blueprint.database.builder;
+
+import link.pagan.traqtor.generator.blueprint.database.ColumnBlueprint;
+import link.pagan.traqtor.generator.blueprint.util.Name;
+import link.pagan.traqtor.schema.data.DataType;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ColumnBlueprintBuilder {
+
+ private Name name;
+ private boolean pk;
+ private DataType dataType;
+
+ public ColumnBlueprintBuilder() {
+ this.pk = false;
+ }
+
+ public boolean pk() {
+ return this.pk;
+ }
+
+ public ColumnBlueprintBuilder pk(boolean pk) {
+ this.pk = pk;
+ return this;
+ }
+
+ public ColumnBlueprintBuilder name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+
+ public Name name() {
+ return name;
+ }
+
+ public DataType dataType() {
+ return dataType;
+ }
+
+ public ColumnBlueprintBuilder dataType(DataType dataType) {
+ this.dataType = dataType;
+ return this;
+ }
+
+ public ColumnBlueprint build() {
+ return new ColumnBlueprint(name);
+ }
+
+
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/DatabaseBlueprintBuilder.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/DatabaseBlueprintBuilder.java
new file mode 100644
index 0000000..8471973
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/DatabaseBlueprintBuilder.java
@@ -0,0 +1,57 @@
+package link.pagan.traqtor.generator.blueprint.database.builder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import link.pagan.traqtor.generator.blueprint.util.Name;
+import link.pagan.traqtor.schema.data.mapping.database.DatabaseAdapter;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DatabaseBlueprintBuilder {
+
+ private Name name;
+ private DatabaseAdapter adapter;
+ private final List schemas;
+
+ public DatabaseBlueprintBuilder() {
+ this.schemas = new ArrayList();
+ }
+
+ public Name name() {
+ return name;
+ }
+
+ public DatabaseBlueprintBuilder name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public DatabaseAdapter adapter() {
+ return adapter;
+ }
+
+ public DatabaseBlueprintBuilder adapter(DatabaseAdapter adapter) {
+ this.adapter = adapter;
+ return this;
+ }
+
+ public DatabaseBlueprintBuilder schemas(SchemeBlueprintBuilder... schemas) {
+ if (schemas != null) {
+ Collections.addAll(this.schemas, schemas);
+ }
+ return this;
+ }
+
+ public SchemeBlueprintBuilder scheme(Name name) {
+ for (SchemeBlueprintBuilder sbb : schemas) {
+ if (sbb.name().equals(name)) {
+ return sbb;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/SchemeBlueprintBuilder.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/SchemeBlueprintBuilder.java
new file mode 100644
index 0000000..d0ddad5
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/SchemeBlueprintBuilder.java
@@ -0,0 +1,46 @@
+package link.pagan.traqtor.generator.blueprint.database.builder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import link.pagan.traqtor.generator.blueprint.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class SchemeBlueprintBuilder {
+
+ private Name name;
+ private final List tables;
+
+ public SchemeBlueprintBuilder() {
+ this.tables = new ArrayList();
+ }
+
+ public Name name() {
+ return name;
+ }
+
+ public SchemeBlueprintBuilder name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public SchemeBlueprintBuilder tables(TableBlueprintBuilder... tables) {
+ if (tables != null) {
+ Collections.addAll(this.tables, tables);
+ }
+ return this;
+ }
+
+ public TableBlueprintBuilder table(String name) {
+ for (TableBlueprintBuilder tbb : tables) {
+ if (tbb.name().equals(name)) {
+ return tbb;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/TableBlueprintBuilder.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/TableBlueprintBuilder.java
new file mode 100644
index 0000000..f4300a9
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/database/builder/TableBlueprintBuilder.java
@@ -0,0 +1,46 @@
+package link.pagan.traqtor.generator.blueprint.database.builder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import link.pagan.traqtor.generator.blueprint.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TableBlueprintBuilder {
+
+ private Name name;
+ private final List columns;
+
+ public TableBlueprintBuilder() {
+ this.columns = new ArrayList();
+ }
+
+ public Name name() {
+ return name;
+ }
+
+ public TableBlueprintBuilder name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public TableBlueprintBuilder columns(ColumnBlueprintBuilder... columns) {
+ if (columns != null) {
+ Collections.addAll(this.columns, columns);
+ }
+ return this;
+ }
+
+ public ColumnBlueprintBuilder column(String name) {
+ for (ColumnBlueprintBuilder cbb : columns) {
+ if (cbb.name().equals(name)) {
+ return cbb;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/frontend/FrontendBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/frontend/FrontendBlueprint.java
new file mode 100644
index 0000000..90db539
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/frontend/FrontendBlueprint.java
@@ -0,0 +1,16 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.frontend;
+
+import link.pagan.traqtor.generator.blueprint.backend.*;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class FrontendBlueprint {
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/EndpointBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/EndpointBlueprint.java
new file mode 100644
index 0000000..7895d9c
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/EndpointBlueprint.java
@@ -0,0 +1,20 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.logic;
+
+import java.util.ArrayList;
+import link.pagan.traqtor.generator.blueprint.mdl.security.permission.PermissionBlueprint;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class EndpointBlueprint {
+
+ ArrayList permissions;
+ String name;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/RegistryBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/RegistryBlueprint.java
new file mode 100644
index 0000000..db20ab6
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/RegistryBlueprint.java
@@ -0,0 +1,18 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.logic;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class RegistryBlueprint {
+
+ ArrayList endpoints;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ResourceBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ResourceBlueprint.java
new file mode 100644
index 0000000..e65a968
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ResourceBlueprint.java
@@ -0,0 +1,19 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.logic;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ResourceBlueprint {
+
+ String name;
+ ArrayList endpoints;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ServiceBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ServiceBlueprint.java
new file mode 100644
index 0000000..acc2844
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/logic/ServiceBlueprint.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.logic;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ServiceBlueprint {
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionBlueprint.java
new file mode 100644
index 0000000..ee421ad
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionBlueprint.java
@@ -0,0 +1,16 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.security.permission;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class PermissionBlueprint {
+
+ String name;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionDomainBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionDomainBlueprint.java
new file mode 100644
index 0000000..d542853
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/permission/PermissionDomainBlueprint.java
@@ -0,0 +1,20 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.security.permission;
+
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class PermissionDomainBlueprint {
+
+ String name;
+ ArrayList permissions;
+ ArrayList subdomains;
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/role/RoleBlueprint.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/role/RoleBlueprint.java
new file mode 100644
index 0000000..b349872
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/mdl/security/role/RoleBlueprint.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.mdl.security.role;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class RoleBlueprint {
+
+}
diff --git a/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/util/Name.java b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/util/Name.java
new file mode 100644
index 0000000..4656cd2
--- /dev/null
+++ b/traqtor-generator/src/main/java/link/pagan/traqtor/generator/blueprint/util/Name.java
@@ -0,0 +1,34 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.generator.blueprint.util;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Name {
+
+ String [] parts;
+
+ public Name(String[] parts) {
+ this.parts = parts;
+ }
+
+ public static Name of (String... parts) {
+ if (parts == null) {
+ throw new NullPointerException("name can not be null");
+ }
+ if (parts.length < 1) {
+ throw new IllegalArgumentException("name can not be empty");
+ }
+ return new Name(parts);
+ }
+
+
+
+
+
+}
diff --git a/traqtor-schema-ref/pom.xml b/traqtor-schema-ref/pom.xml
new file mode 100644
index 0000000..5d946d6
--- /dev/null
+++ b/traqtor-schema-ref/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-schema-ref
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor / Scheme / Reference implementation
+
+ UTF-8
+ 11
+ 11
+
+
+
+ ${project.groupId}
+ traqtor-schema
+ ${project.version}
+
+
+
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/EndpointSchemaImpl.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/EndpointSchemaImpl.java
new file mode 100644
index 0000000..015e5f3
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/EndpointSchemaImpl.java
@@ -0,0 +1,25 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.basic;
+
+import java.util.List;
+import link.pagan.traqtor.schema.logic.EndpointSchema;
+import link.pagan.traqtor.schema.logic.EndpointTemplate;
+
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class EndpointSchemaImpl implements EndpointSchema {
+
+ @Override
+ public List getPatterns() {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/DataTypeSchemaImpl.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/DataTypeSchemaImpl.java
new file mode 100644
index 0000000..c9a71bb
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/DataTypeSchemaImpl.java
@@ -0,0 +1,76 @@
+package link.pagan.traqtor.schema.basic.data;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import link.pagan.traqtor.schema.basic.data.mapping.MappingSchemaImpl;
+import link.pagan.traqtor.schema.data.DataType;
+import link.pagan.traqtor.schema.data.DataTypeSchema;
+import link.pagan.traqtor.schema.data.mapping.MappingSchema;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DataTypeSchemaImpl implements DataTypeSchema {
+
+ // ARRAY(""),
+ // LIST(""),
+ // SET(""),
+ // MAP(""),
+ public static final DataType BOOLEAN = new DataType("boolean");
+ public static final DataType BYTE = new DataType("byte");
+ public static final DataType SHORT = new DataType("short");
+ public static final DataType INTEGER = new DataType("int");
+ public static final DataType LONG = new DataType("long");
+ public static final DataType FLOAT = new DataType("float");
+ public static final DataType DOUBLE = new DataType("double");
+ public static final DataType STRING = new DataType("string");
+ public static final DataType DATE = new DataType("date");
+ public static final DataType TIME = new DataType("time");
+ public static final DataType TIMESTAMP = new DataType("timestamp");
+ public static final DataType ID = new DataType("id");
+ public static final DataType UUID = new DataType("uuid");
+
+ private static final List dataTypes = List.of(BOOLEAN, BYTE, SHORT, INTEGER, LONG, FLOAT, DOUBLE, STRING,
+ DATE, TIME, TIMESTAMP, ID, UUID);
+
+ private static final List mappingSchemas = List.of(new MappingSchemaImpl());
+
+ @Override
+ public List getDataTypes() {
+ return dataTypes;
+ }
+
+ @Override
+ public String getName() {
+ return "basic";
+ }
+
+ @Override
+ public List getMappingSchema() {
+ return mappingSchemas;
+ }
+
+ @Override
+ public Map register() {
+ return new HashMap(){{
+ put(BOOLEAN.getName(), BOOLEAN);
+ put(BYTE.getName(), BYTE);
+ put(SHORT.getName(), SHORT);
+ put(INTEGER.getName(), INTEGER);
+ put(LONG.getName(), LONG);
+ put(FLOAT.getName(), FLOAT);
+ put(DOUBLE.getName(), DOUBLE);
+ put(STRING.getName(), STRING);
+ put(BOOLEAN.getName(), BOOLEAN);
+ put(DATE.getName(), DATE);
+ put(TIME.getName(), TIME);
+ put(TIMESTAMP.getName(), TIMESTAMP);
+ put(ID.getName(), ID);
+ put(UUID.getName(), UUID);
+ }};
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/MappingSchemaImpl.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/MappingSchemaImpl.java
new file mode 100644
index 0000000..d211b53
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/MappingSchemaImpl.java
@@ -0,0 +1,56 @@
+package link.pagan.traqtor.schema.basic.data.mapping;
+
+import java.util.List;
+import link.pagan.traqtor.schema.basic.data.DataTypeSchemaImpl;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+import link.pagan.traqtor.schema.data.mapping.MappingSchema;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class MappingSchemaImpl implements MappingSchema {
+
+ public static final MappingEntry NULLABLE_BOOLEAN = new MappingEntry(DataTypeSchemaImpl.BOOLEAN , true , false );
+ public static final MappingEntry BOOLEAN = new MappingEntry(DataTypeSchemaImpl.BOOLEAN , false , true );
+ public static final MappingEntry NULLABLE_BYTE = new MappingEntry(DataTypeSchemaImpl.BYTE , true , false );
+ public static final MappingEntry BYTE = new MappingEntry(DataTypeSchemaImpl.BYTE , false , true );
+ public static final MappingEntry NULLABLE_SHORT = new MappingEntry(DataTypeSchemaImpl.SHORT , true , false );
+ public static final MappingEntry SHORT = new MappingEntry(DataTypeSchemaImpl.SHORT , false , true );
+ public static final MappingEntry NULLABLE_INTEGER = new MappingEntry(DataTypeSchemaImpl.INTEGER , true , false );
+ public static final MappingEntry INTEGER = new MappingEntry(DataTypeSchemaImpl.INTEGER , false , true );
+ public static final MappingEntry NULLABLE_LONG = new MappingEntry(DataTypeSchemaImpl.LONG , true , false );
+ public static final MappingEntry LONG = new MappingEntry(DataTypeSchemaImpl.LONG , false , true );
+ public static final MappingEntry NULLABLE_FLOAT = new MappingEntry(DataTypeSchemaImpl.FLOAT , true , false );
+ public static final MappingEntry FLOAT = new MappingEntry(DataTypeSchemaImpl.FLOAT , false , false );
+ public static final MappingEntry NULLABLE_DOUBLE = new MappingEntry(DataTypeSchemaImpl.DOUBLE , true , false );
+ public static final MappingEntry DOUBLE = new MappingEntry(DataTypeSchemaImpl.DOUBLE , false , false );
+ public static final MappingEntry STRING = new MappingEntry(DataTypeSchemaImpl.STRING , true , false );
+ public static final MappingEntry DATE = new MappingEntry(DataTypeSchemaImpl.DATE , true , false );
+ public static final MappingEntry TIME = new MappingEntry(DataTypeSchemaImpl.TIME , true , false );
+ public static final MappingEntry TIMESTAMP = new MappingEntry(DataTypeSchemaImpl.TIMESTAMP , true , false );
+ public static final MappingEntry ID = new MappingEntry(DataTypeSchemaImpl.ID , true , true );
+ public static final MappingEntry UUID = new MappingEntry(DataTypeSchemaImpl.UUID , true , true );
+
+ private static final List mappings = List.of(NULLABLE_BOOLEAN, BOOLEAN,
+ NULLABLE_BYTE, BYTE,
+ NULLABLE_SHORT, SHORT,
+ NULLABLE_INTEGER, INTEGER,
+ NULLABLE_LONG, LONG,
+ NULLABLE_FLOAT, FLOAT,
+ NULLABLE_DOUBLE, DOUBLE,
+ STRING,
+ DATE, TIME, TIMESTAMP,
+ ID, UUID);
+
+ @Override
+ public List getMappings() {
+ return mappings;
+ }
+
+ @Override
+ public String getName() {
+ return "basic";
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/backend/JavaBackendMapping.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/backend/JavaBackendMapping.java
new file mode 100644
index 0000000..9278d5c
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/backend/JavaBackendMapping.java
@@ -0,0 +1,48 @@
+package link.pagan.traqtor.schema.basic.data.mapping.backend;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.basic.data.mapping.MappingSchemaImpl;
+import link.pagan.traqtor.schema.data.mapping.backend.BackendMapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class JavaBackendMapping extends BackendMapping {
+
+ public JavaBackendMapping() {
+ super("Java", new HashMap() {
+ private static final long serialVersionUID = 1L;
+ {
+ put(MappingSchemaImpl.NULLABLE_BOOLEAN, "Boolean");
+ put(MappingSchemaImpl.NULLABLE_BYTE, "Byte");
+ put(MappingSchemaImpl.NULLABLE_SHORT, "Short");
+ put(MappingSchemaImpl.NULLABLE_INTEGER, "Integer");
+ put(MappingSchemaImpl.NULLABLE_LONG, "Long");
+
+ put(MappingSchemaImpl.BOOLEAN, "boolean");
+ put(MappingSchemaImpl.BYTE, "byte");
+ put(MappingSchemaImpl.SHORT, "short");
+ put(MappingSchemaImpl.INTEGER, "integer");
+ put(MappingSchemaImpl.LONG, "long");
+
+ put(MappingSchemaImpl.NULLABLE_DOUBLE, "Double");
+ put(MappingSchemaImpl.NULLABLE_FLOAT, "Float");
+
+ put(MappingSchemaImpl.DOUBLE, "double");
+ put(MappingSchemaImpl.FLOAT, "float");
+
+ put(MappingSchemaImpl.ID, "long");
+ put(MappingSchemaImpl.UUID, "String");
+
+ put(MappingSchemaImpl.STRING, "String");
+ put(MappingSchemaImpl.DATE, "Date");
+ put(MappingSchemaImpl.TIME, "Time");
+ put(MappingSchemaImpl.TIMESTAMP, "Timestamp");
+ }
+ });
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseAdapter.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseAdapter.java
new file mode 100644
index 0000000..48f34c8
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseAdapter.java
@@ -0,0 +1,31 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.basic.data.mapping.database;
+
+import java.util.HashMap;
+import java.util.Map;
+import link.pagan.traqtor.schema.data.mapping.database.DatabaseAdapter;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class PostgresDatabaseAdapter extends DatabaseAdapter {
+
+ private static final String NAME = "PostgreSQL";
+
+ public PostgresDatabaseAdapter() {
+ super(NAME);
+ }
+
+ @Override
+ public Map register() {
+ return new HashMap(){{
+ put(NAME, new PostgresDatabaseAdapter());
+ }};
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseMapping.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseMapping.java
new file mode 100644
index 0000000..5958426
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/database/PostgresDatabaseMapping.java
@@ -0,0 +1,47 @@
+package link.pagan.traqtor.schema.basic.data.mapping.database;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.basic.data.mapping.MappingSchemaImpl;
+import link.pagan.traqtor.schema.data.mapping.database.DatabaseMapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class PostgresDatabaseMapping extends DatabaseMapping {
+
+ public PostgresDatabaseMapping() {
+ super("PostgreSQL", new HashMap() {
+ private static final long serialVersionUID = 1L;
+ {
+ put(MappingSchemaImpl.NULLABLE_BOOLEAN, "boolean");
+ put(MappingSchemaImpl.NULLABLE_BYTE, "smallint");
+ put(MappingSchemaImpl.NULLABLE_SHORT, "smallint");
+ put(MappingSchemaImpl.NULLABLE_INTEGER, "integer");
+ put(MappingSchemaImpl.NULLABLE_LONG, "bigint");
+
+ put(MappingSchemaImpl.BOOLEAN, "boolean");
+ put(MappingSchemaImpl.BYTE, "smallint");
+ put(MappingSchemaImpl.SHORT, "smallint");
+ put(MappingSchemaImpl.INTEGER, "integer");
+ put(MappingSchemaImpl.LONG, "bigint");
+
+ put(MappingSchemaImpl.NULLABLE_DOUBLE, "double precision");
+ put(MappingSchemaImpl.NULLABLE_FLOAT, "real");
+
+ put(MappingSchemaImpl.DOUBLE, "double precision");
+ put(MappingSchemaImpl.FLOAT, "real");
+
+ put(MappingSchemaImpl.ID, "bigserial");
+ put(MappingSchemaImpl.UUID, "uuid");
+
+ put(MappingSchemaImpl.STRING, "String");
+ put(MappingSchemaImpl.DATE, "date");
+ put(MappingSchemaImpl.TIME, "time");
+ put(MappingSchemaImpl.TIMESTAMP, "timestamp");
+ }
+ });
+ }
+
+}
diff --git a/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/frontend/JavaScriptFrontendMapping.java b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/frontend/JavaScriptFrontendMapping.java
new file mode 100644
index 0000000..b3ca18a
--- /dev/null
+++ b/traqtor-schema-ref/src/main/java/link/pagan/traqtor/schema/basic/data/mapping/frontend/JavaScriptFrontendMapping.java
@@ -0,0 +1,47 @@
+package link.pagan.traqtor.schema.basic.data.mapping.frontend;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.basic.data.mapping.MappingSchemaImpl;
+import link.pagan.traqtor.schema.data.mapping.frontend.FrontendMapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class JavaScriptFrontendMapping extends FrontendMapping {
+
+ public JavaScriptFrontendMapping() {
+ super("JavaScript", new HashMap() {
+ private static final long serialVersionUID = 1L;
+ {
+ put(MappingSchemaImpl.NULLABLE_BOOLEAN, "Boolean");
+ put(MappingSchemaImpl.NULLABLE_BYTE, "Number");
+ put(MappingSchemaImpl.NULLABLE_SHORT, "Number");
+ put(MappingSchemaImpl.NULLABLE_INTEGER, "Number");
+ put(MappingSchemaImpl.NULLABLE_LONG, "BigInt");
+
+ put(MappingSchemaImpl.BOOLEAN, "Boolean");
+ put(MappingSchemaImpl.BYTE, "Number");
+ put(MappingSchemaImpl.SHORT, "Number");
+ put(MappingSchemaImpl.INTEGER, "Number");
+ put(MappingSchemaImpl.LONG, "BigInt");
+
+ put(MappingSchemaImpl.NULLABLE_DOUBLE, "Number");
+ put(MappingSchemaImpl.NULLABLE_FLOAT, "Number");
+
+ put(MappingSchemaImpl.DOUBLE, "Number");
+ put(MappingSchemaImpl.FLOAT, "Number");
+
+ put(MappingSchemaImpl.ID, "BigInt");
+ put(MappingSchemaImpl.UUID, "String");
+
+ put(MappingSchemaImpl.STRING, "String");
+ put(MappingSchemaImpl.DATE, "Date");
+ put(MappingSchemaImpl.TIME, "Date");
+ put(MappingSchemaImpl.TIMESTAMP, "Date");
+ }
+ });
+ }
+
+}
diff --git a/traqtor-schema/pom.xml b/traqtor-schema/pom.xml
new file mode 100644
index 0000000..5d5645b
--- /dev/null
+++ b/traqtor-schema/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-schema
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor / Scheme
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+
+
\ No newline at end of file
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataType.java
new file mode 100644
index 0000000..7fb971d
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataType.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.schema.data;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DataType {
+
+ private final String name;
+
+ public DataType(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataTypeSchema.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataTypeSchema.java
new file mode 100644
index 0000000..2a536d3
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/DataTypeSchema.java
@@ -0,0 +1,17 @@
+package link.pagan.traqtor.schema.data;
+
+import link.pagan.traqtor.schema.data.mapping.MappingSchema;
+import link.pagan.traqtor.util.Named;
+import java.util.List;
+import link.pagan.traqtor.util.Registrable;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface DataTypeSchema extends Named, Registrable {
+
+ public List getDataTypes();
+ public List getMappingSchema();
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/Mapping.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/Mapping.java
new file mode 100644
index 0000000..bbc1a53
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/Mapping.java
@@ -0,0 +1,27 @@
+package link.pagan.traqtor.schema.data.mapping;
+
+import java.util.HashMap;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class Mapping {
+
+ private final String name;
+ private final HashMap mapping;
+
+ protected Mapping(String name, HashMap mapping) {
+ this.mapping = mapping;
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public HashMap getMapping() {
+ return mapping;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingEntry.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingEntry.java
new file mode 100644
index 0000000..2751841
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingEntry.java
@@ -0,0 +1,35 @@
+package link.pagan.traqtor.schema.data.mapping;
+
+import link.pagan.traqtor.schema.data.DataType;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class MappingEntry {
+
+
+
+ private final DataType dataType;
+ private final boolean nullable;
+ private final boolean keyable;
+
+ public MappingEntry(DataType dataType, boolean nullable, boolean keyable) {
+ this.dataType = dataType;
+ this.nullable = nullable;
+ this.keyable = keyable;
+ }
+
+ public DataType getDataType() {
+ return dataType;
+ }
+
+ public boolean isNullable() {
+ return nullable;
+ }
+
+ public boolean isKeyable() {
+ return keyable;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingSchema.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingSchema.java
new file mode 100644
index 0000000..267cb0e
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/MappingSchema.java
@@ -0,0 +1,20 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.data.mapping;
+
+import link.pagan.traqtor.util.Named;
+import java.util.List;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface MappingSchema extends Named {
+
+ public List getMappings ();
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/backend/BackendMapping.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/backend/BackendMapping.java
new file mode 100644
index 0000000..87d59e2
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/backend/BackendMapping.java
@@ -0,0 +1,17 @@
+package link.pagan.traqtor.schema.data.mapping.backend;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.data.mapping.Mapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class BackendMapping extends Mapping {
+
+ public BackendMapping(String name, HashMap mapping) {
+ super(name, mapping);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseAdapter.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseAdapter.java
new file mode 100644
index 0000000..6f0eb67
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseAdapter.java
@@ -0,0 +1,23 @@
+package link.pagan.traqtor.schema.data.mapping.database;
+
+import link.pagan.traqtor.util.Named;
+import link.pagan.traqtor.util.Registrable;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class DatabaseAdapter implements Named, Registrable {
+
+ private final String name;
+
+ protected DatabaseAdapter(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseMapping.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseMapping.java
new file mode 100644
index 0000000..9a1eecf
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseMapping.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.schema.data.mapping.database;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.data.mapping.Mapping;
+import link.pagan.traqtor.schema.data.mapping.Mapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DatabaseMapping extends Mapping {
+
+ public DatabaseMapping(String name, HashMap mapping) {
+ super(name, mapping);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseNamingScheme.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseNamingScheme.java
new file mode 100644
index 0000000..f6001c7
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/database/DatabaseNamingScheme.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.data.mapping.database;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface DatabaseNamingScheme {
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/frontend/FrontendMapping.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/frontend/FrontendMapping.java
new file mode 100644
index 0000000..7454bca
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/data/mapping/frontend/FrontendMapping.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.schema.data.mapping.frontend;
+
+import java.util.HashMap;
+import link.pagan.traqtor.schema.data.mapping.Mapping;
+import link.pagan.traqtor.schema.data.mapping.Mapping;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+import link.pagan.traqtor.schema.data.mapping.MappingEntry;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class FrontendMapping extends Mapping {
+
+ public FrontendMapping(String name, HashMap mapping) {
+ super(name, mapping);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointSchema.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointSchema.java
new file mode 100644
index 0000000..0774e7c
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointSchema.java
@@ -0,0 +1,18 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.logic;
+
+import java.util.List;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface EndpointSchema {
+
+ public List getPatterns();
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointTemplate.java b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointTemplate.java
new file mode 100644
index 0000000..82ec908
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/schema/logic/EndpointTemplate.java
@@ -0,0 +1,16 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.schema.logic;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class EndpointTemplate {
+
+
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/util/Named.java b/traqtor-schema/src/main/java/link/pagan/traqtor/util/Named.java
new file mode 100644
index 0000000..310a7bb
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/util/Named.java
@@ -0,0 +1,11 @@
+package link.pagan.traqtor.util;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface Named {
+
+ public String getName();
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/util/Registrable.java b/traqtor-schema/src/main/java/link/pagan/traqtor/util/Registrable.java
new file mode 100644
index 0000000..b58bf7d
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/util/Registrable.java
@@ -0,0 +1,19 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package link.pagan.traqtor.util;
+
+import java.util.Map;
+import link.pagan.traqtor.schema.data.mapping.database.DatabaseAdapter;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface Registrable {
+
+ public Map register();
+
+}