Workspace top level load routine ready. Fixed json bind strategy.

sidewalk-01
Edward M. Kagan 5 years ago
parent 48a0c2be81
commit f5f99ef8ac

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>link.pagan</groupId>
<artifactId>traqtor</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>TraQtor</name>
<modules>
<module>traqtor-aio</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -1,11 +1,11 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- <parent>
<groupId>link.pagan</groupId>
<artifactId>traqtor</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</parent>-->
<groupId>link.pagan</groupId>
<artifactId>traqtor-aio</artifactId>
<version>0.0.1-SNAPSHOT</version>

@ -1,15 +0,0 @@
/*
* 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;
import java.io.File;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public interface Directoried {
public File dir ();
}

@ -1,15 +0,0 @@
/*
* 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;
import java.io.File;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public interface Filed {
public File file ();
}

@ -1,35 +0,0 @@
package link.pagan.traqtor.deck;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.WorkspaceSerializer;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.universe.UniverseProjectSerializer;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.project.universe.element.ElementSerializer;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.element.PaticleInfoSerializer;
import link.pagan.traqtor.project.universe.link.Link;
import link.pagan.traqtor.project.universe.link.LinkSerializer;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.ConstraintInfoSerializer;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.util.NameSerializer;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public abstract class SystemConfig {
public static final ObjectMapper JSON = new ObjectMapper()
.enable(SerializationFeature.INDENT_OUTPUT)
.registerModule(new SimpleModule()
.addSerializer(Name.class, new NameSerializer())
.addSerializer(UniverseProject.class, new UniverseProjectSerializer())
.addSerializer(Element.class, new ElementSerializer())
.addSerializer(Particle.class, new PaticleInfoSerializer())
.addSerializer(Constraint.class, new ConstraintInfoSerializer())
.addSerializer(Link.class, new LinkSerializer())
.addSerializer(Workspace.class, new WorkspaceSerializer()));
}

@ -1,8 +0,0 @@
package link.pagan.traqtor.deck.op;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public enum MessageType {
INFO,
WARN,
FAIL
}

@ -1,6 +1,6 @@
package link.pagan.traqtor.mapping;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.model.project.universe.schema.DataType;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class MappingEntry {

@ -1,29 +1,48 @@
package link.pagan.traqtor;
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.deck.SystemConfig;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.project.database.DatabaseProject;
import link.pagan.traqtor.project.universe.UniverseProject;
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 File lockFile;
private Name name;
private boolean dirty;
private boolean pretty;
private final List<Project> projects;
public Workspace () {
this.root = null;
this.dirty = true;
this.pretty = true;
this.json = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
this.projects = new ArrayList<Project>();
}
public UniverseProject universe () {
UniverseProject project = new UniverseProject(this);
this.projects.add(project);
@ -38,20 +57,10 @@ public class Workspace implements Filed, Directoried {
return project;
}
public Workspace () {
this.root = null;
this.dirty = true;
this.projects = new ArrayList<Project>();
}
public Name name () {
return this.name;
}
public Workspace name (String... parts) {
return name(Name.of(parts));
}
public Workspace name (Name name) {
this.name = name;
return this;
@ -72,7 +81,16 @@ public class Workspace implements Filed, Directoried {
return root;
}
public Workspace root (File 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;
}
@ -85,8 +103,26 @@ public class Workspace implements Filed, Directoried {
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, OperationResult.start());
return saveAs(this, parentDir, new OperationResult());
}
private static OperationResult saveAs (Workspace workspace, File parent, OperationResult result) {
@ -129,21 +165,21 @@ public class Workspace implements Filed, Directoried {
File oldRoot = workspace.dir();
boolean oldDirty = workspace.dirty();
workspace.root(root);
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.root(oldRoot);
workspace.dir(oldRoot);
workspace.dirty(oldDirty);
}
return result;
}
public OperationResult save () {
return save(this, OperationResult.start());
return save(this, new OperationResult());
}
private static OperationResult save (Workspace workspace, OperationResult result) {
@ -192,17 +228,32 @@ public class Workspace implements Filed, Directoried {
result.info("Writing workspace descriptor file to " + file.getAbsolutePath() + " ...");
try {
SystemConfig.JSON.writeValue(file, workspace);
workspace.json().writeValue(file, workspace);
} catch (IOException ex) {
result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
result.fail(ex);
return result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception")
.fail(ex);
}
return result;
}
@Override
public File file () {
return new File(dir(), ".tw");
public static OperationObjectResult<Workspace> load (File dir) {
OperationObjectResult<Workspace> result = new OperationObjectResult<Workspace>();
readJson(dir, result);
return result;
}
private static OperationObjectResult<Workspace> readJson (File dir, OperationObjectResult<Workspace> 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;
}
}

@ -0,0 +1,43 @@
package link.pagan.traqtor.model;
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.deser.std.StdDeserializer;
import link.pagan.traqtor.util.Name;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
class WorkspaceDeserializer extends StdDeserializer<Workspace> {
private static final long serialVersionUID = 1L;
protected WorkspaceDeserializer () {
this(null);
}
protected WorkspaceDeserializer (Class<Workspace> t) {
super(t);
}
@Override
public Workspace deserialize (JsonParser parser, DeserializationContext ctxt) throws IOException,
JsonProcessingException
{
Workspace workspace = new Workspace();
TreeNode tree = workspace.json().readTree(parser);
TreeNode nameNode = tree.get("name");
TreeNode prettyNode = tree.get("pretty");
if (nameNode != null) { workspace.name(workspace.json().treeToValue(nameNode, Name.class)); }
if (prettyNode != null) { workspace.pretty(workspace.json().treeToValue(prettyNode, Boolean.class)); }
return workspace;
}
}

@ -1,12 +1,12 @@
package link.pagan.traqtor;
package link.pagan.traqtor.model;
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 java.io.IOException;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class WorkspaceSerializer extends StdSerializer<Workspace> {
class WorkspaceSerializer extends StdSerializer<Workspace> {
private static final long serialVersionUID = 1L;
@ -22,6 +22,8 @@ public class WorkspaceSerializer extends StdSerializer<Workspace> {
public void serialize (Workspace value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeObjectField("name", value.name());
if (value.pretty()) { gen.writeBooleanField("pretty", value.pretty()); }
gen.writeEndObject();
}

@ -1,9 +1,9 @@
package link.pagan.traqtor.project;
package link.pagan.traqtor.model.project;
import link.pagan.traqtor.Directoried;
import link.pagan.traqtor.Filed;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.deck.op.OperationResult;
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 {
@ -36,4 +36,8 @@ public abstract class Project implements Filed, Directoried {
public abstract OperationResult save (OperationResult result);
public Workspace workspace () {
return workspace;
}
}

@ -3,12 +3,12 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.backend.mapping;
package link.pagan.traqtor.model.project.backend.mapping;
import java.io.File;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.model.Workspace;
import link.pagan.traqtor.util.op.OperationResult;
import link.pagan.traqtor.model.project.Project;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class BackendProject extends Project {

@ -1,3 +1,5 @@
package link.pagan.traqtor.model.project.backend.mapping;
// package link.pagan.traqtor.project.backend.mapping;
//
// import java.util.HashMap;

@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database;
package link.pagan.traqtor.model.project.database;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class DatabaseColumn {

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.database;
package link.pagan.traqtor.model.project.database;
import java.io.File;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.model.Workspace;
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;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */

