コード例 #1
0
        /// <summary>
        /// returns string value that shows up in p21 file
        /// </summary>
        /// <param name="writeThis"></param>
        /// <returns></returns>
        public static string GetP21Rep(P21Base writeThis)
        {
            if (writeThis == null)
            {
                return(EbConstants.Dollar);
            }

            var t = writeThis.GetType();

            if (typeof(P21Instance).IsAssignableFrom(t))
            {
                var sb          = new StringBuilder();
                var p21Instance = (P21Instance)writeThis;
                sb.Clear();
                sb.Append(EbConstants.Sharp);
                sb.Append(p21Instance.EIN);
            }
            else if (typeof(P21Base).IsAssignableFrom(t))
            {
                return(writeThis.GetP21String());
            }
            else
            {
                throw new NotImplementedException();
            }

            return("");
        }
コード例 #2
0
        private object ConvertSwitch(P21Instance p21Instance, Parameter attribute)
        {
            object retValue = null;
            switch (attribute.ParameterType)
            {
                #region case

                case SParamType.ENTITY:

                    #region entity

                    var pop = attribute as ParamEntity;
                    if (pop == null) return null;
                    var value
                        = _dataSection.ContainsKey(pop.EntityInstance.EntityInstanceName)
                              ? _dataSection[pop.EntityInstance.EntityInstanceName]
                              : ConvertInstance(pop.EntityInstance);
                    AddReferenced(p21Instance, value);
                    retValue = value;
                    break;

                    #endregion entity

                case SParamType.NUMBER:
                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        SParamNamed sParam = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            //Activator.CreateInstance(_ifcAssemblyName, _ifcAssemblyName + "." + sParam.NamedRefString)
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sParam.NamedRefString)
                                     .Unwrap() as NUMBER;
                        aparam.Value = ((ParamReal)attribute).RealValue;
                        retValue = aparam;
                    }
                    else
                    {
                        NUMBER realValue = ((ParamReal)attribute).RealValue;
                        retValue = realValue;
                    }
                    break;
                case SParamType.REAL:

                    #region real

                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        SParamNamed sParam = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sParam.NamedRefString)
                                     .Unwrap() as REAL;
                        aparam.Value = ((ParamReal)attribute).RealValue;
                        retValue = aparam;
                    }
                    else
                    {
                        REAL realValue = ((ParamReal)attribute).RealValue;
                        retValue = realValue;
                    }
                    break;

                    #endregion real

                case SParamType.INTEGER:

                    #region integer

                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        SParamNamed sParam = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sParam.NamedRefString)
                                     .Unwrap() as INTEGER;
                        aparam.Value = ((ParamInteger)attribute).IntegerValue;
                        retValue = aparam;
                    }
                    else
                    {
                        INTEGER intValue = ((ParamInteger)attribute).IntegerValue;
                        //fieldInfo.SetValue(ains, intValue);
                        retValue = intValue;
                    }
                    break;

                    #endregion integer

                case SParamType.STRING:

                    #region string

                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        SParamNamed sParam = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sParam.NamedRefString)
                                     .Unwrap() as STRING;
                        aparam.Value = ((ParamString)attribute).StringValue;
                        retValue = aparam;
                    }
                    else
                    {
                        //throw new NotImplementedException();
                        //STRING strValue = ((ParamString)attribute).StringValue;
                        ////fieldInfo.SetValue(ains, strValue);
                        //retValue = strValue;
                    }
                    break;

                    #endregion string

                case SParamType.ENUMERATION:

                    #region enumeration

                    string estr = ((ParamEnum)attribute).EnumerationValueString;
                    SParamNamed eparam = attribute.SchemaAttDef.Type as SParamNamed;

                    var fi = _ifcAssembly.GetType(_ifcAssembly.GetName().Name + "." + eparam.NamedRefString).GetField(estr);
                    retValue = fi.GetValue(null);
                    break;

                    #endregion enumeration

                case SParamType.LOGICAL:
                case SParamType.BOOLEAN:

                    #region boolean

                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        SParamNamed sParam = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sParam.NamedRefString)
                                     .Unwrap();
                        if (aparam is BOOLEAN)
                        {
                            if (((ParamBoolean)attribute).BoolValue == 1)
                            {
                                ((BOOLEAN)aparam).Value = true;
                            }
                            else
                            {
                                ((BOOLEAN)aparam).Value = false;
                            }
                        }
                        else if (aparam is LOGICAL)
                        {
                            ((LOGICAL)aparam).Value = ((ParamBoolean)attribute).BoolValue;
                        }
                        else
                        {
                            throw new InvalidDataException();
                        }
                        retValue = aparam;
                    }
                    else
                    {
                        if (attribute.SchemaAttDef.Type.ParamType == SParamType.BOOLEAN)
                        {
                            BOOLEAN bvalue;
                            if (((ParamBoolean)attribute).BoolValue == 1)
                            {
                                bvalue = true;
                            }
                            else
                                bvalue = false;
                            retValue = bvalue;
                        }
                        else if (attribute.SchemaAttDef.Type.ParamType == SParamType.LOGICAL)
                        {
                            LOGICAL bvalue = new LOGICAL();
                            bvalue.Value = ((ParamBoolean)attribute).BoolValue;
                            retValue = bvalue;
                        }
                        else
                        {
                            throw new InvalidDataException();
                        }
                    }
                    break;

                    #endregion boolean

                case SParamType.SELECT:

                    #region select

                    SParamNamed selectParam = attribute.SchemaAttDef.Type as SParamNamed;

                    var selectAtt =
                        Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + selectParam.NamedRefString)
                                 .Unwrap();

                    ParamSelect paramSelect = attribute as ParamSelect;

                    Type insType = _ifcAssembly.GetType(_ifcAssembly.GetName().Name + "." + paramSelect.SelectName, false, true);
                    var pSelect =
                        //Activator.CreateInstance(insType);
                        Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + insType.Name).Unwrap();

                    switch (paramSelect.SelectValue.ParameterType)
                    {
                        case SParamType.INTEGER:
                            var ri = paramSelect.SelectValue as ParamInteger;
                            ((INTEGER)pSelect).Value = ri.IntegerValue;
                            break;
                        case SParamType.REAL:
                            var rr = paramSelect.SelectValue as ParamReal;
                            ((REAL)pSelect).Value = rr.RealValue;
                            break;
                        case SParamType.STRING:
                            var rs = paramSelect.SelectValue as ParamString;
                            ((STRING)pSelect).Value = rs.StringValue;
                            break;
                        case SParamType.BOOLEAN:
                            var rb = paramSelect.SelectValue as ParamBoolean;
                            ((BOOLEAN)pSelect).Value = rb.BoolValue == 1;
                            break;
                        default:
                            throw new NotImplementedException();
                        //                            break;
                    }
                    Type tSelect = selectAtt.GetType();
                    tSelect.GetField("Value").SetValue(selectAtt, pSelect);

                    retValue = selectAtt;
                    break;

                    #endregion select

                case SParamType.TYPE:

                    #region Type in Collection form

                    SParamNamed tParamName = attribute.SchemaAttDef.Type as SParamNamed;

                    if (tParamName == null)
                    {
                        throw new InvalidCastException();
                    }
                    if (tParamName.NamedReference is STypeCollection)
                    {
                        var stc = tParamName.NamedReference as STypeCollection;

                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name,
                                                     _ifcAssembly.GetName().Name + "." + tParamName.NamedRefString).Unwrap()
                            as IList;

                        ParamList tParamList = attribute as ParamList;

                        switch (stc.CollectionType)
                        {
                            case SParamType.INTEGER:
                                foreach (var pitem in tParamList.ParameterList)
                                {
                                    var p = pitem as ParamInteger;
                                    INTEGER p21Int = p.IntegerValue;
                                    aparam.Add(p21Int);
                                }

                                break;
                            case SParamType.REAL:
                                foreach (var pitem in tParamList.ParameterList)
                                {
                                    var p = pitem as ParamReal;
                                    REAL p21real = p.RealValue;
                                    aparam.Add(p21real);
                                }
                                break;
                            default:
                                throw new NotImplementedException();
                            //                                break;
                        }
                        //fieldInfo.SetValue(ains, aparam);
                        retValue = aparam;
                        //throw new NotImplementedException();
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }

                    break;

                    #endregion Type in Collection form

                case SParamType.UNSET:

                    break;
                case SParamType.SELFDERIVED:

                    #region derived

                    if (attribute.SchemaAttDef.Type is SParamNamed)
                    {
                        var sde = attribute.SchemaAttDef.Type as SParamNamed;
                        var aparam =
                            Activator.CreateInstance(_ifcAssembly.GetName().Name, _ifcAssembly.GetName().Name + "." + sde.NamedRefString)
                                     .Unwrap();

                        if (aparam.GetType().IsClass)
                        {
                            ((P21Base)aparam).IsDerived = true;
                        }
                        else
                        {
                            Type apType = aparam.GetType();
                            var pbase = new P21Base { IsDerived = true };
                            apType.GetField("Value").SetValue(aparam, pbase);
                        }

                        //aparam.isDerived = true;
                        retValue = aparam;
                    }
                    else
                    {
                        var sde = attribute.SchemaAttDef.Type as SParameter;
                        var aparam =
                            Activator.CreateInstance(EbConstants.Part21NSName,
                                                     EbConstants.Part21NSName + "." + sde.ParamTypeString).Unwrap() as
                            P21Base;
                        aparam.IsDerived = true;
                        retValue = aparam;
                    }

                    break;

                    #endregion derived

                case SParamType.ARRAY:
                case SParamType.LIST:
                case SParamType.SET:
                case SParamType.BAG:

                    #region array

                    SParamCollection collection = attribute.SchemaAttDef.Type as SParamCollection;
                    SParameter pRef = collection.ParamReference;
                    ParamList pList = attribute as ParamList;

                    IList ppList;
                    Type spnType;
                    if (pRef is SParamNamed)
                    {
                        SParamNamed spn = pRef as SParamNamed;
                        //spnType = Type.GetType(_ifcAssemblyName + "." + spn.NamedRefString);
                        spnType = _ifcAssembly.GetType(_ifcAssembly.GetName().Name + "." + spn.NamedRefString);

                        var a = typeof(System.Collections.Generic.List<>);

                        Type listType = a.MakeGenericType(spnType);
                        // Type.GetType("System.Collections.Generic.List").MakeGenericType(spnType);
                        //Type.GetType("System.Collections.Generic.List").MakeGenericType(spnType);
                        ppList = Activator.CreateInstance(listType) as IList;
                    }
                    else if (pRef is SParamCollection)
                    {
                        throw new NotImplementedException();
                    }
                    else
                    {
                        //string assm = EbConstants.Part21NSName+"." + pRef.ParamTypeString + ", " + p21Assembly.FullName;
                        spnType = P21Assembly.GetType(EbConstants.Part21NSName + "." + pRef.ParamTypeString);
                        //Type.GetType(assm);

                        var a = typeof(System.Collections.Generic.List<>);
                        Type listType = a.MakeGenericType(spnType);
                        //Type.GetType("System.Collections.Generic.List").MakeGenericType(spnType);
                        //Type.GetType("System.Collections.Generic.List").MakeGenericType(spnType);
                        ppList = Activator.CreateInstance(listType) as IList;
                    }

                    if (pList.ParameterList.Count > 0)
                    {
                        foreach (var pItem in pList.ParameterList)
                        {
                            var convItem = ConvertSwitch(p21Instance, pItem);
                            if (convItem == null) continue;

                            if (spnType.IsClass)
                                ppList.Add(convItem);
                            else
                            {
                                var sAtt = Activator.CreateInstance(spnType);
                                Type tSel = sAtt.GetType();
                                while (!(convItem is P21Base))
                                {
                                    convItem = convItem.GetType().GetField("Value").GetValue(convItem);
                                }

                                tSel.GetField("Value").SetValue(sAtt, convItem);
                                ppList.Add(sAtt);
                            }
                        }
                    }

                    //fieldInfo.SetValue(ains, ppList);

                    retValue = ppList;
                    break;

                    #endregion array

                default:
                    throw new NotImplementedException();
                //                    break;

                #endregion case
            }

            return retValue;
        }