Search in sources :

Example 11 with AssociationDef

use of ch.interlis.ili2c.metamodel.AssociationDef in project ili2db by claeis.

the class FromXtfRecordConverter method writeRecord.

public void writeRecord(long basketSqlId, IomObject iomObj, Viewable iomClass, StructWrapper structEle, ViewableWrapper aclass, String sqlType, long sqlId, boolean updateObj, PreparedStatement ps, ArrayList structQueue) throws SQLException, ConverterException {
    int valuei = 1;
    if (updateObj) {
    // if update, t_id is last param
    // ps.setInt(valuei, sqlId);
    // valuei++;
    } else {
        ps.setLong(valuei, sqlId);
        valuei++;
    }
    if (createBasketCol) {
        ps.setLong(valuei, basketSqlId);
        valuei++;
    }
    if (createDatasetCol) {
        ps.setString(valuei, datasetName);
        valuei++;
    }
    if (!aclass.isSecondaryTable()) {
        if (aclass.getExtending() == null) {
            if (createTypeDiscriminator || aclass.includesMultipleTypes()) {
                ps.setString(valuei, sqlType);
                valuei++;
            }
            // if class
            if (structEle == null) {
                if (!updateObj) {
                    if (!aclass.isStructure()) {
                        if (createIliTidCol || aclass.getOid() != null) {
                            // import TID from transfer file
                            if (AbstractRecordConverter.isUuidOid(td, aclass.getOid())) {
                                Object toInsertUUID = geomConv.fromIomUuid(iomObj.getobjectoid());
                                ps.setObject(valuei, toInsertUUID);
                            } else {
                                ps.setString(valuei, iomObj.getobjectoid());
                            }
                            valuei++;
                        }
                    }
                }
            }
            // if struct, add ref to parent
            if (structEle != null) {
                ps.setLong(valuei, structEle.getParentSqlId());
                valuei++;
                if (createGenericStructRef) {
                    ps.setString(valuei, structEle.getParentSqlType());
                    valuei++;
                    // T_ParentAttr
                    ps.setString(valuei, structEle.getParentSqlAttr());
                    valuei++;
                }
                // T_Seq
                ps.setInt(valuei, structEle.getStructi());
                valuei++;
            }
        }
    }
    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 {
                        valuei = addAttrValue(iomObj, sqlType, sqlId, aclass.getSqlTablename(), ps, valuei, attr, structQueue);
                    }
                }
            }
        }
        if (obj.obj instanceof RoleDef) {
            RoleDef role = (RoleDef) obj.obj;
            if (role.getExtending() == null) {
                if (attrs.contains(role)) {
                    String refoid = null;
                    String roleName = role.getName();
                    // a role of an embedded association?
                    if (obj.embedded) {
                        AssociationDef roleOwner = (AssociationDef) role.getContainer();
                        if (roleOwner.getDerivedFrom() == null) {
                            // not just a link?
                            IomObject structvalue = iomObj.getattrobj(roleName, 0);
                            if (roleOwner.getAttributes().hasNext() || roleOwner.getLightweightAssociations().iterator().hasNext()) {
                            // TODO handle attributes of link
                            }
                            if (structvalue != null) {
                                refoid = structvalue.getobjectrefoid();
                                long orderPos = structvalue.getobjectreforderpos();
                                if (orderPos != 0) {
                                // refoid,orderPos
                                // ret.setStringAttribute(roleName, refoid);
                                // ret.setStringAttribute(roleName+".orderPos", Long.toString(orderPos));
                                } else {
                                // refoid
                                // ret.setStringAttribute(roleName, refoid);
                                }
                            } else {
                                refoid = null;
                            }
                        }
                    } else {
                        IomObject structvalue = iomObj.getattrobj(roleName, 0);
                        refoid = structvalue.getobjectrefoid();
                        long orderPos = structvalue.getobjectreforderpos();
                        if (orderPos != 0) {
                        // refoid,orderPos
                        // ret.setStringAttribute(roleName, refoid);
                        // ret.setStringAttribute(roleName+".orderPos", Long.toString(orderPos));
                        } else {
                        // refoid
                        // ret.setStringAttribute(roleName, refoid);
                        }
                    }
                    Holder<Integer> valueiRef = new Holder<Integer>(valuei);
                    setReferenceColumn(ps, role.getDestination(), refoid, valueiRef);
                    valuei = valueiRef.value;
                }
            }
        }
    }
    if (createStdCols) {
        // T_LastChange
        ps.setTimestamp(valuei, today);
        valuei++;
        // T_CreateDate
        if (!updateObj) {
            ps.setTimestamp(valuei, today);
            valuei++;
        }
        // T_User
        ps.setString(valuei, dbusr);
        valuei++;
    }
    if (updateObj) {
        // if update, t_id is last param
        ps.setLong(valuei, sqlId);
        valuei++;
    } else {
    // if insert, t_id is first param
    // ps.setInt(valuei, sqlId);
    // valuei++;
    }
}
Also used : ViewableTransferElement(ch.interlis.ili2c.metamodel.ViewableTransferElement) RoleDef(ch.interlis.ili2c.metamodel.RoleDef) Holder(javax.xml.ws.Holder) ObjectType(ch.interlis.ili2c.metamodel.ObjectType) NumericalType(ch.interlis.ili2c.metamodel.NumericalType) PolylineType(ch.interlis.ili2c.metamodel.PolylineType) Type(ch.interlis.ili2c.metamodel.Type) ReferenceType(ch.interlis.ili2c.metamodel.ReferenceType) SurfaceOrAreaType(ch.interlis.ili2c.metamodel.SurfaceOrAreaType) SurfaceType(ch.interlis.ili2c.metamodel.SurfaceType) CompositionType(ch.interlis.ili2c.metamodel.CompositionType) EnumerationType(ch.interlis.ili2c.metamodel.EnumerationType) NumericType(ch.interlis.ili2c.metamodel.NumericType) BlackboxType(ch.interlis.ili2c.metamodel.BlackboxType) AreaType(ch.interlis.ili2c.metamodel.AreaType) LineType(ch.interlis.ili2c.metamodel.LineType) 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) IomObject(ch.interlis.iom.IomObject) AttributeDef(ch.interlis.ili2c.metamodel.AttributeDef) HashSet(java.util.HashSet)

