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 a, Particle 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... 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... 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 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 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 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 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 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 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 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 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",