use of ch.interlis.ili2c.metamodel.Viewable in project ili2db by claeis.
the class TransferFromIli method generateItfLineTable.
private void generateItfLineTable(AttributeDef attr, int pass) throws Ili2dbException {
if (pass == 1) {
DbTableName sqlName = getSqlTableNameItfLineTable(attr);
DbTable dbTable = new DbTable();
dbTable.setName(sqlName);
dbTable.setIliName(attr.getContainer().getScopedName(null) + "." + attr.getName());
schema.addTable(dbTable);
return;
}
// second pass; add columns
DbTableName sqlName = getSqlTableNameItfLineTable(attr);
DbTable dbTable = schema.findTable(sqlName);
StringBuffer cmt = new StringBuffer();
String cmtSep = "";
if (attr.getDocumentation() != null) {
cmt.append(cmtSep + attr.getDocumentation());
cmtSep = nl;
}
cmt.append(cmtSep + "@iliname " + attr.getContainer().getScopedName(null) + "." + attr.getName());
cmtSep = nl;
if (cmt.length() > 0) {
dbTable.setComment(cmt.toString());
}
if (deleteExistingData) {
dbTable.setDeleteDataIfTableExists(true);
}
dbTable.setRequiresSequence(true);
DbColId dbColId = recConv.addKeyCol(dbTable);
if (createIliTidCol) {
recConv.addIliTidCol(dbTable, null);
}
if (createBasketCol) {
// add basketCol
DbColId t_basket = new DbColId();
t_basket.setName(DbNames.T_BASKET_COL);
t_basket.setNotNull(true);
t_basket.setScriptComment("REFERENCES " + DbNames.BASKETS_TAB);
if (createFk) {
t_basket.setReferencedTable(new DbTableName(schema.getName(), DbNames.BASKETS_TAB));
}
if (createFkIdx) {
t_basket.setIndex(true);
}
dbTable.addColumn(t_basket);
}
if (createDatasetCol) {
DbColVarchar t_dsName = new DbColVarchar();
t_dsName.setName(DbNames.T_DATASET_COL);
t_dsName.setSize(DbNames.DATASETNAME_COL_SIZE);
t_dsName.setNotNull(true);
t_dsName.setIndex(true);
dbTable.addColumn(t_dsName);
}
SurfaceOrAreaType type = (SurfaceOrAreaType) attr.getDomainResolvingAll();
DbColGeometry dbCol = recConv.generatePolylineType(type, attr.getContainer().getScopedName(null) + "." + attr.getName());
recConv.setCrs(dbCol, attr);
dbCol.setName(ili2sqlName.getSqlColNameItfLineTableGeomAttr(attr, sqlName.getName()));
dbCol.setNotNull(true);
dbTable.addColumn(dbCol);
if (type instanceof SurfaceType) {
dbColId = new DbColId();
dbColId.setName(ili2sqlName.getSqlColNameItfLineTableRefAttr(attr, sqlName.getName()));
dbColId.setNotNull(true);
dbColId.setPrimaryKey(false);
dbColId.setScriptComment("REFERENCES " + recConv.getSqlType((Viewable) attr.getContainer()));
if (createFk) {
dbColId.setReferencedTable(recConv.getSqlType((Viewable) attr.getContainer()));
}
if (createFkIdx) {
dbColId.setIndex(true);
}
dbTable.addColumn(dbColId);
}
Table lineAttrTable = type.getLineAttributeStructure();
if (lineAttrTable != null) {
Iterator attri = lineAttrTable.getAttributes();
while (attri.hasNext()) {
AttributeDef lineattr = (AttributeDef) attri.next();
recConv.generateAttr(dbTable, lineAttrTable, lineattr);
}
}
if (createStdCols) {
AbstractRecordConverter.addStdCol(dbTable);
}
}
use of ch.interlis.ili2c.metamodel.Viewable in project ili2db by claeis.
the class TransferFromIli method updateInheritanceTable.
public void updateInheritanceTable(java.sql.Connection conn, String schema) throws Ili2dbException {
String sqlName = DbNames.INHERIT_TAB;
if (schema != null) {
sqlName = schema + "." + sqlName;
}
// String stmt="CREATE TABLE "+tabname+" ("+thisClassCol+" VARCHAR2(30) NOT NULL,"+baseClassCol+" VARCHAR2(30) NULL)";
HashSet<String> exstEntries = readInheritanceTable(conn, schema);
try {
// insert entries
String stmt = "INSERT INTO " + sqlName + " (" + DbNames.INHERIT_TAB_THIS_COL + "," + DbNames.INHERIT_TAB_BASE_COL + ") VALUES (?,?)";
EhiLogger.traceBackendCmd(stmt);
java.sql.PreparedStatement ps = conn.prepareStatement(stmt);
String thisClass = null;
try {
for (Object aclass : visitedElements) {
if (aclass instanceof Viewable) {
thisClass = ((Viewable) aclass).getScopedName(null);
if (!exstEntries.contains(thisClass)) {
Viewable base = (Viewable) ((Viewable) aclass).getExtending();
ps.setString(1, thisClass);
if (base != null) {
ps.setString(2, base.getScopedName(null));
} else {
ps.setNull(2, java.sql.Types.VARCHAR);
}
ps.executeUpdate();
}
}
}
} catch (java.sql.SQLException ex) {
throw new Ili2dbException("failed to insert inheritance-relation for class " + thisClass, ex);
} finally {
ps.close();
}
} catch (java.sql.SQLException ex) {
throw new Ili2dbException("failed to update inheritance-table " + sqlName, ex);
}
}
use of ch.interlis.ili2c.metamodel.Viewable in project ili2db by claeis.
the class FromXtfRecordConverter method getViewable.
private Viewable getViewable(String sqlType) {
String iliQname = ili2sqlName.mapSqlTableName(sqlType);
Viewable aclass = (Viewable) tag2class.get(iliQname);
return aclass;
}
use of ch.interlis.ili2c.metamodel.Viewable in project ili2db by claeis.
the class FromXtfRecordConverter method getViewableWrapperOfAbstractClass.
private ViewableWrapper getViewableWrapperOfAbstractClass(Viewable abstractClass, Viewable concreteClass) {
if (abstractClass == concreteClass) {
return class2wrapper.get(concreteClass);
}
ArrayList<ViewableWrapper> rets = new ArrayList<ViewableWrapper>();
rets.add(class2wrapper.get(concreteClass));
Viewable superClass = (Viewable) concreteClass.getExtending();
while (superClass != null) {
ViewableWrapper ret2 = class2wrapper.get(superClass);
if (ret2 != null) {
if (!rets.contains(ret2)) {
rets.add(0, ret2);
}
}
if (superClass == abstractClass) {
break;
}
superClass = (Viewable) superClass.getExtending();
}
for (int i = 0; i < rets.size(); i++) {
ViewableWrapper ret = rets.get(i);
if (i == rets.size() - 1) {
return ret;
}
if (!TrafoConfigNames.INHERITANCE_TRAFO_NEWANDSUBCLASS.equals(trafoConfig.getViewableConfig(ret.getViewable(), TrafoConfigNames.INHERITANCE_TRAFO))) {
return ret;
}
}
return null;
}
use of ch.interlis.ili2c.metamodel.Viewable in project ili2db by claeis.
the class FromXtfRecordConverter method createInsertStmt.
/**
* creates an insert statement for a given viewable.
* @param sqlTableName table name of viewable
* @param aclass viewable
* @return insert statement
*/
public String createInsertStmt(boolean isUpdate, Viewable iomClass, DbTableName sqlTableName, ViewableWrapper aclass, StructWrapper structEle) {
StringBuffer ret = new StringBuffer();
StringBuffer values = new StringBuffer();
// WHERE some_column=some_value;
if (isUpdate) {
ret.append("UPDATE ");
} else {
ret.append("INSERT INTO ");
}
ret.append(sqlTableName.getQName());
String sep = null;
if (isUpdate) {
sep = " SET ";
} else {
sep = " (";
}
// add T_Id
if (!isUpdate) {
ret.append(sep);
ret.append(colT_ID);
values.append("?");
sep = ",";
}
// add T_basket
if (createBasketCol) {
ret.append(sep);
ret.append(DbNames.T_BASKET_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
if (createDatasetCol) {
ret.append(sep);
ret.append(DbNames.T_DATASET_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
if (!aclass.isSecondaryTable()) {
// if root, add type
if (aclass.getExtending() == null) {
if (createTypeDiscriminator || aclass.includesMultipleTypes()) {
ret.append(sep);
ret.append(DbNames.T_TYPE_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
// if Class
if (!aclass.isStructure()) {
if (!isUpdate) {
if (createIliTidCol || aclass.getOid() != null) {
ret.append(sep);
ret.append(DbNames.T_ILI_TID_COL);
values.append(",?");
sep = ",";
}
}
}
// if STRUCTURE, add ref to parent
if (aclass.isStructure()) {
if (structEle == null) {
// struct is extended by a class and current object is an instance of the class
} else {
// current object is an instance of the structure
if (createGenericStructRef) {
ret.append(sep);
ret.append(DbNames.T_PARENT_ID_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
ret.append(sep);
ret.append(DbNames.T_PARENT_TYPE_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
// attribute name in parent class
ret.append(sep);
ret.append(DbNames.T_PARENT_ATTR_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
} else {
ret.append(sep);
Viewable parentViewable = getViewable(structEle.getParentSqlType());
ViewableWrapper parentTable = getViewableWrapperOfAbstractClass((Viewable) structEle.getParentAttr().getContainer(), parentViewable);
ret.append(ili2sqlName.mapIliAttributeDefReverse(structEle.getParentAttr(), sqlTableName.getName(), parentTable.getSqlTablename()));
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
// seqeunce (not null if LIST)
ret.append(sep);
ret.append(DbNames.T_SEQ_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
}
}
}
HashSet attrs = getIomObjectAttrs(iomClass);
Iterator iter = aclass.getAttrIterator();
while (iter.hasNext()) {
ViewableTransferElement obj = (ViewableTransferElement) iter.next();
if (obj.obj instanceof AttributeDef) {
AttributeDef attr = (AttributeDef) obj.obj;
if (attrs.contains(attr)) {
if (!attr.isTransient()) {
Type proxyType = attr.getDomain();
if (proxyType != null && (proxyType instanceof ObjectType)) {
// skip implicit particles (base-viewables) of views
} else {
sep = addAttrToInsertStmt(isUpdate, ret, values, sep, attr, sqlTableName.getName());
}
}
}
}
if (obj.obj instanceof RoleDef) {
RoleDef role = (RoleDef) obj.obj;
if (role.getExtending() == null) {
if (attrs.contains(role)) {
ArrayList<ViewableWrapper> targetTables = getTargetTables(role.getDestination());
for (ViewableWrapper targetTable : targetTables) {
String roleName = ili2sqlName.mapIliRoleDef(role, sqlTableName.getName(), targetTable.getSqlTablename(), targetTables.size() > 1);
// a role of an embedded association?
if (obj.embedded) {
AssociationDef roleOwner = (AssociationDef) role.getContainer();
if (roleOwner.getDerivedFrom() == null) {
// TODO if(orderPos!=0){
ret.append(sep);
ret.append(roleName);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
} else {
// TODO if(orderPos!=0){
ret.append(sep);
ret.append(roleName);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
}
}
}
}
}
// stdcols
if (createStdCols) {
ret.append(sep);
ret.append(DbNames.T_LAST_CHANGE_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
if (!isUpdate) {
ret.append(sep);
ret.append(DbNames.T_CREATE_DATE_COL);
values.append(",?");
sep = ",";
}
ret.append(sep);
ret.append(DbNames.T_USER_COL);
if (isUpdate) {
ret.append("=?");
} else {
values.append(",?");
}
sep = ",";
}
if (isUpdate) {
// WHERE some_column=some_value;
// add T_Id
ret.append(" WHERE ");
ret.append(colT_ID);
ret.append("=?");
} else {
ret.append(") VALUES (");
ret.append(values);
ret.append(")");
}
return ret.toString();
}
Aggregations