diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..9c63711
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+ pom
+ TraQtor
+
+
+ UTF-8
+ 11
+ 11
+
+
+
+ traqtor-env
+ traqtor-json
+ traqtor-model
+ traqtor-schema
+ traqtor-tests
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.2
+
+ 11
+ 11
+
+
+
+
+
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/DataTypeSchemaReferenceImplementation.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/DataTypeSchemaReferenceImplementation.java
deleted file mode 100644
index bb4ecbf..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/DataTypeSchemaReferenceImplementation.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//package link.pagan.traqtor.mapping;
-//
-//
-//
-//import java.util.List;
-//import link.pagan.traqtor.outdated.schema.basic.data.mapping.MappingSchemaImpl;
-//import link.pagan.traqtor.project.universe.schema.DataType;
-//import link.pagan.traqtor.util.Name;
-//
-//
-///**
-// *
-// * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
-// */
-//public class DataTypeSchemaReferenceImplementation implements DataTypeSchema {
-//
-// private static final Name name = Name.of("traqtor", "basic");
-//
-// // 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 Name getName() {
-//// return name;
-//// }
-////
-//// @Override
-//// public List getMappingSchema() {
-//// return mappingSchemas;
-//// }
-//
-//// @Override
-//// public Map register() {
-//// return new HashMap(){
-//// private static final long serialVersionUID = 1L;
-//// {
-//// 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-aio/src/main/java/link/pagan/traqtor/mapping/Mapping.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/Mapping.java
deleted file mode 100644
index 8db101b..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/Mapping.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package link.pagan.traqtor.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-aio/src/main/java/link/pagan/traqtor/mapping/MappingEntry.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingEntry.java
deleted file mode 100644
index 9338247..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingEntry.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package link.pagan.traqtor.mapping;
-
-import link.pagan.traqtor.model.project.universe.schema.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-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchema.java
deleted file mode 100644
index 1af58ae..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchema.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package link.pagan.traqtor.mapping;
-
-import java.util.List;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public interface MappingSchema {
-
- public List getMappings ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchemaImpl.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchemaImpl.java
deleted file mode 100644
index cf51b62..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/MappingSchemaImpl.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// package link.pagan.traqtor.mapping;
-//
-//
-// import java.util.List;
-// import link.pagan.traqtor.util.Name;
-//
-//
-/// **
-// *
-// * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
-// */
-// public class MappingSchemaImpl implements MappingSchema {
-//
-// private static final Name name = Name.of("traqtor", "basic", "default");
-////
-//// public static final MappingEntry NULLABLE_BOOLEAN = new MappingEntry(DataTypeSchemaReferenceImplementation.BOOLEAN
-// , true , false );
-//// public static final MappingEntry BOOLEAN = new MappingEntry(DataTypeSchemaReferenceImplementation.BOOLEAN , false ,
-// true );
-//// public static final MappingEntry NULLABLE_BYTE = new MappingEntry(DataTypeSchemaReferenceImplementation.BYTE , true
-// , false );
-//// public static final MappingEntry BYTE = new MappingEntry(DataTypeSchemaReferenceImplementation.BYTE , false , true
-// );
-//// public static final MappingEntry NULLABLE_SHORT = new MappingEntry(DataTypeSchemaReferenceImplementation.SHORT ,
-// true , false );
-//// public static final MappingEntry SHORT = new MappingEntry(DataTypeSchemaReferenceImplementation.SHORT , false ,
-// true );
-//// public static final MappingEntry NULLABLE_INTEGER = new MappingEntry(DataTypeSchemaReferenceImplementation.INTEGER
-// , true , false );
-//// public static final MappingEntry INTEGER = new MappingEntry(DataTypeSchemaReferenceImplementation.INTEGER , false ,
-// true );
-//// public static final MappingEntry NULLABLE_LONG = new MappingEntry(DataTypeSchemaReferenceImplementation.LONG , true
-// , false );
-//// public static final MappingEntry LONG = new MappingEntry(DataTypeSchemaReferenceImplementation.LONG , false , true
-// );
-//// public static final MappingEntry NULLABLE_FLOAT = new MappingEntry(DataTypeSchemaReferenceImplementation.FLOAT ,
-// true , false );
-//// public static final MappingEntry FLOAT = new MappingEntry(DataTypeSchemaReferenceImplementation.FLOAT , false ,
-// false );
-//// public static final MappingEntry NULLABLE_DOUBLE = new MappingEntry(DataTypeSchemaReferenceImplementation.DOUBLE ,
-// true , false );
-//// public static final MappingEntry DOUBLE = new MappingEntry(DataTypeSchemaReferenceImplementation.DOUBLE , false ,
-// false );
-//// public static final MappingEntry STRING = new MappingEntry(DataTypeSchemaReferenceImplementation.STRING , true ,
-// false );
-//// public static final MappingEntry DATE = new MappingEntry(DataTypeSchemaReferenceImplementation.DATE , true , false
-// );
-//// public static final MappingEntry TIME = new MappingEntry(DataTypeSchemaReferenceImplementation.TIME , true , false
-// );
-//// public static final MappingEntry TIMESTAMP = new MappingEntry(DataTypeSchemaReferenceImplementation.TIMESTAMP ,
-// true , false );
-//// public static final MappingEntry ID = new MappingEntry(DataTypeSchemaReferenceImplementation.ID , true , true );
-//// public static final MappingEntry UUID = new MappingEntry(DataTypeSchemaReferenceImplementation.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 Name getName() {
-//// return name;
-//// }
-//
-// }
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/backend/BackendMapping.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/backend/BackendMapping.java
deleted file mode 100644
index 62c037f..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/backend/BackendMapping.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package link.pagan.traqtor.mapping.backend;
-
-import java.util.HashMap;
-import link.pagan.traqtor.mapping.Mapping;
-import link.pagan.traqtor.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-aio/src/main/java/link/pagan/traqtor/mapping/frontend/FrontendMapping.java b/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/frontend/FrontendMapping.java
deleted file mode 100644
index d6a918a..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/mapping/frontend/FrontendMapping.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package link.pagan.traqtor.mapping.frontend;
-
-import java.util.HashMap;
-import link.pagan.traqtor.mapping.Mapping;
-import link.pagan.traqtor.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-aio/src/main/java/link/pagan/traqtor/model/Workspace.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/Workspace.java
deleted file mode 100644
index b5750a8..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/Workspace.java
+++ /dev/null
@@ -1,259 +0,0 @@
-package link.pagan.traqtor.model;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import link.pagan.traqtor.util.io.Filed;
-import link.pagan.traqtor.util.io.Directoried;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import link.pagan.traqtor.util.op.OperationObjectResult;
-import link.pagan.traqtor.util.op.OperationResult;
-import link.pagan.traqtor.model.project.Project;
-import link.pagan.traqtor.model.project.database.DatabaseProject;
-import link.pagan.traqtor.model.project.universe.UniverseProject;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-@JsonDeserialize(using = WorkspaceDeserializer.class)
-@JsonSerialize(using = WorkspaceSerializer.class)
-public class Workspace implements Filed, Directoried {
-
- private ObjectMapper json;
-
- private File root;
-
- private Name name;
-
- private boolean dirty;
-
- private boolean pretty;
-
- private final List projects;
-
- public Workspace () {
- this.root = null;
- this.dirty = true;
- this.pretty = true;
- this.json = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
- this.projects = new ArrayList();
- }
-
- public UniverseProject universe () {
- UniverseProject project = new UniverseProject(this);
- this.projects.add(project);
- this.dirty = true;
- return project;
- }
-
- public DatabaseProject database () {
- DatabaseProject project = new DatabaseProject(this);
- this.projects.add(project);
- this.dirty = true;
- return project;
- }
-
- public Name name () {
- return this.name;
- }
-
- public Workspace name (Name name) {
- this.name = name;
- return this;
- }
-
- public List projects () {
- return projects;
- }
-
- public Workspace projects (Project... projects) {
- this.projects.addAll(Arrays.asList(projects));
- this.dirty = true;
- return this;
- }
-
- @Override
- public File dir () {
- return root;
- }
-
- @Override
- public File file () {
- return file(Workspace.this.dir());
- }
-
- private static File file (File dir) {
- return new File(dir, ".tw");
- }
-
- public Workspace dir (File root) {
- this.root = root;
- return this;
- }
-
- public void dirty (boolean dirty) {
- this.dirty = dirty;
- }
-
- public boolean dirty () {
- return dirty;
- }
-
- public boolean pretty () {
- return pretty;
- }
-
- public void pretty (boolean pretty) {
-
- if (pretty) {
- this.json.enable(SerializationFeature.INDENT_OUTPUT);
- } else {
- this.json.disable(SerializationFeature.INDENT_OUTPUT);
- }
- this.pretty = pretty;
- }
-
- public ObjectMapper json () {
- return json;
- }
-
- public OperationResult saveAs (File parentDir) {
- return saveAs(this, parentDir, new OperationResult());
- }
-
- private static OperationResult saveAs (Workspace workspace, File parent, OperationResult result) {
-
- if (parent == null) {
- return result
- .info("Target directory must be set, are you OK?")
- .fail("Failed to save workspace, no new root directory was passed");
- }
-
- if (!parent.exists()) {
- return result
- .info("Directory " + parent.getAbsolutePath() + " does not exist, deleted/moved/unmounted?")
- .fail("Failed to save workspace, due non existent parent direcory for new workspace");
- }
-
- if (workspace.name() == null) {
- return result
- .info("Workspace does not contain name - how did you even achieve that?")
- .fail("Failed to save workspace, due unknown name of it, huh...");
- }
-
- File root = new File(parent, workspace.name().asTiled());
-
- if (!root.exists()) {
- result.info("Creating new root direcory at " + root.getAbsolutePath());
-
- if (!root.mkdirs()) {
- return result
- .info("Unable to create directory " + root.getAbsolutePath() + " - permission problem?")
- .fail("Failed to save workspace, can not create new root directory");
- }
- }
-
- if (root.listFiles().length > 0) {
- return result
- .info("Directory " + root.getAbsolutePath() + " is not empty, not safe to save?")
- .fail("Failed to save workspace, due to polluted new root direcory");
- }
- File oldRoot = workspace.dir();
- boolean oldDirty = workspace.dirty();
-
- workspace.dir(root);
- workspace.dirty(true);
- result.info("Setting workspace root to " + root.getAbsolutePath());
- save(workspace, result.startSubresult());
-
- if (!result.ok()) {
- result.info("Reverting workspace root to " + oldRoot.getAbsolutePath());
- workspace.dir(oldRoot);
- workspace.dirty(oldDirty);
- }
- return result;
- }
-
- public OperationResult save () {
- return save(this, new OperationResult());
- }
-
- private static OperationResult save (Workspace workspace, OperationResult result) {
-
- if (!workspace.dirty()) { return result.warn("Workspace is not dirty - no need to save"); }
-
- result.info("Saving workspace " + workspace.name().asTiled() + " ...");
-
- if (workspace.dir() == null) {
- return result
- .info("Workspace root is not set - is this a new workspace?")
- .fail("Failed to save workspace, due to unknown root directory");
- }
-
- if (!workspace.dir().exists()) {
- return result
- .info("Directory " + workspace.dir().getAbsolutePath() +
- " does not exist, deleted/moved/unmounted?")
- .fail("Failed to save workspace, due non existent root direcory");
- }
-
- if (!workspace.dir().canRead()) {
- return result
- .info("Unable to read " + workspace.dir().getAbsolutePath() + " - permission problem?")
- .fail("Failed to save workspace, due unreadable root direcory");
- }
-
- if (!workspace.dir().canWrite()) {
- return result
- .info("Unable to write " + workspace.dir().getAbsolutePath() + " - permission problem?")
- .fail("Failed to save workspace, due write restriction on root direcory");
-
- }
-
- for (Project project : workspace.projects()) { project.save(result.startSubresult()); }
-
- writeJson(workspace, result.startSubresult());
-
- if (result.ok()) { workspace.dirty(false); }
-
- return result;
- }
-
- private static OperationResult writeJson (Workspace workspace, OperationResult result) {
- File file = workspace.file();
- result.info("Writing workspace descriptor file to " + file.getAbsolutePath() + " ...");
-
- try {
- workspace.json().writeValue(file, workspace);
- } catch (IOException ex) {
- return result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception")
- .fail(ex);
- }
- return result;
- }
-
- public static OperationObjectResult load (File dir) {
- OperationObjectResult result = new OperationObjectResult();
- readJson(dir, result);
- return result;
- }
-
- private static OperationObjectResult readJson (File dir, OperationObjectResult result) {
- File file = file(dir);
- result.info("Reading workspace from " + dir.getAbsolutePath() + " ...");
-
- try {
- result.info("Reading json from " + file.getAbsolutePath() + " ...");
- result.object(new ObjectMapper().readValue(file, Workspace.class));
- } catch (IOException ex) {
- return result.fail("Failed to read file " + file.getAbsolutePath() + " - IO exception").fail(ex);
- }
- result.object().dir(file);
- return result;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/Project.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/Project.java
deleted file mode 100644
index bc3c28c..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/Project.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package link.pagan.traqtor.model.project;
-
-import link.pagan.traqtor.util.io.Directoried;
-import link.pagan.traqtor.util.io.Filed;
-import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.util.op.OperationResult;
-import link.pagan.traqtor.util.Name;
-
-public abstract class Project implements Filed, Directoried {
-
- protected final Workspace workspace;
-
- protected Name name;
-
- protected boolean dirty;
-
- public Project (Workspace workspace) {
- this.workspace = workspace;
- }
-
- public Name name () {
-
- if (name == null) { return Name.NO_NAME; }
- return this.name;
- }
-
- public Project name (String... parts) {
-
- return name(Name.of(parts));
- }
-
- public Project name (Name name) {
- this.name = name;
- return this;
- }
-
- public abstract OperationResult save (OperationResult result);
-
- public Workspace workspace () {
- return workspace;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java
deleted file mode 100644
index 510d741..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package link.pagan.traqtor.model.project.database.mapping;
-
-import java.util.HashMap;
-import link.pagan.traqtor.mapping.Mapping;
-import link.pagan.traqtor.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-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseAdapter.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseAdapter.java
deleted file mode 100644
index 3160fd4..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseAdapter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package link.pagan.traqtor.model.project.database.mapping.impl;
-
-/// *
-// * 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.project.database.mapping.impl;
-//
-// import link.pagan.traqtor.project.database.mapping.DatabaseAdapter;
-// import link.pagan.traqtor.util.Name;
-//
-/// ** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-// public class PostgresDatabaseAdapter extends DatabaseAdapter {
-//
-// private static final Name NAME = Name.of("traqtor", "basic", "db", "postgres");
-//
-// public PostgresDatabaseAdapter () {
-// super(NAME);
-// }
-//
-// // @Override
-// // public Map register() {
-// // return new HashMap(){
-// // private static final long serialVersionUID = 1L;
-// // {
-// // put(NAME, new PostgresDatabaseAdapter());
-// // }};
-// // }
-//
-// @Override
-// public Name getName () { return NAME; }
-//
-// }
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseMapping.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseMapping.java
deleted file mode 100644
index 50c9c96..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/impl/PostgresDatabaseMapping.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package link.pagan.traqtor.model.project.database.mapping.impl;
-
-// package link.pagan.traqtor.project.database.mapping.impl;
-//
-// import java.util.HashMap;
-// import link.pagan.traqtor.mapping.MappingEntry;
-// import link.pagan.traqtor.project.database.mapping.DatabaseMapping;
-//
-/// ** @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-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java
deleted file mode 100644
index dd379f4..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package link.pagan.traqtor.model.project.universe;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Set;
-import java.util.TreeSet;
-import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.util.op.OperationResult;
-import link.pagan.traqtor.model.project.Project;
-import link.pagan.traqtor.model.project.universe.element.Atom;
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.link.Link;
-import link.pagan.traqtor.model.project.universe.element.Element;
-import link.pagan.traqtor.model.project.universe.element.Isotope;
-import link.pagan.traqtor.util.Name;
-
-// @JsonDeserialize(using = UniverseDeserializer.class)
-@JsonSerialize(using = UniverseSerializer.class)
-public class UniverseProject extends Project {
-
- private final Set schemas;
-
- private final Set elements;
-
- private final Set links;
-
- public UniverseProject (Workspace workspace) {
- super(workspace);
- this.schemas = new TreeSet( (DatatypeSchema a, DatatypeSchema b) -> a.name()
- .compareTo(b.name()));
- this.elements = new TreeSet( (Element a, Element b) -> a.name().compareTo(b.name()));
- this.links = new TreeSet( (Link a,
- Link b) -> (a.from().name().asDotted() + "_" + a.fromName().asDotted())
- .compareTo((b.from()
- .name()
- .asDotted() +
- "_" +
- b.fromName()
- .asDotted())));
- }
-
- @Override
- public UniverseProject name (String... parts) {
- return name(Name.of(parts));
- }
-
- @Override
- public UniverseProject name (Name name) {
- super.name(name);
- return this;
- }
-
- public DatatypeSchema[] schemas () {
- return this.schemas.toArray(new DatatypeSchema[this.schemas.size()]);
- }
-
- public UniverseProject schemas (DatatypeSchema... schemas) {
- this.schemas.addAll(Arrays.asList(schemas));
- return this;
- }
-
- public Element[] elements () {
- return this.elements.toArray(new Element[this.elements.size()]);
- }
-
- public UniverseProject elements (Element... element) {
- this.elements.addAll(Arrays.asList(element));
- return this;
- }
-
- public Link[] links () {
- return this.links.toArray(new Link[this.links.size()]);
- }
-
- public UniverseProject links (Link... links) {
- this.links.addAll(Arrays.asList(links));
- return this;
- }
-
- @Override
- public OperationResult save (OperationResult result) {
- return save(this, result);
- }
-
- private static OperationResult save (UniverseProject project, OperationResult result) {
-
- if (!project.dir().exists()) {
- result.warn("Project directory " + project.dir().getAbsolutePath() + " does not exist");
- result.info("Creating project directory at " + project.dir().getAbsolutePath() + " ...");
-
- if (!project.dir().mkdirs()) {
- return result.fail("Failed to created project directory at " + project.dir().getAbsolutePath());
- }
- }
-
- for (Element element : project.elements()) { element.save(result.startSubresult()); }
-
- writeJson(project, result.startSubresult());
-
- return result;
- }
-
- private static OperationResult writeJson (UniverseProject project, OperationResult result) {
- File file = project.file();
- result.info("Writing project descriptor file to " + file.getAbsolutePath() + " ...");
-
- try {
- project.workspace().json().writeValue(file, project);
- } catch (IOException ex) {
- result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
- result.fail(ex);
- }
- return result;
- }
-
- @Override
- public File file () {
- return new File(this.dir(), ".tup");
- }
-
- @Override
- public File dir () {
- return new File(workspace.dir(), this.name.asTiled() + "-universe");
- }
-
- public Atom atom () {
- Atom res = new Atom(this);
- this.elements.add(res);
- return res;
- }
-
- public Isotope isotope (Element base) {
- Isotope res = new Isotope(this, base);
- this.elements.add(res);
- return res;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java
deleted file mode 100644
index 5310cf0..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package link.pagan.traqtor.model.project.universe.element;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-import link.pagan.traqtor.util.io.Filed;
-import link.pagan.traqtor.util.op.OperationResult;
-import link.pagan.traqtor.model.project.universe.UniverseProject;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-// @JsonDeserialize(using = LinkDeserializer.class)
-@JsonSerialize(using = ElementSerializer.class)
-public abstract class Element implements Filed {
-
- protected final UniverseProject project;
-
- private static final Comparator> PARTICLE_SORT_COMPARATOR = new Comparator>() {
-
- @Override
- public int compare (Particle extends DataType> a, Particle extends DataType> b) {
- return a.name().asDotted().compareTo(b.name().asDotted());
- }
-
- };
-
- private Name name;
-
- private final Set> particles;
-
- public Element (UniverseProject project) {
- this.project = project;
- this.particles = new TreeSet>(PARTICLE_SORT_COMPARATOR);
- }
-
- public Name name () {
-
- if (name == null) { return Name.NO_NAME; }
- return name;
- }
-
- public Element name (String... parts) {
- return name(Name.of(parts));
- }
-
- public Element name (Name name) {
- this.name = name;
- return this;
- }
-
- public Set> particles () {
- return particles;
- }
-
- @SafeVarargs
- public final Element particles (Particle extends DataType>... particles) {
- return particles(Arrays.asList(particles));
- }
-
- public Element particles (List> particles) {
- this.particles.addAll(particles);
-
- return this;
- }
-
- public OperationResult save (OperationResult result) {
- return save(this, result);
- }
-
- private static OperationResult save (Element element, OperationResult result) {
-
- if (element.getClass().equals(Atom.class) || element.getClass().equals(Isotope.class)) {
- writeJson(element, result.startSubresult());
- } else {
- return result.fail("Unknown element type - not supported class " + element.getClass().getName());
- }
- return result;
- }
-
- private static OperationResult writeJson (Element element, OperationResult result) {
- File file = element.file();
- result.info("Writing element to " + file.getAbsolutePath() + " ...");
-
- try {
- element.project().workspace().json().writeValue(file, element);
- } catch (IOException ex) {
- result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
- result.fail(ex);
- }
- return result;
- }
-
- public UniverseProject project () {
- return project;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java
deleted file mode 100644
index de9fac6..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package link.pagan.traqtor.model.project.universe.element;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.ConstraintInfo;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-// @JsonDeserialize(using = LinkDeserializer.class)
-@JsonSerialize(using = PaticleInfoSerializer.class)
-public class Particle extends PaticleInfo {
-
- private final Set constraints;
-
- public Particle (DataType type) {
- super(type);
- this.constraints = new TreeSet( (ConstraintInfo a,
- ConstraintInfo b) -> a.name()
- .asDotted()
- .compareTo(b.name()
- .asDotted()));
- }
-
- @SafeVarargs
- public final Particle constraints (Constraint super T>... args) {
- return constraints(Arrays.asList(args));
- }
-
- public Particle constraints (List> args) {
- this.constraints.addAll(args);
- return this;
- }
-
- public Particle name (String... parts) {
- return name(Name.of(parts));
- }
-
- public Particle name (Name name) {
- this.name = name;
- return this;
- }
-
- public Particle description (String description) {
-
- return this;
- }
-
- public Particle optional (boolean optional) {
- this.optional = optional;
- return this;
- }
-
- @Override
- public Set constraints () {
- return this.constraints;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfo.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfo.java
deleted file mode 100644
index 166fc2c..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package link.pagan.traqtor.model.project.universe.element;
-
-import java.util.Set;
-import link.pagan.traqtor.model.project.universe.schema.ConstraintInfo;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class PaticleInfo {
-
- protected final DataType type;
-
- protected Name name;
-
- protected String description;
-
- protected boolean optional;
-
- public PaticleInfo (DataType type) {
- this.type = type;
- }
-
- public Name name () {
-
- if (name == null) { return Name.NO_NAME; }
- return name;
- }
-
- public String description () {
- return description;
- }
-
- public DataType type () {
- return type;
- }
-
- public abstract Set constraints ();
-
- public boolean optional () {
- return this.optional;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkType.java
deleted file mode 100644
index 861af18..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkType.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package link.pagan.traqtor.model.project.universe.link;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public enum LinkType {
-
- ONE_TO_ONE("1->1"),
- ONE_TO_MANY("1->N"),
- MANY_TO_MANY("N->N");
-
- private final String code;
-
- private LinkType (String code) {
- this.code = code;
- }
-
- public String code () {
- return code;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/Constraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/Constraint.java
deleted file mode 100644
index 2e83274..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/Constraint.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
- * @param type to which this constraint is applicable */
-
-// @JsonDeserialize(using = LinkDeserializer.class)
-@JsonSerialize(using = ConstraintInfoSerializer.class)
-public abstract class Constraint extends ConstraintInfo {
-
- protected Name name;
-
- protected Object value;
-
- public Constraint (Name name, Object value) {
- this.name = name;
- this.value = value;
- }
-
- @Override
- public Name name () {
- return name;
- }
-
- @Override
- public Object value () {
- return value;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfo.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfo.java
deleted file mode 100644
index efc5975..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfo.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema;
-
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class ConstraintInfo {
-
- public abstract Name name ();
-
- public abstract Object value ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfoSerializer.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfoSerializer.java
deleted file mode 100644
index 0cb8873..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/ConstraintInfoSerializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema;
-
-import java.io.IOException;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-class ConstraintInfoSerializer extends StdSerializer {
-
- private static final long serialVersionUID = 1L;
-
- public ConstraintInfoSerializer () {
- this(null);
- }
-
- public ConstraintInfoSerializer (Class t) {
- super(t);
- }
-
- @Override
- public void serialize (ConstraintInfo value, JsonGenerator gen, SerializerProvider provider)
- throws IOException
- {
- gen.writeStartObject();
- gen.writeObjectField("name", value.name());
- gen.writeObjectField("value", value.value());
- gen.writeEndObject();
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java
deleted file mode 100644
index f81181d..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.util.Name;
-
-public abstract class DataType {
-
- protected final Name name;
-
- protected final List> constraints;
-
- public DataType (Name name, List> constraints) {
- this.name = name;
- this.constraints = constraints;
- }
-
- public Name name () {
- return name;
- }
-
- public List> constraints () {
- return this.constraints;
- }
-
- public abstract Particle extends DataType> particle ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DatatypeSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DatatypeSchema.java
deleted file mode 100644
index c572f08..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/DatatypeSchema.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema;
-
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class DatatypeSchema {
-
- private Name name;
-
- public DatatypeSchema (Name name) {
- this.name = name;
- }
-
- public Name name () {
- return this.name;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LiteralDataTypeSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LiteralDataTypeSchema.java
deleted file mode 100644
index 4ebea94..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LiteralDataTypeSchema.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl;
-
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.StringDataType;
-import link.pagan.traqtor.util.Name;
-
-public class LiteralDataTypeSchema extends DatatypeSchema {
-
- private final static Name NAME = Name.of("default", "schema", "literal");
-
- private static final LiteralDataTypeSchema instance = new LiteralDataTypeSchema();
-
- public final StringDataType STRING = StringDataType.instance();
-
- public static LiteralDataTypeSchema instance () {
- return instance;
- }
-
- public LiteralDataTypeSchema () {
- super(NAME);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LogicDatatypeSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LogicDatatypeSchema.java
deleted file mode 100644
index 7c97991..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/LogicDatatypeSchema.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl;
-
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LogicDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.logic.BooleanDataType;
-import link.pagan.traqtor.util.Name;
-
-public class LogicDatatypeSchema extends DatatypeSchema {
-
- private final static Name NAME = Name.of("default", "schema", "logic");
-
- private static final LogicDatatypeSchema instance = new LogicDatatypeSchema();
-
- public final LogicDataType BOOLEAN = BooleanDataType.instance();
-
- public static LogicDatatypeSchema instance () {
- return instance;
- }
-
- public LogicDatatypeSchema () {
- super(NAME);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/NumericDatatypeSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/NumericDatatypeSchema.java
deleted file mode 100644
index 2b9c035..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/NumericDatatypeSchema.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl;
-
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.ByteDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.IntDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.LongDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.ShortDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.DoubleDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.FloatDataType;
-import link.pagan.traqtor.util.Name;
-
-public class NumericDatatypeSchema extends DatatypeSchema {
-
- private final static Name NAME = Name.of("default", "schema", "numeric");
-
- private static final NumericDatatypeSchema instance = new NumericDatatypeSchema();
-
- public final ByteDataType BYTE = ByteDataType.instance();
-
- public final ShortDataType SHORT = ShortDataType.instance();
-
- public final IntDataType INTEGER = IntDataType.instance();
-
- public final LongDataType LONG = LongDataType.instance();
-
- public final FloatDataType FLOAT = FloatDataType.instance();
-
- public final DoubleDataType DOUBLE = DoubleDataType.instance();
-
- public static NumericDatatypeSchema instance () {
- return instance;
- }
-
- public NumericDatatypeSchema () {
- super(NAME);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/TemporalDatatypeSchema.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/TemporalDatatypeSchema.java
deleted file mode 100644
index efe2d2e..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/TemporalDatatypeSchema.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl;
-
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.DateDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.TimeDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.TimestampDataType;
-import link.pagan.traqtor.util.Name;
-
-public class TemporalDatatypeSchema extends DatatypeSchema {
-
- private final static Name NAME = Name.of("default", "schema", "temporal");
-
- private static final TemporalDatatypeSchema instance = new TemporalDatatypeSchema();
-
- public final TemporalDataType DATE = DateDataType.instance();
-
- public final TemporalDataType TIME = TimeDataType.instance();
-
- public final TemporalDataType TIMESTAMP = TimestampDataType.instance();
-
- public static TemporalDatatypeSchema instance () {
- return instance;
- }
-
- public TemporalDatatypeSchema () {
- super(NAME);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java
deleted file mode 100644
index 8e161ee..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class LiteralDataType extends DataType {
-
- public LiteralDataType (Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends LiteralDataType> particle ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicDataType.java
deleted file mode 100644
index 31b42d0..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicDataType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class LogicDataType extends DataType {
-
- public LogicDataType (Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends LogicDataType> particle ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericDataType.java
deleted file mode 100644
index ebd57d5..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericDataType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class NumericDataType extends DataType {
-
- public NumericDataType (Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends NumericDataType> particle ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java
deleted file mode 100644
index 6a1cbb7..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class TemporalDataType extends DataType {
-
- public TemporalDataType (Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends TemporalDataType> particle ();
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java
deleted file mode 100644
index abf2ee5..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.literal;
-
-import java.util.ArrayList;
-
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.LiteralMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.LiteralMinConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.LiteralRegExpConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class StringDataType extends LiteralDataType {
-
- private static final StringDataType instance = new StringDataType();
-
- public static StringDataType instance () {
- return instance;
- }
-
- private StringDataType () {
- super(Name.of("string"), new ArrayList<>());
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
- public LiteralMinConstraint min (long min) {
- return new LiteralMinConstraint(min);
- }
-
- public LiteralMaxConstraint max (long max) {
- return new LiteralMaxConstraint(max);
- }
-
- public LiteralRegExpConstraint regExp (String regExp) {
- return new LiteralRegExpConstraint(regExp);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMaxConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMaxConstraint.java
deleted file mode 100644
index d7c8021..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMaxConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class LiteralMaxConstraint extends Constraint {
-
- private static final Name NAME = Name.of("literal", "max");
-
- public LiteralMaxConstraint (Long max) {
- super(NAME, max);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMinConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMinConstraint.java
deleted file mode 100644
index 77f0932..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralMinConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class LiteralMinConstraint extends Constraint {
-
- private static final Name NAME = Name.of("literal", "min");
-
- public LiteralMinConstraint (Long min) {
- super(NAME, min);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralRegExpConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralRegExpConstraint.java
deleted file mode 100644
index e98dd37..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/LiteralRegExpConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class LiteralRegExpConstraint extends Constraint {
-
- private static final Name NAME = Name.of("literal", "regular", "expression");
-
- public LiteralRegExpConstraint (String regExp) {
- super(NAME, regExp);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java
deleted file mode 100644
index 0c0f47e..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.logic;
-
-import java.util.ArrayList;
-
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.LogicDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class BooleanDataType extends LogicDataType {
-
- private static final BooleanDataType instance = new BooleanDataType();
-
- public static BooleanDataType instance () {
- return instance;
- }
-
- private BooleanDataType () {
- super(Name.of("boolean"), new ArrayList<>());
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java
deleted file mode 100644
index 5219ce6..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.NumericDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/**
- * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
- */
-public abstract class IntegerDataType extends NumericDataType {
-
- public IntegerDataType(Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends IntegerDataType> particle();
-
- public IntegerMinConstraint min(long min) {
- return new IntegerMinConstraint(min);
- }
-
- public IntegerMaxConstraint max(long max) {
- return new IntegerMaxConstraint(max);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java
deleted file mode 100644
index 26e2ba7..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric;
-
-import java.util.List;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.NumericDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public abstract class RationalDataType extends NumericDataType {
-
- public RationalDataType (Name name, List> constraints) {
- super(name, constraints);
- }
-
- @Override
- public abstract Particle extends RationalDataType> particle ();
-
- public RationalMinConstraint min (double min) {
- return new RationalMinConstraint(min);
- }
-
- public RationalMaxConstraint max (double max) {
- return new RationalMaxConstraint(max);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java
deleted file mode 100644
index e30b531..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class ByteDataType extends IntegerDataType {
-
- private static final ByteDataType instance = new ByteDataType();
-
- public static ByteDataType instance () {
- return instance;
- }
-
- private ByteDataType () {
- super(Name.of("byte"),
- new ArrayList<>()
- {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new IntegerMaxConstraint(Long.valueOf(Byte.MAX_VALUE)));
- add(new IntegerMinConstraint(Long.valueOf(Byte.MIN_VALUE)));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java
deleted file mode 100644
index fe3dce1..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class IntDataType extends IntegerDataType {
-
- private static final IntDataType instance = new IntDataType();
-
- public static IntDataType instance () {
- return instance;
- }
-
- private IntDataType () {
- super(Name.of("int"), new ArrayList<>() {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new IntegerMaxConstraint(Long.valueOf(Integer.MAX_VALUE)));
- add(new IntegerMinConstraint(Long.valueOf(Integer.MIN_VALUE)));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java
deleted file mode 100644
index 02fd1f5..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class LongDataType extends IntegerDataType {
-
- private static final LongDataType instance = new LongDataType();
-
- public static LongDataType instance () {
- return instance;
- }
-
- private LongDataType () {
- super(Name.of("long"), new ArrayList<>() {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new IntegerMaxConstraint(Long.MAX_VALUE));
- add(new IntegerMinConstraint(Long.MIN_VALUE));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java
deleted file mode 100644
index 9a94a06..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class ShortDataType extends IntegerDataType {
-
- private static final ShortDataType instance = new ShortDataType();
-
- public static ShortDataType instance () {
- return instance;
- }
-
- private ShortDataType () {
- super(Name.of("short"), new ArrayList<>() {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new IntegerMaxConstraint(Long.valueOf(Short.MAX_VALUE)));
- add(new IntegerMinConstraint(Long.valueOf(Short.MIN_VALUE)));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMaxConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMaxConstraint.java
deleted file mode 100644
index 33eba8c..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMaxConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class IntegerMaxConstraint extends Constraint {
-
- private static final Name NAME = Name.of("integer", "max");
-
- public IntegerMaxConstraint (Long max) {
- super(NAME, max);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMinConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMinConstraint.java
deleted file mode 100644
index 95136fc..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMinConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class IntegerMinConstraint extends Constraint {
-
- private static final Name NAME = Name.of("integer", "min");
-
- public IntegerMinConstraint (Long min) {
- super(NAME, min);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/DoubleDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/DoubleDataType.java
deleted file mode 100644
index 1ffb42f..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/DoubleDataType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class DoubleDataType extends RationalDataType {
-
- private static final DoubleDataType instance = new DoubleDataType();
-
- public static DoubleDataType instance () {
- return instance;
- }
-
- private DoubleDataType () {
- super(
- Name.of("double"),
- new ArrayList<>()
- {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new RationalMaxConstraint(Double.MAX_VALUE));
- add(new RationalMinConstraint(Double.MIN_VALUE));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/FloatDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/FloatDataType.java
deleted file mode 100644
index 723dcd2..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/FloatDataType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class FloatDataType extends RationalDataType {
-
- private static final FloatDataType instance = new FloatDataType();
-
- public static FloatDataType instance () {
- return instance;
- }
-
- private FloatDataType () {
- super(Name.of("float"), new ArrayList<>() {
-
- private static final long serialVersionUID = 1L;
-
- {
- add(new RationalMaxConstraint(Double.valueOf(Float.MAX_VALUE)));
- add(new RationalMinConstraint(Double.valueOf(Float.MIN_VALUE)));
- }
-
- });
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMaxConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMaxConstraint.java
deleted file mode 100644
index 41a626a..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMaxConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class RationalMaxConstraint extends Constraint {
-
- private static final Name NAME = Name.of("rational", "max");
-
- public RationalMaxConstraint (Double max) {
- super(NAME, max);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMinConstraint.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMinConstraint.java
deleted file mode 100644
index 54f730e..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/real/constraints/RationalMinConstraint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints;
-
-import link.pagan.traqtor.model.project.universe.schema.Constraint;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class RationalMinConstraint extends Constraint {
-
- private static final Name NAME = Name.of("rational", "min");
-
- public RationalMinConstraint (Double min) {
- super(NAME, min);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java
deleted file mode 100644
index 64b68fd..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class DateDataType extends TemporalDataType {
-
- private static final DateDataType instance = new DateDataType();
-
- public static DateDataType instance () {
- return instance;
- }
-
- private DateDataType () {
- super(Name.of("date"), new ArrayList<>());
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java
deleted file mode 100644
index 337709a..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class TimeDataType extends TemporalDataType {
-
- private static final TimeDataType instance = new TimeDataType();
-
- public static TimeDataType instance () {
- return instance;
- }
-
- private TimeDataType () {
- super(Name.of("time"), new ArrayList<>());
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java b/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java
deleted file mode 100644
index 7e3488c..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
-
-import java.util.ArrayList;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
-import link.pagan.traqtor.util.Name;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class TimestampDataType extends TemporalDataType {
-
- private static final TimestampDataType instance = new TimestampDataType();
-
- public static TimestampDataType instance () {
- return instance;
- }
-
- private TimestampDataType () {
- super(Name.of("timestamp"), new ArrayList<>());
- }
-
- @Override
- public Particle particle () {
- return new Particle(this);
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/Name.java b/traqtor-aio/src/main/java/link/pagan/traqtor/util/Name.java
deleted file mode 100644
index c64c02c..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/Name.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package link.pagan.traqtor.util;
-
-import java.util.Arrays;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-@JsonDeserialize(using = NameDeserializer.class)
-@JsonSerialize(using = NameSerializer.class)
-public class Name implements Comparable {
-
- public static final Name NO_NAME = Name.of("no", "name");
-
- String[] parts;
-
- Name (String... parts) {
- this.parts = parts;
- }
-
- public static Name of (String... parts) {
- return new Name(parts);
- }
-
- public String asTiled () {
- StringBuilder sb = new StringBuilder();
-
- for (int i = 0; i < this.parts.length; i++) {
- sb.append(parts[i]);
-
- if (i != this.parts.length - 1) { sb.append('-'); }
- }
- return sb.toString();
- }
-
- public String asDotted () {
- StringBuilder sb = new StringBuilder();
-
- for (int i = 0; i < this.parts.length; i++) {
- sb.append(parts[i]);
-
- if (i != this.parts.length - 1) { sb.append('.'); }
- }
- return sb.toString();
- }
-
- @Override
- public int compareTo (Name t) {
- return this.asDotted().compareTo(t.asDotted());
- }
-
- @Override
- public int hashCode () {
- final int prime = 31;
- int result = 1;
- result = prime * result + Arrays.hashCode(parts);
- return result;
- }
-
- @Override
- public boolean equals (Object obj) {
- if (this == obj) return true;
- if (obj == null) return false;
- if (getClass() != obj.getClass()) return false;
- Name other = (Name) obj;
- if (!Arrays.equals(parts, other.parts)) return false;
- return true;
- }
-
-}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/io/Directoried.java b/traqtor-aio/src/main/java/link/pagan/traqtor/util/io/Directoried.java
deleted file mode 100644
index 9b49fe7..0000000
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/io/Directoried.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package link.pagan.traqtor.util.io;
-
-import java.io.File;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public interface Directoried {
-
- public File dir ();
-
-}
diff --git a/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java b/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java
deleted file mode 100644
index 928459f..0000000
--- a/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package link.pagan.traqtor.test.model;
-
-import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.test.TestUtils;
-import link.pagan.traqtor.util.op.OperationObjectResult;
-import link.pagan.traqtor.util.Name;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class WorkspaceTest {
-
- @BeforeEach
- public void cleanTestDir () {
- TestUtils.rebuildTestRoot();
- }
-
- @AfterEach
- public void killCore () {
- TestUtils.deleteTestRoot();
- }
-
- @Test
- @DisplayName("Workspace save")
- void workspaceSave () {
- Workspace workspace = new Workspace().name(Name.of("traqtor", "demo", "workspace"));
- Assertions.assertTrue(!workspace.save().ok());
- TestUtils.deleteTestRoot();
- Assertions.assertTrue(!workspace.dir(TestUtils.testRoot()).save().ok());
- TestUtils.rebuildTestRoot();
- Assertions.assertTrue(workspace.saveAs(TestUtils.testRoot()).ok());
- }
-
- @Test
- @DisplayName("Workspace save/load")
- void saveLoad () {
- Workspace workspace = new Workspace().name(Name.of("traqtor", "demo", "workspace"));
- Assertions.assertTrue(workspace.saveAs(TestUtils.testRoot()).ok());
- OperationObjectResult loadResult = Workspace.load(workspace.dir());
- Assertions.assertTrue(loadResult.ok());
- Assertions.assertEquals(workspace.name(), loadResult.object().name());
- Assertions.assertEquals(workspace.pretty(), loadResult.object().pretty());
- }
-
-}
diff --git a/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java b/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java
deleted file mode 100644
index 9f7a6c7..0000000
--- a/traqtor-aio/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package link.pagan.traqtor.test.model.project.universe;
-
-import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.model.project.universe.Universe;
-import link.pagan.traqtor.model.project.universe.UniverseProject;
-import link.pagan.traqtor.model.project.universe.element.Element;
-import link.pagan.traqtor.model.project.universe.element.Particle;
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.LiteralDataTypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.LogicDatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.NumericDatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.TemporalDatatypeSchema;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.StringDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.IntDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.DoubleDataType;
-import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.FloatDataType;
-import link.pagan.traqtor.test.TestUtils;
-import link.pagan.traqtor.util.Name;
-import link.pagan.traqtor.util.RegExpHelper;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-public class UniverseProjectTest {
-
- @BeforeEach
- public void cleanTestDir () {
- TestUtils.rebuildTestRoot();
- }
-
- @AfterEach
- public void killCore () {
- TestUtils.deleteTestRoot();
- }
-
- @Test
- @DisplayName("Universe Project save")
- void projectSaveAs () {
- DatatypeSchema LITERAL = LiteralDataTypeSchema.instance();
- DatatypeSchema LOGIC = LogicDatatypeSchema.instance();
- DatatypeSchema NUMERIC = NumericDatatypeSchema.instance();
- DatatypeSchema TEMPORAL = TemporalDatatypeSchema.instance();
-
- StringDataType STRING = LiteralDataTypeSchema.instance().STRING;
- // LogicDataType BOOLEAN = LOGIC.BOOLEAN;
- // IntegerDataType BYTE = NUMERIC.BYTE;
- // IntegerDataType SHORT = NUMERIC.SHORT;
- IntDataType INTEGER = NumericDatatypeSchema.instance().INTEGER;
- // IntegerDataType LONG = NUMERIC.LONG;
- FloatDataType FLOAT = NumericDatatypeSchema.instance().FLOAT;
- DoubleDataType DOUBLE = NumericDatatypeSchema.instance().DOUBLE;
- // TemporalDataType DATE = TEMPORAL.DATE;
- // TemporalDataType TIME = TEMPORAL.TIME;
- // TemporalDataType TIMESTAMP = TEMPORAL.TIMESTAMP;
-
- Workspace workspace = new Workspace().name(Name.of("traqtor", "demo", "workspace"));
-
- UniverseProject base = workspace.universe().name("base").schemas(LITERAL, LOGIC, NUMERIC, TEMPORAL);
-
- Particle email = STRING.particle()
- .name("email")
- .description("email as main identifier for an account")
- .constraints(STRING.min(4), STRING.max(512), STRING.regExp(RegExpHelper.EMAIL));
- Particle phone = STRING.particle()
- .name("phone")
- .description("alternative identifier for an account")
- .optional(true)
- .constraints(STRING.min(10), STRING.max(32), STRING.regExp(RegExpHelper.PHONE));
- Particle password = STRING.particle()
- .name("phone")
- .description("account password")
- .constraints(STRING.min(8), STRING.max(32));
-
- Element account = base.atom()
- .name("account")
- .particles(email, phone, password);
-
- Particle lastName = STRING.particle()
- .name("last", "name")
- .description("last name of user")
- .constraints(STRING.max(64), STRING.min(1));
-
- Particle firstName = STRING.particle()
- .name("first", "name")
- .description("first name of user")
- .optional(true)
- .constraints(STRING.max(64), STRING.min(1));
-
- Particle age = INTEGER.particle()
- .name("age")
- .description("age of user owning an account")
- .constraints(INTEGER.min(18), INTEGER.max(65));
-
- Element accountDetails = base.atom()
- .name("account", "details")
- .particles(lastName, firstName, age);
-
- Particle length = DOUBLE.particle()
- .name("length")
- .description("penis length")
- .constraints(DOUBLE.min(0), DOUBLE.max(40));
-
- Element male = base.isotope(account)
- .name("male")
- .particles(length);
-
- Particle depth = FLOAT.particle()
- .name("depth")
- .description("vagina depth")
- .constraints(DOUBLE.min(0), DOUBLE.max(40));
-
- base.isotope(account)
- .name("female")
- .particles(depth);
-
- Particle positionName = STRING.particle()
- .name("title")
- .description("position name")
- .constraints(STRING.max(255), STRING.min(3));
-
- Element position = base.atom()
- .name("position")
- .particles(positionName);
-
- Particle idNumber = STRING.particle()
- .name("number")
- .description("military id number")
- .constraints(STRING.max(11), STRING.min(11));
-
- Element militaryId = base.atom()
- .name("military", "id")
- .particles(idNumber);
-
- Element profile = base.atom()
- .name(("profile"));
-
- base.links(Universe.linkOneToOne()
- .from(account)
- .fromName("details")
- .to(accountDetails)
- .toName("account")
- .mandatory(), Universe.linkOneToMany()
- .from(account)
- .fromName("profiles")
- .to(profile)
- .toName("account")
- .more(0), Universe.linkManyToMany()
- .from(profile)
- .fromName("positions")
- .to(position)
- .toName("profiles"), Universe.linkOneToOne()
- .from(male)
- .fromName("military", "id")
- .to(militaryId)
- .toName("account"));
-
- UniverseProject data = workspace.universe()
- .name("data")
- .schemas(LITERAL);
-
- Particle organizationName = STRING.particle()
- .name("name")
- .description("full name of an organization")
- .constraints(STRING.max(255), STRING.min(3));
- Element organization = data.atom();
- organization.name("organization");
- organization.particles(organizationName);
-
- Assertions.assertTrue(workspace.saveAs(TestUtils.testRoot()).ok());
- }
-
- @Test
- @DisplayName("Universe Project load")
- void projectLoad () {
- Workspace.load(TestUtils.testRoot());
- }
-
-}
diff --git a/traqtor-env/pom.xml b/traqtor-env/pom.xml
new file mode 100644
index 0000000..0a52a20
--- /dev/null
+++ b/traqtor-env/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-env
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor - Environment
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ org.junit
+ junit-bom
+ 5.7.1
+ pom
+ import
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ ${project.groupId}
+ traqtor-json
+ ${project.version}
+
+
+ ${project.groupId}
+ traqtor-schema
+ ${project.version}
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
+
diff --git a/traqtor-env/src/main/java/link/pagan/traqtor/env/Environment.java b/traqtor-env/src/main/java/link/pagan/traqtor/env/Environment.java
new file mode 100644
index 0000000..1dcab75
--- /dev/null
+++ b/traqtor-env/src/main/java/link/pagan/traqtor/env/Environment.java
@@ -0,0 +1,217 @@
+package link.pagan.traqtor.env;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import link.pagan.traqtor.env.actions.OperationObjectResult;
+import link.pagan.traqtor.env.actions.OperationResult;
+import link.pagan.traqtor.model.Workspace;
+import link.pagan.traqtor.model.project.universe.schema.DataTypeSchema;
+import link.pagan.traqtor.model.project.universe.schema.impl.DefaultSchema;
+
+import link.pagan.traqtor.util.Name;
+
+public class Environment {
+
+ private final Map datatypeSchemas;
+
+ private Environment () {
+ this.datatypeSchemas = new HashMap();
+ this.addDatatypeSchema(DefaultSchema.INSTANCE);
+ }
+
+ private void addDatatypeSchema (DataTypeSchema schema) {
+ this.datatypeSchemas.put(schema.name(), schema);
+ }
+
+ public DataTypeSchema schemaByName (Name name) {
+ return datatypeSchemas.get(name);
+ }
+
+ public static Environment init () {
+ return new Environment();
+ }
+
+ public Workspace workspace () {
+ return new Workspace();
+ }
+
+ // public OperationResult saveAs (File parentDir) {
+// return saveAs(this, parentDir, new OperationResult());
+// }
+//
+// private static OperationResult saveAs (Workspace workspace, File parent, OperationResult result) {
+//
+// if (parent == null) {
+// return result
+// .info("Target directory must be set, are you OK?")
+// .fail("Failed to save workspace, no new root directory was passed");
+// }
+//
+// if (!parent.exists()) {
+// return result
+// .info("Directory " + parent.getAbsolutePath() + " does not exist, deleted/moved/unmounted?")
+// .fail("Failed to save workspace, due non existent parent direcory for new workspace");
+// }
+//
+// if (workspace.name() == null) {
+// return result
+// .info("Workspace does not contain name - how did you even achieve that?")
+// .fail("Failed to save workspace, due unknown name of it, huh...");
+// }
+//
+// File root = new File(parent, workspace.name().asTiled());
+//
+// if (!root.exists()) {
+// result.info("Creating new root direcory at " + root.getAbsolutePath());
+//
+// if (!root.mkdirs()) {
+// return result
+// .info("Unable to create directory " + root.getAbsolutePath() + " - permission problem?")
+// .fail("Failed to save workspace, can not create new root directory");
+// }
+// }
+//
+// if (root.listFiles().length > 0) {
+// return result
+// .info("Directory " + root.getAbsolutePath() + " is not empty, not safe to save?")
+// .fail("Failed to save workspace, due to polluted new root direcory");
+// }
+// File oldRoot = workspace.dir();
+// boolean oldDirty = workspace.dirty();
+//
+// workspace.dir(root);
+// workspace.dirty(true);
+// result.info("Setting workspace root to " + root.getAbsolutePath());
+// save(workspace, result.startSubresult());
+//
+// if (!result.ok()) {
+// result.info("Reverting workspace root to " + oldRoot.getAbsolutePath());
+// workspace.dir(oldRoot);
+// workspace.dirty(oldDirty);
+// }
+// return result;
+// }
+
+// public OperationResult save () {
+// return save(this, new OperationResult());
+// }
+
+// private static OperationResult save (Workspace workspace, OperationResult result) {
+//
+// if (!workspace.dirty()) { return result.warn("Workspace is not dirty - no need to save"); }
+//
+// result.info("Saving workspace " + workspace.name().asTiled() + " ...");
+//
+// if (workspace.dir() == null) {
+// return result
+// .info("Workspace root is not set - is this a new workspace?")
+// .fail("Failed to save workspace, due to unknown root directory");
+// }
+//
+// if (!workspace.dir().exists()) {
+// return result
+// .info("Directory " + workspace.dir().getAbsolutePath() +
+// " does not exist, deleted/moved/unmounted?")
+// .fail("Failed to save workspace, due non existent root direcory");
+// }
+//
+// if (!workspace.dir().canRead()) {
+// return result
+// .info("Unable to read " + workspace.dir().getAbsolutePath() + " - permission problem?")
+// .fail("Failed to save workspace, due unreadable root direcory");
+// }
+//
+// if (!workspace.dir().canWrite()) {
+// return result
+// .info("Unable to write " + workspace.dir().getAbsolutePath() + " - permission problem?")
+// .fail("Failed to save workspace, due write restriction on root direcory");
+//
+// }
+//
+// for (Project project : workspace.projects()) { project.save(result.startSubresult()); }
+//
+// writeJson(workspace, result.startSubresult());
+//
+// if (result.ok()) { workspace.dirty(false); }
+//
+// return result;
+// }
+
+// private static OperationResult writeJson (Workspace workspace, OperationResult result) {
+// File file = workspace.file();
+// result.info("Writing workspace descriptor file to " + file.getAbsolutePath() + " ...");
+//
+// try {
+// workspace.json().writeValue(file, workspace);
+// } catch (IOException ex) {
+// return result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception")
+// .fail(ex);
+// }
+// return result;
+// }
+
+// public static OperationObjectResult load (File dir) {
+// OperationObjectResult result = new OperationObjectResult();
+// readJson(dir, result);
+//
+// for (File projectsDir : dir.listFiles()) {
+//
+// if (projectsDir.isDirectory()) {
+//
+// ProjectType guessedProjectType = Project.guessProjectType(projectsDir);
+//
+// if (guessedProjectType != null) {
+//
+// switch (guessedProjectType) {
+// case UNIVERSE: {
+// UniverseProject.load(projectsDir);
+// break;
+// }
+// case DATABASE: {
+//
+// break;
+// }
+// case BACKEND: {
+//
+// break;
+// }
+// case FRONTEND: {
+//
+// break;
+// }
+// }
+//
+// }
+// }
+// }
+// return result;
+// }
+
+// private static OperationObjectResult readJson (File dir, OperationObjectResult result) {
+// File file = file(dir);
+// result.info("Reading workspace from " + dir.getAbsolutePath() + " ...");
+//
+// try {
+// result.info("Reading json from " + file.getAbsolutePath() + " ...");
+// result.object(new ObjectMapper().readValue(file, Workspace.class));
+// } catch (IOException ex) {
+// return result.fail("Failed to read file " + file.getAbsolutePath() + " - IO exception").fail(ex);
+// }
+// result.object().dir(file);
+// return result;
+// }
+
+ public OperationObjectResult workspaceLoad(File dir) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ public OperationResult workspaceSaveAs(Workspace workspace, File dir) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ public OperationResult workspaceSave(Workspace workspace) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationMessage.java b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationMessage.java
similarity index 96%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationMessage.java
rename to traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationMessage.java
index ce1aa3a..e5ee8c1 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationMessage.java
+++ b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationMessage.java
@@ -1,4 +1,4 @@
-package link.pagan.traqtor.util.op;
+package link.pagan.traqtor.env.actions;
import java.text.Format;
import java.text.SimpleDateFormat;
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationObjectResult.java b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationObjectResult.java
similarity index 96%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationObjectResult.java
rename to traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationObjectResult.java
index da305cd..c16171a 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationObjectResult.java
+++ b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationObjectResult.java
@@ -1,4 +1,4 @@
-package link.pagan.traqtor.util.op;
+package link.pagan.traqtor.env.actions;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class OperationObjectResult extends OperationResult {
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationResult.java b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationResult.java
similarity index 98%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationResult.java
rename to traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationResult.java
index e7cd39b..ee3754d 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/op/OperationResult.java
+++ b/traqtor-env/src/main/java/link/pagan/traqtor/env/actions/OperationResult.java
@@ -1,4 +1,4 @@
-package link.pagan.traqtor.util.op;
+package link.pagan.traqtor.env.actions;
import java.util.LinkedList;
diff --git a/traqtor-json/pom.xml b/traqtor-json/pom.xml
new file mode 100644
index 0000000..d3f5f63
--- /dev/null
+++ b/traqtor-json/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-json
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor - Json
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ org.junit
+ junit-bom
+ 5.7.1
+ pom
+ import
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.1
+
+
+ ${project.groupId}
+ traqtor-model
+ ${project.version}
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
+
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java
similarity index 51%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java
index b99307e..781b6f2 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java
+++ b/traqtor-json/src/main/java/link/pagan/traqtor/model/WorkspaceDeserializer.java
@@ -6,36 +6,45 @@ import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import link.pagan.traqtor.util.Name;
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
class WorkspaceDeserializer extends StdDeserializer {
private static final long serialVersionUID = 1L;
- protected WorkspaceDeserializer () {
+ protected WorkspaceDeserializer() {
this(null);
}
- protected WorkspaceDeserializer (Class t) {
+ protected WorkspaceDeserializer(Class t) {
super(t);
}
+ protected final static ObjectMapper MAPPER = new ObjectMapper();
+
@Override
- public Workspace deserialize (JsonParser parser, DeserializationContext ctxt) throws IOException,
- JsonProcessingException
- {
+ public Workspace deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException,
+ JsonProcessingException {
+
Workspace workspace = new Workspace();
- TreeNode tree = workspace.json().readTree(parser);
+ TreeNode tree = MAPPER.readTree(parser);
TreeNode nameNode = tree.get("name");
TreeNode prettyNode = tree.get("pretty");
- if (nameNode != null) { workspace.name(workspace.json().treeToValue(nameNode, Name.class)); }
+ if (nameNode != null) {
+ workspace.name(MAPPER.treeToValue(nameNode, Name.class));
+ }
- if (prettyNode != null) { workspace.pretty(workspace.json().treeToValue(prettyNode, Boolean.class)); }
+ if (prettyNode != null) {
+ workspace.pretty(MAPPER.treeToValue(prettyNode, Boolean.class));
+ }
return workspace;
}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/WorkspaceSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/WorkspaceSerializer.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/WorkspaceSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/WorkspaceSerializer.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java
similarity index 90%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java
index 2fdb068..66d9f6a 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java
+++ b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/UniverseSerializer.java
@@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import link.pagan.traqtor.model.project.universe.link.Link;
-import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
+import link.pagan.traqtor.model.project.universe.schema.DataTypeSchema;
class UniverseSerializer extends StdSerializer {
@@ -29,7 +29,7 @@ class UniverseSerializer extends StdSerializer {
gen.writeObjectField("name", value.name());
gen.writeArrayFieldStart("schemas");
- for (DatatypeSchema schema : value.schemas()) { gen.writeObject(schema.name()); }
+ for (DataTypeSchema schema : value.schemas()) { gen.writeObject(schema.name()); }
gen.writeEndArray();
gen.writeArrayFieldStart("links");
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java
similarity index 85%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java
index f8a0b74..55931e8 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java
+++ b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ElementSerializer.java
@@ -4,7 +4,6 @@ import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
class ElementSerializer extends StdSerializer {
@@ -30,7 +29,7 @@ class ElementSerializer extends StdSerializer {
}
gen.writeArrayFieldStart("particles");
- for (Particle extends DataType> particle : value.particles()) { gen.writeObject(particle); }
+ for (Particle particle : value.particles()) { gen.writeObject(particle); }
gen.writeEndArray();
gen.writeEndObject();
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfoSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ParticleSerializer.java
similarity index 61%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfoSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ParticleSerializer.java
index 2f2bb5a..92993f3 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/PaticleInfoSerializer.java
+++ b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/element/ParticleSerializer.java
@@ -4,35 +4,33 @@ import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import link.pagan.traqtor.model.project.universe.schema.ConstraintInfo;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
-class PaticleInfoSerializer extends StdSerializer {
+class ParticleSerializer extends StdSerializer {
private static final long serialVersionUID = 1L;
- public PaticleInfoSerializer () {
+ public ParticleSerializer () {
this(null);
}
- public PaticleInfoSerializer (Class t) {
+ public ParticleSerializer (Class t) {
super(t);
}
@Override
- public void serialize (PaticleInfo value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+ public void serialize (Particle value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeObjectField("name", value.name());
gen.writeObjectField("type", value.type().name());
if (value.description() != null) { gen.writeStringField("description", value.description()); }
- if (value.optional()) { gen.writeStringField("optional", value.description()); }
-
if (value.constraints().size() > 0) {
gen.writeArrayFieldStart("constraints");
- for (ConstraintInfo constraint : value.constraints()) { gen.writeObject(constraint); }
+ for (ParticleConstraint constraint : value.constraints()) { gen.writeObject(constraint); }
gen.writeEndArray();
}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkSerializer.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/model/project/universe/link/LinkSerializer.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/NameDeserializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/util/NameDeserializer.java
similarity index 96%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/NameDeserializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/util/NameDeserializer.java
index 73b2966..60a6fa5 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/util/NameDeserializer.java
+++ b/traqtor-json/src/main/java/link/pagan/traqtor/util/NameDeserializer.java
@@ -4,7 +4,6 @@ import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/NameSerializer.java b/traqtor-json/src/main/java/link/pagan/traqtor/util/NameSerializer.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/NameSerializer.java
rename to traqtor-json/src/main/java/link/pagan/traqtor/util/NameSerializer.java
diff --git a/traqtor-model/pom.xml b/traqtor-model/pom.xml
new file mode 100644
index 0000000..343e1e0
--- /dev/null
+++ b/traqtor-model/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-model
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor - Model
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ org.junit
+ junit-bom
+ 5.7.1
+ pom
+ import
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
+
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/Workspace.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/Workspace.java
new file mode 100644
index 0000000..30d8fff
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/Workspace.java
@@ -0,0 +1,108 @@
+package link.pagan.traqtor.model;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import link.pagan.traqtor.model.project.Project;
+import link.pagan.traqtor.model.project.database.DatabaseProject;
+import link.pagan.traqtor.model.project.universe.UniverseProject;
+import link.pagan.traqtor.util.Name;
+import link.pagan.traqtor.util.io.Directoried;
+import link.pagan.traqtor.util.io.Filed;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Workspace implements Filed, Directoried {
+
+ // private ObjectMapper json;
+
+ private File root;
+
+ private Name name;
+
+ private boolean dirty;
+
+ private boolean pretty;
+
+ private final List projects;
+
+ public Workspace() {
+ this.root = null;
+ this.dirty = true;
+ this.pretty = true;
+ // this.json = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
+ this.projects = new ArrayList();
+ }
+
+ public UniverseProject universe() {
+ UniverseProject project = new UniverseProject(this);
+ this.projects.add(project);
+ this.dirty = true;
+ return project;
+ }
+
+ public DatabaseProject database() {
+ DatabaseProject project = new DatabaseProject(this);
+ this.projects.add(project);
+ this.dirty = true;
+ return project;
+ }
+
+ public Name name() {
+ return this.name;
+ }
+
+ public Workspace name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public List projects() {
+ return projects;
+ }
+
+ public Workspace projects(Project... projects) {
+ this.projects.addAll(Arrays.asList(projects));
+ this.dirty = true;
+ return this;
+ }
+
+ @Override
+ public File dir() {
+ return root;
+ }
+
+ @Override
+ public File file() {
+ return file(Workspace.this.dir());
+ }
+
+ private static File file(File dir) {
+ return new File(dir, ".tw");
+ }
+
+ public Workspace dir(File root) {
+ this.root = root;
+ return this;
+ }
+
+ public void dirty(boolean dirty) {
+ this.dirty = dirty;
+ }
+
+ public boolean dirty() {
+ return dirty;
+ }
+
+ public boolean pretty() {
+ return pretty;
+ }
+
+ public void pretty(boolean pretty) {
+ this.pretty = pretty;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/Project.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/Project.java
new file mode 100644
index 0000000..1ed133d
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/Project.java
@@ -0,0 +1,70 @@
+package link.pagan.traqtor.model.project;
+
+import link.pagan.traqtor.util.io.Directoried;
+import link.pagan.traqtor.util.io.Filed;
+
+import java.io.File;
+
+import link.pagan.traqtor.model.Workspace;
+import link.pagan.traqtor.model.project.universe.UniverseProject;
+import link.pagan.traqtor.util.Name;
+
+public abstract class Project implements Filed, Directoried {
+
+ public enum ProjectType {
+
+ UNIVERSE, DATABASE, FRONTEND, BACKEND;
+
+ }
+
+ protected final Workspace workspace;
+
+ protected Name name;
+
+ protected boolean dirty;
+
+ public Project(Workspace workspace) {
+ this.workspace = workspace;
+ }
+
+ public Name name() {
+
+ if (name == null) {
+ return Name.NO_NAME;
+ }
+ return this.name;
+ }
+
+ public Project name(String... parts) {
+
+ return name(Name.of(parts));
+ }
+
+ public Project name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ // public abstract OperationResult save (OperationResult result);
+
+ public abstract ProjectType type();
+
+ public Workspace workspace() {
+ return workspace;
+ }
+
+ public static ProjectType guessProjectType(File projectsDir) {
+
+ for (File file : projectsDir.listFiles()) {
+
+ if (file.isFile()) {
+
+ if (file.getName().endsWith(UniverseProject.EXTENSION)) {
+ return ProjectType.UNIVERSE;
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java
similarity index 65%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java
index 073e724..7117e04 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/backend/mapping/BackendProject.java
@@ -7,7 +7,7 @@ package link.pagan.traqtor.model.project.backend.mapping;
import java.io.File;
import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.util.op.OperationResult;
+// import link.pagan.traqtor.util.op.OperationResult;
import link.pagan.traqtor.model.project.Project;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
@@ -16,12 +16,12 @@ public class BackendProject extends Project {
public BackendProject (Workspace workspace) {
super(workspace);
}
-
- @Override
- public OperationResult save (OperationResult result) {
- throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
- // Tools | Templates.
- }
+//
+// @Override
+// public OperationResult save (OperationResult result) {
+// throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
+// // Tools | Templates.
+// }
@Override
public File file () {
@@ -33,4 +33,9 @@ public class BackendProject extends Project {
return new File(workspace.dir(), this.name.asTiled() + "-backend");
}
+ @Override
+ public ProjectType type () {
+ return ProjectType.BACKEND;
+ }
+
}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/backend/mapping/JavaBackendMapping.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/backend/mapping/JavaBackendMapping.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/backend/mapping/JavaBackendMapping.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/backend/mapping/JavaBackendMapping.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseColumn.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseColumn.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseColumn.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseColumn.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java
similarity index 72%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java
index f5a7566..0d72698 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseProject.java
@@ -2,7 +2,7 @@ package link.pagan.traqtor.model.project.database;
import java.io.File;
import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.util.op.OperationResult;
+// import link.pagan.traqtor.util.op.OperationResult;
import link.pagan.traqtor.model.project.universe.UniverseProject;
import link.pagan.traqtor.model.project.Project;
import link.pagan.traqtor.util.Name;
@@ -34,11 +34,11 @@ public class DatabaseProject extends Project {
return this;
}
- @Override
- public OperationResult save (OperationResult result) {
- throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
- // Tools | Templates.
- }
+// @Override
+// public OperationResult save (OperationResult result) {
+// throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
+// // Tools | Templates.
+// }
@Override
public File file () {
@@ -50,4 +50,9 @@ public class DatabaseProject extends Project {
return new File(workspace.dir(), this.name.asTiled() + "-database");
}
+ @Override
+ public ProjectType type () {
+ return ProjectType.DATABASE;
+ }
+
}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseSchema.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseSchema.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseSchema.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseSchema.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseTable.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseTable.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/DatabaseTable.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/DatabaseTable.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseAdapter.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseAdapter.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseAdapter.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseAdapter.java
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java
new file mode 100644
index 0000000..3a2ca2d
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseMapping.java
@@ -0,0 +1,14 @@
+//package link.pagan.traqtor.model.project.database.mapping;
+//
+//import java.util.HashMap;
+////import link.pagan.traqtor.mapping.Mapping;
+////import link.pagan.traqtor.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-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseNamingScheme.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseNamingScheme.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseNamingScheme.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/database/mapping/DatabaseNamingScheme.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java
similarity index 65%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java
index 7c9e959..8193e54 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/frontend/FrontendProject.java
@@ -7,7 +7,7 @@ package link.pagan.traqtor.model.project.frontend;
import java.io.File;
import link.pagan.traqtor.model.Workspace;
-import link.pagan.traqtor.util.op.OperationResult;
+// import link.pagan.traqtor.util.op.OperationResult;
import link.pagan.traqtor.model.project.Project;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
@@ -16,12 +16,12 @@ public class FrontendProject extends Project {
public FrontendProject (Workspace workspace) {
super(workspace);
}
-
- @Override
- public OperationResult save (OperationResult result) {
- throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
- // Tools | Templates.
- }
+//
+// @Override
+// public OperationResult save (OperationResult result) {
+// throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose
+// // Tools | Templates.
+// }
@Override
public File file () {
@@ -33,4 +33,9 @@ public class FrontendProject extends Project {
return new File(workspace.dir(), this.name.asTiled() + "-frontend");
}
+ @Override
+ public ProjectType type () {
+ return ProjectType.FRONTEND;
+ }
+
}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/frontend/mapping/JavaScriptFrontendMapping.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/frontend/mapping/JavaScriptFrontendMapping.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/frontend/mapping/JavaScriptFrontendMapping.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/frontend/mapping/JavaScriptFrontendMapping.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java
similarity index 65%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java
index c32e4a4..e68f0db 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/Universe.java
@@ -5,18 +5,20 @@ import link.pagan.traqtor.model.project.universe.link.ManyToManyLink;
import link.pagan.traqtor.model.project.universe.link.OneToManyLink;
import link.pagan.traqtor.model.project.universe.link.OneToOneLink;
-/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
public class Universe {
- public static OneToOneLink linkOneToOne () {
+ public static OneToOneLink linkOneToOne() {
return Link.oneToOne();
}
- public static OneToManyLink linkOneToMany () {
+ public static OneToManyLink linkOneToMany() {
return Link.oneToMany();
}
- public static ManyToManyLink linkManyToMany () {
+ public static ManyToManyLink linkManyToMany() {
return Link.manyToMany();
}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java
new file mode 100644
index 0000000..26305e1
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/UniverseProject.java
@@ -0,0 +1,155 @@
+package link.pagan.traqtor.model.project.universe;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+import link.pagan.traqtor.model.Workspace;
+import link.pagan.traqtor.model.project.Project;
+import link.pagan.traqtor.model.project.universe.element.Atom;
+import link.pagan.traqtor.model.project.universe.schema.DataTypeSchema;
+import link.pagan.traqtor.model.project.universe.link.Link;
+import link.pagan.traqtor.model.project.universe.element.Element;
+import link.pagan.traqtor.model.project.universe.element.Isotope;
+import link.pagan.traqtor.util.Name;
+
+public class UniverseProject extends Project {
+
+ public static final String EXTENSION = ".tup";
+
+ private final Set schemas;
+
+ private final Set elements;
+
+ private final Set links;
+
+ public UniverseProject(Workspace workspace) {
+ super(workspace);
+ this.schemas = new TreeSet(
+ (DataTypeSchema a, DataTypeSchema b) -> a.name().compareTo(b.name()));
+ this.elements = new TreeSet((Element a, Element b) -> a.name().compareTo(b.name()));
+ this.links = new TreeSet((Link a, Link b) -> (a.from().name().asDotted() + "_" + a.fromName().asDotted())
+ .compareTo((b.from().name().asDotted() + "_" + b.fromName().asDotted())));
+ }
+
+ @Override
+ public UniverseProject name(String... parts) {
+ return name(Name.of(parts));
+ }
+
+ @Override
+ public UniverseProject name(Name name) {
+ super.name(name);
+ return this;
+ }
+
+ public DataTypeSchema[] schemas() {
+ return this.schemas.toArray(new DataTypeSchema[this.schemas.size()]);
+ }
+
+ public UniverseProject schemas(DataTypeSchema... schemas) {
+ this.schemas.addAll(Arrays.asList(schemas));
+ return this;
+ }
+
+ public Element[] elements() {
+ return this.elements.toArray(new Element[this.elements.size()]);
+ }
+
+ public UniverseProject elements(Element... element) {
+ this.elements.addAll(Arrays.asList(element));
+ return this;
+ }
+
+ public Link[] links() {
+ return this.links.toArray(new Link[this.links.size()]);
+ }
+
+ public UniverseProject links(Link... links) {
+ this.links.addAll(Arrays.asList(links));
+ return this;
+ }
+
+ // @Override
+ // public OperationResult save (OperationResult result) {
+ // return save(this, result);
+ // }
+
+ // private static OperationResult save (UniverseProject project, OperationResult
+ // result) {
+ //
+ // if (!project.dir().exists()) {
+ // result.warn("Project directory " + project.dir().getAbsolutePath() + " does
+ // not exist");
+ // result.info("Creating project directory at " +
+ // project.dir().getAbsolutePath() + " ...");
+ //
+ // if (!project.dir().mkdirs()) {
+ // return result.fail("Failed to created project directory at " +
+ // project.dir().getAbsolutePath());
+ // }
+ // }
+ //
+ // for (Element element : project.elements()) {
+ // element.save(result.startSubresult()); }
+ //
+ // writeJson(project, result.startSubresult());
+ //
+ // return result;
+ // }
+
+ // private static OperationResult writeJson (UniverseProject project,
+ // OperationResult result) {
+ // File file = project.file();
+ // result.info("Writing project descriptor file to " + file.getAbsolutePath() +
+ // " ...");
+ //
+ // try {
+ // project.workspace().json().writeValue(file, project);
+ // } catch (IOException ex) {
+ // result.fail("Failed to write file " + file.getAbsolutePath() + " - IO
+ // exception");
+ // result.fail(ex);
+ // }
+ // return result;
+ // }
+
+ @Override
+ public File file() {
+ return new File(this.dir(), EXTENSION);
+ }
+
+ @Override
+ public File dir() {
+ return new File(workspace.dir(), this.name.asTiled() + "-universe");
+ }
+
+ public Atom atom() {
+ Atom res = new Atom(this);
+ this.elements.add(res);
+ return res;
+ }
+
+ public Isotope isotope(Element base) {
+ Isotope res = new Isotope(this, base);
+ this.elements.add(res);
+ return res;
+ }
+ //
+ // public static UniverseProject load (File projectsDir) {}
+
+ @Override
+ public ProjectType type() {
+ return ProjectType.UNIVERSE;
+ }
+
+ public DataTypeSchema schema(Name name) {
+
+ for (DataTypeSchema schema : this.schemas) {
+ if (schema.name().equals(name))
+ return schema;
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java
similarity index 80%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java
index 1b5b763..c2033d0 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Atom.java
@@ -3,7 +3,7 @@ package link.pagan.traqtor.model.project.universe.element;
import java.io.File;
import java.util.List;
import link.pagan.traqtor.model.project.universe.UniverseProject;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
+// import link.pagan.traqtor.model.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Atom extends Element {
@@ -19,7 +19,7 @@ public class Atom extends Element {
}
@Override
- public Atom particles (List> particles) {
+ public Atom particles (List particles) {
super.particles(particles);
return this;
}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java
new file mode 100644
index 0000000..d976af4
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Element.java
@@ -0,0 +1,89 @@
+package link.pagan.traqtor.model.project.universe.element;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import link.pagan.traqtor.util.io.Filed;
+import link.pagan.traqtor.model.project.universe.UniverseProject;
+import link.pagan.traqtor.util.Name;
+
+public abstract class Element implements Filed {
+
+ protected final UniverseProject project;
+
+ private static final Comparator PARTICLE_SORT_COMPARATOR = (Particle a, Particle b) -> a.name().asDotted().compareTo(b.name().asDotted());
+
+ private Name name;
+
+ private final Set particles;
+
+ public Element (UniverseProject project) {
+ this.project = project;
+ this.particles = new TreeSet(PARTICLE_SORT_COMPARATOR);
+ }
+
+ public Name name () {
+
+ if (name == null) { return Name.NO_NAME; }
+ return name;
+ }
+
+ public Element name (String... parts) {
+ return name(Name.of(parts));
+ }
+
+ public Element name (Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public Set particles () {
+ return particles;
+ }
+
+ @SafeVarargs
+ public final Element particles (Particle... particles) {
+ return particles(Arrays.asList(particles));
+ }
+
+ public Element particles (List particles) {
+ this.particles.addAll(particles);
+
+ return this;
+ }
+
+// public OperationResult save (OperationResult result) {
+// return save(this, result);
+// }
+
+// private static OperationResult save (Element element, OperationResult result) {
+//
+// if (element.getClass().equals(Atom.class) || element.getClass().equals(Isotope.class)) {
+// writeJson(element, result.startSubresult());
+// } else {
+// return result.fail("Unknown element type - not supported class " + element.getClass().getName());
+// }
+// return result;
+// }
+//
+// private static OperationResult writeJson (Element element, OperationResult result) {
+// File file = element.file();
+// result.info("Writing element to " + file.getAbsolutePath() + " ...");
+//
+// try {
+// element.project().workspace().json().writeValue(file, element);
+// } catch (IOException ex) {
+// result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
+// result.fail(ex);
+// }
+// return result;
+// }
+
+ public UniverseProject project () {
+ return project;
+ }
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java
similarity index 82%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java
index 0807e30..65abfaa 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Isotope.java
@@ -3,7 +3,7 @@ package link.pagan.traqtor.model.project.universe.element;
import java.io.File;
import java.util.List;
import link.pagan.traqtor.model.project.universe.UniverseProject;
-import link.pagan.traqtor.model.project.universe.schema.DataType;
+// import link.pagan.traqtor.model.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Isotope extends Element {
@@ -26,7 +26,7 @@ public class Isotope extends Element {
}
@Override
- public Isotope particles (List> particles) {
+ public Isotope particles (List particles) {
super.particles(particles);
return this;
}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java
new file mode 100644
index 0000000..30d9ef7
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/element/Particle.java
@@ -0,0 +1,98 @@
+package link.pagan.traqtor.model.project.universe.element;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.util.Name;
+
+public class Particle {
+
+ private Name name;
+
+ private String description;
+
+ private final DataType type;
+
+ private final List constraints;
+
+ public Particle(DataType type) {
+ this.type = type;
+ this.constraints = new ArrayList();
+ this.constraints.addAll(this.type.typeConstraints());
+ }
+
+ public Particle name(Name name) {
+ this.name = name;
+ return this;
+ }
+
+ public Particle description(String description) {
+
+ return this;
+ }
+
+ public Name name() {
+
+ if (name == null) {
+ return Name.NO_NAME;
+ }
+ return name;
+ }
+
+ public String description() {
+ return description;
+ }
+
+ public DataType type() {
+ return type;
+ }
+
+ public List constraints() {
+ return constraints;
+ }
+
+ public Particle constraint (Name name) {
+ Constraint constraint = this.type.constraint(name);
+ constraint.apply(this);
+ return this;
+ }
+
+ public Particle constraint (Name name, long value) {
+ Constraint constraint = this.type.constraint(name);
+ constraint.apply(this, value);
+ return this;
+ }
+
+ public Particle constraint (Name name, int value) {
+ return constraint(name, (long)value);
+ }
+
+ public Particle constraint (Name name, short value) {
+ return constraint(name, (long)value);
+ }
+
+ public Particle constraint (Name name, byte value) {
+ return constraint(name, (long)value);
+ }
+
+ public Particle constraint (Name name, double value) {
+ Constraint constraint = this.type.constraint(name);
+ constraint.apply(this, value);
+ return this;
+ }
+
+ public Particle constraint (Name name, float value) {
+ return constraint(name, (double)value);
+ }
+
+ public Particle constraint (Name name, String value) {
+ Constraint constraint = this.type.constraint(name);
+ constraint.apply(this, value);
+ return this;
+ }
+
+
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java
similarity index 83%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java
index 331d6f9..83b0649 100644
--- a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/Link.java
@@ -1,14 +1,28 @@
package link.pagan.traqtor.model.project.universe.link;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
import link.pagan.traqtor.model.project.universe.element.Element;
import link.pagan.traqtor.util.Name;
-// @JsonDeserialize(using = LinkDeserializer.class)
-@JsonSerialize(using = LinkSerializer.class)
public abstract class Link {
+ public enum LinkType {
+
+ ONE_TO_ONE("1->1"),
+ ONE_TO_MANY("1->N"),
+ MANY_TO_MANY("N->N");
+
+ private final String code;
+
+ private LinkType (String code) {
+ this.code = code;
+ }
+
+ public String code () {
+ return code;
+ }
+
+ }
+
private Element from;
private Element to;
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/ManyToManyLink.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/ManyToManyLink.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/ManyToManyLink.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/ManyToManyLink.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToManyLink.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToManyLink.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToManyLink.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToManyLink.java
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToOneLink.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToOneLink.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToOneLink.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/link/OneToOneLink.java
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java
new file mode 100644
index 0000000..8306457
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataType.java
@@ -0,0 +1,88 @@
+package link.pagan.traqtor.model.project.universe.schema;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.constraint.impl.NotNull;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.util.Name;
+
+public abstract class DataType {
+
+ private final DataType parent;
+ private final Name name;
+ private final boolean instancable;
+ protected final Constraint[] constraintTypes;
+
+ protected DataType(DataType parent, Name name, boolean instancable) {
+ this.parent = parent;
+ this.name = name;
+ this.instancable = instancable;
+ this.constraintTypes = new Constraint[0];
+ }
+
+ protected DataType(DataType parent, Name name, boolean instancable, Constraint[] typeConstraints) {
+ this.parent = parent;
+ this.name = name;
+ this.instancable = instancable;
+ this.constraintTypes = typeConstraints;
+ }
+
+ public final DataType getParent() {
+ return parent;
+ }
+
+ public final Name name() {
+ return name;
+ }
+
+ public final boolean isInstancable() {
+ return instancable;
+ }
+
+ public Constraint constraint(Name name) {
+ for (Constraint c : this.availableConstraints()) {
+ if (c.name().equals(name)) {
+ return c;
+ }
+ }
+ return null;
+ }
+
+ public final List availableConstraints() {
+ if (this.parent != null) {
+ List res = new ArrayList();
+ res.addAll(Arrays.asList(this.constraintTypes));
+
+ this.parent.availableConstraints().stream().filter(c -> (!res.contains(c))).forEach(c -> {
+ res.add(c);
+ });
+
+ return res;
+ } else {
+ return Arrays.asList(this.constraintTypes);
+ }
+ }
+
+ static protected final List noConstraint = new ArrayList();
+
+ public List typeConstraints() {
+ return noConstraint;
+ }
+
+ public Particle instance() {
+ if (this.instancable) {
+ return new Particle(this);
+ } else {
+ throw new RuntimeException("Unable to instantiate non-instansable type particle");
+ }
+ }
+
+ protected final static DataType ROOT = new DataType(null, Name.of("root"), false,
+ new Constraint[] { NotNull.CONSTRAINT }) {
+ };
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataTypeSchema.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataTypeSchema.java
new file mode 100644
index 0000000..fa61d25
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/DataTypeSchema.java
@@ -0,0 +1,35 @@
+package link.pagan.traqtor.model.project.universe.schema;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class DataTypeSchema {
+
+ private final Set types;
+
+ public DataTypeSchema(DataType[] shemaTypes) {
+ this.types = new TreeSet(
+ (DataType a, DataType b) -> a.name().asDotted().compareTo(b.name().asDotted()));
+ for (DataType type : shemaTypes) {
+ this.types.add(type);
+ }
+ }
+
+ public abstract Name name();
+
+ public DataType type(Name name) {
+
+ for (DataType type : this.types) {
+ if (type.name().equals(name)) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/Constraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/Constraint.java
new file mode 100644
index 0000000..49bbdaa
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/Constraint.java
@@ -0,0 +1,30 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class Constraint {
+
+ final Name name;
+
+ public Constraint(Name name) {
+ this.name = name;
+ }
+
+ public Name name() {
+ return name;
+ }
+
+ public abstract Particle apply(Particle particle);
+
+ public abstract Particle apply(Particle particle, Long value);
+
+ public abstract Particle apply(Particle particle, String value);
+
+ public abstract Particle apply(Particle particle, Double value);
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/FactConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/FactConstraint.java
new file mode 100644
index 0000000..c4f60bb
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/FactConstraint.java
@@ -0,0 +1,38 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleFactConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class FactConstraint extends Constraint {
+
+ public FactConstraint(Name name) {
+ super(name);
+ }
+
+ @Override
+ public Particle apply(Particle particle) {
+ particle.constraints().add(new ParticleFactConstraint(this));
+ return particle;
+ }
+
+ @Override
+ public Particle apply(Particle particle, Double value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Long value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, String value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/IntegerConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/IntegerConstraint.java
new file mode 100644
index 0000000..43408e6
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/IntegerConstraint.java
@@ -0,0 +1,42 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleIntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class IntegerConstraint extends Constraint {
+
+ public IntegerConstraint(Name name) {
+ super(name);
+ }
+
+ public ParticleIntegerConstraint forParticle(long value) {
+ return new ParticleIntegerConstraint(this, value);
+ }
+
+ @Override
+ public Particle apply(Particle particle) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Double value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Long value) {
+ particle.constraints().add(forParticle(value));
+ return particle;
+ }
+
+ @Override
+ public Particle apply(Particle particle, String value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/LiteralConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/LiteralConstraint.java
new file mode 100644
index 0000000..20126f7
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/LiteralConstraint.java
@@ -0,0 +1,38 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleLiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class LiteralConstraint extends Constraint {
+
+ public LiteralConstraint(Name name) {
+ super(name);
+ }
+
+ @Override
+ public Particle apply(Particle particle) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Double value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Long value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, String value) {
+ particle.constraints().add(new ParticleLiteralConstraint(this, value));
+ return particle;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/RationalConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/RationalConstraint.java
new file mode 100644
index 0000000..a0928c9
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/RationalConstraint.java
@@ -0,0 +1,42 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleRationalConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class RationalConstraint extends Constraint {
+
+ public RationalConstraint(Name name) {
+ super(name);
+ }
+
+ public ParticleRationalConstraint forParticle(double value) {
+ return new ParticleRationalConstraint(this, value);
+ }
+
+ @Override
+ public Particle apply(Particle particle, String value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Particle apply(Particle particle, Double value) {
+ particle.constraints().add(forParticle(value));
+ return particle;
+ }
+
+ @Override
+ public Particle apply(Particle particle, Long value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/impl/NotNull.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/impl/NotNull.java
new file mode 100644
index 0000000..db7329b
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/impl/NotNull.java
@@ -0,0 +1,49 @@
+/*
+ * 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.model.project.universe.schema.constraint.impl;
+
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.constraint.FactConstraint;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleFactConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public final class NotNull extends FactConstraint {
+
+ public static final Name NAME = Name.of("not", "null");
+
+ public static Constraint CONSTRAINT = new NotNull();
+
+ private NotNull() {
+ super(NAME);
+ }
+
+ @Override
+ public Particle apply(Particle particle) {
+ particle.constraints().add(new ParticleFactConstraint(this));
+ return particle;
+ }
+
+ @Override
+ public Particle apply(Particle particle, Double value) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public Particle apply(Particle particle, Long value) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public Particle apply(Particle particle, String value) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleConstraint.java
new file mode 100644
index 0000000..70a86c6
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleConstraint.java
@@ -0,0 +1,14 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint.particle;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public abstract class ParticleConstraint {
+
+ abstract Constraint constraint();
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleFactConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleFactConstraint.java
new file mode 100644
index 0000000..bbfd731
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleFactConstraint.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.model.project.universe.schema.constraint.particle;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.FactConstraint;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ParticleFactConstraint extends ParticleConstraint{
+
+ FactConstraint constraint;
+
+ public ParticleFactConstraint(FactConstraint constraint) {
+ this.constraint = constraint;
+ }
+
+ @Override
+ public FactConstraint constraint() {
+ return constraint;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleIntegerConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleIntegerConstraint.java
new file mode 100644
index 0000000..ab71471
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleIntegerConstraint.java
@@ -0,0 +1,24 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint.particle;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ParticleIntegerConstraint extends ParticleConstraint {
+
+ IntegerConstraint constraint;
+ long value;
+
+ public ParticleIntegerConstraint(IntegerConstraint constraint, long value) {
+ this.constraint = constraint;
+ this.value = value;
+ }
+
+ @Override
+ IntegerConstraint constraint() {
+ return constraint;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleLiteralConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleLiteralConstraint.java
new file mode 100644
index 0000000..690339d
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleLiteralConstraint.java
@@ -0,0 +1,26 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint.particle;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ParticleLiteralConstraint extends ParticleConstraint {
+
+ LiteralConstraint constraint;
+ String value;
+
+ public ParticleLiteralConstraint(LiteralConstraint constraint, String value) {
+ this.constraint = constraint;
+ this.value = value;
+ }
+
+ @Override
+ LiteralConstraint constraint() {
+ return constraint;
+ }
+
+}
+
+
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleRationalConstraint.java b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleRationalConstraint.java
new file mode 100644
index 0000000..b1ca67e
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/model/project/universe/schema/constraint/particle/ParticleRationalConstraint.java
@@ -0,0 +1,25 @@
+package link.pagan.traqtor.model.project.universe.schema.constraint.particle;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.RationalConstraint;
+
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ParticleRationalConstraint extends ParticleConstraint {
+
+ RationalConstraint constraint;
+ double value;
+
+ public ParticleRationalConstraint(RationalConstraint constraint, double value) {
+ this.constraint = constraint;
+ this.value = value;
+ }
+
+ @Override
+ RationalConstraint constraint() {
+ return constraint;
+ }
+
+}
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/util/Name.java b/traqtor-model/src/main/java/link/pagan/traqtor/util/Name.java
new file mode 100644
index 0000000..26f4f3d
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/util/Name.java
@@ -0,0 +1,89 @@
+package link.pagan.traqtor.util;
+
+import java.util.Arrays;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class Name implements Comparable {
+
+ public static final Name NO_NAME = Name.of("no", "name");
+
+ String[] parts;
+
+ Name(String... parts) {
+ this.parts = parts;
+ }
+
+ Name(Name parent, String... parts) {
+ this.parts = new String[parent.parts.length + parts.length];
+ System.arraycopy(parent.parts, 0, this.parts, 0, parent.parts.length);
+ System.arraycopy(parts, 0, this.parts, parent.parts.length, parts.length);
+ }
+
+ public static Name of(Name parent, String... parts) {
+ return new Name(parent, parts);
+ }
+
+ public static Name of(String... parts) {
+ return new Name(parts);
+ }
+
+ public String asTiled() {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < this.parts.length; i++) {
+ sb.append(parts[i]);
+
+ if (i != this.parts.length - 1) {
+ sb.append('-');
+ }
+ }
+ return sb.toString();
+ }
+
+ public String asDotted() {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < this.parts.length; i++) {
+ sb.append(parts[i]);
+
+ if (i != this.parts.length - 1) {
+ sb.append('.');
+ }
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public int compareTo(Name t) {
+ return this.asDotted().compareTo(t.asDotted());
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(parts);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ Name other = (Name) obj;
+ if (!Arrays.equals(parts, other.parts)) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/RegExpHelper.java b/traqtor-model/src/main/java/link/pagan/traqtor/util/RegExpHelper.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/RegExpHelper.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/util/RegExpHelper.java
diff --git a/traqtor-model/src/main/java/link/pagan/traqtor/util/io/Directoried.java b/traqtor-model/src/main/java/link/pagan/traqtor/util/io/Directoried.java
new file mode 100644
index 0000000..773526a
--- /dev/null
+++ b/traqtor-model/src/main/java/link/pagan/traqtor/util/io/Directoried.java
@@ -0,0 +1,12 @@
+package link.pagan.traqtor.util.io;
+
+import java.io.File;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public interface Directoried {
+
+ public File dir();
+
+}
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/util/io/Filed.java b/traqtor-model/src/main/java/link/pagan/traqtor/util/io/Filed.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/util/io/Filed.java
rename to traqtor-model/src/main/java/link/pagan/traqtor/util/io/Filed.java
diff --git a/traqtor-quackery/pom.xml b/traqtor-quackery/pom.xml
index 6d3edae..c03bd40 100644
--- a/traqtor-quackery/pom.xml
+++ b/traqtor-quackery/pom.xml
@@ -11,10 +11,10 @@
11
UTF-8
UTF-8
- 1.11.1.Final
+ 1.12.1.Final
quarkus-universe-bom
io.quarkus
- 1.11.1.Final
+ 1.12.1.Final
2.22.1
@@ -45,11 +45,11 @@
io.quarkus
quarkus-smallrye-openapi
-
+
org.apache.cayenne
cayenne-server
diff --git a/traqtor-aio/pom.xml b/traqtor-schema/pom.xml
similarity index 86%
rename from traqtor-aio/pom.xml
rename to traqtor-schema/pom.xml
index 18ff3df..f127197 100644
--- a/traqtor-aio/pom.xml
+++ b/traqtor-schema/pom.xml
@@ -1,16 +1,16 @@
4.0.0
-
+
link.pagan
- traqtor-aio
+ traqtor-schema
0.0.1-SNAPSHOT
jar
- TraQtor / AIO
+ TraQtor - Schema
UTF-8
11
@@ -34,9 +34,9 @@
test
- com.fasterxml.jackson.core
- jackson-databind
- 2.12.1
+ ${project.groupId}
+ traqtor-model
+ ${project.version}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/DefaultSchema.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/DefaultSchema.java
new file mode 100644
index 0000000..217d721
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/DefaultSchema.java
@@ -0,0 +1,60 @@
+package link.pagan.traqtor.model.project.universe.schema.impl;
+
+import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.NumericalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.LogicalDataType;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.DataTypeSchema;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.StringDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.logic.BooleanDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.ByteDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.IntDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.LongDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.ShortDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.DoubleDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.FloatDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.DateDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.TimeDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.TimestampDataType;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DefaultSchema extends DataTypeSchema {
+
+ public static DataTypeSchema INSTANCE = new DefaultSchema();
+ public static Name NAME = Name.of("default");
+
+ private DefaultSchema() {
+ super(new DataType[]{
+ LogicalDataType.type(),
+ BooleanDataType.type(),
+ NumericalDataType.type(),
+ IntegerDataType.type(),
+ ByteDataType.type(),
+ ShortDataType.type(),
+ IntDataType.type(),
+ LongDataType.type(),
+ RationalDataType.type(),
+ FloatDataType.type(),
+ DoubleDataType.type(),
+ LiteralDataType.type(),
+ StringDataType.type(),
+ TemporalDataType.type(),
+ DateDataType.type(),
+ TimeDataType.type(),
+ TimestampDataType.type()
+ });
+ }
+
+ @Override
+ public Name name() {
+ return NAME;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java
new file mode 100644
index 0000000..9801715
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LiteralDataType.java
@@ -0,0 +1,20 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class LiteralDataType extends DataType {
+
+ public static final Name NAME = Name.of("literal");
+ private static final DataType INSTANCE = new LiteralDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private LiteralDataType() {
+ super(ROOT, NAME, false);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicalDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicalDataType.java
new file mode 100644
index 0000000..43c9586
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/LogicalDataType.java
@@ -0,0 +1,20 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class LogicalDataType extends DataType {
+
+ public static final Name NAME = Name.of("logical");
+ private static final DataType INSTANCE = new LogicalDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private LogicalDataType() {
+ super(ROOT, NAME, false);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericalDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericalDataType.java
new file mode 100644
index 0000000..50a414e
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/NumericalDataType.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.util.Name;
+
+public class NumericalDataType extends DataType {
+
+ public static final Name NAME = Name.of("numerical");
+ private static final DataType INSTANCE = new NumericalDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private NumericalDataType() {
+ super(ROOT, NAME, false);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java
new file mode 100644
index 0000000..4287e6e
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/TemporalDataType.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.util.Name;
+
+public class TemporalDataType extends DataType {
+
+ public static final Name NAME = Name.of("temporal");
+ private static final DataType INSTANCE = new TemporalDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private TemporalDataType() {
+ super(ROOT, NAME, false);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java
new file mode 100644
index 0000000..f31af77
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/StringDataType.java
@@ -0,0 +1,27 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.literal;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.LiteralDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MatchRegExp;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MaxLength;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MinLength;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class StringDataType extends DataType {
+
+ public static final Name NAME = Name.of("String");
+ private static final DataType INSTANCE = new StringDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private StringDataType() {
+ super(LiteralDataType.type(), NAME, true, new Constraint[] {
+ MaxLength.CONSTRAINT, MinLength.CONSTRAINT, MatchRegExp.CONSTRAINT
+ });
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/ExactLength.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/ExactLength.java
new file mode 100644
index 0000000..ef7a666
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/ExactLength.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ExactLength extends IntegerConstraint {
+
+ public static final Name NAME = Name.of("exact", "length");
+
+ public static IntegerConstraint CONSTRAINT = new ExactLength();
+
+ private ExactLength() {
+ super(NAME);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MatchRegExp.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MatchRegExp.java
new file mode 100644
index 0000000..4aa0629
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MatchRegExp.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class MatchRegExp extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("match", "regular", "expression");
+
+ public static LiteralConstraint CONSTRAINT = new MatchRegExp();
+
+ public MatchRegExp() {
+ super(NAME);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MaxLength.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MaxLength.java
new file mode 100644
index 0000000..9dbc9d9
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MaxLength.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class MaxLength extends IntegerConstraint {
+
+ public static final Name NAME = Name.of("max", "length");
+
+ public static IntegerConstraint CONSTRAINT = new MaxLength();
+
+ private MaxLength() {
+ super(NAME);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MinLength.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MinLength.java
new file mode 100644
index 0000000..e64ee3e
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/literal/constraints/MinLength.java
@@ -0,0 +1,17 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class MinLength extends IntegerConstraint {
+
+ public static final Name NAME = Name.of("min", "length");
+
+ public static IntegerConstraint CONSTRAINT = new MinLength();
+
+ private MinLength() {
+ super(NAME);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java
new file mode 100644
index 0000000..4665352
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/BooleanDataType.java
@@ -0,0 +1,26 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.logic;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.LogicalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.logic.constraints.IsFalse;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.logic.constraints.IsTrue;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class BooleanDataType extends DataType {
+
+ public static final Name NAME = Name.of("Boolean");
+ private static final DataType INSTANCE = new BooleanDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private BooleanDataType() {
+ super(LogicalDataType.type(), NAME, true, new Constraint[] {
+ IsTrue.CONSTRAINT, IsFalse.CONSTRAINT
+ });
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsFalse.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsFalse.java
new file mode 100644
index 0000000..3e1b413
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsFalse.java
@@ -0,0 +1,20 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.logic.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.FactConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class IsFalse extends FactConstraint {
+
+ private static final Name NAME = Name.of("is", "false");
+
+ public static FactConstraint CONSTRAINT = new IsFalse();
+
+ public IsFalse() {
+ super(NAME);
+ }
+
+}
\ No newline at end of file
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsTrue.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsTrue.java
new file mode 100644
index 0000000..67ee3f3
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/logic/constraints/IsTrue.java
@@ -0,0 +1,20 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.logic.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.FactConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class IsTrue extends FactConstraint {
+
+ private static final Name NAME = Name.of("is", "true");
+
+ public static FactConstraint CONSTRAINT = new IsTrue();
+
+ public IsTrue() {
+ super(NAME);
+ }
+
+}
\ No newline at end of file
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java
new file mode 100644
index 0000000..bee2e81
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/IntegerDataType.java
@@ -0,0 +1,23 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.NumericalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.util.Name;
+
+public class IntegerDataType extends DataType {
+
+ public static final Name NAME = Name.of("integer");
+ private static final DataType INSTANCE = new IntegerDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private IntegerDataType() {
+ super(NumericalDataType.type(), NAME, false, new Constraint[] {IntegerMax.CONSTRAINT, IntegerMin.CONSTRAINT});
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java
new file mode 100644
index 0000000..2b52768
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/RationalDataType.java
@@ -0,0 +1,23 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.NumericalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMin;
+import link.pagan.traqtor.util.Name;
+
+public class RationalDataType extends DataType {
+
+ public static final Name NAME = Name.of("rational");
+ private static final DataType INSTANCE = new RationalDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private RationalDataType() {
+ super(NumericalDataType.type(), NAME, false, new Constraint[] {RationalMax.CONSTRAINT, RationalMin.CONSTRAINT});
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java
new file mode 100644
index 0000000..e7047c5
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ByteDataType.java
@@ -0,0 +1,41 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ByteDataType extends DataType {
+
+ public static final Name NAME = Name.of("Byte");
+ private static final DataType INSTANCE = new ByteDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private ByteDataType() {
+ super(IntegerDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(IntegerMin.CONSTRAINT.forParticle(Byte.MIN_VALUE));
+ add(IntegerMax.CONSTRAINT.forParticle(Byte.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java
new file mode 100644
index 0000000..78e4877
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/IntDataType.java
@@ -0,0 +1,41 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class IntDataType extends DataType {
+
+ public static final Name NAME = Name.of("Integer");
+ private static final DataType INSTANCE = new IntDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private IntDataType() {
+ super(IntegerDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(IntegerMin.CONSTRAINT.forParticle(Integer.MIN_VALUE));
+ add(IntegerMax.CONSTRAINT.forParticle(Integer.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java
new file mode 100644
index 0000000..5ca601a
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/LongDataType.java
@@ -0,0 +1,40 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class LongDataType extends DataType {
+
+ public static final Name NAME = Name.of("Long");
+ private static final DataType INSTANCE = new LongDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private LongDataType() {
+ super(IntegerDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(IntegerMin.CONSTRAINT.forParticle(Long.MIN_VALUE));
+ add(IntegerMax.CONSTRAINT.forParticle(Long.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+}
\ No newline at end of file
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java
new file mode 100644
index 0000000..434e225
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/ShortDataType.java
@@ -0,0 +1,40 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.IntegerDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class ShortDataType extends DataType {
+
+ public static final Name NAME = Name.of("Short");
+ private static final DataType INSTANCE = new ShortDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private ShortDataType() {
+ super(IntegerDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(IntegerMin.CONSTRAINT.forParticle(Short.MIN_VALUE));
+ add(IntegerMax.CONSTRAINT.forParticle(Short.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMax.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMax.java
new file mode 100644
index 0000000..125fde5
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMax.java
@@ -0,0 +1,16 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class IntegerMax extends IntegerConstraint {
+
+ public static final Name NAME = Name.of("integer", "max", "value");
+
+ public static IntegerConstraint CONSTRAINT = new IntegerMax();
+
+ private IntegerMax() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMin.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMin.java
new file mode 100644
index 0000000..1a57f5c
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/integer/constraints/IntegerMin.java
@@ -0,0 +1,18 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.IntegerConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class IntegerMin extends IntegerConstraint {
+
+ public static final Name NAME = Name.of("integer", "min", "value");
+
+ public static IntegerConstraint CONSTRAINT = new IntegerMin();
+
+ private IntegerMin() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/DoubleDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/DoubleDataType.java
new file mode 100644
index 0000000..8c03f42
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/DoubleDataType.java
@@ -0,0 +1,37 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMin;
+import link.pagan.traqtor.util.Name;
+
+public class DoubleDataType extends DataType {
+
+ public static final Name NAME = Name.of("Double");
+ private static final DataType INSTANCE = new DoubleDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private DoubleDataType() {
+ super(RationalDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(RationalMin.CONSTRAINT.forParticle(Double.MIN_VALUE));
+ add(RationalMax.CONSTRAINT.forParticle(Double.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/FloatDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/FloatDataType.java
new file mode 100644
index 0000000..0b4ec73
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/FloatDataType.java
@@ -0,0 +1,38 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational;
+
+import java.util.ArrayList;
+import java.util.List;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.particle.ParticleConstraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.RationalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMin;
+import link.pagan.traqtor.util.Name;
+
+public class FloatDataType extends DataType {
+
+ public static final Name NAME = Name.of("Float");
+ private static final DataType INSTANCE = new FloatDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private FloatDataType() {
+ super(RationalDataType.type(), NAME, true);
+ }
+
+ static protected final List typeConstraints = new ArrayList() {
+ private static final long serialVersionUID = 1L;
+ {
+ add(RationalMin.CONSTRAINT.forParticle(Float.MIN_VALUE));
+ add(RationalMax.CONSTRAINT.forParticle(Float.MAX_VALUE));
+ }
+ };
+
+ @Override
+ public List typeConstraints() {
+ return typeConstraints;
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMax.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMax.java
new file mode 100644
index 0000000..8ff87a8
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMax.java
@@ -0,0 +1,18 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.RationalConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class RationalMax extends RationalConstraint {
+
+ public static final Name NAME = Name.of("rational", "max", "value");
+
+ public static RationalConstraint CONSTRAINT = new RationalMax();
+
+ private RationalMax() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMin.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMin.java
new file mode 100644
index 0000000..ec4ed3b
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/numeric/rational/constraints/RationalMin.java
@@ -0,0 +1,18 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.RationalConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class RationalMin extends RationalConstraint {
+
+ public static final Name NAME = Name.of("rational", "min", "value");
+
+ public static RationalConstraint CONSTRAINT = new RationalMin();
+
+ private RationalMin() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java
new file mode 100644
index 0000000..9228420
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/DateDataType.java
@@ -0,0 +1,25 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints.DateAfter;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints.DateBefore;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class DateDataType extends DataType {
+
+ public static final Name NAME = Name.of("Date");
+ private static final DataType INSTANCE = new DateDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private DateDataType() {
+ super(TemporalDataType.type(), NAME, true, new Constraint[] {
+ DateAfter.CONSTRAINT, DateBefore.CONSTRAINT});
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java
new file mode 100644
index 0000000..bf4c43a
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimeDataType.java
@@ -0,0 +1,25 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.Constraint;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints.TimeAfter;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints.TimeBefore;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class TimeDataType extends DataType {
+
+ public static final Name NAME = Name.of("Time");
+ private static final DataType INSTANCE = new TimeDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private TimeDataType() {
+ super(TemporalDataType.type(), NAME, true, new Constraint[] {
+ TimeAfter.CONSTRAINT, TimeBefore.CONSTRAINT});
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java
new file mode 100644
index 0000000..ff04c54
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/TimestampDataType.java
@@ -0,0 +1,21 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
+
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.TemporalDataType;
+import link.pagan.traqtor.util.Name;
+
+/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
+public class TimestampDataType extends DataType {
+
+ public static final Name NAME = Name.of("Timestamp");
+ private static final DataType INSTANCE = new TimestampDataType();
+
+ public static DataType type() {
+ return INSTANCE;
+ }
+
+ private TimestampDataType() {
+ super(TemporalDataType.type(), NAME, true);
+ }
+
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateAfter.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateAfter.java
new file mode 100644
index 0000000..e19154b
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateAfter.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DateAfter extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("date", "after");
+
+ public static LiteralConstraint CONSTRAINT = new DateAfter();
+
+ private DateAfter() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateBefore.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateBefore.java
new file mode 100644
index 0000000..89d7845
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/DateBefore.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class DateBefore extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("date", "before");
+
+ public static LiteralConstraint CONSTRAINT = new DateBefore();
+
+ private DateBefore() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeAfter.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeAfter.java
new file mode 100644
index 0000000..8b13c78
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeAfter.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TimeAfter extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("time", "after");
+
+ public static LiteralConstraint CONSTRAINT = new TimeAfter();
+
+ private TimeAfter() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeBefore.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeBefore.java
new file mode 100644
index 0000000..e5d226c
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimeBefore.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TimeBefore extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("time", "before");
+
+ public static LiteralConstraint CONSTRAINT = new TimeBefore();
+
+ private TimeBefore() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampAfter.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampAfter.java
new file mode 100644
index 0000000..fa441b8
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampAfter.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TimestampAfter extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("timestamp", "after");
+
+ public static LiteralConstraint CONSTRAINT = new TimestampAfter();
+
+ private TimestampAfter() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampBefore.java b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampBefore.java
new file mode 100644
index 0000000..05ef10c
--- /dev/null
+++ b/traqtor-schema/src/main/java/link/pagan/traqtor/model/project/universe/schema/impl/data/temporal/constraints/TimestampBefore.java
@@ -0,0 +1,19 @@
+package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal.constraints;
+
+import link.pagan.traqtor.model.project.universe.schema.constraint.LiteralConstraint;
+import link.pagan.traqtor.util.Name;
+
+/**
+ *
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class TimestampBefore extends LiteralConstraint {
+
+ public static final Name NAME = Name.of("timestamp", "after");
+
+ public static LiteralConstraint CONSTRAINT = new TimestampBefore();
+
+ private TimestampBefore() {
+ super(NAME);
+ }
+}
diff --git a/traqtor-tests/pom.xml b/traqtor-tests/pom.xml
new file mode 100644
index 0000000..a079f1d
--- /dev/null
+++ b/traqtor-tests/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+ link.pagan
+ traqtor
+ 0.0.1-SNAPSHOT
+
+ link.pagan
+ traqtor-tests
+ 0.0.1-SNAPSHOT
+ jar
+ TraQtor - Tests
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ org.junit
+ junit-bom
+ 5.7.1
+ pom
+ import
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ ${project.groupId}
+ traqtor-env
+ ${project.version}
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
+
diff --git a/traqtor-aio/src/main/java/link/pagan/traqtor/test/TestUtils.java b/traqtor-tests/src/main/java/link/pagan/traqtor/test/TestUtils.java
similarity index 100%
rename from traqtor-aio/src/main/java/link/pagan/traqtor/test/TestUtils.java
rename to traqtor-tests/src/main/java/link/pagan/traqtor/test/TestUtils.java
diff --git a/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java b/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java
new file mode 100644
index 0000000..c45c4e7
--- /dev/null
+++ b/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/WorkspaceTest.java
@@ -0,0 +1,53 @@
+package link.pagan.traqtor.test.model;
+
+import link.pagan.traqtor.env.Environment;
+import link.pagan.traqtor.env.actions.OperationObjectResult;
+import link.pagan.traqtor.model.Workspace;
+import link.pagan.traqtor.test.TestUtils;
+import link.pagan.traqtor.util.Name;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class WorkspaceTest {
+
+ @BeforeEach
+ public void cleanTestDir() {
+ TestUtils.rebuildTestRoot();
+ }
+
+ @AfterEach
+ public void killCore() {
+ TestUtils.deleteTestRoot();
+ }
+
+ @Test
+ @DisplayName("Workspace save")
+ void workspaceSave() {
+ Environment env = Environment.init();
+ Workspace workspace = env.workspace().name(Name.of("traqtor", "demo", "workspace"));
+ Assertions.assertTrue(!env.workspaceSave(workspace).ok());
+ TestUtils.deleteTestRoot();
+ Assertions.assertTrue(!env.workspaceSave(workspace.dir(TestUtils.testRoot())).ok());
+ TestUtils.rebuildTestRoot();
+ Assertions.assertTrue(env.workspaceSaveAs(workspace, TestUtils.testRoot()).ok());
+ }
+
+ @Test
+ @DisplayName("Workspace save/load")
+ void saveLoad() {
+ Environment env = Environment.init();
+ Workspace workspace = env.workspace().name(Name.of("traqtor", "demo", "workspace"));
+ Assertions.assertTrue(env.workspaceSaveAs(workspace, TestUtils.testRoot()).ok());
+ OperationObjectResult loadResult = env.workspaceLoad(workspace.dir());
+ Assertions.assertTrue(loadResult.ok());
+ Assertions.assertEquals(workspace.name(), loadResult.object().name());
+ Assertions.assertEquals(workspace.pretty(), loadResult.object().pretty());
+ }
+
+}
diff --git a/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java b/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java
new file mode 100644
index 0000000..cbd7c4a
--- /dev/null
+++ b/traqtor-tests/src/test/java/link/pagan/traqtor/test/model/project/universe/UniverseProjectTest.java
@@ -0,0 +1,195 @@
+package link.pagan.traqtor.test.model.project.universe;
+
+import link.pagan.traqtor.env.Environment;
+import link.pagan.traqtor.model.Workspace;
+import link.pagan.traqtor.model.project.universe.Universe;
+import link.pagan.traqtor.model.project.universe.UniverseProject;
+import link.pagan.traqtor.model.project.universe.element.Element;
+import link.pagan.traqtor.model.project.universe.element.Particle;
+import link.pagan.traqtor.model.project.universe.schema.DataType;
+import link.pagan.traqtor.model.project.universe.schema.constraint.impl.NotNull;
+import link.pagan.traqtor.model.project.universe.schema.impl.DefaultSchema;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.ExactLength;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MatchRegExp;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MaxLength;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints.MinLength;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMin;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMax;
+import link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.rational.constraints.RationalMin;
+import link.pagan.traqtor.test.TestUtils;
+import link.pagan.traqtor.util.Name;
+import link.pagan.traqtor.util.RegExpHelper;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
+ */
+public class UniverseProjectTest {
+
+ @BeforeEach
+ public void cleanTestDir() {
+ TestUtils.rebuildTestRoot();
+ }
+
+ @AfterEach
+ public void killCore() {
+ TestUtils.deleteTestRoot();
+ }
+
+ @Test
+ @DisplayName("Universe Project save")
+ void projectSaveAs() {
+
+ Environment env = Environment.init();
+ Workspace workspace = env.workspace().name(Name.of("traqtor", "demo", "workspace"));
+
+ UniverseProject base = workspace.universe()
+ .name(Name.of("base"))
+ .schemas(env.schemaByName(DefaultSchema.NAME));
+
+ DataType STRING = base.schema(DefaultSchema.NAME).type(Name.of("string"));
+ DataType INTEGER = base.schema(DefaultSchema.NAME).type(Name.of("int"));
+ DataType DOUBLE = base.schema(DefaultSchema.NAME).type(Name.of("double"));
+ DataType FLOAT = base.schema(DefaultSchema.NAME).type(Name.of("float"));
+
+// STRING.constraint(MinLength.NAME).instance(4);
+
+ Particle email = STRING.instance()
+ .name(Name.of("email"))
+ .description("email as main identifier for an account")
+ .constraint(MatchRegExp.NAME, RegExpHelper.EMAIL)
+ .constraint(MinLength.NAME, 4)
+ .constraint(MaxLength.NAME, 512)
+ .constraint(NotNull.NAME);
+
+ Particle phone = STRING.instance()
+ .name(Name.of("phone"))
+ .description("alternative identifier for an account")
+ .constraint(MatchRegExp.NAME, RegExpHelper.PHONE)
+ .constraint(MinLength.NAME, 10)
+ .constraint(MaxLength.NAME, 32);
+ Particle password = STRING.instance()
+ .name(Name.of("password"))
+ .description("account password")
+ .constraint(MinLength.NAME, 8)
+ .constraint(MaxLength.NAME, 32)
+ .constraint(NotNull.NAME);
+
+ Element account = base.atom()
+ .name(Name.of("account"))
+ .particles(email, phone, password);
+
+ Particle lastName = STRING.instance()
+ .name(Name.of("last", "name"))
+ .description("last name of user")
+ .constraint(MinLength.NAME, 1)
+ .constraint(MaxLength.NAME, 64)
+ .constraint(NotNull.NAME);
+
+ Particle firstName = STRING.instance()
+ .name(Name.of("first", "name"))
+ .description("first name of user")
+ .constraint(MinLength.NAME, 1)
+ .constraint(MaxLength.NAME, 64);
+
+ Particle age = INTEGER.instance()
+ .name(Name.of("age"))
+ .description("age of user owning an account")
+ .constraint(IntegerMin.NAME, 18)
+ .constraint(IntegerMax.NAME, 65);
+
+ Element accountDetails = base.atom()
+ .name(Name.of("account", "details"))
+ .particles(lastName, firstName, age);
+
+ Particle length = DOUBLE.instance()
+ .name(Name.of("length"))
+ .description("penis length")
+ .constraint(RationalMin.NAME, 1)
+ .constraint(RationalMax.NAME, 40);
+
+ Element male = base.isotope(account)
+ .name(Name.of("male"))
+ .particles(length);
+
+ Particle depth = FLOAT.instance()
+ .name(Name.of("depth"))
+ .description("vagina depth")
+ .constraint(RationalMin.NAME, 1)
+ .constraint(RationalMax.NAME, 30);
+
+ base.isotope(account)
+ .name(Name.of("female"))
+ .particles(depth);
+
+ Particle positionName = STRING.instance()
+ .name(Name.of("title"))
+ .description("position name")
+ .constraint(MinLength.NAME, 3)
+ .constraint(MaxLength.NAME, 255);
+
+ Element position = base.atom()
+ .name(Name.of("position"))
+ .particles(positionName);
+
+ Particle idNumber = STRING.instance()
+ .name(Name.of("number"))
+ .description("military id number")
+ .constraint(ExactLength.NAME, 11);
+
+ Element militaryId = base.atom()
+ .name(Name.of("military", "id"))
+ .particles(idNumber);
+
+ Element profile = base.atom()
+ .name(("profile"));
+
+ base.links(Universe.linkOneToOne()
+ .from(account)
+ .fromName("details")
+ .to(accountDetails)
+ .toName("account")
+ .mandatory(), Universe.linkOneToMany()
+ .from(account)
+ .fromName("profiles")
+ .to(profile)
+ .toName("account")
+ .more(0), Universe.linkManyToMany()
+ .from(profile)
+ .fromName("positions")
+ .to(position)
+ .toName("profiles"), Universe.linkOneToOne()
+ .from(male)
+ .fromName("military", "id")
+ .to(militaryId)
+ .toName("account"));
+
+ UniverseProject data = workspace.universe()
+ .name(Name.of("data"))
+ .schemas(env.schemaByName(DefaultSchema.NAME));
+
+ Particle organizationName = STRING.instance()
+ .name(Name.of("name"))
+ .description("full name of an organization")
+ .constraint(MinLength.NAME, 3)
+ .constraint(MaxLength.NAME, 255);
+ Element organization = data.atom();
+ organization.name(Name.of("organization"));
+ organization.particles(organizationName);
+
+ Assertions.assertTrue(env.workspaceSaveAs(workspace, TestUtils.testRoot()).ok());
+ }
+
+ @Test
+ @DisplayName("Universe Project load")
+ void projectLoad() {
+ Environment env = Environment.init();
+ env.workspaceLoad(TestUtils.testRoot());
+ }
+
+}
diff --git a/traqtor.code-workspace b/traqtor.code-workspace
index f4c55b8..4038c4c 100644
--- a/traqtor.code-workspace
+++ b/traqtor.code-workspace
@@ -16,7 +16,7 @@
"java.dependency.showMembers": true,
"java.maven.downloadSources": true,
"java.format.enabled": true,
- // "java.format.onType.enabled": true,
+ "java.format.onType.enabled": true,
"java.dependency.syncWithFolderExplorer": false,
"maven.executable.preferMavenWrapper": false,
"java.format.settings.url": ".vscode/formatting.xml",