X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.maps%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Feclipse%2FTileJobQueue.java;fp=org.simantics.district.maps%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Feclipse%2FTileJobQueue.java;h=3676b8d9a99ec9c0de51f497c94e44977a8dd0be;hb=e9f74f09e0cedb603c0b4de9e542de8dd64a5ce3;hp=0000000000000000000000000000000000000000;hpb=16ee01dc5a40981c58fd5b478b89552e5814e8bb;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.maps/src/org/simantics/maps/eclipse/TileJobQueue.java b/org.simantics.district.maps/src/org/simantics/maps/eclipse/TileJobQueue.java new file mode 100644 index 00000000..3676b8d9 --- /dev/null +++ b/org.simantics.district.maps/src/org/simantics/maps/eclipse/TileJobQueue.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * 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()); + } + } + } + } + +}