/******************************************************************************* * Copyright (c) 2012 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.maps.eclipse; import java.awt.Image; import java.util.HashSet; import java.util.Hashtable; import java.util.Map; import java.util.Set; import org.simantics.maps.query.IQueryListener; import org.simantics.maps.query.Query; import org.simantics.maps.tile.IFilter; import org.simantics.maps.tile.ITileJobQueue; import org.simantics.maps.tile.ITileListener; import org.simantics.maps.tile.ITileProvider; import org.simantics.maps.tile.TileKey; /** * @author Tuukka Lehtonen * @see TileJob */ public class TileJobQueue implements ITileJobQueue { private ITileProvider provider; private Map queries = new Hashtable(); public TileJobQueue() { } public void setTileProvider(ITileProvider provider) { this.provider = provider; } public void addJob(Query job) { TileJob tj = new TileJob(job, provider); queries.put(job.source, tj); tj.schedule(); } public void addAsFirstJob(Query job) { TileJob tj = new TileJob(job, provider); queries.put(job.source, tj); tj.schedule(); } public void removeJob(Query job) { TileJob t = queries.remove(job.source); if(t != null) { t.cancel(); } } @Override public void addJob(final TileKey key, final ITileListener listener) { addJob(new Query(key, new IQueryListener() { @Override public void queryCanceled(Query job) { listener.tileCanceled(key); } @Override public void queryFailed(Query job, Exception error) { listener.tileFailed(key, error); } @Override public void queryComplete(Query job, Image result) { listener.tileUpdated(key, result); } })); } @Override public void filterQueries(IFilter filter) { Set keys = new HashSet(queries.keySet()); for(TileKey key : keys) { if (!filter.select(key)) { TileJob t = queries.remove(key); if(t != null) { t.cancel(); t.getQuery().listener.queryCanceled(t.getQuery()); } } } } }