001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io.imagery;
003
004import java.awt.image.BufferedImage;
005
006import org.openstreetmap.josm.data.imagery.GeorefImage.State;
007import org.openstreetmap.josm.gui.layer.WMSLayer.PrecacheTask;
008
009public class WMSRequest implements Comparable<WMSRequest> {
010    private final int xIndex;
011    private final int yIndex;
012    private final double pixelPerDegree;
013    private final boolean real; // Download even if autodownloading is disabled
014    private final PrecacheTask precacheTask; // Download even when wms tile is not currently visible (precache)
015    private final boolean allowPartialCacheMatch;
016    private int priority;
017    private boolean hasExactMatch;
018    // Result
019    private State state;
020    private BufferedImage image;
021
022    public WMSRequest(int xIndex, int yIndex, double pixelPerDegree, boolean real, boolean allowPartialCacheMatch) {
023        this(xIndex, yIndex, pixelPerDegree, real, allowPartialCacheMatch, null);
024    }
025
026    public WMSRequest(int xIndex, int yIndex, double pixelPerDegree, boolean real, boolean allowPartialCacheMatch, PrecacheTask precacheTask) {
027        this.xIndex = xIndex;
028        this.yIndex = yIndex;
029        this.pixelPerDegree = pixelPerDegree;
030        this.real = real;
031        this.precacheTask = precacheTask;
032        this.allowPartialCacheMatch = allowPartialCacheMatch;
033    }
034
035
036    public void finish(State state, BufferedImage image) {
037        this.state = state;
038        this.image = image;
039    }
040
041    public int getXIndex() {
042        return xIndex;
043    }
044
045    public int getYIndex() {
046        return yIndex;
047    }
048
049    public double getPixelPerDegree() {
050        return pixelPerDegree;
051    }
052
053    @Override
054    public int hashCode() {
055        final int prime = 31;
056        int result = 1;
057        long temp;
058        temp = Double.doubleToLongBits(pixelPerDegree);
059        result = prime * result + (int) (temp ^ (temp >>> 32));
060        result = prime * result + xIndex;
061        result = prime * result + yIndex;
062        return result;
063    }
064
065    @Override
066    public boolean equals(Object obj) {
067        if (this == obj)
068            return true;
069        if (obj == null)
070            return false;
071        if (getClass() != obj.getClass())
072            return false;
073        WMSRequest other = (WMSRequest) obj;
074        if (Double.doubleToLongBits(pixelPerDegree) != Double
075                .doubleToLongBits(other.pixelPerDegree))
076            return false;
077        if (xIndex != other.xIndex)
078            return false;
079        if (yIndex != other.yIndex)
080            return false;
081        if (allowPartialCacheMatch != other.allowPartialCacheMatch)
082            return false;
083        return true;
084    }
085
086    public void setPriority(int priority) {
087        this.priority = priority;
088    }
089
090    public int getPriority() {
091        return priority;
092    }
093
094    @Override
095    public int compareTo(WMSRequest o) {
096        return priority - o.priority;
097    }
098
099    public State getState() {
100        return state;
101    }
102
103    public BufferedImage getImage() {
104        return image;
105    }
106
107    @Override
108    public String toString() {
109        return "WMSRequest [xIndex=" + xIndex + ", yIndex=" + yIndex
110                + ", pixelPerDegree=" + pixelPerDegree + "]";
111    }
112
113    public boolean isReal() {
114        return real;
115    }
116
117    public boolean isPrecacheOnly() {
118        return precacheTask != null;
119    }
120
121    public PrecacheTask getPrecacheTask() {
122        return precacheTask;
123    }
124
125    public boolean isAllowPartialCacheMatch() {
126        return allowPartialCacheMatch;
127    }
128
129    public boolean hasExactMatch() {
130        return hasExactMatch;
131    }
132
133    public void setHasExactMatch(boolean hasExactMatch) {
134        this.hasExactMatch = hasExactMatch;
135    }
136}