package step.core; import java.util.*; import java.io.*; public abstract class StepAbstractRepository { protected int maxId = -1; protected ArrayList header = new ArrayList(); protected Map instanceByOidIndex = new HashMap(); protected Map oidByInstanceIndex = new HashMap(); public ArrayList getHeaderInstances() { return header; } public Collection getDataInstances() { return instanceByOidIndex.values(); } public void instances(Collection instances) { instances.addAll(getDataInstances()); } public void addAllHeaderInstances(ArrayList hinstances) { header.addAll(hinstances); } public void addAllDataInstances(ArrayList dinstances) { for (int i = 0; i < dinstances.size(); i++) { record(dinstances.get(i)); } } public void addAll(ArrayList dinstances) { addAllDataInstances(dinstances); } public StepObject instanceAt(int id) { return instanceByOidIndex.get(new Integer(id)); } public int oidOf(StepObject inst) { Integer found = oidByInstanceIndex.get(inst); if (found == null) return -1; return found.intValue(); } public void record(StepObject inst) { record(inst, maxId+1); } public void record(StepObject inst, int oid) { record(inst, new Integer(oid)); } public void record(StepObject inst, Integer oid) { instanceByOidIndex.put(oid, inst); oidByInstanceIndex.put(inst, oid); testAndMaybeSetMaxId(oid.intValue()); } public void clear() { header.clear(); instanceByOidIndex.clear(); oidByInstanceIndex.clear(); setMaxId(-1); } public int getMaxId() { return maxId; } protected void setMaxId(int maxId) { this.maxId = maxId; } protected void testAndMaybeSetMaxId(int maxId) { if (maxId > this.maxId) this.maxId = maxId; } public void writeFileNamed(String filename) throws Exception { write(new FileWriter(filename)); } public abstract void write(Writer writer) throws Exception; public void write(PrintStream stream) throws Exception { write(new OutputStreamWriter(stream)); } public abstract void parseFileNamed(String filename) throws Exception; public abstract void parseString(String contents) throws Exception; public abstract void parseStream(java.io.InputStream stream) throws Exception; public void parseDataFromString(String contents) throws Exception { String head = "ISO-10303-21;HEADER;FILE_NAME('', '3 October 2006 1:21:02 am', (''), (''), '', '', '');FILE_DESCRIPTION(('',''),'');FILE_SCHEMA($);ENDSEC;DATA;"; String tail = "ENDSEC;END-ISO-10303-21;"; parseString(head + contents + tail); } public void readData(String contents) throws Exception { parseDataFromString(contents); } public void readFileNamed(String filename) throws Exception { parseFileNamed(filename); } }