package com.nutiteq.io; import java.io.IOException; import java.io.InputStream; import com.nutiteq.log.Log; import com.nutiteq.task.Task; import com.nutiteq.utils.IOUtils; public class RetrieveJarResourceTask implements Task { private final ResourceRequestor resourceRequestor; public RetrieveJarResourceTask(final ResourceRequestor resourceRequestor) { this.resourceRequestor = resourceRequestor; } public void execute() { Log.debug("Read " + resourceRequestor.resourcePath()); InputStream is = null; try { String resourcePath = resourceRequestor.resourcePath(); if (resourcePath.indexOf('?') > 0) { //some servis appending parameters (kml reader) resourcePath = resourcePath.substring(0, resourcePath.indexOf('?')); } is = getClass().getResourceAsStream(resourcePath); //TODO jaanus : check this if (is == null) { resourceRequestor.notifyError(); } else if (resourceRequestor instanceof ResourceDataWaiter) { final byte[] data = IOUtils.readFully(is); ((ResourceDataWaiter) resourceRequestor).dataRetrieved(data); } else if (resourceRequestor instanceof ResourceStreamWaiter) { //TODO jaanus : check this ((ResourceStreamWaiter) resourceRequestor).streamOpened(is, null, null); } } catch (final IOException e) { Log.error("Retrieve jar resource '" + resourceRequestor.resourcePath() + "': " + e.getMessage()); resourceRequestor.notifyError(); } finally { IOUtils.closeStream(is); } } }