package org.geotools.data.dxf.header;
import java.io.EOFException;
import java.io.IOException;
import java.util.Vector;
import org.geotools.data.dxf.parser.DXFLineNumberReader;
import org.geotools.data.dxf.parser.DXFCodeValuePair;
import org.geotools.data.dxf.parser.DXFConstants;
import org.geotools.data.dxf.parser.DXFGroupCode;
import org.geotools.data.dxf.parser.DXFParseException;
import org.geotools.data.dxf.parser.DXFUnivers;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DXFBlocks implements DXFConstants {
private static final Log log = LogFactory.getLog(DXFBlocks.class);
public Vector<DXFBlock> theBlocks = new Vector<DXFBlock>();
public DXFBlocks() {
theBlocks = new Vector<DXFBlock>();
}
public DXFBlocks(Vector<DXFBlock> blocks) {
if (blocks == null) {
blocks = new Vector<DXFBlock>();
}
theBlocks = blocks;
}
public static DXFBlocks readBlocks(DXFLineNumberReader br, DXFUnivers univers) throws IOException {
Vector<DXFBlock> sBlocks = new Vector<DXFBlock>();
int sln = br.getLineNumber();
log.debug(">Enter at line: " + sln);
DXFCodeValuePair cvp = null;
DXFGroupCode gc = null;
boolean doLoop = true;
while (doLoop) {
cvp = new DXFCodeValuePair();
try {
gc = cvp.read(br);
} catch (DXFParseException ex) {
throw new IOException("DXF parse error" + ex.getLocalizedMessage());
} catch (EOFException e) {
doLoop = false;
break;
}
switch (gc) {
case TYPE:
String type = cvp.getStringValue();
if (type.equals(ENDSEC)) {
doLoop = false;
break;
} else if (type.equals(BLOCK)) {
DXFBlock block = DXFBlock.read(br, univers);
// Check if block (Insert) is filtered
if (!univers.isFilteredInsert(block._name)) {
sBlocks.add(block);
}
}
break;
default:
break;
}
}
DXFBlocks e = new DXFBlocks(sBlocks);
log.debug(e.toString(sBlocks.size()));
log.debug(">Exit at line: " + br.getLineNumber());
return e;
}
public String toString(int numEntities) {
StringBuffer s = new StringBuffer();
s.append("DXFBlocks [");
s.append("numEntities: ");
s.append(numEntities);
s.append("]");
return s.toString();
}
}