Search in sources :

Example 11 with Type

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;
}
Also used : CompositionType(ch.interlis.ili2c.metamodel.CompositionType) Type(ch.interlis.ili2c.metamodel.Type) Table(ch.interlis.ili2c.metamodel.Table) CompositionType(ch.interlis.ili2c.metamodel.CompositionType)

Example 12 with Type

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);
    }
}
Also used : EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType) CompositionType(ch.interlis.ili2c.metamodel.CompositionType) SurfaceOrAreaType(ch.interlis.ili2c.metamodel.SurfaceOrAreaType) Type(ch.interlis.ili2c.metamodel.Type) SurfaceOrAreaType(ch.interlis.ili2c.metamodel.SurfaceOrAreaType) Iterator(java.util.Iterator) Viewable(ch.interlis.ili2c.metamodel.Viewable) EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType) AttributeDef(ch.interlis.ili2c.metamodel.AttributeDef) TypeAlias(ch.interlis.ili2c.metamodel.TypeAlias) CompositionType(ch.interlis.ili2c.metamodel.CompositionType)

Example 13 with Type

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;
}
Also used : ViewableTransferElement(ch.interlis.ili2c.metamodel.ViewableTransferElement) RoleDef(ch.interlis.ili2c.metamodel.RoleDef) ViewableWrapper(ch.ehi.ili2db.mapping.ViewableWrapper) Iom_jObject(ch.interlis.iom_j.Iom_jObject) ObjectType(ch.interlis.ili2c.metamodel.ObjectType) SurfaceType(ch.interlis.ili2c.metamodel.SurfaceType) CompositionType(ch.interlis.ili2c.metamodel.CompositionType) PolylineType(ch.interlis.ili2c.metamodel.PolylineType) Type(ch.interlis.ili2c.metamodel.Type) EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType) BlackboxType(ch.interlis.ili2c.metamodel.BlackboxType) AreaType(ch.interlis.ili2c.metamodel.AreaType) ReferenceType(ch.interlis.ili2c.metamodel.ReferenceType) SurfaceOrAreaType(ch.interlis.ili2c.metamodel.SurfaceOrAreaType) ObjectType(ch.interlis.ili2c.metamodel.ObjectType) CoordType(ch.interlis.ili2c.metamodel.CoordType) IomObject(ch.interlis.iom.IomObject) Iterator(java.util.Iterator) AssociationDef(ch.interlis.ili2c.metamodel.AssociationDef) AttributeDef(ch.interlis.ili2c.metamodel.AttributeDef) HashSet(java.util.HashSet)

Example 14 with Type

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);
                    }
                }
            }
        }
    }
}
Also used : ViewableTransferElement(ch.interlis.ili2c.metamodel.ViewableTransferElement) ObjectType(ch.interlis.ili2c.metamodel.ObjectType) SurfaceType(ch.interlis.ili2c.metamodel.SurfaceType) CompositionType(ch.interlis.ili2c.metamodel.CompositionType) Type(ch.interlis.ili2c.metamodel.Type) EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType) SurfaceOrAreaType(ch.interlis.ili2c.metamodel.SurfaceOrAreaType) ObjectType(ch.interlis.ili2c.metamodel.ObjectType) ViewableTransferElement(ch.interlis.ili2c.metamodel.ViewableTransferElement) Element(ch.interlis.ili2c.metamodel.Element) Viewable(ch.interlis.ili2c.metamodel.Viewable) Iterator(java.util.Iterator) AttributeDef(ch.interlis.ili2c.metamodel.AttributeDef)

Example 15 with Type

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);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) PrecisionDecimal(ch.interlis.ili2c.metamodel.PrecisionDecimal) Iterator(java.util.Iterator) Type(ch.interlis.ili2c.metamodel.Type) NumericType(ch.interlis.ili2c.metamodel.NumericType) EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType)

Aggregations

Type (ch.interlis.ili2c.metamodel.Type)27 CompositionType (ch.interlis.ili2c.metamodel.CompositionType)26 EnumerationType (ch.interlis.ili2c.metamodel.EnumerationType)19 SurfaceType (ch.interlis.ili2c.metamodel.SurfaceType)19 AttributeDef (ch.interlis.ili2c.metamodel.AttributeDef)18 CoordType (ch.interlis.ili2c.metamodel.CoordType)18 SurfaceOrAreaType (ch.interlis.ili2c.metamodel.SurfaceOrAreaType)18 PolylineType (ch.interlis.ili2c.metamodel.PolylineType)17 ObjectType (ch.interlis.ili2c.metamodel.ObjectType)16 ReferenceType (ch.interlis.ili2c.metamodel.ReferenceType)15 ViewableTransferElement (ch.interlis.ili2c.metamodel.ViewableTransferElement)13 AreaType (ch.interlis.ili2c.metamodel.AreaType)12 BlackboxType (ch.interlis.ili2c.metamodel.BlackboxType)12 NumericType (ch.interlis.ili2c.metamodel.NumericType)12 Iterator (java.util.Iterator)12 Table (ch.interlis.ili2c.metamodel.Table)11 ViewableWrapper (ch.ehi.ili2db.mapping.ViewableWrapper)8 AssociationDef (ch.interlis.ili2c.metamodel.AssociationDef)8 RoleDef (ch.interlis.ili2c.metamodel.RoleDef)8 Viewable (ch.interlis.ili2c.metamodel.Viewable)7