use of ch.interlis.ili2c.metamodel.Type in project ili2db by claeis.
the class Ili2cUtility method isPureChbaseCatalogueRef.
public static boolean isPureChbaseCatalogueRef(TransferDescription td, AttributeDef attr) {
Type typeo = attr.getDomain();
if (typeo instanceof CompositionType) {
CompositionType type = (CompositionType) typeo;
Table struct = type.getComponentType();
Table root = (Table) struct.getRootExtending();
if (root == null) {
root = struct;
}
if (root.getContainer().getScopedName(null).equals(IliNames.CHBASE1_CATALOGUEOBJECTS_CATALOGUES)) {
if (root.getName().equals(IliNames.CHBASE1_CATALOGUEREFERENCE) || root.getName().equals(IliNames.CHBASE1_MANDATORYCATALOGUEREFERENCE)) {
java.util.Iterator it = struct.getAttributesAndRoles2();
int c = 0;
while (it.hasNext()) {
it.next();
c++;
}
if (c == 1) {
// only one attribute
return true;
}
}
}
}
return false;
}
use of ch.interlis.ili2c.metamodel.Type in project ili2db by claeis.
the class ModelElementSelector method visitViewable.
private void visitViewable(HashSet<Element> visitedElements, HashSet<Model> accuScope, Viewable def) {
if (visitedElements.contains(def)) {
return;
}
visitedElements.add(def);
// generateViewable(def);
Iterator attri = def.iterator();
while (attri.hasNext()) {
Object attro = attri.next();
if (attro instanceof AttributeDef) {
AttributeDef attr = (AttributeDef) attro;
Type type = attr.getDomain();
if (type instanceof CompositionType) {
CompositionType compType = (CompositionType) type;
visitViewable(visitedElements, accuScope, compType.getComponentType());
Iterator resti = compType.iteratorRestrictedTo();
while (resti.hasNext()) {
Viewable rest = (Viewable) resti.next();
visitViewable(visitedElements, accuScope, rest);
}
} else if (createItfLineTables && attr.getDomainResolvingAll() instanceof SurfaceOrAreaType) {
visitItfLineTable(visitedElements, accuScope, attr);
} else if (includeEnums && attr.getDomainResolvingAll() instanceof EnumerationType) {
visitAttributeDef(visitedElements, accuScope, attr);
}
// collect referenced domains
if (type instanceof TypeAlias) {
visitDomain(visitedElements, accuScope, ((TypeAlias) type).getAliasing());
}
}
}
// base viewable
Viewable base = (Viewable) def.getExtending();
if (base != null) {
visitViewable(visitedElements, accuScope, base);
}
}
use of ch.interlis.ili2c.metamodel.Type in project ili2db by claeis.
the class ToXtfRecordConverter method convertRecord.
public Iom_jObject convertRecord(java.sql.ResultSet rs, Viewable aclass1, FixIomObjectRefs fixref, StructWrapper structWrapper, HashMap structelev, ArrayList<StructWrapper> structQueue, long sqlid) throws SQLException {
ViewableWrapper aclass = class2wrapper.get(aclass1);
Iom_jObject iomObj;
int valuei = 1;
valuei++;
if (createTypeDiscriminator || aclass.includesMultipleTypes()) {
// String t_type=rs.getString(valuei);
valuei++;
}
String sqlIliTid = null;
if (structWrapper == null) {
if (!aclass.isStructure()) {
if (createIliTidCol || aclass.getOid() != null) {
sqlIliTid = rs.getString(valuei);
sqlid2xtfid.putSqlid2Xtfid(sqlid, sqlIliTid);
valuei++;
} else {
sqlIliTid = Long.toString(sqlid);
sqlid2xtfid.putSqlid2Xtfid(sqlid, sqlIliTid);
}
}
}
if (structWrapper == null) {
if (!aclass.isStructure()) {
iomObj = new Iom_jObject(aclass1.getScopedName(null), sqlIliTid);
} else {
iomObj = new Iom_jObject(aclass1.getScopedName(null), null);
}
iomObj.setattrvalue(ItfWriter2.INTERNAL_T_ID, Long.toString(sqlid));
fixref.setRoot(iomObj);
} else {
iomObj = (Iom_jObject) structelev.get(Long.toString(sqlid));
if (createGenericStructRef) {
valuei += 4;
} else {
valuei += 2;
}
}
HashSet<AttributeDef> visitedAttrs = new HashSet<AttributeDef>();
for (ViewableWrapper table : aclass.getWrappers()) {
Iterator iter = table.getAttrIterator();
while (iter.hasNext()) {
ViewableTransferElement obj = (ViewableTransferElement) iter.next();
if (obj.obj instanceof AttributeDef) {
AttributeDef attr = (AttributeDef) obj.obj;
AttributeDef baseAttr = attr;
while (true) {
AttributeDef baseAttr1 = (AttributeDef) baseAttr.getExtending();
if (baseAttr1 == null) {
break;
}
baseAttr = baseAttr1;
}
if (!visitedAttrs.contains(baseAttr)) {
visitedAttrs.add(baseAttr);
if (!baseAttr.isTransient()) {
Type proxyType = baseAttr.getDomain();
if (proxyType != null && (proxyType instanceof ObjectType)) {
// skip implicit particles (base-viewables) of views
} else {
valuei = addAttrValue(rs, valuei, sqlid, iomObj, baseAttr, structQueue, table, fixref);
}
}
}
}
if (obj.obj instanceof RoleDef) {
RoleDef role = (RoleDef) obj.obj;
if (role.getExtending() == null) {
String roleName = role.getName();
ArrayList<ViewableWrapper> targetTables = getTargetTables(role.getDestination());
boolean refAlreadyDefined = false;
for (ViewableWrapper targetTable : targetTables) {
String sqlRoleName = ili2sqlName.mapIliRoleDef(role, getSqlType(table.getViewable()).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){
long value = rs.getLong(valuei);
valuei++;
if (!rs.wasNull()) {
if (refAlreadyDefined) {
EhiLogger.logAdaption("Table " + table.getSqlTablename() + "(id " + sqlid + ") more than one value for role " + roleName + "; value of " + sqlRoleName + " ignored");
} else {
IomObject ref = iomObj.addattrobj(roleName, roleOwner.getScopedName(null));
mapSqlid2Xtfid(fixref, value, ref, role.getDestination());
refAlreadyDefined = true;
}
}
}
} else {
// TODO if(orderPos!=0){
long value = rs.getLong(valuei);
valuei++;
if (!rs.wasNull()) {
if (refAlreadyDefined) {
EhiLogger.logAdaption("Table " + table.getSqlTablename() + "(id " + sqlid + ") more than one value for role " + roleName + "; value of " + sqlRoleName + " ignored");
} else {
IomObject ref = iomObj.addattrobj(roleName, "REF");
mapSqlid2Xtfid(fixref, value, ref, role.getDestination());
refAlreadyDefined = true;
}
}
}
}
}
}
}
}
return iomObj;
}
use of ch.interlis.ili2c.metamodel.Type in project ili2db by claeis.
the class ReduceToBaseModel method translateObject.
private void translateObject(IomObject iomObj) {
Element modelElement = (Element) tag2class.get(iomObj.getobjecttag());
Element destModelEle = getTranslatedElement(modelElement);
if (destModelEle == modelElement) {
// no translation required
return;
}
Viewable aclass = (Viewable) modelElement;
Viewable destClass = (Viewable) destModelEle;
String destName = destClass.getScopedName();
iomObj.setobjecttag(destName);
// handle attrs
Iterator iter = aclass.getAttributesAndRoles2();
while (iter.hasNext()) {
ViewableTransferElement srcProp = (ViewableTransferElement) iter.next();
ViewableTransferElement destProp = (ViewableTransferElement) srctag2destElement.get(((Element) srcProp.obj).getScopedName());
if (destProp == null) {
iomObj.setattrundefined(((Element) srcProp.obj).getName());
} else {
if (srcProp.obj instanceof AttributeDef) {
AttributeDef attr = (AttributeDef) srcProp.obj;
if (!attr.isTransient()) {
Type proxyType = attr.getDomain();
if (proxyType != null && (proxyType instanceof ObjectType)) {
// skip implicit particles (base-viewables) of views
} else {
translateAttrValue(iomObj, attr);
}
}
}
}
}
}
use of ch.interlis.ili2c.metamodel.Type in project ili2db by claeis.
the class GeodbGenerator method visit1Begin.
public void visit1Begin() throws IOException {
Iterator domainNamei = geodbDomains.keySet().iterator();
while (domainNamei.hasNext()) {
String domainName = (String) domainNamei.next();
Object ilidomaino = geodbDomains.get(domainName);
ch.interlis.ili2c.metamodel.Type type = null;
if (ilidomaino instanceof ch.interlis.ili2c.metamodel.Domain) {
type = ((ch.interlis.ili2c.metamodel.Domain) ilidomaino).getType();
} else if (ilidomaino instanceof ch.interlis.ili2c.metamodel.AttributeDef) {
type = ((ch.interlis.ili2c.metamodel.AttributeDef) ilidomaino).getDomain();
} else {
throw new IllegalArgumentException("domain!=AttributeDef && domain!=DomainDef");
}
if (type instanceof ch.interlis.ili2c.metamodel.EnumerationType) {
com.esri.arcgis.geodatabase.CodedValueDomain domain = new com.esri.arcgis.geodatabase.CodedValueDomain();
domain.setFieldType(esriFieldType.esriFieldTypeInteger);
java.util.ArrayList ev = new java.util.ArrayList();
buildEnumList(ev, "", ((EnumerationType) type).getConsolidatedEnumeration());
int itfCode = 0;
Iterator iter = ev.iterator();
while (iter.hasNext()) {
String value = (String) iter.next();
domain.addCode(/*code*/
itfCode, /*name*/
value);
itfCode++;
}
domain.setName(domainName);
domain.setSplitPolicy(com.esri.arcgis.geodatabase.esriSplitPolicyType.esriSPTDuplicate);
domain.setMergePolicy(com.esri.arcgis.geodatabase.esriMergePolicyType.esriMPTAreaWeighted);
wksp.addDomain(domain);
} else if (type instanceof ch.interlis.ili2c.metamodel.NumericType) {
PrecisionDecimal min = ((NumericType) type).getMinimum();
PrecisionDecimal max = ((NumericType) type).getMaximum();
com.esri.arcgis.geodatabase.RangeDomain domain = new com.esri.arcgis.geodatabase.RangeDomain();
if (min.getAccuracy() > 0) {
// double
domain.setMinValue(new Double(min.doubleValue()));
domain.setMaxValue(new Double(max.doubleValue()));
domain.setFieldType(esriFieldType.esriFieldTypeDouble);
} else {
// int
domain.setMinValue(new Integer((int) min.doubleValue()));
domain.setMaxValue(new Integer((int) max.doubleValue()));
domain.setFieldType(esriFieldType.esriFieldTypeInteger);
}
domain.setName(domainName);
domain.setSplitPolicy(com.esri.arcgis.geodatabase.esriSplitPolicyType.esriSPTDuplicate);
domain.setMergePolicy(com.esri.arcgis.geodatabase.esriMergePolicyType.esriMPTAreaWeighted);
wksp.addDomain(domain);
}
}
}
Aggregations