package org.geotools.data.dxf.header;
import java.io.EOFException;
import java.io.IOException;
import java.util.Vector;
import org.geotools.data.dxf.entities.DXFArc;
import org.geotools.data.dxf.entities.DXFCircle;
import org.geotools.data.dxf.entities.DXFDimension;
import org.geotools.data.dxf.entities.DXFEllipse;
import org.geotools.data.dxf.entities.DXFEntity;
import org.geotools.data.dxf.entities.DXFInsert;
import org.geotools.data.dxf.entities.DXFLine;
import org.geotools.data.dxf.entities.DXFLwPolyline;
import org.geotools.data.dxf.entities.DXFPoint;
import org.geotools.data.dxf.entities.DXFPolyline;
import org.geotools.data.dxf.entities.DXFSolid;
import org.geotools.data.dxf.entities.DXFSpLine;
import org.geotools.data.dxf.entities.DXFText;
import org.geotools.data.dxf.entities.DXFTrace;
import org.geotools.data.dxf.parser.DXFParseException;
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.DXFLineNumberReader;
import org.geotools.data.dxf.parser.DXFUnivers;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DXFEntities implements DXFConstants {
private static final Log log = LogFactory.getLog(DXFEntities.class);
public Vector<DXFEntity> theEntities = new Vector<DXFEntity>();
public DXFEntities() {
}
public DXFEntities(Vector<DXFEntity> sEntities) {
if (sEntities == null) {
sEntities = new Vector<DXFEntity>();
}
this.theEntities = sEntities;
}
public static DXFEntities readEntities(DXFLineNumberReader br, DXFUnivers univers) throws IOException {
Vector<DXFEntity> sEnt = new Vector<DXFEntity>();
DXFCodeValuePair cvp = null;
DXFGroupCode gc = null;
int sln = br.getLineNumber();
log.debug(">Enter at line: " + sln);
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:
DXFEntity dxfe = null;
String type = cvp.getStringValue();
if (type.equals(ENDSEC) || type.equals(ENDBLK)) {
doLoop = false;
break;
} else if (type.equals(LINE)) {
dxfe = DXFLine.read(br, univers);
} else if (type.equals(ARC)) {
dxfe = DXFArc.read(br, univers);
} else if (type.equals(CIRCLE)) {
dxfe = DXFCircle.read(br, univers);
} else if (type.equals(POLYLINE)) {
dxfe = DXFPolyline.read(br, univers);
} else if (type.equals(LWPOLYLINE)) {
dxfe = DXFLwPolyline.read(br, univers);
} else if (type.equals(POINT)) {
dxfe = DXFPoint.read(br, univers);
} else if (type.equals(SOLID)) {
dxfe = DXFSolid.read(br, univers);
} else if (type.equals(TEXT)) {
dxfe = DXFText.read(br, univers);
} else if (type.equals(MTEXT)) {
dxfe = DXFText.read(br, univers);
} else if (type.equals(INSERT)) {
dxfe = DXFInsert.read(br, univers);
} else if (type.equals(DIMENSION)) {
dxfe = DXFDimension.read(br, univers);
} else if (type.equals(TRACE)) {
dxfe = DXFTrace.read(br, univers);
} else if (type.equals(ELLIPSE)) {
dxfe = DXFEllipse.read(br, univers);
} else if (type.equals(SPLINE)) {
dxfe = DXFSpLine.read(br, univers);
}
if (dxfe != null) {
sEnt.add(dxfe);
}
break;
default:
break;
}
}
DXFEntities e = new DXFEntities(sEnt);
log.debug(e.toString(sEnt.size()));
log.debug(">Exit at line: " + br.getLineNumber());
return e;
}
public String toString(int numEntities) {
StringBuffer s = new StringBuffer();
s.append("DXFEntities [");
s.append("numEntities: ");
s.append(numEntities);
s.append("]");
return s.toString();
}
}