Skip to content

Commit 6c7b1bd

Browse files
kad-kleijmmaesenka
authored andcommitted
Fix thread safety issues in a multi threaded environment.
1 parent f800583 commit 6c7b1bd

2 files changed

Lines changed: 66 additions & 27 deletions

File tree

geom/src/main/java/org/geolatte/geom/codec/db/oracle/Decoders.java

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,15 @@
44
import org.geolatte.geom.codec.db.Decoder;
55

66
import java.sql.Struct;
7-
import java.util.ArrayList;
8-
import java.util.List;
97

108
/**
119
* Created by Karel Maesen, Geovise BVBA on 19/03/15.
1210
*/
1311
public class Decoders {
1412

15-
final private static List<AbstractSDODecoder> DECODERS = new ArrayList<AbstractSDODecoder>();
16-
17-
static {
18-
//Decoders
19-
DECODERS.add( new PointSdoDecoder() );
20-
DECODERS.add( new LineStringSdoDecoder() );
21-
DECODERS.add( new PolygonSdoDecoder() );
22-
DECODERS.add( new MultiLineSdoDecoder( ) );
23-
DECODERS.add( new MultiPolygonSdoDecoder( ) );
24-
DECODERS.add( new MultiPointSdoDecoder( ) );
25-
DECODERS.add( new GeometryCollectionSdoDecoder( ) );
26-
}
27-
28-
29-
public static Decoder decoderFor(SDOGeometry object) {
30-
for ( Decoder decoder : DECODERS ) {
31-
if ( decoder.accepts( object ) ) {
32-
return decoder;
33-
}
34-
}
35-
throw new IllegalArgumentException( "No decoder for type " + object.getGType().getTypeGeometry() );
36-
}
13+
public static Decoder decoderFor(SDOGeometry object) {
14+
return object.getGType().getTypeGeometry().createDecoder();
15+
}
3716

3817
/**
3918
* Decodes the SQL Server Geometry object to its JTS Geometry instance

geom/src/main/java/org/geolatte/geom/codec/db/oracle/TypeGeometry.java

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,74 @@
2121

2222
package org.geolatte.geom.codec.db.oracle;
2323

24+
import org.geolatte.geom.codec.db.Decoder;
25+
2426
/**
2527
* @author Karel Maesen, Geovise BVBA
2628
* creation-date: Jul 1, 2010
2729
*/
2830
enum TypeGeometry {
2931

30-
UNKNOWN_GEOMETRY( 0 ), POINT( 1 ), LINE( 2 ), POLYGON( 3 ), COLLECTION( 4 ), MULTIPOINT(
31-
5
32-
), MULTILINE( 6 ), MULTIPOLYGON( 7 ), SOLID( 8 ), MULTISOLID( 9 );
32+
UNKNOWN_GEOMETRY(0) {
33+
@Override
34+
Decoder createDecoder() {
35+
throw new UnsupportedOperationException();
36+
}
37+
},
38+
POINT(1) {
39+
@Override
40+
Decoder createDecoder() {
41+
return new PointSdoDecoder();
42+
}
43+
},
44+
LINE(2) {
45+
@Override
46+
Decoder createDecoder() {
47+
return new LineStringSdoDecoder();
48+
}
49+
},
50+
POLYGON(3) {
51+
@Override
52+
Decoder createDecoder() {
53+
return new PolygonSdoDecoder();
54+
}
55+
},
56+
COLLECTION(4) {
57+
@Override
58+
Decoder createDecoder() {
59+
return new GeometryCollectionSdoDecoder();
60+
}
61+
},
62+
MULTIPOINT(5) {
63+
@Override
64+
Decoder createDecoder() {
65+
return new MultiPointSdoDecoder();
66+
}
67+
},
68+
MULTILINE(6) {
69+
@Override
70+
Decoder createDecoder() {
71+
return new MultiLineSdoDecoder();
72+
}
73+
},
74+
MULTIPOLYGON(7) {
75+
@Override
76+
Decoder createDecoder() {
77+
return new MultiPolygonSdoDecoder();
78+
}
79+
},
80+
SOLID(8) {
81+
@Override
82+
Decoder createDecoder() {
83+
throw new UnsupportedOperationException();
84+
}
85+
},
86+
MULTISOLID(9) {
87+
@Override
88+
Decoder createDecoder() {
89+
throw new UnsupportedOperationException();
90+
}
91+
};
3392

3493
private int gtype;
3594

@@ -53,4 +112,5 @@ static TypeGeometry parse(int v) {
53112
);
54113
}
55114

115+
abstract Decoder createDecoder();
56116
}

0 commit comments

Comments
 (0)