//
// AddeImageURL.java
//

/*
This source file is part of the edu.wisc.ssec.mcidas package and is
Copyright (C) 1998 - 2017 by Tom Whittaker, Tommy Jasmin, Tom Rink,
Don Murray, James Kelly, Bill Hibbard, Dave Glowacki, Curtis Rueden
and others.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/

package edu.wisc.ssec.mcidas.adde;


import java.util.Date;

import edu.wisc.ssec.mcidas.McIDASUtil;


/**
 * A class for holding the ADDE URL for an image directory or data request.
 *
 * 
 * URLs must all have the following format:
 *
 *   adde://host/request?keyword_1=value_1&keyword_2=value_2
 *
 * where request can be one of the following:
 *
 *   imagedata - request for data in AreaFile format (AGET)
 *   imagedirectory - request for image directory information (ADIR)
 *
 * There can be any valid combination of the following supported keywords:
 *
 *   group=<groupname>         ADDE group name
 *   descr=<descriptor>        ADDE descriptor name
 *   band=<band>               spectral band or channel number
 *   mag=<lmag> <emag>         image magnification, postitive for blowup,
 *                               negative for blowdown (default = 1, emag=lmag)
 *                               (imagedata only)
 *   latlon=<lat> <lon>        lat/lon point to center image on (imagedata only)
 *   linele=<lin> <ele> <type> line/element to center image on (imagedata only)
 *   place=<placement>         placement of lat/lon or linele points (center
 *                               or upperleft (def=center)) (imagedata only)
 *   pos=<position>            request an absolute or relative ADDE position
 *                               number.  May use <start> <end>  Default
 *                               for <end> is 0 if start<0, or =start otherwise.
 *   size=<lines> <elements>   size of image to be returned (imagedata only)
 *   unit=<unit>               to specify calibration units other than the
 *                               default
 *   spac=<bytes>              number of bytes per data point, 1, 2, or 4
 *                               (imagedata only)
 *   doc=<yes/no>              specify yes to include line documentation
 *                               with image (def=no)
 *   nav=<lalo>                include the lat-lon navigation info and not the O&A.
 *   aux=<yes/no>              specify yes to include auxilliary information
 *                               with image
 *   time=<time1> <time2>      specify the time range of images to select
 *                               (def=latest image if pos not specified)
 *   day=<day>                 specify the day of the images to select
 *                               (def=latest image if pos not specified)
 *   cal=<cal type>            request a specific calibration on the image
 *                               (imagedata only)
 *   id=<stn id>               radar station id
 *   user=<user_id>            ADDE user identification
 *   proj=<proj #>             a valid ADDE project number
 *   trace=<0/1>               setting to 1 tells server to write debug
 *                               trace file
 *   version=                  ADDE version number, currently 1 except for
 *                             griddata requests
 *   debug=                    set to true to watch the printlns stream by
 *   compress=                 set to "gzip" if you want to use the GZIP
 *                             compression or "compress" if you want to use
 *                             transfers in Unix compress format (You need to
 *                             have the VisAD package if you want to support
 *                             this.)  default = none.
 *   port=                     Socket port to connect on.  Overridden by
 *                             a port specified in the host
 *                             (e.g., adde.ucar.edu:500)
 * 
* */ public class AddeImageURL extends AddeDatasetURL { /** Keyword for band */ public static final String KEY_BAND = "BAND"; /** Keyword for position */ public static final String KEY_POS = "POS"; /** Keyword for station id */ public static final String KEY_ID = "ID"; /** Keyword for lat/lon request */ public static final String KEY_LATLON = "LATLON"; /** Keyword for lin/ele request */ public static final String KEY_LINEELE = "LINELE"; /** Keyword for location */ public static final String KEY_LOC = "LOC"; /** Keyword for mag */ public static final String KEY_MAG = "MAG"; /** Keyword for number of items */ public static final String KEY_NUM = "NUM"; /** Keyword for place */ public static final String KEY_PLACE = "PLACE"; /** Keyword for size */ public static final String KEY_SIZE = "SIZE"; /** Keyword for spacing */ public static final String KEY_SPAC = "SPAC"; /** Keyword for calibration unit */ public static final String KEY_UNIT = "UNIT"; /** Keyword for navigation type */ public static final String KEY_NAV = "NAV"; /** Keyword for aux request */ public static final String KEY_AUX = "AUX"; /** Keyword for doc request */ public static final String KEY_DOC = "DOC"; /** Keyword for day request */ public static final String KEY_DAY = "DAY"; /** Keyword for time request */ public static final String KEY_TIME = "TIME"; /** number of lines */ private int lines; /** number of elements */ private int elements; /** element magnification */ private int emag = 1; /** line magnification */ private int lmag = 1; /** default placement value (CENTER, ULEFT) */ private static String DEFAULT_PLACE_VALUE = "ULEFT"; /** default key for location (LATLON, LINELE) */ private static String DEFAULT_LOCATE_KEY = "LINELE"; /** default value for location */ private static String DEFAULT_LOCATE_VALUE = "0 0"; /** default key for location (LATLON, LINELE) */ private String locateKey = DEFAULT_LOCATE_KEY; /** placement value (CENTER, ULEFT) */ private String placeValue = DEFAULT_PLACE_VALUE; /** value for location */ private String locateValue = DEFAULT_LOCATE_VALUE; /** band */ private String band = ALL; /** band */ private String unit = DEFAULT_VALUE; /** nav type */ private String navType = DEFAULT_VALUE; /** aux value */ private String auxValue = YES; /** doc value */ private String docValue = DEFAULT_VALUE; /** spacing value */ private int spacing = -1; /** station id */ private String locationId = null; /** dataset position */ private int pos = 0; /** start time */ private Date startDate = null; /** end time */ private Date endDate = null; /** time coordinate */ private String timeCoverage = "I"; /** no arg constructor */ public AddeImageURL() {} /** * Create an AddeImageURL. * * @param host host to send to * @param requestType type of request (REQ_IMAGEDATA, REQ_IMAGEDIR) * @param group ADDE group * @param descriptor ADDE descriptor */ public AddeImageURL(String host, String requestType, String group, String descriptor) { this(host, requestType, group, descriptor, null); } /** * Create an ADDE Image URL from the given specs. * * @param host host to send to * @param requestType type of request (REQ_IMAGEDATA, REQ_IMAGEDIR) * @param group ADDE group (may be null) * @param descriptor ADDE descriptor (may be null) * @param query query string (key/value pairs) */ public AddeImageURL(String host, String requestType, String group, String descriptor, String query) { super(host, requestType, group, descriptor, query); } /** * Create an ADDE Image URL from the given spec * @param host host to send to * @param requestType type of request (REQ_IMAGEDATA, REQ_IMAGEDIR) * @param group ADDE group * @param descriptor ADDE descriptor * @param locateKey locate key * @param locateValue locate value * @param placeValue place value * @param lines number of lines * @param elements number of elements * @param lmag line magnification * @param emag element magnification * @param band band * @param unit calibration unit * @param spacing data size */ public AddeImageURL(String host, String requestType, String group, String descriptor, String locateKey, String locateValue, String placeValue, int lines, int elements, int lmag, int emag, String band, String unit, int spacing) { super(host, requestType, group, descriptor); this.locateKey = locateKey; this.locateValue = locateValue; this.placeValue = placeValue; this.lines = lines; this.elements = elements; this.lmag = lmag; this.emag = emag; this.band = band; this.unit = unit; this.spacing = spacing; } /** * Get the PLACE value * * @return the PLACE value */ public String getPlaceValue() { return placeValue; } /** * Get the locate key * * @return the locate key */ public String getLocateKey() { return locateKey; } /** * Get the locate value * * @return the locate value */ public String getLocateValue() { return locateValue; } /** * Get the number of lines * * @return the number of lines */ public int getLines() { return lines; } /** * Get the number of elements * * @return the number of elements */ public int getElements() { return elements; } /** * Get the element magnification * * @return the element magnification */ public int getElementMag() { return emag; } /** * Get the line magnification * * @return the line magnification */ public int getLineMag() { return lmag; } /** * Set the locate key * * @param value the locate key */ public void setLocateKey(String value) { locateKey = value; } /** * Set the locate value * * @param value the locate value */ public void setLocateValue(String value) { locateValue = value; } /** * Set the place value * * @param value the place value */ public void setPlaceValue(String value) { placeValue = value; } /** * Set the number of lines * * @param value the number of lines */ public void setLines(int value) { lines = value; } /** * Set the number of elements * * @param value the number of elements */ public void setElements(int value) { elements = value; } /** * Set the element magnification * * @param value the element magnification */ public void setElementMag(int value) { emag = value; } /** * Set the line magnification * * @param value the line magnification */ public void setLineMag(int value) { lmag = value; } /** * Set the data size (SPAC) * * @param value the data size */ public void setSpacing(int value) { spacing = value; } /** * Get the data size (SPAC) * * @return the data size */ public int getSpacing() { return spacing; } /** * Set the band or band range * * @param value the band range or ALL. For REQ_IMAGEDATA, must * be a single band */ public void setBand(String value) { band = value; } /** * Get the band or band range * * @return the band range or ALL. */ public String getBand() { return band; } /** * Set the calibration unit * * @param value the calibration unit */ public void setUnit(String value) { unit = value; } /** * Get the calibration unit * * @return calibration unit */ public String getUnit() { return unit; } /** * Set the navigation type * * @param value the navigation type (X or LALO) */ public void setNavType(String value) { navType = value; } /** * Get the navigation type * * @return navigation type (default or LALO) */ public String getNavType() { return navType; } /** * Set the location ID for radar images * * @param value the location ID */ public void setId(String value) { locationId = value; } /** * Get the location ID for radar images * * @return location ID */ public String getId() { return locationId; } /** * Set the dataset position * * @param value the dataset position */ public void setDatasetPosition(int value) { pos = value; } /** * Get the dataset position * * @return dataset position */ public int getDatasetPosition() { return pos; } /** * Set the start date for the request * * @param value the starting date for the request */ public void setStartDate(Date value) { startDate = value; } /** * Get the start date for the request * * @return the start date for the request */ public Date getStartDate() { return startDate; } /** * Set the end date for the request * * @param value the ending date for the request */ public void setEndDate(Date value) { endDate = value; } /** * Get the end date for the request * * @return the ending date for the request */ public Date getEndDate() { return endDate; } /** * Set the time coverage * * @param value the time coverage */ public void setTimeCoverage(String value) { timeCoverage = value; } /** * Set the time coverage * * @return the time coverage */ public String getTimeCoverage() { return timeCoverage; } /** * Set the AUX keyword value * * @param value the AUX keyword value (YES, NO or DEFAULT_VALUE) */ public void setAuxValue(String value) { auxValue = value; } /** * Get the AUX keyword value * * @return the AUX keyword value (YES, NO or DEFAULT_VALUE) */ public String getAuxValue() { return auxValue; } /** * Set the DOC keyword value * * @param value the DOC keyword value (YES, NO or DEFAULT_VALUE) */ public void setDocValue(String value) { docValue = value; } /** * Get the DOC keyword value * * @return the DOC keyword value (YES, NO or DEFAULT_VALUE) */ public String getDocValue() { return docValue; } /** * Create the ADDE URL * @return a Adde URL */ protected String makeQuery() { StringBuffer buf = new StringBuffer(super.makeQuery()); if (getRequestType().equals(REQ_IMAGEDATA)) { appendKeyValue(buf, KEY_BAND, band); appendKeyValue(buf, getLocateKey(), getLocateValue()); appendKeyValue(buf, KEY_PLACE, getPlaceValue()); appendKeyValue(buf, KEY_SIZE, getLines() + " " + getElements()); appendKeyValue(buf, KEY_UNIT, getUnit()); appendKeyValue(buf, KEY_MAG, getLineMag() + " " + getElementMag()); appendKeyValue(buf, KEY_SPAC, ((getSpacing() == -1) ? DEFAULT_VALUE : "" + getSpacing())); appendKeyValue(buf, KEY_NAV, getNavType()); appendKeyValue(buf, KEY_AUX, getAuxValue()); appendKeyValue(buf, KEY_DOC, getDocValue()); } else { appendKeyValue(buf, KEY_BAND, ALL); } // add in for the radar queries if (getId() != null) appendKeyValue(buf, KEY_ID, getId()); appendDateOrPosString(buf); return buf.toString(); } /** * Create a DAY/TIME or POS string * @param buf buffer to append to */ protected void appendDateOrPosString(StringBuffer buf) { if (getStartDate() == null && getEndDate() == null) { appendKeyValue(buf, KEY_POS, "" + getDatasetPosition()); } else { int[] start = null; if (getStartDate() != null) start = McIDASUtil.mcSecsToDayTime(getStartDate().getTime() / 1000l); int[] end = null; if (getEndDate() != null) end = McIDASUtil.mcSecsToDayTime(getEndDate().getTime() / 1000l); StringBuffer day = new StringBuffer(); StringBuffer time = new StringBuffer(); if (start != null) { day.append("" + start[0]); time.append(McIDASUtil.mcHmsToStr(start[1])); } day.append(" "); time.append(" "); if (end != null) { if (getRequestType().equals(REQ_IMAGEDIR)) day.append("" + end[0]); time.append("" + McIDASUtil.mcHmsToStr(end[1])); } else { time.append(McIDASUtil.mcHmsToStr(start[1])); } time.append(" "); time.append(getTimeCoverage()); appendKeyValue(buf, KEY_DAY, day.toString().trim()); appendKeyValue(buf, KEY_TIME, time.toString().trim()); if (getRequestType().equals(REQ_IMAGEDIR)) { appendKeyValue(buf, KEY_POS, "ALL"); } } } }

Ads help maintain this website.