Skip to content

Commit

Permalink
refactor out duplicate code
Browse files Browse the repository at this point in the history
  • Loading branch information
peterbae committed Jul 23, 2018
1 parent 272a729 commit 54c5297
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 228 deletions.
116 changes: 4 additions & 112 deletions src/main/java/com/microsoft/sqlserver/jdbc/Geography.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ private Geography(String WellKnownText, int srid) throws SQLServerException {
throw new SQLServerException(strError, null, 0, null);
}

serializeToWkb(false);
serializeToWkb(false, this);
isNull = false;
}

Expand All @@ -56,7 +56,7 @@ private Geography(byte[] wkb) throws SQLServerException {
buffer.order(ByteOrder.LITTLE_ENDIAN);

try {
parseWkb();
parseWkb(this);
} catch (BufferUnderflowException e) {
MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_ParsingError"));
Object[] msgArgs = {JDBCType.VARBINARY};
Expand Down Expand Up @@ -161,7 +161,7 @@ public String STAsText() throws SQLServerException {
buffer = ByteBuffer.wrap(wkb);
buffer.order(ByteOrder.LITTLE_ENDIAN);

parseWkb();
parseWkb(this);

WKTsb = new StringBuffer();
WKTsbNoZM = new StringBuffer();
Expand All @@ -179,7 +179,7 @@ public String STAsText() throws SQLServerException {
*/
public byte[] STAsBinary() {
if (null == wkbNoZM) {
serializeToWkb(true);
serializeToWkb(true, this);
}
return wkbNoZM;
}
Expand Down Expand Up @@ -316,112 +316,4 @@ public String asTextZM() {
public String toString() {
return wkt;
}

protected void serializeToWkb(boolean noZM) {
ByteBuffer buf = ByteBuffer.allocate(determineWkbCapacity());
createSerializationProperties();

buf.order(ByteOrder.LITTLE_ENDIAN);
buf.putInt(srid);
buf.put(version);
buf.put(serializationProperties);

if (!isSinglePoint && !isSingleLineSegment) {
buf.putInt(numberOfPoints);
}

for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(yValues[i]);
buf.putDouble(xValues[i]);
}

if (!noZM) {
if (hasZvalues) {
for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(zValues[i]);
}
}
if (hasMvalues) {
for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(mValues[i]);
}
}
}

if (isSinglePoint || isSingleLineSegment) {
wkb = buf.array();
return;
}

buf.putInt(numberOfFigures);
for (int i = 0; i < numberOfFigures; i++) {
buf.put(figures[i].getFiguresAttribute());
buf.putInt(figures[i].getPointOffset());
}

buf.putInt(numberOfShapes);
for (int i = 0; i < numberOfShapes; i++) {
buf.putInt(shapes[i].getParentOffset());
buf.putInt(shapes[i].getFigureOffset());
buf.put(shapes[i].getOpenGISType());
}

if (version == 2 && null != segments) {
buf.putInt(numberOfSegments);
for (int i = 0; i < numberOfSegments; i++) {
buf.put(segments[i].getSegmentType());
}
}

if (noZM) {
wkbNoZM = buf.array();
} else {
wkb = buf.array();

}
return;
}

protected void parseWkb() throws SQLServerException {
srid = buffer.getInt();
version = buffer.get();
serializationProperties = buffer.get();

interpretSerializationPropBytes();
readNumberOfPoints();
readPoints();

if (hasZvalues) {
readZvalues();
}

if (hasMvalues) {
readMvalues();
}

if (!(isSinglePoint || isSingleLineSegment)) {
readNumberOfFigures();
readFigures();
readNumberOfShapes();
readShapes();
}

determineInternalType();

if (buffer.hasRemaining()) {
if (version == 2 && internalType.getTypeCode() != 8 && internalType.getTypeCode() != 11) {
readNumberOfSegments();
readSegments();
}
}
}

private void readPoints() {
xValues = new double[numberOfPoints];
yValues = new double[numberOfPoints];
for (int i = 0; i < numberOfPoints; i++) {
yValues[i] = buffer.getDouble();
xValues[i] = buffer.getDouble();
}
}
}
117 changes: 4 additions & 113 deletions src/main/java/com/microsoft/sqlserver/jdbc/Geometry.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ private Geometry(String WellKnownText, int srid) throws SQLServerException {
throw new SQLServerException(strError, null, 0, null);
}

serializeToWkb(false);
serializeToWkb(false, this);
isNull = false;
}

