package step.core; import java.io.*; import java.util.*; public class StepGenericWriter extends StepAbstractRepositoryVisitor { private Writer out; public StepGenericWriter(StepAbstractRepository repo, Writer out) { super(repo); this.out = out; } public void write (String s) throws Exception { out.write(s); } public void accept(StepGenericRepository e) throws Exception { write("ISO-10303-21;\n"); write("HEADER;\n"); boolean haveFileName = false; boolean haveFileDescription = false; boolean haveFileSchema = false; for (int i = 0; i < e.getHeaderInstances().size(); i++) { StepInternalRepresentation hi = (StepInternalRepresentation) e.getHeaderInstances().get(i); if (hi.getEntityName().toUpperCase().equals("FILE_NAME")) haveFileName = true; if (hi.getEntityName().toUpperCase().equals("FILE_DESCRIPTION")) haveFileDescription = true; if (hi.getEntityName().toUpperCase().equals("FILE_SCHEMA")) haveFileSchema = true; } if (!haveFileName) { write("FILE_NAME('', '3 October 2006 0:21:02 am', (''), (''), '', '', '');\n"); } if (!haveFileDescription) { write("FILE_DESCRIPTION(('',''),'');\n"); } if (!haveFileSchema) { write("FILE_SCHEMA(());\n"); } for (int i = 0; i < e.getHeaderInstances().size(); i++) { StepInternalRepresentation hi = (StepInternalRepresentation) e.getHeaderInstances().get(i); hi.accept(this); write("\n"); } write("ENDSEC;\n"); write("DATA;\n"); for (int i = 0; i <= e.getMaxId(); i++) { StepObject inst = e.instanceAt(i); if (inst != null) { ((StepGenericInstance)inst).accept(this); write("\n"); } } write("ENDSEC;\n"); write("END-ISO-10303-21;\n"); out.flush(); } public void accept(StepAggregationValue e) throws Exception { write("("); for (int i = 0; i < e.size(); i++) { e.get(i).accept(this); if (i < e.size() - 1) { write(","); } } write(")"); } public void accept(StepStringValue e) throws Exception { write(e.toString()); } public void accept(StepBinaryValue e) throws Exception { write(e.toString()); } public void accept(StepEncodedStringValue e) throws Exception { write(e.toString()); } public void accept(StepEnumerationValue e) throws Exception { write(e.toString()); } public void accept(StepExternalRepresentation e) throws Exception { write("#" + repo.oidOf(e) + "=("); for (int i = 0; i < e.size(); i++) { e.get(i).accept(this); } write(");"); } public void accept(StepHeaderInstance e) throws Exception { write(e.getEntityName().toUpperCase() + "("); for (int i = 0; i < e.size(); i++) { e.get(i).accept(this); if (i < e.size() - 1) { write(","); } } write(");"); } public void accept(StepGenericInstanceReference e) throws Exception { write(e.toString()); } public void accept(StepIntegerValue e) throws Exception { write(e.toString()); } public void accept(StepInternalRepresentation e) throws Exception { write("#" + repo.oidOf(e) + "="); write(e.getEntityName().toUpperCase() + "("); for (int i = 0; i < e.size(); i++) { e.get(i).accept(this); if (i < e.size() - 1) { write(","); } } write(");"); } public void accept(StepLogicalValue e) throws Exception { write(e.toString()); } public void accept(StepNoValue e) throws Exception { write(e.toString()); } public void accept(StepRealValue e) throws Exception { write(e.toString()); } public void accept(StepRedefinedValue e) throws Exception { write(e.toString()); } public void accept(StepSimpleRecord e) throws Exception { write(e.getEntityName().toUpperCase()); accept((StepAggregationValue) e); } public void accept(StepTypedValue e) throws Exception { write(e.getTypeName().toUpperCase() + "("); e.getVal().accept(this); write(")"); } }