/**
* The MIT License
* -------------------------------------------------------------
* Copyright (c) 2008, Rob Ellis, Brock Whitten, Brian Leroux, Joe Bowser, Dave Johnson, Nitobi
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.phonegap.io;
import java.io.IOException;
import java.util.Vector;
import javax.microedition.io.InputConnection;
import net.rim.device.api.browser.field.BrowserContent;
import net.rim.device.api.browser.field.RequestedResource;
import net.rim.device.api.ui.UiApplication;
/**
* Download manager for concurrent connections.
*
* @author Jose Noheda
*
*/
public final class QueueResourceFetcher implements Runnable {
private UiApplication main;
private BrowserContent browser;
private Vector queue = new Vector();
private ConnectionManager connectionManager;
public QueueResourceFetcher(UiApplication application, ConnectionManager connectionManager) {
this.main = application;
this.connectionManager = connectionManager;
}
/**
* Adds a new element to download.
*/
public void enqueue(RequestedResource resource, BrowserContent referrer) {
if (browser != referrer) {
queue.removeAllElements();
browser = referrer;
}
queue.addElement(resource);
}
/**
* Downloads all queued resources.
*/
public void run() {
if (!queue.isEmpty()) processResource();
main.invokeLater(this, queue.isEmpty() ? 250 : 1, false);
}
private void processResource() {
RequestedResource resource = null;
synchronized (queue) {
if (!queue.isEmpty()) {
resource = (RequestedResource) queue.elementAt(0);
queue.removeElementAt(0);
}
}
if (resource != null) {
InputConnection connection = connectionManager.getPreLoadedConnection(resource.getUrl());
if (connection != null) {
resource.setInputConnection(connection);
browser.resourceReady(resource);
}
try {
connection.close();
} catch (IOException e) {}
connection = null;
}
resource = null;
}
}