Expand All @@ -56,7 +56,7 @@ private Geometry(byte[] wkb) throws SQLServerException {
buffer.order(ByteOrder.LITTLE_ENDIAN);

try {
parseWkb();
parseWkb(this);
} catch (BufferUnderflowException e) {
MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_ParsingError"));
Object[] msgArgs = {JDBCType.VARBINARY};
Expand Down Expand Up @@ -161,7 +161,7 @@ public String STAsText() throws SQLServerException {
buffer = ByteBuffer.wrap(wkb);
buffer.order(ByteOrder.LITTLE_ENDIAN);

parseWkb();
parseWkb(this);

WKTsb = new StringBuffer();
WKTsbNoZM = new StringBuffer();
Expand All @@ -179,7 +179,7 @@ public String STAsText() throws SQLServerException {
*/
public byte[] STAsBinary() {
if (null == wkbNoZM) {
serializeToWkb(true);
serializeToWkb(true, this);
}
return wkbNoZM;
}
Expand Down Expand Up @@ -316,113 +316,4 @@ public String asTextZM() {
public String toString() {
return wkt;
}

protected void serializeToWkb(boolean noZM) {
ByteBuffer buf = ByteBuffer.allocate(determineWkbCapacity());
createSerializationProperties();

buf.order(ByteOrder.LITTLE_ENDIAN);
buf.putInt(srid);
buf.put(version);
buf.put(serializationProperties);

if (!isSinglePoint && !isSingleLineSegment) {
buf.putInt(numberOfPoints);
}

for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(xValues[i]);
buf.putDouble(yValues[i]);
}

if (!noZM) {
if (hasZvalues) {
for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(zValues[i]);
}
}

if (hasMvalues) {
for (int i = 0; i < numberOfPoints; i++) {
buf.putDouble(mValues[i]);
}
}
}

if (isSinglePoint || isSingleLineSegment) {
wkb = buf.array();
return;
}

buf.putInt(numberOfFigures);
for (int i = 0; i < numberOfFigures; i++) {
buf.put(figures[i].getFiguresAttribute());
buf.putInt(figures[i].getPointOffset());
}

buf.putInt(numberOfShapes);
for (int i = 0; i < numberOfShapes; i++) {
buf.putInt(shapes[i].getParentOffset());
buf.putInt(shapes[i].getFigureOffset());
buf.put(shapes[i].getOpenGISType());
}

if (version == 2 && null != segments) {
buf.putInt(numberOfSegments);
for (int i = 0; i < numberOfSegments; i++) {
buf.put(segments[i].getSegmentType());
}
}

if (noZM) {
wkbNoZM = buf.array();
} else {
wkb = buf.array();

}
return;
}

protected void parseWkb() throws SQLServerException {
srid = buffer.getInt();
version = buffer.get();
serializationProperties = buffer.get();

interpretSerializationPropBytes();
readNumberOfPoints();
readPoints();

if (hasZvalues) {
readZvalues();
}

if (hasMvalues) {
readMvalues();
}

if (!(isSinglePoint || isSingleLineSegment)) {
readNumberOfFigures();
readFigures();
readNumberOfShapes();
readShapes();
}

determineInternalType();

if (buffer.hasRemaining()) {
if (version == 2 && internalType.getTypeCode() != 8 && internalType.getTypeCode() != 11) {
readNumberOfSegments();
readSegments();
}
}
}

private void readPoints() {
xValues = new double[numberOfPoints];
yValues = new double[numberOfPoints];
for (int i = 0; i < numberOfPoints; i++) {
xValues[i] = buffer.getDouble();
yValues[i] = buffer.getDouble();
}
}
}
Loading

0 comments on commit 54c5297

Please sign in to comment.