Integer sequenceId = 1;
while(i < geomCount)
{
LineString lineSegment = (LineString)this.originalShape.getGeometryN(i);
GisRouteControlPoint fromPoint = findControlPoint(geometryFactory.createPoint(lineSegment.getCoordinateN(0)), sequenceId);
sequenceId = fromPoint.originalSequence + 1;
GisRouteControlPoint toPoint = findControlPoint(geometryFactory.createPoint((lineSegment.getCoordinateN(lineSegment.getNumPoints() - 1))), sequenceId);
sequenceId = toPoint.originalSequence + 1;
if(GisRouteSegment.count("fromPoint = ? AND toPoint = ?", fromPoint, toPoint) == 0)
{
GisRouteSegment originalSegment = new GisRouteSegment();
originalSegment.reverse = false;
originalSegment.fromPoint = fromPoint;
originalSegment.toPoint = toPoint;
originalSegment.segment = lineSegment;
originalSegment.segment.setSRID(4326);
originalSegment.save();
// can't handle bi-directionality on loop segments (yet)
if(fromPoint != toPoint)
{
GisRouteSegment reverseSegment = new GisRouteSegment();
reverseSegment.reverse = true;
reverseSegment.fromPoint = toPoint;
reverseSegment.toPoint = fromPoint;
reverseSegment.segment = (LineString)lineSegment.reverse();
reverseSegment.segment.setSRID(4326);
reverseSegment.save();
}
}