EndToEnd for unicerse build no-conflict

sidewalk-01
Edward M. Kagan 5 years ago
parent dd9a274f0a
commit 1fe9ac5999

@ -1,20 +1,18 @@
package link.pagan.traqtor; package link.pagan.traqtor;
import link.pagan.traqtor.project.DatabaseProject; import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.UniverseProject; import link.pagan.traqtor.project.universe.Universe;
import link.pagan.traqtor.project.database.DatabaseSchema;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.element.Atom; import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.project.universe.element.Isotope; 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.project.universe.schema.impl.LiteralDataTypeSchema; 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.LogicDatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.NumericDatatypeSchema; 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.TemporalDatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType; import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.IntegerDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType; import link.pagan.traqtor.project.universe.schema.impl.data.numeric.RationalDataType;
import link.pagan.traqtor.util.RegExpHelper;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
public class EndToEndTest { public class EndToEndTest {
@ -26,11 +24,11 @@ public class EndToEndTest {
NumericDatatypeSchema NUMERIC = NumericDatatypeSchema.instance(); NumericDatatypeSchema NUMERIC = NumericDatatypeSchema.instance();
TemporalDatatypeSchema TEMPORAL = TemporalDatatypeSchema.instance(); TemporalDatatypeSchema TEMPORAL = TemporalDatatypeSchema.instance();
LiteralDataType STRING = LITERAL.STRING; StringDataType STRING = LITERAL.STRING;
// LogicDataType BOOLEAN = LOGIC.BOOLEAN; // LogicDataType BOOLEAN = LOGIC.BOOLEAN;
// IntegerDataType BYTE = NUMERIC.BYTE; // IntegerDataType BYTE = NUMERIC.BYTE;
// IntegerDataType SHORT = NUMERIC.SHORT; // IntegerDataType SHORT = NUMERIC.SHORT;
// IntegerDataType INTEGER = NUMERIC.INTEGER; IntegerDataType INTEGER = NUMERIC.INTEGER;
// IntegerDataType LONG = NUMERIC.LONG; // IntegerDataType LONG = NUMERIC.LONG;
RationalDataType FLOAT = NUMERIC.FLOAT; RationalDataType FLOAT = NUMERIC.FLOAT;
RationalDataType DOUBLE = NUMERIC.DOUBLE; RationalDataType DOUBLE = NUMERIC.DOUBLE;
@ -38,127 +36,165 @@ public class EndToEndTest {
// TemporalDataType TIME = TEMPORAL.TIME; // TemporalDataType TIME = TEMPORAL.TIME;
// TemporalDataType TIMESTAMP = TEMPORAL.TIMESTAMP; // TemporalDataType TIMESTAMP = TEMPORAL.TIMESTAMP;
Atom account = new Atom() Element account = Universe.atom()
.name(new Name("account")) .name(Name.of("account"))
.addParticle(STRING.particle() .particles(
.name(new Name("email")) STRING.particle()
.name(Name.of("email"))
.description("email as main identifier for an account") .description("email as main identifier for an account")
) .constraints(
.addParticle(STRING.particle() STRING.min(4),
.name(new Name("phone")) STRING.max(512),
STRING.regExp(RegExpHelper.EMAIL)
),
STRING.particle()
.name(Name.of("phone"))
.description("alternative identifier for an account") .description("alternative identifier for an account")
.optional()
.constraints(
STRING.min(10),
STRING.max(32),
STRING.regExp(RegExpHelper.PHONE)
)
); );
Atom accountDetails = new Atom() Element accountDetails = Universe.atom()
.name(new Name("account", "details")) .name(Name.of("account", "details"))
.addParticle(STRING.particle() .particles(
.name(new Name("first", "name")) STRING.particle()
.name(Name.of("last", "name"))
.description("last name of user")
.constraints(
STRING.max(64),
STRING.min(1)
),
STRING.particle()
.name(Name.of("first", "name"))
.description("first name of user") .description("first name of user")
.optional()
.constraints(
STRING.max(64),
STRING.min(1)
),
INTEGER.particle()
.name(Name.of("age"))
.description("age of user owning an account")
.constraints(
INTEGER.min(18),
INTEGER.max(65)
) )
.addParticle(STRING.particle()
.name(new Name("last", "name"))
.description("last name of user")
); );
Isotope male = new Isotope() Element male = Universe.isotope()
.base(account) .base(account)
.name(new Name("male")) .name(Name.of("male"))
.addParticle(DOUBLE.particle() .particles(
.name(new Name("length")) DOUBLE.particle()
.name(Name.of("length"))
.description("penis length") .description("penis length")
.constraints(
DOUBLE.min(0),
DOUBLE.max(40)
)
); );
Isotope female = new Isotope() Element female = Universe.isotope()
.base(account) .base(account)
.name(new Name("female")) .name(Name.of("female"))
.addParticle(FLOAT.particle() .particles(
.name(new Name("depth")) FLOAT.particle()
.name(Name.of("depth"))
.description("vagina depth") .description("vagina depth")
.constraints(
DOUBLE.min(0),
DOUBLE.max(40)
)
); );
Atom position = new Atom() Element position = Universe.atom()
.name(new Name("position")) .name(Name.of("position"))
.addParticle(STRING.particle() .particles(
.name(new Name("title")) STRING.particle()
.name(Name.of("title"))
.description("position name") .description("position name")
.constraints(
STRING.max(255),
STRING.min(3)
)
); );
Atom militaryId = new Atom() Element militaryId = Universe.atom()
.name(new Name("military", "id")) .name(Name.of("military", "id"))
.addParticle(STRING.particle() .particles(
.name(new Name("number")) STRING.particle()
.name(Name.of("number"))
.description("military id number") .description("military id number")
.constraints(
STRING.max(11),
STRING.min(11)
)
); );
Atom profile = new Atom() Element profile = Universe.atom()
.name((new Name("profile")) .name((Name.of("profile"))
); );
UniverseProject baseUniverse = new UniverseProject() UniverseProject baseUniverse = Universe.project()
.name(new Name("base")) .name(Name.of("base"))
.importSchema(LITERAL) .schemas(LITERAL, LOGIC, NUMERIC, TEMPORAL)
.importSchema(LOGIC) .elements(account, accountDetails, male, female, position, militaryId, profile)
.importSchema(NUMERIC) .links(Link.oneToOne()
.importSchema(TEMPORAL)
.addElement(account)
.addElement(accountDetails)
.addElement(male)
.addElement(female)
.addElement(position)
.addElement(militaryId)
.addElement(profile)
.addLink(new OneToOneLink()
.from(account) .from(account)
.fromName(new Name("details")) .fromName(Name.of("details"))
.to(accountDetails) .to(accountDetails)
.toName(new Name("account")) .toName(Name.of("account"))
.mandatory() .mandatory(),
) Universe.linkOneToMany()
.addLink(new OneToManyLink() .from(account).fromName(Name.of("profiles"))
.from(account) .to(profile).toName(Name.of("account"))
.fromName(new Name("profiles")) .more(0),
.to(profile) Universe.linkManyToMany().from(profile)
.toName(new Name("account")) .fromName(Name.of("positions"))
.more(0) .to(position).toName(Name.of("profiles")),
) Universe.linkOneToOne()
.addLink(new ManyToManyLink() .from(male).fromName(Name.of("military", "id"))
.from(profile) .to(militaryId).toName(Name.of("account"))
.fromName(new Name("positions"))
.to(position)
.toName(new Name("profiles"))
)
.addLink(new OneToOneLink()
.from(male)
.fromName(new Name("military", "id"))
.to(militaryId)
.toName(new Name("account"))
); );
UniverseProject dataUniverse = new UniverseProject() UniverseProject dataUniverse = Universe.project()
.name(new Name("data")) .name(Name.of("data"))
.importSchema(LITERAL) .schemas(LITERAL)
.addElement(new Atom() .elements(Universe.atom()
.name(new Name("organization")) .name(Name.of("organization"))
.addParticle(STRING.particle() .particles(
.name(new Name("name")) STRING.particle()
.name(Name.of("name"))
.description("full name of an organization") .description("full name of an organization")
.constraints(
STRING.max(255),
STRING.min(3)
)
) )
); );
DatabaseProject mainDatabase = new DatabaseProject() // DatabaseProject mainDatabase = Database.project()
.name(new Name("primary")) // .name(Name.of("primary"))
.addSchema(new DatabaseSchema() // .universes(baseUniverse, dataUniverse)
.name(new Name("public")) // .addSchema(Database.schema()
// .table("base", "account") // .name(Name.of("public"))
// .table("base", "account", "details") // .tables(
// .table("data", "organization") // Database.table()
); // .columns())
// ) // .table("base", "account")
// // .table("base", "account", "details")
// // .table("data", "organization")
// );
new Workspace() new Workspace()
.name(new Name("link", "pagan")) .name(Name.of("link", "pagan"))
.addProject(baseUniverse) .projects(baseUniverse,
.addProject(dataUniverse) dataUniverse
.addProject(mainDatabase); // ,mainDatabase
);
} }
} }

