public void Recreate_NIST_TrainingStructure() { IStepReader reader = getNISTTrainingStructure(); iso_10303 iso10303 = serializer.Deserialize(reader); reader.Close(); string path = "./sampleData/NIST_TrainingStructure_param_output.ifc"; if (File.Exists(path)) { File.Delete(path); } Assert.IsFalse(File.Exists(path)); StreamWriter sr = new StreamWriter(path); IStepWriter writer = new StepWriter(sr); serializer.Serialize(writer, iso10303); writer.Close(); Assert.IsTrue(File.Exists(path)); //quick and dirty method for checking file string[] lines = File.ReadAllLines(path); Assert.IsNotNull(lines); Assert.AreEqual(17227 + 9, lines.Length); }
public StepFile Deserialize(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } StepFile step = new StepFile(); while (reader.Read()) { switch (reader.TokenType) { case StepToken.EntityName: step.Header.Add(deserializeEntity(reader)); continue; case StepToken.LineIdentifier: int objectNumber = getObjectNumber(reader); step.Data.Add(objectNumber, deserializeEntity(reader)); continue; default: continue; } } //TODO should try to create the tree here. Need to handle circular references though. return(step); }
public StepFile Deserialize(IStepReader reader) { if( reader == null ) throw new ArgumentNullException( "reader" ); StepFile step = new StepFile(); while(reader.Read()){ switch(reader.TokenType){ case StepToken.EntityName: step.Header.Add( deserializeEntity( reader ) ); continue; case StepToken.LineIdentifier: int objectNumber = getObjectNumber( reader ); step.Data.Add( objectNumber, deserializeEntity( reader ) ); continue; default: continue; } } //TODO should try to create the tree here. Need to handle circular references though. return step; }
private StepValue deserializeNestedEntity(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } return(StepValue.CreateNestedEntity(deserializeEntity(reader))); }
private StepValue deserializeProperty(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } return(new StepValue(reader.TokenType, reader.Value)); }
public void CanDeserialize_NIST_TrainingStructure() { IStepReader reader = getNISTTrainingStructure(); iso_10303 iso10303 = serializer.Deserialize(reader); uos1 uos1 = iso10303.uos as uos1; Entity[] entities = uos1.Items; Assert.AreEqual(17227, entities.Length); }
public void CanReadSmallWallExample() { SUT = this.createStepReader( ExampleData.StepIFC2X3SmallWallExample() ); int count = 0; while(SUT.Read()){ count++; } Assert.AreEqual(StepToken.EndSTEP, SUT.TokenType); Assert.AreEqual(1927, count ); }
private StepValue deserializeLineReference(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } return(new StepValue(reader.TokenType, CastLineIdToInt((string)reader.Value))); }
public void CanReadSmallWallExample() { SUT = this.createStepReader(ExampleData.StepIFC2X3SmallWallExample()); int count = 0; while (SUT.Read()) { count++; } Assert.AreEqual(StepToken.EndSTEP, SUT.TokenType); Assert.AreEqual(1927, count); }
/// <summary> /// Deserializes STEP format data by reading stream provided by a StreamReader. An iso_10303 object is returned. /// </summary> /// <param name="reader"></param> /// <returns></returns> public iso_10303 Deserialize(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } this._internalDeserializer = new StepDeserializer(); this._binder = new StepBinder(); StepFile stepFile = this._internalDeserializer.Deserialize(reader); iso_10303 iso10303 = this._binder.Bind(stepFile); return(iso10303); }
/// <summary> /// Should only be called when reader is at a LineIdentifier token. /// Attempts to read the value of the line identifier, e.g. "#24" /// and cast it to an integer, e.g. 24. /// </summary> /// <returns></returns> private int getObjectNumber(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.TokenType != StepToken.LineIdentifier) { throw new StepSerializerException("getObjectNumber() was called when the ExpressReader was not at a LineIdentifier token"); } if (reader.ValueType != typeof(string)) { throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "getObjectNumber() expects the line identifier to be a string, it is instead a type of {0}", reader.ValueType)); } return(CastLineIdToInt(reader.Value.ToString())); }
/// <summary> /// If the reader is at an EntityName context, then this will return the entity name (with error checking) /// </summary> /// <returns></returns> private string getObjectName(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.TokenType != StepToken.EntityName) { throw new StepSerializerException("getObjectName() has been called, but the reader context is not that of an EntityName token"); } if (reader.ValueType != typeof(string)) { throw new StepSerializerException("getObjectName() cannot create an object name from a non-string value type"); } string s = reader.Value.ToString(); if (string.IsNullOrEmpty(s)) { throw new StepSerializerException("getObjectName() only found a null Object name"); } return(s); }
private void createSUT( string sample ){ StringReader reader = new StringReader( ExampleData.simpleStepWithCommentString() ); SUT = new StepReader( reader ); }
/// <summary> /// /// </summary> /// <returns></returns> private StepValue deserializeArray(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } IList <StepValue> values = new List <StepValue>(); while (reader.Read()) { logger.Debug(String.Format(CultureInfo.InvariantCulture, "deserializeArray read : {0} of value {1}", reader.TokenType, reader.Value)); switch (reader.TokenType) { case StepToken.EndArray: return(StepValue.CreateArray(values)); case StepToken.LineReference: values.Add(deserializeLineReference(reader)); continue; case StepToken.Enumeration: case StepToken.Boolean: case StepToken.Integer: case StepToken.Float: case StepToken.String: values.Add(deserializeProperty(reader)); continue; case StepToken.Null: values.Add(deserializeNull()); continue; case StepToken.EntityName: case StepToken.StartEntity: values.Add(deserializeNestedEntity(reader)); continue; case StepToken.Operator: case StepToken.Overridden: case StepToken.EndEntity: case StepToken.EndLine: case StepToken.EndSection: case StepToken.EndSTEP: case StepToken.StartSTEP: case StepToken.StartSection: throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "deserializeArray found a token which was not expected: {0}", reader.TokenType)); default: throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture, "This ExpressToken type is not yet implemented by deserializeArray(), {0}", reader.TokenType)); } } throw new StepSerializerException("deserializeArray() reached the end of the reader without finding an endArray token"); }
/// <summary> /// Should only be called when reader is at a LineIdentifier token. /// Attempts to read the value of the line identifier, e.g. "#24" /// and cast it to an integer, e.g. 24. /// </summary> /// <returns></returns> private int getObjectNumber(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); if(reader.TokenType != StepToken.LineIdentifier) throw new StepSerializerException( "getObjectNumber() was called when the ExpressReader was not at a LineIdentifier token" ); if(reader.ValueType != typeof(string)) throw new StepSerializerException( String.Format(CultureInfo.InvariantCulture, "getObjectNumber() expects the line identifier to be a string, it is instead a type of {0}", reader.ValueType)); return CastLineIdToInt( reader.Value.ToString() ); }
/// <summary> /// Attempts to read a nested entity /// </summary> /// <param name="reader"></param> /// <returns></returns> private StepDataObject deserializeEntity(IStepReader reader){ if(reader == null) throw new ArgumentNullException( "reader" ); StepDataObject edo = new StepDataObject(); bool entityStarted = false; //nested entities are already on the EntityName token if(reader.TokenType == StepToken.EntityName) edo.ObjectName = getObjectName(reader); while(reader.Read()){ logger.Debug(String.Format(CultureInfo.InvariantCulture, "deserializer read token {0}. value {1}", reader.TokenType, reader.Value)); switch(reader.TokenType){ case StepToken.EntityName: if(!entityStarted) edo.ObjectName = getObjectName( reader ); else //it's a nested entity edo.Properties.Add( deserializeNestedEntity( reader ) ); continue; case StepToken.LineReference: edo.Properties.Add(deserializeLineReference( reader )); continue; case StepToken.Enumeration: case StepToken.Boolean: case StepToken.Integer: case StepToken.Float: case StepToken.String: case StepToken.Date: edo.Properties.Add(deserializeProperty( reader )); continue; case StepToken.StartArray: edo.Properties.Add(deserializeArray( reader )); continue; case StepToken.StartEntity: if(!entityStarted) entityStarted = true; else throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "A token was found which was not expected: {0}", reader.TokenType)); continue; case StepToken.Operator: case StepToken.Comment: continue; case StepToken.Overridden: edo.Properties.Add(deserializeOverridden()); continue; case StepToken.Null: edo.Properties.Add(deserializeNull()); continue; case StepToken.EndEntity: return edo; case StepToken.EndLine: case StepToken.EndSection: case StepToken.EndSTEP: case StepToken.StartSTEP: case StepToken.StartSection: throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "A token was found which was not expected: {0}", reader.TokenType)); default: throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture, "The {0} ExpressToken type is not yet implemented by deserializeEntity()", reader.TokenType)); } //TODO should do some verification here (properties are after entityStart and before EntityEnd etc.) } throw new StepSerializerException( "The reader reached the end without finding an endEntity token" ); }
/// <summary> /// If the reader is at an EntityName context, then this will return the entity name (with error checking) /// </summary> /// <returns></returns> private string getObjectName(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); if(reader.TokenType != StepToken.EntityName) throw new StepSerializerException("getObjectName() has been called, but the reader context is not that of an EntityName token"); if(reader.ValueType != typeof(string)) throw new StepSerializerException("getObjectName() cannot create an object name from a non-string value type"); string s = reader.Value.ToString(); if(string.IsNullOrEmpty(s)) throw new StepSerializerException("getObjectName() only found a null Object name"); return s; }
/// <summary> /// Attempts to read a nested entity /// </summary> /// <param name="reader"></param> /// <returns></returns> private StepDataObject deserializeEntity(IStepReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } StepDataObject edo = new StepDataObject(); bool entityStarted = false; //nested entities are already on the EntityName token if (reader.TokenType == StepToken.EntityName) { edo.ObjectName = getObjectName(reader); } while (reader.Read()) { logger.Debug(String.Format(CultureInfo.InvariantCulture, "deserializer read token {0}. value {1}", reader.TokenType, reader.Value)); switch (reader.TokenType) { case StepToken.EntityName: if (!entityStarted) { edo.ObjectName = getObjectName(reader); } else //it's a nested entity { edo.Properties.Add(deserializeNestedEntity(reader)); } continue; case StepToken.LineReference: edo.Properties.Add(deserializeLineReference(reader)); continue; case StepToken.Enumeration: case StepToken.Boolean: case StepToken.Integer: case StepToken.Float: case StepToken.String: case StepToken.Date: edo.Properties.Add(deserializeProperty(reader)); continue; case StepToken.StartArray: edo.Properties.Add(deserializeArray(reader)); continue; case StepToken.StartEntity: if (!entityStarted) { entityStarted = true; } else { throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "A token was found which was not expected: {0}", reader.TokenType)); } continue; case StepToken.Operator: case StepToken.Comment: continue; case StepToken.Overridden: edo.Properties.Add(deserializeOverridden()); continue; case StepToken.Null: edo.Properties.Add(deserializeNull()); continue; case StepToken.EndEntity: return(edo); case StepToken.EndLine: case StepToken.EndSection: case StepToken.EndSTEP: case StepToken.StartSTEP: case StepToken.StartSection: throw new StepSerializerException(String.Format(CultureInfo.InvariantCulture, "A token was found which was not expected: {0}", reader.TokenType)); default: throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture, "The {0} ExpressToken type is not yet implemented by deserializeEntity()", reader.TokenType)); } //TODO should do some verification here (properties are after entityStart and before EntityEnd etc.) } throw new StepSerializerException("The reader reached the end without finding an endEntity token"); }
/// <summary> /// Deserializes STEP format data by reading stream provided by a StreamReader. An iso_10303 object is returned. /// </summary> /// <param name="reader"></param> /// <returns></returns> public iso_10303 Deserialize(IStepReader reader) { if( reader == null ) throw new ArgumentNullException( "reader" ); this._internalDeserializer = new StepDeserializer(); this._binder = new StepBinder(); StepFile stepFile = this._internalDeserializer.Deserialize(reader); iso_10303 iso10303 = this._binder.Bind( stepFile ); return iso10303; }
private iso_10303 Deserialize(IStepReader reader) { return(serializer.Deserialize(reader)); }
private StepValue deserializeNestedEntity(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); return StepValue.CreateNestedEntity(deserializeEntity(reader)); }
private StepValue deserializeProperty(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); return new StepValue(reader.TokenType, reader.Value); }
/// <summary> /// /// </summary> /// <returns></returns> private StepValue deserializeArray(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); IList<StepValue> values = new List<StepValue>(); while(reader.Read()){ logger.Debug(String.Format(CultureInfo.InvariantCulture, "deserializeArray read : {0} of value {1}", reader.TokenType, reader.Value)); switch(reader.TokenType){ case StepToken.EndArray: return StepValue.CreateArray(values); case StepToken.LineReference: values.Add(deserializeLineReference(reader)); continue; case StepToken.Enumeration: case StepToken.Boolean: case StepToken.Integer: case StepToken.Float: case StepToken.String: values.Add(deserializeProperty(reader)); continue; case StepToken.Null: values.Add(deserializeNull()); continue; case StepToken.EntityName: case StepToken.StartEntity: values.Add(deserializeNestedEntity(reader)); continue; case StepToken.Operator: case StepToken.Overridden: case StepToken.EndEntity: case StepToken.EndLine: case StepToken.EndSection: case StepToken.EndSTEP: case StepToken.StartSTEP: case StepToken.StartSection: throw new StepSerializerException( String.Format(CultureInfo.InvariantCulture, "deserializeArray found a token which was not expected: {0}", reader.TokenType)); default: throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture, "This ExpressToken type is not yet implemented by deserializeArray(), {0}", reader.TokenType)); } } throw new StepSerializerException( "deserializeArray() reached the end of the reader without finding an endArray token" ); }
private StepValue deserializeLineReference(IStepReader reader){ if(reader == null) throw new ArgumentNullException("reader"); return new StepValue(reader.TokenType, CastLineIdToInt((string)reader.Value)); }
private iso_10303 Deserialize(IStepReader reader){ return serializer.Deserialize( reader ); }
private void createSUT(string sample) { StringReader reader = new StringReader(ExampleData.simpleStepWithCommentString()); SUT = new StepReader(reader); }