| => Test Code public void testIsolatedNodeAdd() throws Exception { gg = new PolygonGraphGenerator(new BasicGraphBuilder(), rel); fgg = new FeatureGraphGenerator( gg ); Polygon p1 = createPolygon("0 0,1 1,2 2,0 0"); Polygon p2 = createPolygon("3 3,4 4,5 5,3 3"); Polygon p3 = createPolygon("6 6,7 7,8 8,6 6"); Polygon[] ps = { p1, p2, p3 } ; SimpleFeature[] features = features( ps ); Node n1 = (Node) fgg.add(features[0]); Node n2 = (Node) fgg.add(features[1]); Node n3 = (Node) fgg.add(features[2]); assertNotNull(n1); assertEquals(n1.getObject(),features[0]); assertNotNull(n2); assertEquals(n2.getObject(),features[1]); assertNotNull(n3); assertEquals(n3.getObject(),features[2]); Graph g = fgg.getGraph(); assertNotNull(g); } FeatureGraphGenerator decorates PolygonGraphGenerator. In case of adding node, FeatureGraphGenerator makes Graphable object with Polygon geometry by decorate generator. After making Graphable object, FeatureGraphGenerator changes it's object to feature(SimpleFeature). => Method in FeatureGraphGenerator public Graphable add( Object obj ) { SimpleFeature feature = (SimpleFeature) obj; Graphable g = decorated.add( feature.getDefaultGeometry() ); Geometry geom = (Geometry) g.getObject(); //Preserve geometry from Graphable, as it may be changed. feature.setDefaultGeometry(geom); *g.setObject( feature );* return g; } When finding Node in PolygonGraphGenerator, it assume that found node has Polygon object. but actually, Node has SimpleFeatureImpl, so it throws ClassCastExcpetion. => Method in PolygonGraphGenerator protected Node find(Polygon polygon) { List close = index.query(polygon.getEnvelopeInternal()); for (Iterator itr = close.iterator(); itr.hasNext() { Node node = (Node)itr.next(); Polygon p = (Polygon)node.getObject(); if (rel.equal(polygon,p)) { return node; } } return null; } |