gridCRS.setGridBaseCRS("urn:x-ogc:def:crs:EPSG:" + code);
}
// check grid type makes sense and apply default otherwise
String gridTypeValue = gridCRS.getGridType();
GridType type = GridType.GT2dGridIn2dCrs;
if (gridTypeValue != null) {
type = null;
for (GridType gt : GridType.values()) {
if (gt.getXmlConstant().equalsIgnoreCase(gridTypeValue))
type = gt;
}
if (type == null)
throw new WcsException("Unknown grid type " + gridTypeValue,
InvalidParameterValue, "GridType");
else if (type == GridType.GT2dGridIn3dCrs)
throw new WcsException("Unsupported grid type " + gridTypeValue,
InvalidParameterValue, "GridType");
}
gridCRS.setGridType(type.getXmlConstant());
// check gridcs and apply only value we know about
String gridCS = gridCRS.getGridCS();
if (gridCS != null) {
if (!gridCS.equalsIgnoreCase(GridCS.GCSGrid2dSquare.getXmlConstant()))
throw new WcsException("Unsupported grid cs " + gridCS, InvalidParameterValue,
"GridCS");
}
gridCRS.setGridCS(GridCS.GCSGrid2dSquare.getXmlConstant());
// check the grid origin and set defaults
CoordinateReferenceSystem crs = null;
try {
crs = CRS.decode(gridCRS.getGridBaseCRS());
} catch (Exception e) {
throw new WcsException("Could not understand crs " + gridCRS.getGridBaseCRS(),
WcsExceptionCode.InvalidParameterValue, "GridBaseCRS");
}
if (!gridCRS.isSetGridOrigin() || gridCRS.getGridOrigin() == null) {
// if not set, we have a default of "0 0" as a string, since I
// cannot
// find a way to make it default to new Double[] {0 0} I'll fix
// it here
Double[] origin = new Double[type.getOriginArrayLength()];
Arrays.fill(origin, 0.0);
gridCRS.setGridOrigin(origin);
} else {
Double[] gridOrigin = (Double[]) gridCRS.getGridOrigin();
// make sure the origin dimension matches the output crs
// dimension
if (gridOrigin.length != type.getOriginArrayLength())
throw new WcsException("Grid origin size (" + gridOrigin.length
+ ") inconsistent with grid type " + type.getXmlConstant()
+ " that requires (" + type.getOriginArrayLength() + ")",
WcsExceptionCode.InvalidParameterValue, "GridOrigin");
gridCRS.setGridOrigin(gridOrigin);
}
// perform same checks on the offsets
Double[] gridOffsets = (Double[]) gridCRS.getGridOffsets();
if (gridOffsets != null) {
// make sure the origin dimension matches the grid type
if (type.getOffsetArrayLength() != gridOffsets.length)
throw new WcsException("Invalid offsets lenght, grid type "
+ type.getXmlConstant() + " requires " + type.getOffsetArrayLength(),
InvalidParameterValue, "GridOffsets");
} else {
gridCRS.setGridOffsets(null);
}
}