@ -18,7 +18,7 @@ class Workspace {
return this; return this;
} }
public Workspace addProject(Project project) { public Workspace projects(Project... project) {
return this; return this;
} }

@ -8,5 +8,4 @@ public class Project {
return this; return this;
} }
} }

@ -1,29 +0,0 @@
package link.pagan.traqtor.project;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Link;
import link.pagan.traqtor.project.universe.Element;
public class UniverseProject extends Project {
@Override
public UniverseProject name(Name name){
super.name(name);
return this;
}
public UniverseProject importSchema (DatatypeSchema schema) {
return this;
}
public UniverseProject addElement (Element element) {
return this;
}
public UniverseProject addLink(Link link) {
return this;
}
}

@ -0,0 +1,24 @@
package link.pagan.traqtor.project.database;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class Database {
public static DatabaseProject project() {
return new DatabaseProject();
}
public static DatabaseSchema schema() {
return new DatabaseSchema();
}
public static DatabaseTable table() {
return new DatabaseTable();
}
public static DatabaseColumn column() {
return new DatabaseColumn();
}
}

@ -0,0 +1,14 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class DatabaseColumn {
}

@ -1,6 +1,7 @@
package link.pagan.traqtor.project; package link.pagan.traqtor.project.database;
import link.pagan.traqtor.project.database.DatabaseSchema; import link.pagan.traqtor.project.universe.UniverseProject;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
/** /**
@ -9,6 +10,9 @@ import link.pagan.traqtor.util.Name;
*/ */
public class DatabaseProject extends Project { public class DatabaseProject extends Project {
DatabaseProject() {
}
@Override @Override
public DatabaseProject name(Name name) { public DatabaseProject name(Name name) {
super.name(name); super.name(name);
@ -19,4 +23,9 @@ public class DatabaseProject extends Project {
return this; return this;
} }
public DatabaseProject universes(UniverseProject... universes) {
return this;
}
} }

@ -1,3 +1,8 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database; package link.pagan.traqtor.project.database;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
@ -8,8 +13,16 @@ import link.pagan.traqtor.util.Name;
*/ */
public class DatabaseSchema { public class DatabaseSchema {
DatabaseSchema() {
}
public DatabaseSchema name(Name name) { public DatabaseSchema name(Name name) {
return this; return this;
} }
} }

@ -0,0 +1,15 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.project.database;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class DatabaseTable {
}

@ -1,18 +0,0 @@
package link.pagan.traqtor.project.universe;
import link.pagan.traqtor.util.Name;
public class Element {
public Element name(Name name){
return this;
}
public Element addParticle(Particle<?> particle) {
return this;
}
}

@ -1,25 +0,0 @@
package link.pagan.traqtor.project.universe;
import link.pagan.traqtor.util.Name;
public class Link {
public Link from(Element element) {
return this;
}
public Link to(Element element) {
return this;
}
public Link fromName(Name name) {
return this;
}
public Link toName(Name name) {
return this;
}
}

@ -1,25 +0,0 @@
package link.pagan.traqtor.project.universe;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Particle<T extends DataType> {
final DataType type;
Name name;
String description;
public Particle(DataType type) {
this.type = type;
}
public Particle<T> name(Name name) {
return this;
}
public Particle<T> description(String description) {
return this;
}
}

@ -0,0 +1,40 @@
package link.pagan.traqtor.project.universe;
import link.pagan.traqtor.project.universe.element.Atom;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.project.universe.element.Isotope;
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;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class Universe {
public static UniverseProject project() {
return new UniverseProject();
}
public static Atom atom() {
return Element.atom();
}
public static Isotope isotope() {
return Element.isotope();
}
public static OneToOneLink linkOneToOne() {
return Link.oneToOne();
}
public static OneToManyLink linkOneToMany() {
return Link.oneToMany();
}
public static ManyToManyLink linkManyToMany() {
return Link.manyToMany();
}
}

@ -0,0 +1,32 @@
package link.pagan.traqtor.project.universe;
import link.pagan.traqtor.project.Project;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.link.Link;
import link.pagan.traqtor.project.universe.element.Element;
public class UniverseProject extends Project {
UniverseProject() {
}
@Override
public UniverseProject name(Name name){
super.name(name);
return this;
}
public UniverseProject schemas (DatatypeSchema... schemas) {
return this;
}
public UniverseProject elements (Element... element) {
return this;
}
public UniverseProject links(Link... link) {
return this;
}
}

@ -1,5 +0,0 @@
package link.pagan.traqtor.project.universe;
public class UniverseSchema {
}

@ -1,11 +1,14 @@
package link.pagan.traqtor.project.universe.element; package link.pagan.traqtor.project.universe.element;
import link.pagan.traqtor.project.universe.Element; import java.util.List;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Particle;
public class Atom extends Element { public class Atom extends Element {
Atom() {
}
@Override @Override
public Atom name(Name name) { public Atom name(Name name) {
super.name(name); super.name(name);
@ -13,8 +16,8 @@ public class Atom extends Element {
} }
@Override @Override
public Atom addParticle(Particle<?> particle) { public Atom particles(List<Particle<? extends DataType>> particles) {
super.addParticle(particle); super.particles(particles);
return this; return this;
} }

@ -0,0 +1,33 @@
package link.pagan.traqtor.project.universe.element;
import java.util.Arrays;
import java.util.List;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Element {
public Element name(Name name){
return this;
}
@SafeVarargs
public final Element particles(Particle<? extends DataType>... particles) {
return particles(Arrays.asList(particles));
}
public Element particles(List<Particle<? extends DataType>> particles) {
return this;
}
public static Atom atom () {
return new Atom();
}
public static Isotope isotope () {
return new Isotope();
}
}

@ -1,11 +1,14 @@
package link.pagan.traqtor.project.universe.element; package link.pagan.traqtor.project.universe.element;
import link.pagan.traqtor.project.universe.Element; import java.util.List;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Particle;
public class Isotope extends Element { public class Isotope extends Element {
Isotope() {
}
Element base; Element base;
@Override @Override
@ -15,8 +18,8 @@ public class Isotope extends Element {
} }
@Override @Override
public Isotope addParticle(Particle<?> particle) { public Isotope particles(List<Particle<? extends DataType>> particles) {
super.addParticle(particle); super.particles(particles);
return this; return this;
} }

@ -0,0 +1,45 @@
package link.pagan.traqtor.project.universe.element;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType;
import link.pagan.traqtor.util.Name;
public class Particle<T extends DataType> {
final DataType type;
Name name;
String description;
final List<Constraint<? super T>> constraints;
public Particle(DataType type) {
this.type = type;
this.constraints = new ArrayList<>();
}
@SafeVarargs
public final Particle<T> constraints (Constraint<? super T>... args) {
return constraints(Arrays.asList(args));
}
public Particle<T> constraints (List<Constraint<? super T>> args) {
this.constraints.addAll(args);
return this;
}
public Particle<T> name(Name name) {
return this;
}
public Particle<T> description(String description) {
return this;
}
public Particle<T> optional() {
return this;
}
}

@ -0,0 +1,37 @@
package link.pagan.traqtor.project.universe.link;
import link.pagan.traqtor.project.universe.element.Element;
import link.pagan.traqtor.util.Name;
public abstract class Link {
public Link from(Element element) {
return this;
}
public Link to(Element element) {
return this;
}
public Link fromName(Name name) {
return this;
}
public Link toName(Name name) {
return this;
}
public static OneToOneLink oneToOne () {
return new OneToOneLink();
}
public static OneToManyLink oneToMany () {
return new OneToManyLink();
}
public static ManyToManyLink manyToMany () {
return new ManyToManyLink();
}
}

@ -1,11 +1,13 @@
package link.pagan.traqtor.project.universe.link; package link.pagan.traqtor.project.universe.link;
import link.pagan.traqtor.project.universe.Link;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Element; import link.pagan.traqtor.project.universe.element.Element;
public class ManyToManyLink extends Link { public class ManyToManyLink extends Link {
ManyToManyLink() {
}
public ManyToManyLink from(Element element) { public ManyToManyLink from(Element element) {
super.from(element); super.from(element);
return this; return this;

@ -1,11 +1,13 @@
package link.pagan.traqtor.project.universe.link; package link.pagan.traqtor.project.universe.link;
import link.pagan.traqtor.project.universe.Link;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Element; import link.pagan.traqtor.project.universe.element.Element;
public class OneToManyLink extends Link { public class OneToManyLink extends Link {
OneToManyLink() {
}
@Override @Override
public OneToManyLink from(Element element) { public OneToManyLink from(Element element) {
super.from(element); super.from(element);

@ -1,11 +1,13 @@
package link.pagan.traqtor.project.universe.link; package link.pagan.traqtor.project.universe.link;
import link.pagan.traqtor.project.universe.Link;
import link.pagan.traqtor.util.Name; import link.pagan.traqtor.util.Name;
import link.pagan.traqtor.project.universe.Element; import link.pagan.traqtor.project.universe.element.Element;
public class OneToOneLink extends Link { public class OneToOneLink extends Link {
OneToOneLink() {
}
@Override @Override
public OneToOneLink from(Element element) { public OneToOneLink from(Element element) {
super.from(element); super.from(element);

@ -1,24 +1,29 @@
package link.pagan.traqtor.project.universe.schema; package link.pagan.traqtor.project.universe.schema;
import link.pagan.traqtor.project.universe.Particle; import java.util.List;
import link.pagan.traqtor.project.universe.element.Particle;
public abstract class DataType { public abstract class DataType {
private String name; final List<Constraint<? extends DataType>> typeConstraints;
protected DataType (){ public DataType(List<Constraint<? extends DataType>> typeConstraints) {
this.typeConstraints = typeConstraints;
} }
public DataType(String name) { private String name;
this.name = name;
} // protected DataType (){
// }
// public DataType(String name) {
// this.name = name;
// }
public String getName() { public String getName() {
return name; return name;
} }
// public abstract DataType type();
public abstract Particle<? extends DataType> particle(); public abstract Particle<? extends DataType> particle();
} }

@ -1,14 +1,13 @@
package link.pagan.traqtor.project.universe.schema.impl; package link.pagan.traqtor.project.universe.schema.impl;
import link.pagan.traqtor.project.universe.schema.DatatypeSchema; import link.pagan.traqtor.project.universe.schema.DatatypeSchema;
import link.pagan.traqtor.project.universe.schema.impl.data.LiteralDataType;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType; import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
public class LiteralDataTypeSchema extends DatatypeSchema { public class LiteralDataTypeSchema extends DatatypeSchema {
private static final LiteralDataTypeSchema instance = new LiteralDataTypeSchema(); private static final LiteralDataTypeSchema instance = new LiteralDataTypeSchema();
public final LiteralDataType STRING = StringDataType.instance(); public final StringDataType STRING = StringDataType.instance();
public static LiteralDataTypeSchema instance() { public static LiteralDataTypeSchema instance() {
return instance; return instance;

@ -9,7 +9,13 @@ import link.pagan.traqtor.project.universe.schema.DataType;
*/ */
public class NotNullConstraint extends Constraint<DataType> { public class NotNullConstraint extends Constraint<DataType> {
public NotNullConstraint() { private static final NotNullConstraint instance = new NotNullConstraint();
public static NotNullConstraint instance() {
return instance;
}
private NotNullConstraint() {
} }
} }

@ -1,6 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data; package link.pagan.traqtor.project.universe.schema.impl.data;
import link.pagan.traqtor.project.universe.Particle; 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.DataType;
/** /**
@ -9,6 +11,10 @@ import link.pagan.traqtor.project.universe.schema.DataType;
*/ */
public abstract class LiteralDataType extends DataType { public abstract class LiteralDataType extends DataType {
public LiteralDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
}
@Override @Override
public abstract Particle<? extends LiteralDataType> particle(); public abstract Particle<? extends LiteralDataType> particle();

@ -1,6 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data; package link.pagan.traqtor.project.universe.schema.impl.data;
import link.pagan.traqtor.project.universe.Particle; 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.DataType;
/** /**
@ -9,6 +11,10 @@ import link.pagan.traqtor.project.universe.schema.DataType;
*/ */
public abstract class LogicDataType extends DataType { public abstract class LogicDataType extends DataType {
public LogicDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
}
@Override @Override
public abstract Particle<? extends LogicDataType> particle(); public abstract Particle<? extends LogicDataType> particle();

@ -1,6 +1,8 @@
package link.pagan.traqtor.project.universe.schema.impl.data; package link.pagan.traqtor.project.universe.schema.impl.data;
import link.pagan.traqtor.project.universe.Particle; 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.DataType;
/** /**
@ -9,6 +11,10 @@ import link.pagan.traqtor.project.universe.schema.DataType;
*/ */
public abstract class NumericDataType extends DataType { public abstract class NumericDataType extends DataType {
public NumericDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
}
@Override @Override
public abstract Particle<? extends NumericDataType> particle(); public abstract Particle<? extends NumericDataType> particle();

@ -1,7 +1,7 @@
package link.pagan.traqtor.project.universe.schema.impl.data; package link.pagan.traqtor.project.universe.schema.impl.data;
import java.util.List; import java.util.List;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint; import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.DataType; import link.pagan.traqtor.project.universe.schema.DataType;
@ -11,10 +11,8 @@ import link.pagan.traqtor.project.universe.schema.DataType;
*/ */
public abstract class TemporalDataType extends DataType { public abstract class TemporalDataType extends DataType {
final List<Constraint<? extends TemporalDataType>> typeConstraints; public TemporalDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
public TemporalDataType(List<Constraint<? extends TemporalDataType>> typeConstraints) {
this.typeConstraints = typeConstraints;
} }
@Override @Override

@ -3,10 +3,12 @@ package link.pagan.traqtor.project.universe.schema.impl.data.literal;
import link.pagan.traqtor.project.universe.schema.impl.data.*; import link.pagan.traqtor.project.universe.schema.impl.data.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint; import link.pagan.traqtor.project.universe.schema.impl.constraints.NotNullConstraint;
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;
/** /**
* *
@ -16,14 +18,12 @@ public class StringDataType extends LiteralDataType {
private static final StringDataType instance = new StringDataType(); private static final StringDataType instance = new StringDataType();
final List<Constraint<? extends LiteralDataType>> typeConstraints;
public static StringDataType instance() { public static StringDataType instance() {
return instance; return instance;
} }
private StringDataType() { private StringDataType() {
this.typeConstraints = new ArrayList<>(); super(new ArrayList<>());
} }
@Override @Override
@ -31,4 +31,20 @@ public class StringDataType extends LiteralDataType {
return new Particle<StringDataType>(this); return new Particle<StringDataType>(this);
} }
public LiteralMinConstraint min(long min) {
return new LiteralMinConstraint(min);
}
public LiteralMaxConstraint max(long max) {
return new LiteralMaxConstraint(max);
}
public LiteralRegExpConstraint regExp(String regExp) {
return new LiteralRegExpConstraint(regExp);
}
public NotNullConstraint notNull() {
return NotNullConstraint.instance();
}
} }

@ -0,0 +1,18 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class LiteralMaxConstraint extends Constraint<StringDataType> {
long max;
public LiteralMaxConstraint(long max) {
this.max = max;
}
}

@ -0,0 +1,18 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class LiteralMinConstraint extends Constraint<StringDataType> {
long min;
public LiteralMinConstraint(long min) {
this.min = min;
}
}

@ -0,0 +1,18 @@
package link.pagan.traqtor.project.universe.schema.impl.data.literal.constraints;
import link.pagan.traqtor.project.universe.schema.Constraint;
import link.pagan.traqtor.project.universe.schema.impl.data.literal.StringDataType;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class LiteralRegExpConstraint extends Constraint<StringDataType> {
String regExp;
public LiteralRegExpConstraint(String regExp) {
this.regExp = regExp;
}
}

@ -3,10 +3,8 @@ package link.pagan.traqtor.project.universe.schema.impl.data.logic;
import link.pagan.traqtor.project.universe.schema.impl.data.*; import link.pagan.traqtor.project.universe.schema.impl.data.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint;
/** /**
* *
@ -16,14 +14,12 @@ public class BooleanDataType extends LogicDataType {
private static final BooleanDataType instance = new BooleanDataType(); private static final BooleanDataType instance = new BooleanDataType();
final List<Constraint<? extends LogicDataType>> typeConstraints;
public static BooleanDataType instance() { public static BooleanDataType instance() {
return instance; return instance;
} }
private BooleanDataType() { private BooleanDataType() {
this.typeConstraints = new ArrayList<>(); super(new ArrayList<>());
} }
@Override @Override

@ -1,9 +1,12 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric; package link.pagan.traqtor.project.universe.schema.impl.data.numeric;
import java.util.List; import java.util.List;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint; 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.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;
/** /**
* *
@ -11,13 +14,19 @@ import link.pagan.traqtor.project.universe.schema.impl.data.NumericDataType;
*/ */
public abstract class IntegerDataType extends NumericDataType { public abstract class IntegerDataType extends NumericDataType {
final List<Constraint<? extends IntegerDataType>> typeConstraints; public IntegerDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
public IntegerDataType(List<Constraint<? extends IntegerDataType>> typeConstraints) {
this.typeConstraints = typeConstraints;
} }
@Override @Override
public abstract Particle<? extends IntegerDataType> particle(); 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,9 +1,12 @@
package link.pagan.traqtor.project.universe.schema.impl.data.numeric; package link.pagan.traqtor.project.universe.schema.impl.data.numeric;
import java.util.List; import java.util.List;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
import link.pagan.traqtor.project.universe.schema.Constraint; 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.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;
/** /**
* *
@ -11,13 +14,19 @@ import link.pagan.traqtor.project.universe.schema.impl.data.NumericDataType;
*/ */
public abstract class RationalDataType extends NumericDataType { public abstract class RationalDataType extends NumericDataType {
final List<Constraint<? extends RationalDataType>> typeConstraints; public RationalDataType(List<Constraint<? extends DataType>> typeConstraints) {
super(typeConstraints);
public RationalDataType(List<Constraint<? extends RationalDataType>> typeConstraints) {
this.typeConstraints = typeConstraints;
} }
@Override @Override
public abstract Particle<? extends RationalDataType> particle(); public abstract Particle<? extends RationalDataType> particle();
public RationalMinConstraint min(double min) {
return new RationalMinConstraint(min);
}
public RationalMaxConstraint max(double max) {
return new RationalMaxConstraint(max);
}
} }

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

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

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

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

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

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

@ -2,7 +2,7 @@ package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
import java.util.ArrayList; import java.util.ArrayList;
import link.pagan.traqtor.project.universe.schema.impl.data.*; import link.pagan.traqtor.project.universe.schema.impl.data.*;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
/** /**
* *

@ -2,7 +2,7 @@ package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
import java.util.ArrayList; import java.util.ArrayList;
import link.pagan.traqtor.project.universe.schema.impl.data.*; import link.pagan.traqtor.project.universe.schema.impl.data.*;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
/** /**
* *

@ -2,7 +2,7 @@ package link.pagan.traqtor.project.universe.schema.impl.data.temporal;
import java.util.ArrayList; import java.util.ArrayList;
import link.pagan.traqtor.project.universe.schema.impl.data.*; import link.pagan.traqtor.project.universe.schema.impl.data.*;
import link.pagan.traqtor.project.universe.Particle; import link.pagan.traqtor.project.universe.element.Particle;
/** /**
* *

@ -2,7 +2,10 @@ package link.pagan.traqtor.util;
public class Name { public class Name {
public Name(String... string) { Name(String... string) {
} }
public static Name of (String ... parts) {
return new Name(parts);
}
} }

@ -0,0 +1,20 @@
package link.pagan.traqtor.util;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class RegExpHelper {
public static final String URL = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
public static final String EMAIL = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
public static final String IP = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
public static final String PHONE = "\\+(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{1,14}$";
public static final String PHONE_RU = "^((\\+7|7|8)+([0-9]){10})$";
public static final String PHONE_US = "1?\\W*([2-9][0-8][0-9])\\W*([2-9][0-9]{2})\\W*([0-9]{4})(\\se?x?t?(\\d*))?";
public static final String PHONE_DE = "/^([\\+][0-9]{1,3}[ \\.\\-])?([\\(]{1}[0-9]{1,6}[\\)])?([0-9 \\.\\-\\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/";
public static final String PHONE_UK = "^(?:(?:\\(?(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?(?:\\(?0\\)?[\\s-]?)?)|(?:\\(?0))(?:(?:\\d{5}\\)?[\\s-]?\\d{4,5})|(?:\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3}))|(?:\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4})|(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}))(?:[\\s-]?(?:x|ext\\.?|\\#)\\d{3,4})?$";
}
Loading…
Cancel
Save