Skip to content

Commit a1906bd

Browse files
committed
Merge pull request #42 from mrflip/operators_have_interfaces
Families of operators have common interfaces
2 parents da180fd + 6ab844c commit a1906bd

File tree

11 files changed

+82
-16
lines changed

11 files changed

+82
-16
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@ libs/
3232
Icon?
3333
ehthumbs.db
3434
Thumbs.db
35+
target/*
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
Copyright 1995-2013 Esri
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
16+
For additional information, contact:
17+
Environmental Systems Research Institute, Inc.
18+
Attn: Contracts Dept
19+
380 New York Street
20+
Redlands, California, USA 92373
21+
22+
23+
*/
24+
package com.esri.core.geometry;
25+
26+
import com.esri.core.geometry.Geometry;
27+
import com.esri.core.geometry.SpatialReference;
28+
import com.esri.core.geometry.ProgressTracker;
29+
30+
/**
31+
* Interface for operators that act on two geometries to produce a new geometry as result.
32+
*/
33+
public interface CombineOperator {
34+
35+
/**
36+
* Operation on two geometries, returning a third. Examples include
37+
* Intersection, Difference, and so forth.
38+
*
39+
* @param geom1 and geom2 are the geometry instances to be operated on.
40+
*
41+
*/
42+
public Geometry execute(Geometry geom1, Geometry geom2,
43+
SpatialReference sr, ProgressTracker progressTracker);
44+
45+
}

src/main/java/com/esri/core/geometry/Geometry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
package com.esri.core.geometry;
2727

2828
import com.esri.core.geometry.VertexDescription.Semantics;
29+
import com.esri.core.geometry.GeometryEngine;
30+
import com.esri.core.geometry.WktExportFlags;
2931
import java.io.ObjectStreamException;
3032
import java.io.Serializable;
3133

@@ -507,6 +509,12 @@ static Geometry _clone(Geometry src) {
507509
return geom;
508510
}
509511

