Upgraded to NX01 maisdoc mm with new meta model with junk json support

This commit is contained in:
Willem Cazander 2025-02-03 18:19:31 +01:00
parent c4bf31561f
commit 0bee837b52
36 changed files with 257 additions and 2031 deletions

View file

@ -16,8 +16,13 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>

View file

@ -31,7 +31,7 @@ import java.io.File;
import java.util.Map.Entry;
import java.util.function.Consumer;
import org.eobjects.metamodel.DataContext;
import org.apache.metamodel.DataContext;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;

View file

@ -31,11 +31,11 @@ import java.io.File;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.eobjects.metamodel.csv.CsvDataContext;
import org.apache.metamodel.csv.CsvDataContext;
import org.eobjects.metamodel.doc.DocModelDataStore;
import org.eobjects.metamodel.doc.DocModelWriter;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import org.eobjects.metamodel.xml.XmlDomDataContext;
import org.apache.metamodel.jdbc.JdbcDataContext;
import org.apache.metamodel.xml.XmlDomDataContext;
public class MMDocManager {

View file

@ -1,87 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.eobjects.metamodel.DataContext;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import java.util.Map.Entry;
public class DocModelDataStore {
private Map<String,DataContext> dataContexts = null;
public DocModelDataStore() {
dataContexts = new TreeMap<String,DataContext>();
}
public void addDataContext(String id,DataContext dataContext) {
dataContexts.put(id,dataContext);
}
public void removeDataContext(String id) {
dataContexts.remove(id);
}
public Set<Entry<String,DataContext>> entrySet() {
return dataContexts.entrySet();
}
public List<DataContext> getDataContexts() {
return new ArrayList<DataContext>(dataContexts.values()); // are ordered on id.
}
public String getDataContextKey(DataContext dc) {
for (Entry<String,DataContext> entry:entrySet()) {
if (entry.getValue().equals(dc)) {
return entry.getKey();
}
}
throw new IllegalArgumentException("Could not find key for data context: "+dc.toString());
}
public void clearAndCloseAllSafe() {
for (DataContext dc:dataContexts.values()) {
if (dc instanceof JdbcDataContext) { // TODO: only support jdbc, MM need 'DataContextLifeCycle extends DataContext'
try {
((JdbcDataContext)dc).getConnection().close();
} catch (SQLException e) { // swallow exception is 'Safe' postfix.
// TODO: logger.warn
}
}
}
dataContexts.clear();
}
}

View file

@ -1,199 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.eobjects.metamodel.DataContext;
import org.eobjects.metamodel.schema.Column;
import org.eobjects.metamodel.schema.Relationship;
import org.eobjects.metamodel.schema.Schema;
import org.eobjects.metamodel.schema.Table;
import org.x4o.o2o.tdoc.ApiDocGenerator;
import org.x4o.o2o.tdoc.DefaultPageWriterHelp;
import org.x4o.o2o.tdoc.DefaultPageWriterIndexAll;
import org.x4o.o2o.tdoc.DefaultPageWriterTree;
import org.x4o.o2o.tdoc.dom.ApiDoc;
import org.x4o.o2o.tdoc.dom.ApiDocConcept;
import org.x4o.o2o.tdoc.dom.ApiDocNode;
import org.xml.sax.SAXException;
public class DocModelWriter {
private static final String[] C_DATA_STORE = {"data-store","Overview","All data stores.","The data stores of user defines resources."};
private static final String[] C_DATA_CONTEXT = {"data-context","DataContext","The MetaModel DataContext.","The MetaModel DataContext provides the meta schema definitions."};
private static final String[] C_SCHEMA = {"schema","Schema","The schema.","The schema hold the tables and other data types."};
private static final String[] C_TABLE = {"table","Table","The Data Table.","The table has columns so can hold row/column data."};
//private static final String[] C_VIEW = {"view","Table","The Data Table.","The table has columns so can hold row/column data."};
private static final String[] CC_RS = {"relationship","Relationship","The relationships.","The telationships data."};
private ApiDocGenerator writer = null;
private ApiDoc doc = null;
public DocModelWriter(DocModelDataStore dmds) {
if (dmds==null) {
throw new NullPointerException("Can't write null "+DocModelDataStore.class.getSimpleName());
}
doc = buildApiDoc(dmds);
writer = new ApiDocGenerator();
}
public ApiDoc getApiDoc() {
return doc;
}
public void writeModelDoc(File basePath) throws IOException, SAXException {
doc.checkModel();
writer.write(doc,basePath);
}
private ApiDoc buildApiDoc(DocModelDataStore dmds) {
ApiDoc doc = new ApiDoc();
doc.setName("MetaModel");
doc.setDescription("MetaModel generic schema overview.");
doc.setDocAbout("MetaModel of\nDataContexts");
doc.createDocCopyright(System.getProperty("user.name"));
doc.setDocPageSubTitle("MMDB 1.0 API");
doc.addMetaKeywordAll(createLanguageKeywords());
doc.setNoFrameAllName("All Schemas");
doc.setFrameNavOverviewPrintParent(true);
doc.setFrameNavPrintParent(true);
doc.setFrameNavPrintParentParent(true);
doc.setGroupTypeName("summary", "Summary",1);
doc.setGroupTypeName("overview", "Overview",2);
//doc.addRemoteClass(new ApiDocRemoteClass("file:///home/willemc/devv/git/x4o/x4o-driver/target/apidocs"));
//doc.addRemoteClass(new ApiDocRemoteClass("http://docs.oracle.com/javase/7/docs/api/"));
doc.addTreeNodeClassExclude(Relationship.class);
doc.setFrameNavConceptClass(Table.class);
doc.addTreeNodePageModeClass(DocModelDataStore.class);
doc.addTreeNodePageModeClass(DataContext.class);
doc.addTreeNodePageModeClass(Schema.class);
doc.addAnnotatedClasses(DocModelWriterSchema.class);
doc.addAnnotatedClasses(DocModelWriterTable.class);
ApiDocConcept adc1 = doc.addConcept(new ApiDocConcept(null,C_DATA_STORE,DocModelDataStore.class));
ApiDocConcept adc2 = doc.addConcept(new ApiDocConcept(adc1,C_DATA_CONTEXT,DataContext.class));
ApiDocConcept adc3 = doc.addConcept(new ApiDocConcept(adc2,C_SCHEMA,Schema.class));
ApiDocConcept adc4 = doc.addConcept(new ApiDocConcept(adc3,C_TABLE,Table.class));
adc4.addChildConcepts(new ApiDocConcept(adc4, CC_RS, Relationship.class));
doc.addDocPage(DefaultPageWriterTree.createDocPage());
doc.addDocPage(DefaultPageWriterIndexAll.createDocPage());
doc.addDocPage(DefaultPageWriterHelp.createDocPage());
ApiDocNode rootNode = new ApiDocNode(dmds,"data-store","DataStore","All schemas from all data contexts.");
doc.setRootNode(rootNode);
for (Entry<String,DataContext> entry:dmds.entrySet()) {
ApiDocNode dcNode = rootNode.addNode(createNodeDataContext(entry));
for (Schema schema:entry.getValue().getSchemas()) {;
if (isInvalidDocSchema(schema)) {
continue;
}
ApiDocNode schemaNode = dcNode.addNode(createNodeSchema(schema));
for (Table table:schema.getTables()) {
schemaNode.addNode(createNodeTable(table));
}
for (Relationship rs:schema.getRelationships()) {
schemaNode.addNode(createNodeRelationship(rs));
}
}
}
return doc;
}
private boolean isInvalidDocSchema(Schema schema) {
if (schema.getName().toLowerCase().startsWith("information_schema")) {
return true;
}
if (schema.getName().toLowerCase().equals("sys") || schema.getName().toLowerCase().equals("dbo") ) {
return true;
}
if (schema.getTableCount()==0) {
return true;
}
return false;
}
private ApiDocNode createNodeDataContext(Entry<String,DataContext> entry) {
return new ApiDocNode(entry.getValue(),entry.getKey(),entry.getKey(),entry.getKey());
}
private ApiDocNode createNodeSchema(Schema schema) {
return new ApiDocNode(schema,schema.getName(),schema.getQualifiedLabel(),schema.getName());
}
private ApiDocNode createNodeTable(Table table) {
return new ApiDocNode(table,table.getName(),table.getQualifiedLabel(),table.getRemarks());
}
private ApiDocNode createNodeRelationship(Relationship rs) {
String name = rsName(rs);
return new ApiDocNode(rs,name,name,name);
}
private String rsName(Relationship rs) {
StringBuilder buf = new StringBuilder();
buf.append(rs.getPrimaryTable().getName());
buf.append('_');
for (Column c:rs.getPrimaryColumns()) {
buf.append(c.getName());
buf.append('_');
}
buf.append(rs.getForeignTable().getName());
buf.append('_');
for (Column c:rs.getForeignColumns()) {
buf.append(c.getName());
buf.append('_');
}
buf.append("RS");
return buf.toString();
}
private List<String> createLanguageKeywords() {
List<String> keywords = new ArrayList<String>(10);
keywords.add("eobjects");
keywords.add("metamodel");
keywords.add("meta-model");
keywords.add("schema");
keywords.add("schema-model");
keywords.add("database");
keywords.add("database-model");
keywords.add("documentation");
keywords.add("javadoc");
keywords.add("x4o");
return keywords;
}
}

View file

@ -1,104 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eobjects.metamodel.DataContext;
import org.eobjects.metamodel.data.DataSet;
import org.eobjects.metamodel.query.FunctionType;
import org.eobjects.metamodel.schema.Schema;
import org.eobjects.metamodel.schema.Table;
import org.eobjects.metamodel.schema.TableType;
import org.x4o.o2o.tdoc.ApiDocContentCss;
import org.x4o.o2o.tdoc.ApiDocContentWriter;
import org.x4o.o2o.tdoc.ApiDocNodeWriterMethod;
import org.x4o.o2o.tdoc.dom.ApiDocNode;
import org.x4o.o2o.tdoc.dom.ApiDocNodeBody;
import org.x4o.o2o.tdoc.dom.ApiDocWriteEvent;
import org.xml.sax.SAXException;
public class DocModelWriterSchema {
private List<Table> filterTables(Schema schema,TableType tableType,boolean addEquals) {
List<Table> result = new ArrayList<Table>();
for (Table table:schema.getTables()) {
if (addEquals==tableType.equals(table.getType())) {
result.add(table);
}
}
return result;
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.SUMMARY,targetClasses={Schema.class})
public void writeSchemaTableSummary(ApiDocWriteEvent<ApiDocNode> event) throws SAXException, IOException {
ApiDocContentWriter writer = event.getWriter();
Schema schema = (Schema)event.getEventObject().getUserData();
DataContext dc = (DataContext)event.getEventObject().getParent().getUserData();
List<Table> tables = filterTables(schema,TableType.VIEW,false);
if (tables.isEmpty()) {
return;
}
writer.docTableStart("Table Summary", "All tables in the schema.",ApiDocContentCss.overviewSummary);
writer.docTableHeader("Name", "Description");
for (Table table:tables) {
Number tableCount = 0l;
if (table.getColumnCount()>0) {
DataSet ds = dc.query().from(table).select(FunctionType.COUNT, table.getColumns()[0]).execute();
ds.next();
tableCount = (Number)ds.getRow().getValue(0);
ds.close();
}
String link = ApiDocContentWriter.toSafeUri(table.getName())+"/index.html";
writer.docTableRowLink(link,table.getName(),"Record Count: "+tableCount);
}
writer.docTableEnd();
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.SUMMARY,targetClasses={Schema.class})
public void writeSchemaViewSummary(ApiDocWriteEvent<ApiDocNode> event) throws SAXException, IOException {
ApiDocContentWriter writer = event.getWriter();
Schema schema = (Schema)event.getEventObject().getUserData();
List<Table> tables = filterTables(schema,TableType.VIEW,true);
if (tables.isEmpty()) {
return;
}
writer.docTableStart("View Summary", "All views in the schema.",ApiDocContentCss.overviewSummary);
writer.docTableHeader("Name", "Description");
for (Table table:schema.getTables()) {
if (!TableType.VIEW.equals(table.getType())) {
continue;
}
String link = ApiDocContentWriter.toSafeUri(table.getName())+"/index.html";
writer.docTableRowLink(link,table.getName(),table.getQualifiedLabel());
}
writer.docTableEnd();
}
}

View file

@ -1,439 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eobjects.metamodel.DataContext;
import org.eobjects.metamodel.doc.jdbc.DBIndex;
import org.eobjects.metamodel.doc.jdbc.DBIndexColumn;
import org.eobjects.metamodel.doc.jdbc.DBTable;
import org.eobjects.metamodel.doc.jdbc.DBTableFactory;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import org.eobjects.metamodel.schema.Column;
import org.eobjects.metamodel.schema.Relationship;
import org.eobjects.metamodel.schema.Table;
import org.eobjects.metamodel.schema.TableType;
import org.x4o.o2o.io.ContentWriterHtml.Tag;
import org.x4o.o2o.tdoc.ApiDocContentCss;
import org.x4o.o2o.tdoc.ApiDocContentWriter;
import org.x4o.o2o.tdoc.ApiDocNodeWriterMethod;
import org.x4o.o2o.tdoc.dom.ApiDocIndexItem;
import org.x4o.o2o.tdoc.dom.ApiDocNode;
import org.x4o.o2o.tdoc.dom.ApiDocNodeBody;
import org.x4o.o2o.tdoc.dom.ApiDocWriteEvent;
public class DocModelWriterTable {
private DBTableFactory dbTableFactory;
private DBTable currentDBTable;
public DocModelWriterTable() {
dbTableFactory = new DBTableFactory();
}
private DBTable getDBTable(ApiDocWriteEvent<ApiDocNode> event) {
Table table = (Table)event.getEventObject().getUserData();
if (currentDBTable!=null && currentDBTable.getTable().getQualifiedLabel().equals(table.getQualifiedLabel()))
{
return currentDBTable;
}
DataContext dcRaw = (DataContext)event.getEventObject().getParent().getParent().getUserData();
if (dcRaw instanceof JdbcDataContext) {
JdbcDataContext dc = (JdbcDataContext) dcRaw;
try {
currentDBTable = dbTableFactory.loadMetaTable(dc, table);
return currentDBTable;
} catch (SQLException e) {
throw new IllegalStateException("Could not fetch meta table: "+e.getMessage(),e);
}
} else {
return null;
}
}
private List<Relationship> rsFilter(Relationship[] rsa,Table table,boolean filterPrimary) {
List<Relationship> result = new ArrayList<Relationship>(10);
for (int i=0;i<rsa.length;i++) {
Relationship rs = rsa[i];
if (filterPrimary) {
if (rs.getPrimaryTable().equals(table)) {
continue;
}
} else {
if (rs.getForeignTable().equals(table)) {
continue;
}
}
result.add(rs);
}
return result;
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.DESCRIPTION_LINKS,targetClasses={Table.class})
public void writeTableDescription(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
if (!TableType.VIEW.equals(table.getType())) {
Iterator<Relationship> rsIn = rsFilter(table.getRelationships(),table,false).iterator();
Iterator<Relationship> rsOut = rsFilter(table.getRelationships(),table,true).iterator();
writer.printTagStart(Tag.dl);
writer.printTagCharacters(Tag.dt,"All Incoming Relations:");
writer.printTagStart(Tag.dd);
if (!rsIn.hasNext()) {
writer.printCharacters("Table is not referenced.");
}
while (rsIn.hasNext()) {
Relationship rs = rsIn.next();
String uri = "../../"+ApiDocContentWriter.toSafeUri(rs.getForeignTable().getSchema().getName())+"/"+ApiDocContentWriter.toSafeUri(rs.getForeignTable().getName())+"/index.html";
writer.printHref(uri, rs.getForeignTable().getName());
if (rsIn.hasNext()) {
writer.printCharacters(",&nbsp;");
}
}
writer.printTagEnd(Tag.dd);
writer.printTagEnd(Tag.dl);
writer.printTagStart(Tag.dl);
writer.printTagCharacters(Tag.dt,"All Referenced Tables:");
writer.printTagStart(Tag.dd);
if (!rsOut.hasNext()) {
writer.printCharacters("Table has no references.");
}
while (rsOut.hasNext()) {
Relationship rs = rsOut.next();
String uri = "../../"+ApiDocContentWriter.toSafeUri(rs.getPrimaryTable().getSchema().getName())+"/"+ApiDocContentWriter.toSafeUri(rs.getPrimaryTable().getName())+"/index.html";
writer.printHref(uri, rs.getPrimaryTable().getName());
if (rsOut.hasNext()) {
writer.printCharacters(",&nbsp;");
}
}
writer.printTagEnd(Tag.dd);
writer.printTagEnd(Tag.dl);
}
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.DESCRIPTION_NODE,targetClasses={Table.class})
public void writeTableSqlView(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
// fixme or only normal
if (!TableType.VIEW.equals(table.getType())) {
event.getWriter().printCharacters(event.getEventObject().getDescription());
} else {
event.getWriter().printCharacters("View "+table.getQualifiedLabel());
}
DBTable tableDB = getDBTable(event);
if (tableDB!=null && tableDB.getSqlScript()!=null) {
writeSqlBlock(writer,tableDB.getSqlScript());
for (DBIndex index:tableDB.getIndexes()) {
if (index.getSqlScript()!=null) {
writeSqlBlock(writer,index.getSqlScript());
}
}
}
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.SUMMARY,targetClasses={Table.class},nodeBodyOrders={3},contentGroup="Columns",contentGroupType="summary")
public void writeTableSummary(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
if (TableType.VIEW.equals(table.getType())) {
writer.docTableStart("Column Summary", "All column of the view.",null);
} else {
writer.docTableStart("Column Summary", "All column of the table.",null);
}
writer.docTableHeader("Name", "Description");
for (Column column:table.getColumns()) {
writer.docTableRowLink("#"+ApiDocContentWriter.toSafeUri(column.getName()),column.getName(),column.getQualifiedLabel());
}
writer.docTableEnd();
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.SUMMARY,targetClasses={Table.class},nodeBodyOrders={1},contentGroup="Primary Key",contentGroupType="summary")
public void writeTablePKSummary(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
DBTable tableDB = getDBTable(event);
if (tableDB==null) {
writer.docPageBlockStart("Primary Key.","primary_key",null);
writer.printTagStart(Tag.code);
Column[] cols = table.getPrimaryKeys();
for (int i=0;i<cols.length;i++) {
Column column = cols[i];
writer.printHref("#"+ApiDocContentWriter.toSafeUri(column.getName()), column.getName());
if (i<cols.length-1) {
writer.printCharacters(", ");
}
}
if (cols.length==0) {
writer.printCharacters("No primary key.");
}
writer.printTagEnd(Tag.code);
writer.docPageBlockEnd();
} else {
List<String> cols = new ArrayList<String>(5);
if (tableDB.getPrimaryKey()!=null) {
cols.addAll(tableDB.getPrimaryKey().getColumnNames());
writer.docPageBlockStart("Primary Key: "+tableDB.getPrimaryKey().getName(),"primary_key",null);
} else {
writer.docPageBlockStart("Primary Key: None","primary_key",null);
}
writer.printTagStart(Tag.code);
for (int i=0;i<cols.size();i++) {
String column = cols.get(i);
writer.printHref("#"+ApiDocContentWriter.toSafeUri(column), column);
if (i<cols.size()-1) {
writer.printCharacters(", ");
}
}
if (cols.isEmpty()) {
writer.printCharacters("No primary key.");
}
writer.printTagEnd(Tag.code);
writer.docPageBlockEnd();
}
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.SUMMARY,targetClasses={Table.class},nodeBodyOrders={2},contentGroup="Indexes",contentGroupType="summary")
public void writeTableIDXSummary(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
DBTable tableDB = getDBTable(event);
if (tableDB==null) {
Column[] columns = table.getIndexedColumns();
if (columns.length==0) {
return;
}
writer.printHrefNamed("column_indexes");
writer.printTagCharacters(Tag.h3, "Indexed Columns");
writer.printTagStart(Tag.code);
for (Column column:columns) {
writer.printHref("#"+ApiDocContentWriter.toSafeUri(column.getName()), column.getName());
}
writer.printTagEnd(Tag.code);
} else {
writer.printHrefNamed("column_indexes");
//writer.printTagCharacters(Tag.h3, "Indexes");
writer.docTableStart("Column Indexes", "All indexes of the table.",null);
writer.docTableHeader("Name", "Columns");
for (DBIndex index:tableDB.getIndexes()) {
StringBuilder buf = new StringBuilder(30);
List<DBIndexColumn> cols = index.getIndexColumns();
for (int i=0;i<cols.size();i++) {
DBIndexColumn col = cols.get(i);
buf.append(col.getColumn());
if (i<cols.size()-1) {
buf.append(",");
}
}
writer.docTableRowLink("#"+ApiDocContentWriter.toSafeUri(index.getName()),index.getName(),buf.toString());
}
writer.docTableEnd();
//writer.printTagStart(Tag.code);
//writer.printHref("#"+ApiDocContentWriter.toSafeUri(index.getName()), index.getName());
//writer.printTagEnd(Tag.code);
}
}
private void writeSqlBlock(ApiDocContentWriter writer,String sql) throws IOException {
writer.printTagStart(Tag.div,ApiDocContentCss.block);
writer.printTagStart(Tag.pre);
writer.printCharacters(sql);
writer.printTagEnd(Tag.pre);
writer.printTagEnd(Tag.div);
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.DETAIL,targetClasses={Table.class},nodeBodyOrders={1},contentGroup="Indexes",contentGroupType="overview")
public void writeTableDetailIndex(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
//Table table = (Table)event.getEventObject().getUserData();
DBTable tableDB = getDBTable(event);
if (tableDB==null) {
return;
}
for (DBIndex index:tableDB.getIndexes()) {
writer.printHrefNamed(index.getName());
writer.docPageBlockStart();
writer.printTagCharacters(Tag.h4, index.getName());
writer.printTagStart(Tag.pre);
writer.printCharacters("INDEX ");
writer.printCharacters(index.getSchema());
writer.printCharacters(".");
writer.printCharacters(index.getName());
if (index.getUnique()!=null && index.getUnique()) {
writer.printCharacters(" UNIQUE=true");
}
if (index.getIndexQualifier()!=null) {
writer.printCharacters(" QUALIFIER=");
writer.printCharacters(index.getIndexQualifier());
}
if (index.getCatalog()!=null) {
writer.printCharacters(" CATELOG=");
writer.printCharacters(index.getCatalog());
}
writer.printTagEnd(Tag.pre);
writer.printTagStart(Tag.div,ApiDocContentCss.block);
writer.printCharacters("Type: ");
writer.printCharacters(index.getType().name());
writer.printTagEnd(Tag.div);
if (index.getSqlScript()!=null) {
writeSqlBlock(writer,index.getSqlScript());
}
writer.printTagStart(Tag.dl);
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,ApiDocContentCss.strong);
writer.printCharacters("Columns:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
for (DBIndexColumn column:index.getIndexColumns()) {
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printHref("#"+ApiDocContentWriter.toSafeUri(column.getColumn()), column.getColumn());
writer.printTagEnd(Tag.code);
writer.printCharacters(" ORDER ");
if (column.getAscending()!=null && column.getAscending()) {
writer.printCharacters("ASC");
} else {
writer.printCharacters("DESC");
}
writer.printTagEnd(Tag.dd);
}
writer.printTagEnd(Tag.dl);
writer.docPageBlockEnd();
}
}
@ApiDocNodeWriterMethod(nodeBody=ApiDocNodeBody.DETAIL,targetClasses={Table.class},nodeBodyOrders={2},contentGroup="Columns",contentGroupType="overview")
public void writeTableDetail(ApiDocWriteEvent<ApiDocNode> event) throws IOException {
ApiDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
DBTable tableDB = getDBTable(event);
for (Column column:table.getColumns()) {
ApiDocIndexItem indexItem = new ApiDocIndexItem();
indexItem.setLinkText(column.getName());
event.getDoc().getNodeData().addIndexItem(indexItem);
writer.printHrefNamed(column.getName());
writer.docPageBlockStart();
writer.printTagCharacters(Tag.h4, column.getName());
writer.printTagStart(Tag.pre);
writer.printCharacters(column.getQualifiedLabel());
writer.printCharacters(" ");
if (column.getNativeType() != null) {
writer.printCharacters(column.getNativeType().toUpperCase());
}
if (column.getColumnSize()!=null) {
writer.printCharacters(" (");
writer.printCharacters(""+column.getColumnSize());
writer.printCharacters(")");
}
if (column.isNullable()) {
writer.printCharacters(" NULL");
} else {
writer.printCharacters(" NOT NULL");
}
if (column.isPrimaryKey()) {
writer.printCharacters(" PRIMARY KEY");
}
writer.printTagEnd(Tag.pre);
writer.printTagStart(Tag.div,ApiDocContentCss.block);
writer.printCharacters("Description: ");
writer.printCharacters(column.getQuotedName());
writer.printTagEnd(Tag.div);
writer.printTagStart(Tag.dl);
if (column.isIndexed()) {
List<DBIndex> idx = null;
if (tableDB!=null) {
idx = tableDB.getIndexesByColumn(column.getName());
}
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,ApiDocContentCss.strong);
writer.printCharacters("Indexes:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
if (idx!=null) {
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
for (int i=0;i<idx.size();i++) {
DBIndex index = idx.get(i);
writer.printHref("#"+ApiDocContentWriter.toSafeUri(index.getName()), index.getName());
if (i<idx.size()-1) {
writer.printCharacters(",");
}
}
writer.printTagEnd(Tag.code);
writer.printTagEnd(Tag.dd);
} else {
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printCharacters("Unknown");
writer.printTagEnd(Tag.code);
writer.printCharacters(" - This column is indexed.");
writer.printTagEnd(Tag.dd);
}
}
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,ApiDocContentCss.strong);
writer.printCharacters("References:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printCharacters("test_IDX");
writer.printTagEnd(Tag.code);
writer.printCharacters(" - FK");
writer.printTagEnd(Tag.dd);
writer.printTagEnd(Tag.dl);
writer.docPageBlockEnd();
}
}
}

View file

@ -1,33 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
public class DBConstrain {
private String name;
}

View file

@ -1,159 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
import java.util.ArrayList;
import java.util.List;
public class DBIndex {
private String name = null;
private String schema = null;
private String catalog = null;
private Boolean unique = null;
private String indexQualifier = null;
private DBIndexType type = null;
private List<DBIndexColumn> indexColumns = null;
private String sqlScript = null;
public DBIndex() {
indexColumns = new ArrayList<DBIndexColumn>(3);
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
protected void setName(String name) {
this.name = name;
}
/**
* @return the schema
*/
public String getSchema() {
return schema;
}
/**
* @param schema the schema to set
*/
protected void setSchema(String schema) {
this.schema = schema;
}
/**
* @return the unique
*/
public Boolean getUnique() {
return unique;
}
/**
* @param unique the unique to set
*/
protected void setUnique(Boolean unique) {
this.unique = unique;
}
/**
* @return the indexQualifier
*/
public String getIndexQualifier() {
return indexQualifier;
}
/**
* @param indexQualifier the indexQualifier to set
*/
protected void setIndexQualifier(String indexQualifier) {
this.indexQualifier = indexQualifier;
}
/**
* @return the type
*/
public DBIndexType getType() {
return type;
}
/**
* @param type the type to set
*/
protected void setType(DBIndexType type) {
this.type = type;
}
/**
* @return the catalog
*/
public String getCatalog() {
return catalog;
}
/**
* @param catalog the catalog to set
*/
protected void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* @return the indexColumns
*/
public List<DBIndexColumn> getIndexColumns() {
return indexColumns;
}
/**
* @param indexColumn the indexColumn to add
*/
protected void addIndexColumn(DBIndexColumn indexColumn) {
this.indexColumns.add(indexColumn);
}
/**
* @return the sqlScript
*/
public String getSqlScript() {
return sqlScript;
}
/**
* @param sqlScript the sqlScript to set
*/
public void setSqlScript(String sqlScript) {
this.sqlScript = sqlScript;
}
}

View file

@ -1,77 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
public class DBIndexColumn {
private String table = null;
private String column = null;
private Boolean ascending = null;
/**
* @return the table
*/
public String getTable() {
return table;
}
/**
* @param table the table to set
*/
public void setTable(String table) {
this.table = table;
}
/**
* @return the column
*/
public String getColumn() {
return column;
}
/**
* @param column the column to set
*/
public void setColumn(String column) {
this.column = column;
}
/**
* @return the ascending
*/
public Boolean getAscending() {
return ascending;
}
/**
* @param ascending the ascending to set
*/
public void setAscending(Boolean ascending) {
this.ascending = ascending;
}
}

View file

@ -1,54 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
import java.sql.DatabaseMetaData;
public enum DBIndexType {
STATISTIC,
CLUSTERED,
HASHED,
OTHER;
public static DBIndexType parseJdbcMetaInfo(short dbType) {
if (dbType==DatabaseMetaData.tableIndexClustered) {
return CLUSTERED;
}
if (dbType==DatabaseMetaData.tableIndexHashed) {
return HASHED;
}
if (dbType==DatabaseMetaData.tableIndexOther) {
return OTHER;
}
if (dbType==DatabaseMetaData.tableIndexStatistic) {
return STATISTIC;
}
throw new IllegalArgumentException("Unknown index type: "+dbType);
}
}

View file

@ -1,114 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
import java.util.ArrayList;
import java.util.List;
public class DBPrimaryKey {
private String name = null;
private String catalog = null;
private String schema = null;
private String tableName = null;
private List<String> columnNames = null;
public DBPrimaryKey() {
columnNames = new ArrayList<String>(3);
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the catalog
*/
public String getCatalog() {
return catalog;
}
/**
* @param catalog the catalog to set
*/
public void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* @return the schema
*/
public String getSchema() {
return schema;
}
/**
* @param schema the schema to set
*/
public void setSchema(String schema) {
this.schema = schema;
}
/**
* @return the tableName
*/
public String getTableName() {
return tableName;
}
/**
* @param tableName the tableName to set
*/
public void setTableName(String tableName) {
this.tableName = tableName;
}
/**
* @return the columnNames
*/
public List<String> getColumnNames() {
return columnNames;
}
/**
* @param columnNames the columnNames to set
*/
protected void addColumnName(String columnName) {
this.columnNames.add(columnName);
}
}

View file

@ -1,132 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eobjects.metamodel.schema.Table;
public class DBTable {
private Table table;
private DBPrimaryKey primaryKey;
private List<DBIndex> indexes;
private String sqlScript = null;
public DBTable() {
indexes = new ArrayList<DBIndex>(20);
}
/**
* @return the table
*/
public Table getTable() {
return table;
}
/**
* @param table the table to set
*/
public void setTable(Table table) {
this.table = table;
}
/**
* @return the primaryKey
*/
public DBPrimaryKey getPrimaryKey() {
return primaryKey;
}
/**
* @param primaryKey the primaryKey to set
*/
public void setPrimaryKey(DBPrimaryKey primaryKey) {
this.primaryKey = primaryKey;
}
/**
* @return the indexes
*/
public List<DBIndex> getIndexes() {
return indexes;
}
/**
* @param index the indexes to add.
*/
public void addIndex(DBIndex index) {
this.indexes.add(index);
}
/**
* @param indexes the indexes to add.
*/
public void addIndexes(Collection<DBIndex> indexes) {
this.indexes.addAll(indexes);
}
/**
* @param index the indexes to remove.
*/
public void removeIndex(DBIndex index) {
this.indexes.remove(index);
}
/**
* @param index the indexes to add.
*/
public List<DBIndex> getIndexesByColumn(String column) {
List<DBIndex> result = new ArrayList<DBIndex>(3);
for (DBIndex index:indexes) {
for (DBIndexColumn col:index.getIndexColumns()) {
if (col.getColumn().equals(column)) {
result.add(index);
break;
}
}
}
return result;
}
/**
* @return the sqlScript
*/
public String getSqlScript() {
return sqlScript;
}
/**
* @param sqlScript the sqlScript to set
*/
public void setSqlScript(String sqlScript) {
this.sqlScript = sqlScript;
}
}

View file

@ -1,184 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.eobjects.metamodel.doc.jdbc.db.DBType;
import org.eobjects.metamodel.doc.jdbc.db.DBTypeFactory;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import org.eobjects.metamodel.schema.Table;
import org.eobjects.metamodel.schema.TableType;
public class DBTableFactory {
public DBTable loadMetaTable(JdbcDataContext dc,Table table) throws SQLException {
Connection conn = dc.getConnection();
DatabaseMetaData meta = conn.getMetaData();
DBTable result = new DBTable();
result.setPrimaryKey(fetchPrimaryKeyInfo(meta, dc, table));
result.setTable(table);
result.addIndexes(fetchIndexInfo(meta, dc, table));
DBType dbType = DBTypeFactory.getDBType(dc.getConnection());
if (dbType!=null) {
String sqlScript;
if (TableType.VIEW.equals(table.getType())) {
sqlScript = dbType.getViewScript(dc.getConnection(), table.getName());
} else {
sqlScript = dbType.getTableScript(dc.getConnection(), table);
}
result.setSqlScript(sqlScript);
}
return result;
}
private DBPrimaryKey fetchPrimaryKeyInfo(DatabaseMetaData meta,JdbcDataContext dc,Table table) throws SQLException {
DBPrimaryKey result = new DBPrimaryKey();
TreeMap<Short,String> columns = new TreeMap<Short,String>();
ResultSet indexInformation = meta.getPrimaryKeys(dc.getCatalogName(), table.getSchema().getName(), table.getName());
while (indexInformation.next()) {
String dbCatalog = indexInformation.getString("TABLE_CAT");
String dbSchema = indexInformation.getString("TABLE_SCHEM");
String dbTableName = indexInformation.getString("TABLE_NAME");
String dbColumnName = indexInformation.getString("COLUMN_NAME");
short dbKeySeq = indexInformation.getShort("KEY_SEQ");
String dbPkName = indexInformation.getString("PK_NAME");
result.setCatalog(dbCatalog);
result.setName(dbPkName);
result.setSchema(dbSchema);
result.setTableName(dbTableName);
columns.put(dbKeySeq, dbColumnName);
}
if (result.getName()==null) {
return null; // no PK on table !
}
result.getColumnNames().addAll(columns.values());
return result;
}
private List<DBIndex> fetchIndexInfo(DatabaseMetaData meta,JdbcDataContext dc,Table table) throws SQLException {
Map<String,String> indexScripts = null;
DBType dbType = DBTypeFactory.getDBType(dc.getConnection());
if (dbType!=null) {
indexScripts = dbType.getIndexScripts(dc.getConnection(), table.getName());
}
DBIndex index = new DBIndex();
List<DBIndex> result = new ArrayList<DBIndex>();
ResultSet indexInformation = meta.getIndexInfo(dc.getCatalogName(), table.getSchema().getName(), table.getName(), false, false);
while (indexInformation.next()) {
String dbCatalog = indexInformation.getString("TABLE_CAT");
String dbSchema = indexInformation.getString("TABLE_SCHEM");
String dbTableName = indexInformation.getString("TABLE_NAME");
boolean dbNoneUnique = indexInformation.getBoolean("NON_UNIQUE");
String dbIndexQualifier = indexInformation.getString("INDEX_QUALIFIER");
String dbIndexName = indexInformation.getString("INDEX_NAME");
short indexType = indexInformation.getShort("TYPE");
// short dbOrdinalPosition = indexInformation.getShort("ORDINAL_POSITION");
String dbColumnName = indexInformation.getString("COLUMN_NAME");
String dbAscOrDesc = indexInformation.getString("ASC_OR_DESC");
// int dbCardinality = indexInformation.getInt("CARDINALITY");
// int dbPages = indexInformation.getInt("PAGES");
// String dbFilterCondition = indexInformation.getString("FILTER_CONDITION");
if (!dbIndexName.equals(index.getName())) {
index = new DBIndex();
result.add(index);
if (indexScripts!=null) {
String indexScript = indexScripts.get(dbIndexName);
index.setSqlScript(indexScript);
}
}
index.setCatalog(dbCatalog);
index.setIndexQualifier(dbIndexQualifier);
index.setName(dbIndexName);
index.setSchema(dbSchema);
index.setType(DBIndexType.parseJdbcMetaInfo(indexType));
index.setUnique(false==dbNoneUnique);
DBIndexColumn col = new DBIndexColumn();
col.setTable(dbTableName);
col.setColumn(dbColumnName);
col.setAscending("A".equalsIgnoreCase(dbAscOrDesc));
index.addIndexColumn(col);
}
return result;
}
private List<DBIndex> fetchExportedKeys(DatabaseMetaData meta,JdbcDataContext dc,Table table) throws SQLException {
DBIndex index = new DBIndex();
List<DBIndex> result = new ArrayList<DBIndex>();
ResultSet indexInformation = meta.getExportedKeys(dc.getCatalogName(), table.getSchema().getName(), table.getName());
while (indexInformation.next()) {
String dbCatalog = indexInformation.getString("TABLE_CAT");
String dbSchema = indexInformation.getString("TABLE_SCHEM");
String dbTableName = indexInformation.getString("TABLE_NAME");
boolean dbNoneUnique = indexInformation.getBoolean("NON_UNIQUE");
String dbIndexQualifier = indexInformation.getString("INDEX_QUALIFIER");
String dbIndexName = indexInformation.getString("INDEX_NAME");
short dbType = indexInformation.getShort("TYPE");
// short dbOrdinalPosition = indexInformation.getShort("ORDINAL_POSITION");
String dbColumnName = indexInformation.getString("COLUMN_NAME");
String dbAscOrDesc = indexInformation.getString("ASC_OR_DESC");
// int dbCardinality = indexInformation.getInt("CARDINALITY");
// int dbPages = indexInformation.getInt("PAGES");
// String dbFilterCondition = indexInformation.getString("FILTER_CONDITION");
if (!dbIndexName.equals(index.getName())) {
index = new DBIndex();
result.add(index);
}
index.setCatalog(dbCatalog);
index.setIndexQualifier(dbIndexQualifier);
index.setName(dbIndexName);
index.setSchema(dbSchema);
index.setType(DBIndexType.parseJdbcMetaInfo(dbType));
index.setUnique(false==dbNoneUnique);
DBIndexColumn col = new DBIndexColumn();
col.setTable(dbTableName);
col.setColumn(dbColumnName);
col.setAscending("A".equalsIgnoreCase(dbAscOrDesc));
index.addIndexColumn(col);
}
return result;
}
}

View file

@ -1,45 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc.db;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import org.eobjects.metamodel.schema.Table;
public interface DBType {
String getDatabaseProductName();
Map<String,String> getIndexScripts(Connection conn,String table) throws SQLException;
String getViewScript(Connection conn,String viewName) throws SQLException;
String getTableScript(Connection conn,Table table) throws SQLException;
}

View file

@ -1,56 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc.db;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBTypeFactory {
static private List<DBType> types = new ArrayList<DBType>(5);
static {
types.add(new PostgresqlDBType());
}
static public final DBType getDBType(Connection conn) throws SQLException {
if (conn==null) {
throw new NullPointerException("Can't resolve db on null connection.");
}
String jdbcProductName = conn.getMetaData().getDatabaseProductName();
for (DBType type:types) {
if (jdbcProductName.equalsIgnoreCase(type.getDatabaseProductName())) {
return type;
}
}
return null;
}
}

View file

@ -1,76 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc.db;
import java.sql.Connection;
import org.eobjects.metamodel.schema.Column;
import org.eobjects.metamodel.schema.Table;
public class DBTypeTableScripter {
public String createTableScript(Connection conn,Table table) {
StringBuilder buf = new StringBuilder(100);
buf.append("CREATE TABLE (\n");
Column[] cols = table.getColumns();
for (int i=0;i<cols.length;i++) {
Column col = cols[i];
buf.append("\t");
buf.append(col.getName());
buf.append(" ");
buf.append(col.getNativeType());
if (col.getNativeType().contains("char")) {
buf.append("(");
buf.append(col.getColumnSize());
buf.append(")");
}
if (!col.isNullable()) {
buf.append(" NOT NULL");
}
//if (i<cols.length-1) {
// buf.append(",");
//}
buf.append("\n");
}
buf.append("\tCONSTRAINT "+table.getName()+"_pkey_todo PRIMARY KEY (");
Column[] pkeys = table.getPrimaryKeys();
for (int i=0;i<pkeys.length;i++) {
Column col = pkeys[i];
buf.append(col.getName());
if (i<pkeys.length-1) {
buf.append(",");
}
}
buf.append(")\n");
buf.append(")\n");
return buf.toString();
}
}

View file

@ -1,75 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc.db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import org.eobjects.metamodel.schema.Table;
public class PostgresqlDBType implements DBType {
public String getDatabaseProductName() {
return "postgresql";
}
public Map<String,String> getIndexScripts(Connection conn,String table) throws SQLException {
Map<String,String> result = new HashMap<String,String>();
Statement s = conn.createStatement();
s.execute("select indexname,indexdef from pg_indexes where schemaname != 'pg_catalog' and schemaname != 'information_schema' and tablename= '"+table+"'");
ResultSet rs = s.getResultSet();
while (rs.next()) {
result.put(rs.getString(1), rs.getString(2));
}
rs.close();
return result;
}
public String getViewScript(Connection conn,String viewName) throws SQLException {
String result = null;
Statement s = conn.createStatement();
s.execute("select viewname,definition from pg_views where schemaname != 'pg_catalog' and schemaname != 'information_schema' and viewname= '"+viewName+"'");
ResultSet rs = s.getResultSet();
if (rs.next()) {
result = rs.getString(2);
}
rs.close();
return result;
}
public String getTableScript(Connection conn,Table table) throws SQLException {
return new DBTypeTableScripter().createTableScript(conn, table);
}
}

View file

@ -1,28 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc.db;

View file

@ -1,28 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc.jdbc;

View file

@ -1,28 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.eobjects.metamodel.doc;

View file

@ -25,7 +25,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -25,7 +25,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -71,7 +71,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -25,7 +25,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -21,6 +21,18 @@
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
@ -56,13 +68,17 @@
<file file="target/dependency/logback-classic.jar" />
<file file="target/dependency/commons-lang3.jar" />
<file file="target/dependency/mariadb-java-client.jar" />
<file file="target/dependency/postgresql.jar" />
<file file="target/dependency/jackson-core.jar" />
<file file="target/dependency/jackson-databind.jar" />
<file file="target/dependency/jackson-annotations.jar" />
</copy>
<java failonerror="true" fork="true" classname="love.distributedrebirth.warpme.hash.WaterShotAddict">
<arg value="target/chain" />
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -9,4 +9,8 @@
<soft:hash file="bundle/logback-classic.jar" hex="0"/>
<soft:hash file="bundle/commons-lang3.jar" hex="0"/>
<soft:hash file="bundle/mariadb-java-client.jar" hex="0"/>
<soft:hash file="bundle/postgresql.jar" hex="0"/>
<soft:hash file="bundle/jackson-core.jar" hex="0"/>
<soft:hash file="bundle/jackson-annotations.jar" hex="0"/>
<soft:hash file="bundle/jackson-databind.jar" hex="0"/>
</root:shot>

View file

@ -9,5 +9,9 @@
<link:magic file="bundle/logback-classic.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/commons-lang3.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/mariadb-java-client.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/postgresql.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/jackson-core.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/jackson-annotations.jar" mime="application/vnd.osgi.bundle"/>
<link:magic file="bundle/jackson-databind.jar" mime="application/vnd.osgi.bundle"/>
</link:sea>
</root:ocean>

View file

@ -25,7 +25,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -25,7 +25,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -36,7 +36,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -36,7 +36,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -36,7 +36,7 @@
<classpath>
<pathelement location="../gdxapp4d-lib-warpme/target/gdxapp4d-lib-warpme.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-driver-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-o2o-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/nx01-x4o-sax3-${nx01.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/jasper-el-${jasper-el.version}.jar" />
<pathelement location="../gdxapp4d-lib-warpme/target/dependency/el-api-${jasper-el.version}.jar" />
</classpath>

View file

@ -59,7 +59,7 @@
</dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-x4o-o2o</artifactId>
<artifactId>nx01-mushroom-mais-mm</artifactId>
</dependency>
<dependency>
<groupId>org.eobjects.metamodel</groupId>
@ -80,9 +80,21 @@
<artifactId>MetaModel-xml</artifactId>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>

View file

@ -127,22 +127,25 @@ public class GDXAppTos4BootFactory {
"org.x4o.fc18,"+
"org.x4o.fc18.cake2,"+
"org.x4o.fc18.cake2.clk1k,"+
"org.x4o.fc18.cake2.flag4,"+
"org.x4o.fc18.cake2.gram5,"+
"org.x4o.fc18.cake2.pie9c,"+
"org.x4o.fc18.cake2.pie9d,"+
"org.x4o.fc18.cake2.zero33,"+
"org.x4o.fc18.cake2.zero33.dec1,"+
"org.x4o.fc18.cake2.zero33.vt06,"+
"org.x4o.fc18.octal8,"+
"org.x4o.fc18.zion7,"+
"org.x4o.o2o,"+
"org.x4o.o2o.io,"+
"org.x4o.o2o.io.sax3,"+
"org.x4o.o2o.io.sax3.xdbx,"+
"org.x4o.o2o.io.sax4,"+
"org.x4o.o2o.io.tlv,"+
"org.x4o.o2o.octal,"+
"org.x4o.o2o.octo,"+
"org.x4o.o2o.octo.conv,"+
"org.x4o.o2o.tdoc,"+
"org.x4o.o2o.tdoc.dom,"+
"org.x4o.sax3,"+
"org.x4o.sax3.io,"+
"org.x4o.sax3.io.xdbx,"+
"org.x4o.maisdoc,"+
"org.x4o.maisdoc.flake,"+
"org.x4o.maisdoc.model,"+
"org.x4o.maisdoc.theme,"+
"org.x4o.maisdoc.theme.base,"+
"org.x4o.maisdoc.theme.jdk6,"+
"org.x4o.maisdoc.theme.jdk7,"+
"org.x4o.xml,"+
"org.x4o.xml.conv,"+
"org.x4o.xml.conv.text,"+
@ -219,60 +222,98 @@ public class GDXAppTos4BootFactory {
"love.distributedrebirth.unicode4d,"+
"love.distributedrebirth.unicode4d.atlas,"+
"love.distributedrebirth.unicode4d.draw,"+
"org.x4o.html,"+
"org.x4o.html.spec,"+
"org.x4o.xml.eld.doc,"+
"org.x4o.xml.eld.doc.api,"+
"org.x4o.xml.eld.doc.api.dom,"+
"org.x4o.xml.eld.doc.theme.base,"+
"org.x4o.xml.eld.doc.theme.jdk6,"+
"org.x4o.xml.eld.doc.theme.jdk7,"+
"org.eobjects.metamodel,"+
"org.eobjects.metamodel.convert,"+
"org.eobjects.metamodel.create,"+
"org.eobjects.metamodel.data,"+
"org.eobjects.metamodel.delete,"+
"org.eobjects.metamodel.drop,"+
"org.eobjects.metamodel.insert,"+
"org.eobjects.metamodel.intercept,"+
"org.eobjects.metamodel.query,"+
"org.eobjects.metamodel.query.builder,"+
"org.eobjects.metamodel.query.parser,"+
"org.eobjects.metamodel.schema,"+
"org.eobjects.metamodel.update,"+
"org.eobjects.metamodel.util,"+
"org.eobjects.metamodel.csv,"+
"org.eobjects.metamodel.xml,"+
"org.eobjects.metamodel.mongodb,"+
"org.eobjects.metamodel.jdbc,"+
"org.eobjects.metamodel.jdbc.dialects,"+
"love.distributedrebirth.nx01.mushroom.mais.mm,"+
"org.eobjects.metamodel.doc,"+
"org.eobjects.metamodel.doc.jdbc,"+
"org.eobjects.metamodel.doc.jdbc.db,"+
"org.apache.metamodel,"+
"org.apache.metamodel.convert,"+
"org.apache.metamodel.create,"+
"org.apache.metamodel.data,"+
"org.apache.metamodel.delete,"+
"org.apache.metamodel.drop,"+
"org.apache.metamodel.insert,"+
"org.apache.metamodel.intercept,"+
"org.apache.metamodel.query,"+
"org.apache.metamodel.query.builder,"+
"org.apache.metamodel.query.parser,"+
"org.apache.metamodel.schema,"+
"org.apache.metamodel.update,"+
"org.apache.metamodel.util,"+
"org.apache.metamodel.csv,"+
"org.apache.metamodel.xml,"+
"org.apache.metamodel.mongodb,"+
"org.apache.metamodel.jdbc,"+
"org.apache.metamodel.jdbc.dialects,"+
"au.com.bytecode.opencsv,"+
"au.com.bytecode.opencsv.bean,"+
"org.postgresql,"+
"org.postgresql.copy,"+
"org.postgresql.core,"+
"org.postgresql.core.types,"+
"org.postgresql.core.v2,"+
"org.postgresql.core.v3,"+
"org.postgresql.core.v3.adaptivefetch,"+
"org.postgresql.core.v3.replication,"+
"org.postgresql.ds,"+
"org.postgresql.ds.common,"+
"org.postgresql.ds.jdbc23,"+
"org.postgresql.db.jdbc4,"+
"org.postgresql.fastpath,"+
"org.postgresql.geometric,"+
"org.postgresql.gss,"+
"org.postgresql.hostchooser,"+
"org.postgresql.jdbc,"+
"org.postgresql.jdbc2,"+
"org.postgresql.jdbc2.optional,"+
"org.postgresql.jdbc3,"+
"org.postgresql.jdbc3g,"+
"org.postgresql.jdbc4,"+
"org.postgresql.jdbcurlresolver,"+
"org.postgresql.largeobject,"+
"org.postgresql.osgi,"+
"org.postgresql.plugin,"+
"org.postgresql.replication,"+
"org.postgresql.replication.fluent,"+
"org.postgresql.replication.fluent.logical,"+
"org.postgresql.replication.fluent.physical,"+
"org.postgresql.ssl,"+
"org.postgresql.ssl.jdbc4,"+
"org.postgresql.sspi,"+
"org.postgresql.translation,"+
"org.postgresql.util,"+
"org.postgresql.util.internal,"+
"org.postgresql.xa,"+
"org.postgresql.xa.jdbc3,"+
"org.postgresql.xa.jdbc4"
"org.postgresql.xml,"+
"com.fasterxml.jackson.core,"+
"com.fasterxml.jackson.core.async,"+
"com.fasterxml.jackson.core.base,"+
"com.fasterxml.jackson.core.exc,"+
"com.fasterxml.jackson.core.filter,"+
"com.fasterxml.jackson.core.format,"+
"com.fasterxml.jackson.core.io,"+
"com.fasterxml.jackson.core.json,"+
"com.fasterxml.jackson.core.json.async,"+
"com.fasterxml.jackson.core.sym,"+
"com.fasterxml.jackson.core.type,"+
"com.fasterxml.jackson.core.util,"+
"com.fasterxml.jackson.annotation,"+
"com.fasterxml.jackson.databind,"+
"com.fasterxml.jackson.databind.annotation,"+
"com.fasterxml.jackson.databind.cfg,"+
"com.fasterxml.jackson.databind.deser,"+
"com.fasterxml.jackson.databind.deser.impl,"+
"com.fasterxml.jackson.databind.deser.std,"+
"com.fasterxml.jackson.databind.exc,"+
"com.fasterxml.jackson.databind.ext,"+
"com.fasterxml.jackson.databind.introspect,"+
"com.fasterxml.jackson.databind.jdk14,"+
"com.fasterxml.jackson.databind.json,"+
"com.fasterxml.jackson.databind.jsonFormatVisitors,"+
"com.fasterxml.jackson.databind.jsonschema,"+
"com.fasterxml.jackson.databind.jsontype,"+
"com.fasterxml.jackson.databind.jsontype.impl,"+
"com.fasterxml.jackson.databind.module,"+
"com.fasterxml.jackson.databind.node,"+
"com.fasterxml.jackson.databind.ser,"+
"com.fasterxml.jackson.databind.ser.impl,"+
"com.fasterxml.jackson.databind.ser.std,"+
"com.fasterxml.jackson.databind.type,"+
"com.fasterxml.jackson.databind.util"
); // ; version=1.0.0
if (cachedir != null) {

160
pom.xml
View file

@ -44,6 +44,9 @@
<org.slf4j.version>1.7.36</org.slf4j.version>
<nx01.version>〇一。壬寅。一〄-SNAPSHOT</nx01.version>
<jasper-el.version>6.0.53</jasper-el.version>
<metamodel.version>5.3.6</metamodel.version>
<!-- TODO: Add json support to X4O and replace jackson dep in meta-model-jdbc see: https://github.com/datacleaner/metamodel/blob/master/jdbc/pom.xml -->
<jackson.version>2.13.1</jackson.version>
<tos4.packages>
org.osgi.framework,
org.osgi.service.packageadmin,
@ -109,22 +112,25 @@
org.x4o.fc18,
org.x4o.fc18.cake2,
org.x4o.fc18.cake2.clk1k,
org.x4o.fc18.cake2.flag4,
org.x4o.fc18.cake2.gram5,
org.x4o.fc18.cake2.pie9c,
org.x4o.fc18.cake2.pie9d,
org.x4o.fc18.cake2.zero33,
org.x4o.fc18.cake2.zero33.dec1,
org.x4o.fc18.cake2.zero33.vt06,
org.x4o.fc18.octal8,
org.x4o.fc18.zion7,
org.x4o.o2o,
org.x4o.o2o.io,
org.x4o.o2o.io.sax3,
org.x4o.o2o.io.sax3.xdbx,
org.x4o.o2o.io.sax4,
org.x4o.o2o.io.tlv,
org.x4o.o2o.octal,
org.x4o.o2o.octo,
org.x4o.o2o.octo.conv,
org.x4o.o2o.tdoc,
org.x4o.o2o.tdoc.dom,
org.x4o.sax3,
org.x4o.sax3.io,
org.x4o.sax3.io.xdbx,
org.x4o.maisdoc,
org.x4o.maisdoc.flake,
org.x4o.maisdoc.model,
org.x4o.maisdoc.theme,
org.x4o.maisdoc.theme.base,
org.x4o.maisdoc.theme.jdk6,
org.x4o.maisdoc.theme.jdk7,
org.x4o.xml,
org.x4o.xml.conv,
org.x4o.xml.conv.text,
@ -200,7 +206,11 @@
love.distributedrebirth.warpme.ship,
love.distributedrebirth.unicode4d,
love.distributedrebirth.unicode4d.atlas,
love.distributedrebirth.unicode4d.draw
love.distributedrebirth.unicode4d.draw,
love.distributedrebirth.nx01.mushroom.mais.mm,
org.eobjects.metamodel.doc,
org.eobjects.metamodel.doc.jdbc,
org.eobjects.metamodel.doc.jdbc.db,
</tos4.packages>
<vrgem4.packages>
love.distributedrebirth.gdxapp4d.vrgem4.service,
@ -233,52 +243,94 @@
org.apache.commons.lang3.tuple
</lang3.packages>
<mmdoc.packages>
org.eobjects.metamodel,
org.eobjects.metamodel.convert,
org.eobjects.metamodel.create,
org.eobjects.metamodel.data,
org.eobjects.metamodel.delete,
org.eobjects.metamodel.drop,
org.eobjects.metamodel.insert,
org.eobjects.metamodel.intercept,
org.eobjects.metamodel.query,
org.eobjects.metamodel.query.builder,
org.eobjects.metamodel.query.parser,
org.eobjects.metamodel.schema,
org.eobjects.metamodel.update,
org.eobjects.metamodel.util,
org.eobjects.metamodel.csv,
org.eobjects.metamodel.xml,
org.eobjects.metamodel.mongodb,
org.eobjects.metamodel.jdbc,
org.eobjects.metamodel.jdbc.dialects,
org.apache.metamodel,
org.apache.metamodel.convert,
org.apache.metamodel.create,
org.apache.metamodel.data,
org.apache.metamodel.delete,
org.apache.metamodel.drop,
org.apache.metamodel.insert,
org.apache.metamodel.intercept,
org.apache.metamodel.query,
org.apache.metamodel.query.builder,
org.apache.metamodel.query.parser,
org.apache.metamodel.schema,
org.apache.metamodel.update,
org.apache.metamodel.util,
org.apache.metamodel.csv,
org.apache.metamodel.xml,
org.apache.metamodel.mongodb,
org.apache.metamodel.jdbc,
org.apache.metamodel.jdbc.dialects,
au.com.bytecode.opencsv,
au.com.bytecode.opencsv.bean,
org.postgresql,
org.postgresql.copy,
org.postgresql.core,
org.postgresql.core.types,
org.postgresql.core.v2,
org.postgresql.core.v3,
org.postgresql.core.v3.adaptivefetch,
org.postgresql.core.v3.replication,
org.postgresql.ds,
org.postgresql.ds.common,
org.postgresql.ds.jdbc23,
org.postgresql.db.jdbc4,
org.postgresql.fastpath,
org.postgresql.geometric,
org.postgresql.gss,
org.postgresql.hostchooser,
org.postgresql.jdbc,
org.postgresql.jdbc2,
org.postgresql.jdbc2.optional,
org.postgresql.jdbc3,
org.postgresql.jdbc3g,
org.postgresql.jdbc4,
org.postgresql.jdbcurlresolver,
org.postgresql.largeobject,
org.postgresql.osgi,
org.postgresql.plugin,
org.postgresql.replication,
org.postgresql.replication.fluent,
org.postgresql.replication.fluent.logical,
org.postgresql.replication.fluent.physical,
org.postgresql.ssl,
org.postgresql.ssl.jdbc4,
org.postgresql.sspi,
org.postgresql.translation,
org.postgresql.util,
org.postgresql.util.internal,
org.postgresql.xa,
org.postgresql.xa.jdbc3,
org.postgresql.xa.jdbc4
org.postgresql.xml,
com.fasterxml.jackson.core,
com.fasterxml.jackson.core.async,
com.fasterxml.jackson.core.base,
com.fasterxml.jackson.core.exc,
com.fasterxml.jackson.core.filter,
com.fasterxml.jackson.core.format,
com.fasterxml.jackson.core.io,
com.fasterxml.jackson.core.json,
com.fasterxml.jackson.core.json.async,
com.fasterxml.jackson.core.sym,
com.fasterxml.jackson.core.type,
com.fasterxml.jackson.core.util,
com.fasterxml.jackson.annotation,
com.fasterxml.jackson.databind,
com.fasterxml.jackson.databind.annotation,
com.fasterxml.jackson.databind.cfg,
com.fasterxml.jackson.databind.deser,
com.fasterxml.jackson.databind.deser.impl,
com.fasterxml.jackson.databind.deser.std,
com.fasterxml.jackson.databind.exc,
com.fasterxml.jackson.databind.ext,
com.fasterxml.jackson.databind.introspect,
com.fasterxml.jackson.databind.jdk14,
com.fasterxml.jackson.databind.json,
com.fasterxml.jackson.databind.jsonFormatVisitors,
com.fasterxml.jackson.databind.jsonschema,
com.fasterxml.jackson.databind.jsontype,
com.fasterxml.jackson.databind.jsontype.impl,
com.fasterxml.jackson.databind.module,
com.fasterxml.jackson.databind.node,
com.fasterxml.jackson.databind.ser,
com.fasterxml.jackson.databind.ser.impl,
com.fasterxml.jackson.databind.ser.std,
com.fasterxml.jackson.databind.type,
com.fasterxml.jackson.databind.util
</mmdoc.packages>
<mariadb.packages>
org.mariadb.jdbc,
@ -399,22 +451,32 @@
<dependency>
<groupId>org.eobjects.metamodel</groupId>
<artifactId>MetaModel-jdbc</artifactId>
<version>3.4.11</version>
<version>${metamodel.version}</version>
</dependency>
<dependency>
<groupId>org.eobjects.metamodel</groupId>
<artifactId>MetaModel-csv</artifactId>
<version>3.4.11</version>
<version>${metamodel.version}</version>
</dependency>
<dependency>
<groupId>org.eobjects.metamodel</groupId>
<artifactId>MetaModel-xml</artifactId>
<version>3.4.11</version>
<version>${metamodel.version}</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
@ -426,6 +488,11 @@
<artifactId>nx01-jpp-base</artifactId>
<version>${nx01.version}</version>
</dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-mushroom-mais-mm</artifactId>
<version>${nx01.version}</version>
</dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-warp-core</artifactId>
@ -451,11 +518,6 @@
<artifactId>nx01-x4o-fc18</artifactId>
<version>${nx01.version}</version>
</dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-x4o-o2o</artifactId>
<version>${nx01.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>