001/* 002 * Copyright (c) 2014-2015 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: crawl $' 006 * '$Date: 2015-12-09 21:41:37 +0000 (Wed, 09 Dec 2015) $' 007 * '$Revision: 34322 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029package org.kepler.gis.data; 030 031import java.io.File; 032import java.io.Serializable; 033 034import org.geotools.coverage.grid.io.AbstractGridCoverage2DReader; 035import org.opengis.coverage.grid.GridCoverage; 036 037import ptolemy.data.BooleanToken; 038import ptolemy.data.Token; 039import ptolemy.data.type.Type; 040import ptolemy.kernel.util.IllegalActionException; 041 042/** Token containing a GIS raster. 043 * 044 * @author Daniel Crawl 045 * @version $Id: RasterToken.java 34322 2015-12-09 21:41:37Z crawl $ 046 * 047 */ 048public class RasterToken extends Token { 049 050 /** Create a new RasterToken from a coverage. */ 051 public RasterToken(GridCoverage coverage) throws IllegalActionException { 052 if(coverage == null) { 053 throw new IllegalActionException("Cannot create RasterToken with null coverage."); 054 } 055 _coverage = coverage; 056 } 057 058 /** Create a new RasterToken from a reader. */ 059 public RasterToken(AbstractGridCoverage2DReader reader) throws IllegalActionException { 060 if(reader == null) { 061 throw new IllegalActionException("Cannot create RasterToken with null reader."); 062 } 063 _reader = reader; 064 } 065 066 /** Create a new RasterToken from a file. */ 067 public RasterToken(File file) { 068 _file = file; 069 } 070 071 /** Get the coverage. */ 072 public GridCoverage coverageValue() { 073 return _coverage; 074 } 075 076 /** Get the reader. */ 077 public AbstractGridCoverage2DReader reader() { 078 return _reader; 079 } 080 081 /** Get the file. */ 082 public File rasterFile() { 083 return _file; 084 } 085 086 087 @Override 088 public Type getType() { 089 return RASTER; 090 } 091 092 /** 093 * Test for equality of the values of this Token and the argument Token. If 094 * the value of this token or the value of the rightArgument token is null, 095 * then we return False. 096 * 097 * @param rightArgument 098 * The Token to test against. 099 * @exception IllegalActionException 100 * Not thrown in this base class. 101 * @return A boolean token that contains the value true if the dates are the 102 * same. 103 */ 104 @Override 105 public final BooleanToken isEqualTo(Token rightArgument) 106 throws IllegalActionException { 107 GridCoverage rightData = ((RasterToken) rightArgument).coverageValue(); 108 GridCoverage leftData = coverageValue(); 109 110 if ((rightData == null) || (leftData == null)) { 111 return BooleanToken.FALSE; 112 } else if (rightData.equals(leftData)) { 113 return BooleanToken.TRUE; 114 } else { 115 return BooleanToken.FALSE; 116 } 117 } 118 119 /** 120 * Return a String representation of the DateToken. The string is surrounded 121 * by double-quotes; without them, the Ptolemy expression parser fails to 122 * parse it. 123 * 124 * @return A String representation of the DateToken. 125 */ 126 @Override 127 public String toString() { 128 if (_coverage == null) { 129 return ""; 130 } else { 131 return _coverage.toString(); 132 } 133 } 134 135 public static class RasterType implements Cloneable, Type, Serializable { 136 137 @Override 138 public Type add(Type rightArgumentType) { 139 // TODO Auto-generated method stub 140 return this; 141 } 142 143 @Override 144 public Object clone() { 145 return this; 146 } 147 148 @Override 149 public Token convert(Token token) throws IllegalActionException { 150 if (token instanceof RasterToken) { 151 return token; 152 } else { 153 throw new IllegalActionException("Attempt to convert token " 154 + token + " into a Raster token, which is not possible."); 155 } 156 } 157 158 @Override 159 public Type divide(Type rightArgumentType) { 160 // TODO Auto-generated method stub 161 return this; 162 } 163 164 @Override 165 public int getTypeHash() { 166 // TODO Auto-generated method stub 167 return 0; 168 } 169 170 @Override 171 public Class<?> getTokenClass() { 172 return RasterToken.class; 173 } 174 175 @Override 176 public boolean isAbstract() { 177 return false; 178 } 179 180 @Override 181 public boolean isCompatible(Type type) { 182 return type == this; 183 } 184 185 @Override 186 public boolean isConstant() { 187 return true; 188 } 189 190 @Override 191 public boolean isInstantiable() { 192 return true; 193 } 194 195 @Override 196 public boolean isSubstitutionInstance(Type type) { 197 return type == this; 198 } 199 200 @Override 201 public Type modulo(Type rightArgumentType) { 202 // TODO Auto-generated method stub 203 return this; 204 } 205 206 @Override 207 public Type multiply(Type rightArgumentType) { 208 // TODO Auto-generated method stub 209 return this; 210 } 211 212 @Override 213 public Type one() { 214 // TODO Auto-generated method stub 215 return this; 216 } 217 218 @Override 219 public Type subtract(Type rightArgumentType) { 220 // TODO Auto-generated method stub 221 return this; 222 } 223 224 @Override 225 public String toString() { 226 return "raster"; 227 } 228 229 @Override 230 public Type zero() { 231 // TODO Auto-generated method stub 232 return this; 233 } 234 235 } 236 237 public static final RasterType RASTER = new RasterType(); 238 239 private GridCoverage _coverage; 240 private AbstractGridCoverage2DReader _reader; 241 private File _file; 242 243}