*/
public byte[] getCompressedTile(Long id, int x, int y)
throws RemoteException {
TileCodecParameterList tcpl = null;
TileEncoderFactory tef = null;
NegotiableCapability codecCap = null;
if (negotiated != null) {
codecCap = ((NegotiableCapabilitySet)negotiated.get(id)).
getNegotiatedValue("tileCodec");
}
if (codecCap != null) {
String category = codecCap.getCategory();
String capabilityName = codecCap.getCapabilityName();
List generators = codecCap.getGenerators();
Class factory;
for (Iterator i=generators.iterator(); i.hasNext(); ) {
factory = (Class)i.next();
if (tef == null &&
TileEncoderFactory.class.isAssignableFrom(factory)) {
try {
tef = (TileEncoderFactory)factory.newInstance();
} catch (InstantiationException ie) {
throw new RuntimeException(ie.getMessage());
} catch (IllegalAccessException iae) {
throw new RuntimeException(iae.getMessage());
}
}
}
if (tef == null) {
throw new RuntimeException(
JaiI18N.getString("JAIRMIImageServer0"));
}
TileCodecDescriptor tcd =
(TileCodecDescriptor)JAI.getDefaultInstance().
getOperationRegistry().getDescriptor("tileEncoder",
capabilityName);
if (tcd.includesSampleModelInfo() == false ||
tcd.includesLocationInfo() == false) {
throw new RuntimeException(
JaiI18N.getString("JAIRMIImageServer1"));
}
ParameterListDescriptor pld =
tcd.getParameterListDescriptor("tileEncoder");
tcpl = new TileCodecParameterList(capabilityName,
new String[] {"tileEncoder"},
pld);
if (pld != null) {
String paramNames[] = pld.getParamNames();
String currParam;
Object currValue;
if (paramNames != null) {
for (int i=0; i<paramNames.length; i++) {
currParam = paramNames[i];
try {
currValue = codecCap.getNegotiatedValue(currParam);
} catch (IllegalArgumentException iae) {
continue;
}
tcpl.setParameter(currParam, currValue);
}
}
}
Raster r = getSource(id).getTile(x, y);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
TileEncoder encoder = tef.createEncoder(stream, tcpl,
r.getSampleModel());
try {
encoder.encode(r);
} catch (java.io.IOException ioe) {