512+
public String toString() {
513+
String snippet = GeometryEngine.geometryToWkt(this, WktExportFlags.wktExportDefaults);
514+
if (snippet.length() > 200) { snippet = snippet.substring(0, 197)+"..."; }
515+
return String.format("%s: %s", this.getClass().getSimpleName(), snippet);
516+
}
517+
510518
/**
511519
* The stateFlag value changes with changes applied to this geometry. This
512520
* allows the user to keep track of the geometry's state.

src/main/java/com/esri/core/geometry/NumberUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424

2525
package com.esri.core.geometry;
2626

27-
class NumberUtils {
27+
public class NumberUtils {
2828

29-
static int snap(int v, int minv, int maxv) {
29+
public static int snap(int v, int minv, int maxv) {
3030
return v < minv ? minv : v > maxv ? maxv : v;
3131
}
3232

33-
static long snap(long v, long minv, long maxv) {
33+
public static long snap(long v, long minv, long maxv) {
3434
return v < minv ? minv : v > maxv ? maxv : v;
3535
}
3636

src/main/java/com/esri/core/geometry/OperatorDifference.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525
package com.esri.core.geometry;
2626

2727
import com.esri.core.geometry.Operator.Type;
28+
import com.esri.core.geometry.CombineOperator;
2829

2930
/**
3031
* Difference of geometries.
3132
*/
32-
public abstract class OperatorDifference extends Operator {
33+
public abstract class OperatorDifference extends Operator implements CombineOperator {
3334

3435
@Override
3536
public Type getType() {

src/main/java/com/esri/core/geometry/OperatorExportToWktLocal.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ static void exportToWkt(int export_flags, Geometry geometry,
4242
|| (export_flags & WktExportFlags.wktExportMultiLineString) != 0
4343
|| (export_flags & WktExportFlags.wktExportPoint) != 0
4444
|| (export_flags & WktExportFlags.wktExportMultiPoint) != 0)
45-
throw new IllegalArgumentException();
45+
throw new IllegalArgumentException("Cannot export a Polygon as Line/Point : "+export_flags);
4646

4747
exportPolygonToWkt(export_flags, (Polygon) geometry, string);
4848
return;
@@ -52,7 +52,7 @@ static void exportToWkt(int export_flags, Geometry geometry,
5252
|| (export_flags & WktExportFlags.wktExportMultiPolygon) != 0
5353
|| (export_flags & WktExportFlags.wktExportPoint) != 0
5454
|| (export_flags & WktExportFlags.wktExportMultiPoint) != 0)
55-
throw new IllegalArgumentException();
55+
throw new IllegalArgumentException("Cannot export a Polyline as (Multi)Polygon/(Multi)Point : "+export_flags);
5656

5757
exportPolylineToWkt(export_flags, (Polyline) geometry, string);
5858
return;
@@ -62,7 +62,7 @@ static void exportToWkt(int export_flags, Geometry geometry,
6262
|| (export_flags & WktExportFlags.wktExportMultiLineString) != 0
6363
|| (export_flags & WktExportFlags.wktExportPolygon) != 0
6464
|| (export_flags & WktExportFlags.wktExportMultiPolygon) != 0)
65-
throw new IllegalArgumentException();
65+
throw new IllegalArgumentException("Cannot export a MultiPoint as (Multi)LineString/(Multi)Polygon: "+export_flags);
6666

6767
exportMultiPointToWkt(export_flags, (MultiPoint) geometry, string);
6868
return;
@@ -72,7 +72,7 @@ static void exportToWkt(int export_flags, Geometry geometry,
7272
|| (export_flags & WktExportFlags.wktExportMultiLineString) != 0
7373
|| (export_flags & WktExportFlags.wktExportPolygon) != 0
7474
|| (export_flags & WktExportFlags.wktExportMultiPolygon) != 0)
75-
throw new IllegalArgumentException();
75+
throw new IllegalArgumentException("Cannot export a Point as (Multi)LineString/(Multi)Polygon: "+export_flags);
7676

7777
exportPointToWkt(export_flags, (Point) geometry, string);
7878
return;
@@ -82,7 +82,7 @@ static void exportToWkt(int export_flags, Geometry geometry,
8282
|| (export_flags & WktExportFlags.wktExportMultiLineString) != 0
8383
|| (export_flags & WktExportFlags.wktExportPoint) != 0
8484
|| (export_flags & WktExportFlags.wktExportMultiPoint) != 0)
85-
throw new IllegalArgumentException();
85+
throw new IllegalArgumentException("Cannot export an Envelop as (Multi)LineString/(Multi)Point: "+export_flags);
8686

8787
exportEnvelopeToWkt(export_flags, (Envelope) geometry, string);
8888
return;
@@ -149,7 +149,7 @@ static void exportPolygonToWkt(int export_flags, Polygon polygon,
149149

150150
if ((export_flags & WktExportFlags.wktExportPolygon) != 0) {
151151
if (polygon_count > 1)
152-
throw new IllegalArgumentException();
152+
throw new IllegalArgumentException("Cannot export a Polygon with specified export flags: "+export_flags);
153153

154154
polygonTaggedText_(precision, b_export_zs, b_export_ms, zs, ms,
155155
position, path_flags, paths, path_count, string);
@@ -207,7 +207,7 @@ static void exportPolylineToWkt(int export_flags, Polyline polyline,
207207

208208
if ((export_flags & WktExportFlags.wktExportLineString) != 0) {
209209
if (path_count > 1)
210-
throw new IllegalArgumentException();
210+
throw new IllegalArgumentException("Cannot export a LineString with specified export flags: "+export_flags);
211211

212212
lineStringTaggedText_(precision, b_export_zs, b_export_ms, zs, ms,
213213
position, path_flags, paths, string);
@@ -256,7 +256,7 @@ static void exportMultiPointToWkt(int export_flags, MultiPoint multipoint,
256256

257257
if ((export_flags & WktExportFlags.wktExportPoint) != 0) {
258258
if (point_count > 1)
259-
throw new IllegalArgumentException();
259+
throw new IllegalArgumentException("Cannot export a Point with specified export flags: "+export_flags);
260260

261261
pointTaggedTextFromMultiPoint_(precision, b_export_zs, b_export_ms,
262262
zs, ms, position, string);

src/main/java/com/esri/core/geometry/OperatorIntersection.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525
package com.esri.core.geometry;
2626

2727
import com.esri.core.geometry.Operator.Type;
28+
import com.esri.core.geometry.CombineOperator;
2829

2930
/**
3031
*Intersection of geometries by a given geometry.
3132
*/
32-
public abstract class OperatorIntersection extends Operator {
33+
public abstract class OperatorIntersection extends Operator implements CombineOperator {
3334
@Override
3435
public Type getType() {
3536
return Type.Intersection;

src/main/java/com/esri/core/geometry/OperatorSymmetricDifference.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
package com.esri.core.geometry;
2525

2626
import com.esri.core.geometry.Operator.Type;
27+
import com.esri.core.geometry.CombineOperator;
2728

2829
/**
2930
* Symmetric difference (XOR) operation between geometries.
3031
*
3132
*/
32-
public abstract class OperatorSymmetricDifference extends Operator {
33+
public abstract class OperatorSymmetricDifference extends Operator implements CombineOperator {
3334
@Override
3435
public Type getType() {
3536
return Type.Difference;

src/main/java/com/esri/core/geometry/OperatorUnion.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@
2525
package com.esri.core.geometry;
2626

2727
import com.esri.core.geometry.Operator.Type;
28+
import com.esri.core.geometry.CombineOperator;
2829

2930
/**
3031
*
3132
* Union of geometries.
3233
*
3334
*/
34-
public abstract class OperatorUnion extends Operator {
35+
public abstract class OperatorUnion extends Operator implements CombineOperator {
3536
@Override
3637
public Type getType() {
3738
return Type.Union;

src/main/java/com/esri/core/geometry/WktParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,9 @@ private void geometry_() {
264264
m_current_token_type = WktToken.geometrycollection;
265265
m_function_stack.add(State.geometryCollectionStart);
266266
} else {
267-
throw new IllegalArgumentException();
267+
String snippet = (m_wkt_string.length() > 200 ?
268+
m_wkt_string.substring(0,200)+"..." : m_wkt_string);
269+
throw new IllegalArgumentException("Could not parse Well-Known Text: "+snippet);
268270
}
269271

270272
m_function_stack.add(State.attributes);

0 commit comments

Comments
 (0)