Example 12 with AssociationDef

use of ch.interlis.ili2c.metamodel.AssociationDef in project ili2db by claeis.

the class Viewable2TableMapper method isReferenced.

private static boolean isReferenced(Viewable viewable) {
    if (viewable instanceof AbstractClassDef) {
        AbstractClassDef aclass = (AbstractClassDef) viewable;
        Iterator<RoleDef> rolei = aclass.getDefinedTargetForRoles();
        while (rolei.hasNext()) {
            RoleDef role = rolei.next();
            AssociationDef assoc = (AssociationDef) role.getContainer();
            if (!assoc.isLightweight()) {
                return true;
            }
            if (!role.isAssociationEmbedded()) {
                // opposide role is embedded into opposide class, so opposide class references this viewable
                return true;
            }
        }
    }
    return false;
}
Also used : RoleDef(ch.interlis.ili2c.metamodel.RoleDef) AssociationDef(ch.interlis.ili2c.metamodel.AssociationDef) AbstractClassDef(ch.interlis.ili2c.metamodel.AbstractClassDef)

Aggregations

AssociationDef (ch.interlis.ili2c.metamodel.AssociationDef)12 AttributeDef (ch.interlis.ili2c.metamodel.AttributeDef)11 RoleDef (ch.interlis.ili2c.metamodel.RoleDef)10 ViewableTransferElement (ch.interlis.ili2c.metamodel.ViewableTransferElement)9 CompositionType (ch.interlis.ili2c.metamodel.CompositionType)8 CoordType (ch.interlis.ili2c.metamodel.CoordType)8 EnumerationType (ch.interlis.ili2c.metamodel.EnumerationType)8 PolylineType (ch.interlis.ili2c.metamodel.PolylineType)8 SurfaceOrAreaType (ch.interlis.ili2c.metamodel.SurfaceOrAreaType)8 SurfaceType (ch.interlis.ili2c.metamodel.SurfaceType)8 Type (ch.interlis.ili2c.metamodel.Type)8 Iterator (java.util.Iterator)8 ObjectType (ch.interlis.ili2c.metamodel.ObjectType)7 ReferenceType (ch.interlis.ili2c.metamodel.ReferenceType)7 AreaType (ch.interlis.ili2c.metamodel.AreaType)6 BlackboxType (ch.interlis.ili2c.metamodel.BlackboxType)6 HashSet (java.util.HashSet)6 ViewableWrapper (ch.ehi.ili2db.mapping.ViewableWrapper)5 NumericType (ch.interlis.ili2c.metamodel.NumericType)5 IomObject (ch.interlis.iom.IomObject)4