@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database;
package link.pagan.traqtor.model.project.database;
import link.pagan.traqtor.util.Name;

@ -1,4 +1,4 @@
package link.pagan.traqtor.project.database;
package link.pagan.traqtor.model.project.database;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class DatabaseTable {

@ -1,3 +1,5 @@
package link.pagan.traqtor.model.project.database.mapping;
// package link.pagan.traqtor.project.database.mapping;
//
// import link.pagan.traqtor.util.Name;

@ -1,4 +1,4 @@
package link.pagan.traqtor.project.database.mapping;
package link.pagan.traqtor.model.project.database.mapping;
import java.util.HashMap;
import link.pagan.traqtor.mapping.Mapping;

@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database.mapping;
package link.pagan.traqtor.model.project.database.mapping;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public interface DatabaseNamingScheme {

@ -1,3 +1,5 @@
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

@ -1,3 +1,5 @@
package link.pagan.traqtor.model.project.database.mapping.impl;
// package link.pagan.traqtor.project.database.mapping.impl;
//
// import java.util.HashMap;

@ -3,12 +3,12 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.frontend;
package link.pagan.traqtor.model.project.frontend;
import java.io.File;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.model.Workspace;
import link.pagan.traqtor.util.op.OperationResult;
import link.pagan.traqtor.model.project.Project;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class FrontendProject extends Project {

@ -1,3 +1,5 @@
package link.pagan.traqtor.model.project.frontend.mapping;
// package link.pagan.traqtor.project.frontend.mapping;
//
// import java.util.HashMap;

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe;
package link.pagan.traqtor.model.project.universe;
import link.pagan.traqtor.project.universe.link.Link;
import link.pagan.traqtor.project.universe.link.ManyToManyLink;
import link.pagan.traqtor.project.universe.link.OneToManyLink;
import link.pagan.traqtor.project.universe.link.OneToOneLink;
import link.pagan.traqtor.model.project.universe.link.Link;
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 >} */
public class Universe {

@ -1,21 +1,23 @@
package link.pagan.traqtor.project.universe;
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.Workspace;
import link.pagan.traqtor.deck.SystemConfig;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.project.universe.element.Atom;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.link.Link;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.project.universe.element.Isotope;
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<DatatypeSchema> schemas;
@ -105,7 +107,7 @@ public class UniverseProject extends Project {
result.info("Writing project descriptor file to " + file.getAbsolutePath() + " ...");
try {
SystemConfig.JSON.writeValue(file, project);
project.workspace().json().writeValue(file, project);
} catch (IOException ex) {
result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
result.fail(ex);

@ -0,0 +1,42 @@
package link.pagan.traqtor.model.project.universe;
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.link.Link;
import link.pagan.traqtor.model.project.universe.schema.DatatypeSchema;
class UniverseSerializer extends StdSerializer<UniverseProject> {
private static final long serialVersionUID = 1L;
public UniverseSerializer () {
this(null);
}
public UniverseSerializer (Class<UniverseProject> t) {
super(t);
}
@Override
public void serialize (UniverseProject value, JsonGenerator gen, SerializerProvider provider)
throws IOException
{
gen.writeStartObject();
gen.writeObjectField("name", value.name());
gen.writeArrayFieldStart("schemas");
for (DatatypeSchema schema : value.schemas()) { gen.writeObject(schema.name()); }
gen.writeEndArray();
gen.writeArrayFieldStart("links");
for (Link link : value.links()) { gen.writeObject(link); }
gen.writeEndArray();
gen.writeEndObject();
}
}

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
import java.io.File;
import java.util.List;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.model.project.universe.UniverseProject;
import link.pagan.traqtor.model.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Atom extends Element {

@ -1,4 +1,4 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
import java.io.File;
import java.io.IOException;
@ -7,13 +7,17 @@ import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import link.pagan.traqtor.Filed;
import link.pagan.traqtor.deck.SystemConfig;
import link.pagan.traqtor.deck.op.OperationResult;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.universe.schema.DataType;
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;
@ -37,7 +41,8 @@ public abstract class Element implements Filed {
}
public Name name () {
if (name == null) return Name.NO_NAME;
if (name == null) { return Name.NO_NAME; }
return name;
}
@ -84,7 +89,7 @@ public abstract class Element implements Filed {
result.info("Writing element to " + file.getAbsolutePath() + " ...");
try {
SystemConfig.JSON.writeValue(file, element);
element.project().workspace().json().writeValue(file, element);
} catch (IOException ex) {
result.fail("Failed to write file " + file.getAbsolutePath() + " - IO exception");
result.fail(ex);
@ -92,4 +97,8 @@ public abstract class Element implements Filed {
return result;
}
public UniverseProject project () {
return project;
}
}

@ -1,13 +1,13 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
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 java.io.IOException;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.model.project.universe.schema.DataType;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class ElementSerializer extends StdSerializer<Element> {
class ElementSerializer extends StdSerializer<Element> {
private static final long serialVersionUID = 1L;

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
import java.io.File;
import java.util.List;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.model.project.universe.UniverseProject;
import link.pagan.traqtor.model.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Isotope extends Element {

@ -1,14 +1,19 @@
package link.pagan.traqtor.project.universe.element;
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 link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.ConstraintInfo;
import link.pagan.traqtor.project.universe.schema.DataType;
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 <T extends DataType> extends PaticleInfo {
private final Set<ConstraintInfo> constraints;

@ -1,8 +1,8 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
import java.util.Set;
import link.pagan.traqtor.project.universe.schema.ConstraintInfo;
import link.pagan.traqtor.project.universe.schema.DataType;
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 >} */

@ -1,13 +1,13 @@
package link.pagan.traqtor.project.universe.element;
package link.pagan.traqtor.model.project.universe.element;
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 java.io.IOException;
import link.pagan.traqtor.project.universe.schema.ConstraintInfo;
import link.pagan.traqtor.model.project.universe.schema.ConstraintInfo;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class PaticleInfoSerializer extends StdSerializer<PaticleInfo> {
class PaticleInfoSerializer extends StdSerializer<PaticleInfo> {
private static final long serialVersionUID = 1L;

@ -1,8 +1,12 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
import link.pagan.traqtor.project.universe.element.Element;
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 {
private Element from;

@ -1,12 +1,12 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
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 java.io.IOException;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class LinkSerializer extends StdSerializer<Link> {
class LinkSerializer extends StdSerializer<Link> {
private static final long serialVersionUID = 1L;

@ -1,4 +1,4 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public enum LinkType {

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.model.project.universe.element.Element;
public class ManyToManyLink extends Link {

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.model.project.universe.element.Element;
public class OneToManyLink extends Link {

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.link;
package link.pagan.traqtor.model.project.universe.link;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.model.project.universe.element.Element;
public class OneToOneLink extends Link {

@ -1,9 +1,14 @@
package link.pagan.traqtor.project.universe.schema;
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 <T> type to which this constraint is applicable */
// @JsonDeserialize(using = LinkDeserializer.class)
@JsonSerialize(using = ConstraintInfoSerializer.class)
public abstract class Constraint <T extends DataType> extends ConstraintInfo {
protected Name name;

@ -0,0 +1,12 @@
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 ();
}

@ -1,12 +1,12 @@
package link.pagan.traqtor.project.universe.schema;
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;
import java.io.IOException;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class ConstraintInfoSerializer extends StdSerializer<ConstraintInfo> {
class ConstraintInfoSerializer extends StdSerializer<ConstraintInfo> {
private static final long serialVersionUID = 1L;
@ -19,7 +19,9 @@ public class ConstraintInfoSerializer extends StdSerializer<ConstraintInfo> {
}
@Override
public void serialize (ConstraintInfo value, JsonGenerator gen, SerializerProvider provider) throws IOException {
public void serialize (ConstraintInfo value, JsonGenerator gen, SerializerProvider provider)
throws IOException
{
gen.writeStartObject();
gen.writeObjectField("name", value.name());
gen.writeObjectField("value", value.value());

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema;
package link.pagan.traqtor.model.project.universe.schema;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.model.project.universe.element.Particle;
import link.pagan.traqtor.util.Name;
public abstract class DataType {

@ -1,4 +1,4 @@
package link.pagan.traqtor.project.universe.schema;
package link.pagan.traqtor.model.project.universe.schema;
import link.pagan.traqtor.util.Name;

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl;
package link.pagan.traqtor.model.project.universe.schema.impl;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
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 {

@ -1,8 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl;
package link.pagan.traqtor.model.project.universe.schema.impl;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.LogicDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.logic.BooleanDataType;
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 {

@ -1,12 +1,12 @@
package link.pagan.traqtor.project.universe.schema.impl;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.ByteDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.IntDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.LongDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.ShortDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.DoubleDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.FloatDataType;
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 {

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl;
package link.pagan.traqtor.model.project.universe.schema.impl;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.TemporalDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.temporal.DateDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.temporal.TimeDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.temporal.TimestampDataType;
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 {

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.schema.impl.data;
package link.pagan.traqtor.model.project.universe.schema.impl.data;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
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 >} */

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.schema.impl.data;
package link.pagan.traqtor.model.project.universe.schema.impl.data;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
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 >} */

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.schema.impl.data;
package link.pagan.traqtor.model.project.universe.schema.impl.data;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
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 >} */

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.schema.impl.data;
package link.pagan.traqtor.model.project.universe.schema.impl.data;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
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 >} */

@ -1,12 +1,12 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal;
package link.pagan.traqtor.model.project.universe.schema.impl.data.literal;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints.LiteralMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints.LiteralMinConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints.LiteralRegExpConstraint;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType;
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 >} */

@ -1,9 +1,9 @@
package link.pagan.traqtor.project.universe.schema.impl.data.logic;
package link.pagan.traqtor.model.project.universe.schema.impl.data.logic;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.LogicDataType;
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 >} */

@ -0,0 +1,32 @@
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<Constraint<? extends DataType>> constraints) {
super(name, constraints);
}
@Override
public abstract Particle<? extends IntegerDataType> particle();
public IntegerMinConstraint min(long min) {
return new IntegerMinConstraint(min);
}
public IntegerMaxConstraint max(long max) {
return new IntegerMaxConstraint(max);
}
}

@ -1,12 +1,12 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.project.universe.schema.impl.data.NumericDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMinConstraint;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.integer.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.real;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
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 >} */

@ -1,10 +1,10 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.real;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMaxConstraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints.RationalMinConstraint;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType;
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 >} */

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.constraints;
package link.pagan.traqtor.model.project.universe.schema.impl.data.numeric.real.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType;
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 >} */

@ -1,8 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.TemporalDataType;
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 >} */

@ -1,8 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.TemporalDataType;
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 >} */

@ -1,8 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
package link.pagan.traqtor.model.project.universe.schema.impl.data.temporal;
import java.util.ArrayList;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.impl.data.TemporalDataType;
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 >} */

@ -1,39 +0,0 @@
package link.pagan.traqtor.project.universe;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import link.pagan.traqtor.project.universe.link.Link;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class UniverseProjectSerializer extends StdSerializer<UniverseProject> {
private static final long serialVersionUID = 1L;
public UniverseProjectSerializer () {
this(null);
}
public UniverseProjectSerializer (Class<UniverseProject> t) {
super(t);
}
@Override
public void serialize (UniverseProject value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeObjectField("name", value.name());
gen.writeArrayFieldStart("schemas");
for (DatatypeSchema schema : value.schemas()) { gen.writeObject(schema.name()); }
gen.writeEndArray();
gen.writeArrayFieldStart("links");
for (Link link : value.links()) { gen.writeObject(link); }
gen.writeEndArray();
gen.writeEndObject();
}
}

@ -1,17 +0,0 @@
/*
* 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.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 ();
}

@ -1,32 +0,0 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric;
import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.project.universe.schema.impl.data.NumericDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.constraints.IntegerMaxConstraint;
import link.pagan.traqtor.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<Constraint<? extends DataType>> constraints) {
super(name, constraints);
}
@Override
public abstract Particle<? extends IntegerDataType> particle();
public IntegerMinConstraint min(long min) {
return new IntegerMinConstraint(min);
}
public IntegerMaxConstraint max(long max) {
return new IntegerMaxConstraint(max);
}
}

@ -1,36 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.util;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class FileHandle {
String name;
String extension;
String content;
public FileHandle (String fileName, String fileExtension, String fileContent) {
this.name = fileName;
this.extension = fileExtension;
this.content = fileContent;
}
public String name () {
return name;
}
public String extension () {
return extension;
}
public String content () {
return content;
}
}

@ -1,5 +1,14 @@
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<Name> {
public static final Name NO_NAME = Name.of("no", "name");
@ -41,4 +50,22 @@ public class Name implements Comparable<Name> {
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;
}
}

@ -0,0 +1,43 @@
package link.pagan.traqtor.util;
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;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class NameDeserializer extends StdDeserializer<Name> {
protected final static ObjectMapper MAPPER = new ObjectMapper();
private static final long serialVersionUID = 1L;
protected NameDeserializer () {
this(null);
}
protected NameDeserializer (Class<Name> t) {
super(t);
}
@Override
public Name deserialize (JsonParser parser, DeserializationContext ctxt) throws IOException,
JsonProcessingException
{
JsonNode tree = MAPPER.readTree(parser);
String[] nameParts = new String[tree.size()];
int partNumber = 0;
for (JsonNode item : tree) {
nameParts[partNumber] = item.textValue();
partNumber++;
}
return new Name(nameParts);
}
}

@ -1,12 +1,12 @@
package link.pagan.traqtor.util;
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 java.io.IOException;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class NameSerializer extends StdSerializer<Name> {
class NameSerializer extends StdSerializer<Name> {
private static final long serialVersionUID = 1L;

@ -0,0 +1,10 @@
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 ();
}

@ -0,0 +1,10 @@
package link.pagan.traqtor.util.io;
import java.io.File;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public interface Filed {
public File file ();
}

@ -1,4 +1,4 @@
package link.pagan.traqtor.deck.op;
package link.pagan.traqtor.util.op;
import java.text.Format;
import java.text.SimpleDateFormat;
@ -53,4 +53,10 @@ public class OperationMessage {
this.message;
}
public enum MessageType {
INFO,
WARN,
FAIL
}
}

@ -0,0 +1,57 @@
package link.pagan.traqtor.util.op;
/** @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >} */
public class OperationObjectResult <T> extends OperationResult {
protected T object;
protected OperationObjectResult (OperationResult parent, T object) {
super(parent);
this.object = object;
}
public OperationObjectResult () {
this(null, null);
}
@Override
public OperationObjectResult<T> startSubresult () {
OperationObjectResult<T> subresult = new OperationObjectResult<T>(this, this.object);
this.subresults.add(subresult);
return subresult;
}
public T object () {
return object;
}
public OperationObjectResult<T> object (T object) {
this.object = object;
return this;
}
@Override
public OperationObjectResult<T> info (String message) {
super.info(message);
return this;
}
@Override
public OperationObjectResult<T> warn (String message) {
super.warn(message);
return this;
}
@Override
public OperationObjectResult<T> fail (Exception ex) {
super.fail(ex);
return this;
}
@Override
public OperationObjectResult<T> fail (String message) {
super.fail(message);
return this;
}
}

@ -1,4 +1,4 @@
package link.pagan.traqtor.deck.op;
package link.pagan.traqtor.util.op;
import java.util.LinkedList;
@ -11,16 +11,16 @@ public class OperationResult {
private final LinkedList<OperationMessage> messages;
private final LinkedList<OperationResult> subresults;
protected final LinkedList<OperationResult> subresults;
private OperationResult (OperationResult parent) {
protected OperationResult (OperationResult parent) {
this.timestamp = System.currentTimeMillis();
this.messages = new LinkedList<OperationMessage>();
this.subresults = new LinkedList<OperationResult>();
this.parent = parent;
}
private OperationResult () {
public OperationResult () {
this(null);
}
@ -63,7 +63,9 @@ public class OperationResult {
private boolean proxiedOK () {
if (this.messages.stream().anyMatch(message -> (message.type().equals(MessageType.FAIL)))) { return false; }
if (this.messages.stream().anyMatch(message -> (message.type().equals(OperationMessage.MessageType.FAIL)))) {
return false;
}
return this.subresults.stream().noneMatch(subresult -> (!subresult.ok()));
}
@ -79,21 +81,12 @@ public class OperationResult {
return this.subresults.toArray(new OperationResult[this.subresults.size()]);
}
public static OperationResult start () {
return new OperationResult();
}
public OperationResult startSubresult () {
OperationResult subresult = new OperationResult(this);
this.subresults.add(subresult);
return subresult;
}
// public OperationResult addSubresult (OperationResult subresult) {
// this.subresults.add(subresult);
// return this;
// }
public void print () {
for (OperationMessage message : this.messages()) { System.out.println(message); }

@ -1,34 +0,0 @@
package link.pagan.traqtor.test;
import link.pagan.traqtor.Workspace;
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("traqtor", "demo", "workspace");
Assertions.assertTrue(!workspace.save().ok());
TestUtils.deleteTestRoot();
Assertions.assertTrue(!workspace.root(TestUtils.testRoot()).save().ok());
TestUtils.rebuildTestRoot();
Assertions.assertTrue(workspace.saveAs(TestUtils.testRoot()).ok());
}
}

@ -0,0 +1,48 @@
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<Workspace> loadResult = Workspace.load(workspace.dir());
Assertions.assertTrue(loadResult.ok());
Assertions.assertEquals(workspace.name(), loadResult.object().name());
Assertions.assertEquals(workspace.pretty(), loadResult.object().pretty());
}
}

@ -0,0 +1,181 @@
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<StringDataType> 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<StringDataType> 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<StringDataType> 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<StringDataType> lastName = STRING.particle()
.name("last", "name")
.description("last name of user")
.constraints(STRING.max(64), STRING.min(1));
Particle<StringDataType> firstName = STRING.particle()
.name("first", "name")
.description("first name of user")
.optional(true)
.constraints(STRING.max(64), STRING.min(1));
Particle<IntDataType> 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<DoubleDataType> 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<FloatDataType> depth = FLOAT.particle()
.name("depth")
.description("vagina depth")
.constraints(DOUBLE.min(0), DOUBLE.max(40));
base.isotope(account)
.name("female")
.particles(depth);
Particle<StringDataType> positionName = STRING.particle()
.name("title")
.description("position name")
.constraints(STRING.max(255), STRING.min(3));
Element position = base.atom()
.name("position")
.particles(positionName);
Particle<StringDataType> 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<StringDataType> 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());
}
}

@ -1,175 +0,0 @@
package link.pagan.traqtor.test.project.universe;
import com.fasterxml.jackson.core.JsonProcessingException;
import link.pagan.traqtor.Workspace;
import link.pagan.traqtor.project.universe.Universe;
import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.LiteralDataTypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.LogicDatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.NumericDatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.TemporalDatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.integer.IntDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.DoubleDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.real.FloatDataType;
import link.pagan.traqtor.test.TestUtils;
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 () throws JsonProcessingException {
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("traqtor", "demo", "workspace");
UniverseProject base = workspace.universe().name("base").schemas(LITERAL, LOGIC, NUMERIC, TEMPORAL);
Particle<StringDataType> 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<StringDataType> 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<StringDataType> 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<StringDataType> lastName = STRING.particle()
.name("last", "name")
.description("last name of user")
.constraints(STRING.max(64), STRING.min(1));
Particle<StringDataType> firstName = STRING.particle()
.name("first", "name")
.description("first name of user")
.optional(true)
.constraints(STRING.max(64), STRING.min(1));
Particle<IntDataType> 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<DoubleDataType> 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<FloatDataType> depth = FLOAT.particle()
.name("depth")
.description("vagina depth")
.constraints(DOUBLE.min(0), DOUBLE.max(40));
base.isotope(account)
.name("female")
.particles(depth);
Particle<StringDataType> positionName = STRING.particle()
.name("title")
.description("position name")
.constraints(STRING.max(255), STRING.min(3));
Element position = base.atom()
.name("position")
.particles(positionName);
Particle<StringDataType> 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<StringDataType> 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());
}
}

@ -1,117 +0,0 @@
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}

Binary file not shown.

@ -1,2 +0,0 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

@ -1,310 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

@ -1,182 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

@ -3,8 +3,6 @@ package two.pm.traqtor;
import io.vertx.core.http.HttpServerRequest;
import org.apache.cayenne.BaseContext;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.jboss.logging.Logger;
import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;
@ -34,13 +32,13 @@ public class AccessFilter implements ContainerRequestFilter {
BaseContext.bindThreadObjectContext(cayenneRuntimeFactory.cayenneRuntime().newContext());
final String method = context.getMethod();
// final String method = context.getMethod();
final String path = info.getPath();
// final String address = request.remoteAddress().toString();
// System.out.println(method + " : " + path);
if (path.equals("/hello/secret")) {
context.abortWith(Response.status(Status.UNAUTHORIZED).build());
}
if (path.equals("/hello/secret")) { context.abortWith(Response.status(Status.UNAUTHORIZED).build()); }
// LOG.infof("Request %s %s from IP %s", method, path, address);
}
}

@ -1,12 +1,7 @@
package two.pm.traqtor;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Singleton;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.server.ServerRuntime;
@ -22,26 +17,28 @@ public class CayenneRuntimeFactory {
@Singleton
public ServerRuntime cayenneRuntime () {
if (runtime == null) {
// ClassLoader classLoader = ;
// File file = new File(classLoader.getFile());
// System.out.println(file.getAbsolutePath());
runtime = ServerRuntime.builder().addConfig("db/cayenne-traqtor.xml")
runtime = ServerRuntime.builder()
.addConfig("db/cayenne-traqtor.xml")
// .addModule(binder ->
// binder.bind(JdbcEventLogger.class).to(NoopJdbcEventLogger.class))
.addModule(binder -> {
.addModule(binder ->
{
binder.bind(ResourceLocator.class)
.to(ClassLoaderResourceLocatorFix.class);
binder.bind(Key.get(ResourceLocator.class,
Constants.SERVER_RESOURCE_LOCATOR))
binder.bind(Key.get(ResourceLocator.class, Constants.SERVER_RESOURCE_LOCATOR))
.to(ClassLoaderResourceLocatorFix.class);
})
.addModule(CryptoModule.extend()
.keyStore(this.getClass().getClassLoader()
.getResource("db/traqtor.keystore"),
"secret".toCharArray(), "key0")
.keyStore(this.getClass()
.getClassLoader()
.getResource("db/traqtor.keystore"), "secret".toCharArray(), "key0")
.compress()
// .useHMAC()
.module())
@ -49,8 +46,8 @@ public class CayenneRuntimeFactory {
ObjectContext context = runtime.newContext();
SQLExec.query("CREATE TABLE IF NOT EXISTS system_user (id bigint NOT NULL, CRYPTO_password varchar(2048) NOT NULL, CRYPTO_email varchar(2048) NOT NULL, PRIMARY KEY (id));"
+ "CREATE SEQUENCE IF NOT EXISTS pk_system_user INCREMENT 20 MINVALUE -9223372036854775807;")
SQLExec.query("CREATE TABLE IF NOT EXISTS system_user (id bigint NOT NULL, CRYPTO_password varchar(2048) NOT NULL, CRYPTO_email varchar(2048) NOT NULL, PRIMARY KEY (id));" +
"CREATE SEQUENCE IF NOT EXISTS pk_system_user INCREMENT 20 MINVALUE -9223372036854775807;")
.execute(context);
context.commitChanges();
}

@ -30,36 +30,41 @@ public class ClassLoaderResourceLocatorFix implements ResourceLocator {
final Collection<Resource> resources = new ArrayList<>(3);
final Enumeration<URL> urls;
try {
urls = classLoaderManager.getClassLoader(name).getResources(name);
} catch (IOException e) {
throw new ConfigurationException("Error getting resources for ");
}
while (urls.hasMoreElements()) {
resources.add(new URLResourceFix(urls.nextElement()));
}
while (urls.hasMoreElements()) { resources.add(new URLResourceFix(urls.nextElement())); }
return resources;
}
private class URLResourceFix extends URLResource {
private static final long serialVersionUID = 8520153058821165086L;
URLResourceFix (URL url) {
super(url);
}
@Override
public Resource getRelativeResource (String relativePath) {
try {
String url = getURL().toString();
url = url.substring(0, url.lastIndexOf("/") + 1) + relativePath;
return new URLResource(new URI(url).toURL());
} catch (MalformedURLException | URISyntaxException e) {
throw new CayenneRuntimeException("Error creating relative resource '%s' : '%s'", e, getURL(),
relativePath);
} catch (MalformedURLException
| URISyntaxException e)
{
throw new CayenneRuntimeException("Error creating relative resource '%s' : '%s'", e, getURL(), relativePath);
}
}
}
}

@ -1,7 +1,5 @@
package two.pm.traqtor.db;
import java.nio.charset.StandardCharsets;
import org.apache.cayenne.Cayenne;
import two.pm.traqtor.db.auto._SystemUser;
@ -17,7 +15,9 @@ public class SystemUser extends _SystemUser {
public final class DTO {
public String email;
public String password;
public String id;
public DTO (long id, String email, String password) {
@ -27,4 +27,5 @@ public class SystemUser extends _SystemUser {
}
}
}

@ -1,12 +1,7 @@
package two.pm.traqtor.db.auto;
import org.apache.cayenne.ObjectContext;
/**
* This class was generated by Cayenne.
/** This class was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public class _Datamap {
}
* If you need to make any customizations, please use subclass. */
public class _Datamap {}

@ -1,12 +1,7 @@
package two.pm.traqtor.db.auto;
import org.apache.cayenne.ObjectContext;
/**
* This class was generated by Cayenne.
/** This class was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public class _Main {
}
* If you need to make any customizations, please use subclass. */
public class _Main {}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save