package org.geotools.data.dxf.header;
import java.io.EOFException;
import java.io.IOException;
import java.util.Vector;
import org.geotools.data.dxf.parser.DXFParseException;
import org.geotools.data.dxf.parser.DXFCodeValuePair;
import org.geotools.data.dxf.parser.DXFGroupCode;
import org.geotools.data.dxf.parser.DXFLineNumberReader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DXFLineType {
private static final Log log = LogFactory.getLog(DXFLineType.class);
public static final String DEFAULT_NAME = "default";
public String _name = "DXFLineType"; // 2
public String _value = ""; // 3
public float _length = 0; // 40
public float _count = 0; // 73
public Vector<Float> _spacing = new Vector<Float>(); // 49
public DXFLineType() {
}
public DXFLineType(String nom, String value, float length, float count, Vector<Float> spacing) {
_name = nom;
_value = value;
_length = length;
_count = count;
if (spacing != null) {
_spacing = spacing;
}
}
public static DXFLineType read(DXFLineNumberReader br) throws IOException {
String value = "", name = "";
Vector<Float> spacing = new Vector<Float>();
float count = 0, length = 0;
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:
case VARIABLE_NAME:
br.reset();
doLoop = false;
break;
case NAME:
name = cvp.getStringValue();
break;
case TEXT_OR_NAME_2:
value = cvp.getStringValue();
break;
case INT_4:
count = cvp.getShortValue();
break;
case DOUBLE_1:
length = (float) cvp.getDoubleValue();
break;
case REPEATED_DOUBLE_VALUE:
spacing.add((float) cvp.getDoubleValue());
break;
default:
break;
}
}
log.debug(">Exit at line: " + br.getLineNumber());
if (value.equals("") && name.equals("")) {
return null;
} else {
DXFLineType e = new DXFLineType(name, value, length, count, spacing);
log.debug(e.toString(name, value, length, count));
return e;
}
}
public String toString(String name, String value, float length, float count) {
StringBuffer s = new StringBuffer();
s.append("DXFLineType [");
s.append("name: ");
s.append(name + ", ");
s.append("value: ");
s.append(value + ", ");
s.append("length: ");
s.append(length + ", ");
s.append("count: ");
s.append(count);
s.append("]");
return s.toString();
}
}