import javax.xml.soap.*;
import java.util.Iterator;
import java.net.URL;
import java.io.*;

public class Client {

    public static void main(String[] args) {
        try {
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection connection = soapConnectionFactory.createConnection();
            SOAPFactory soapFactory = SOAPFactory.newInstance();

            SOAPMessage message = prepareMessage();

            URL endpoint = new URL("https://opendap.co-ops.nos.noaa.gov/axis/services/portsconditions");
            SOAPMessage response = connection.call(message, endpoint);
            connection.close();

            System.out.print("\nPrinting the message that is being sent: \n\n");
            message.writeTo(System.out);
            System.out.println("\n\n");

            /*
            System.out.println("\nPrinting the respone that was recieved: \n\n" );
            response.writeTo(System.out);
             */

            //Uncoment this part if you want the response to be saved locally in an XML file
            /*
            FileOutputStream fout = new FileOutputStream ("SoapResponse.xml");
            response.writeTo(fout);
            fout.close();
             */

            //You can also store the response as a String
            /*
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.writeTo( out );
            String str = out.toString();  
             */

            System.out.println("\n\nIterating through the response object to get the values:\n\n");
            SOAPBody responseBody = response.getSOAPBody();

            //Checking for errors
            if (responseBody.hasFault()) {
                SOAPFault fault = responseBody.getFault();
                String actor = fault.getFaultActor();
                System.out.println("Fault contains: ");
                System.out.println("Fault code: " + fault.getFaultCodeAsName().getQualifiedName());
                System.out.println("Fault string: " + fault.getFaultString());
                if (actor != null) {
                    System.out.println("Actor: " + actor);
                }
            } else {
                Iterator iterator = responseBody.getChildElements();
                String tagName = null;
                SOAPElement se = null;
                Name attributeName = null;

                while (iterator.hasNext()) {
                    se = (SOAPElement) iterator.next();
                    iterator = se.getChildElements();
                    attributeName = soapFactory.createName("date");
                    System.out.println(" Date : " + se.getAttributeValue(attributeName));
                    attributeName = soapFactory.createName("portsId");
                    System.out.println(" Ports Id : " + se.getAttributeValue(attributeName));
                    attributeName = soapFactory.createName("time");
                    System.out.println(" Time : " + se.getAttributeValue(attributeName));
                    attributeName = soapFactory.createName("timeZone");
                    System.out.println(" Time Zone : " + se.getAttributeValue(attributeName) + "\n");
                    while (iterator.hasNext()) {
                        se = (SOAPElement) iterator.next();
                        tagName = se.getElementName().getLocalName();
                        if ("definitions".equals(tagName)) {
                            printDefinitions(se);
                        } else if ("units".equals(tagName)) {
                            printUnits(se);
                        } else if ("dataSource".equals(tagName)) {
                            System.out.println("Data Source and  Disclaimer: ");
                            System.out.println("==================== ");
                            System.out.println("Data Source               : " + se.getValue());
                        } else if ("dataDisclaimer".equals(tagName)) {
                            System.out.println("Data Disclaimer           : " + se.getValue());
                        } else if ("portsStations".equals(tagName)) {
                            printStations(se);
                        } else if ("observations".equals(tagName)) {
                            printObservations(se);
                        }
                    }
                }
            }

        } catch (SOAPException e) {
            System.err.println("ERROR: ******* " + e.toString());
        } catch (IOException io) {
            System.err.println("ERROR: ******* " + io.toString());
        }
    }

    public static SOAPMessage prepareMessage() {
        SOAPMessage message = null;
        try {
            SOAPFactory soapFactory = SOAPFactory.newInstance();
            MessageFactory factory = MessageFactory.newInstance();
            message = factory.createMessage();

            SOAPHeader header = message.getSOAPHeader();
            SOAPBody body = message.getSOAPBody();
            header.detachNode();
            message.getMimeHeaders().addHeader("SOAPAction", "");

            Name bodyName = soapFactory.createName("getPortsConditions", "ports", 
                    "https://opendap.co-ops.nos.noaa.gov/axis/services/portsconditions?wsdl");

            //Constructing the body for the request
            SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
            Name name = soapFactory.createName("portsId");
            SOAPElement symbol = bodyElement.addChildElement(name);
            symbol.addTextNode("cn");

        } catch (SOAPException e) {
            System.err.println("ERROR: ******* " + e.toString());
        }
        return message;
    }

    public static void printObservations(SOAPElement se) {
        Iterator iterator = se.getChildElements();//Observations      
        String tagName;
        System.out.println("\nObservations: ");
        System.out.println("==================== ");
        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            tagName = se.getElementName().getLocalName();
            if ("wlMetData".equals(tagName)) {
                printWlMetData(se);
            } else if ("currentData".equals(tagName)) {
                printCurrentData(se);
            }
        }
    }

    public static void printCurrentData(SOAPElement se) {

        Iterator iterator = se.getChildElements();
        String tagName;
        System.out.print("Current Data for Station ID: ");

        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            tagName = se.getElementName().getLocalName();
            if ("ID".equals(tagName)) {
                System.out.println(se.getValue());
                System.out.println("====================================");
            } else if ("timeStamp".equals(tagName)) {
                System.out.println("Time Stamp                : " + se.getValue());
            } else if ("speed".equals(tagName)) {
                System.out.println("Speed                     : " + se.getValue());
            } else if ("direction".equals(tagName)) {
                System.out.println("Direction                 : " + se.getValue());
            } else if ("level".equals(tagName)) {
                System.out.println("Level                     : " + se.getValue());
            } else if ("trend".equals(tagName)) {
                System.out.println("Trend                     : " + se.getValue());
            }
        }
        System.out.println("\n");
    }

    public static String addSpaces(String orig, int quantity) {
        StringBuffer copy = new StringBuffer(orig);
        while (copy.length() < quantity) {
            copy.append(' ');
        }
        return copy.toString();
    }

    public static void printStations(SOAPElement se) {
        Iterator iterator1 = null;
        Iterator iterator = se.getChildElements();//portsStations        
        String tagName;
        System.out.println("\nStations: ");
        System.out.println("==================== ");
        System.out.println("ID       \t" + addSpaces("Name", 80) + "Latitude\tLongitude");
        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            iterator1 = se.getChildElements();
            while (iterator1.hasNext()) {
                se = (SOAPElement) iterator1.next();
                tagName = se.getElementName().getLocalName();
                if ("ID".equals(tagName)) {
                    System.out.print(addSpaces(se.getValue(), 8));
                } else if ("name".equals(tagName)) {
                    System.out.print("\t" + addSpaces(se.getValue(), 80));
                } else if ("latitude".equals(tagName)) {
                    System.out.print(se.getValue());
                } else if ("longitude".equals(tagName)) {
                    System.out.println("\t\t" + se.getValue());
                }
            }
        }
        System.out.println("\n");
    }

    public static void printWlMetData(SOAPElement se) {
        Iterator iterator1 = null;
        Iterator iterator = se.getChildElements();
        String tagName;
        System.out.print("Water Level - Met Data for Station ID: ");

        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            tagName = se.getElementName().getLocalName();
            if ("ID".equals(tagName)) {
                System.out.println(se.getValue());
                System.out.println("=============================================== ");
            } else if ("waterLevel".equals(tagName)) {
                System.out.println("***Water Level*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("observed".equals(tagName)) {
                        System.out.println("observed                  : " + se.getValue());
                    } else if ("trend".equals(tagName)) {
                        System.out.println("Trend                     : " + se.getValue());
                    }
                }
            } else if ("airTemperature".equals(tagName)) {
                System.out.println("***Air Temperature*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("airTemp".equals(tagName)) {
                        System.out.println("Air Temperature           : " + se.getValue());
                    }
                }
            } else if ("waterTemperature".equals(tagName)) {
                System.out.println("***Water Temperature*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("waterTemp".equals(tagName)) {
                        System.out.println("Water Temperature         : " + se.getValue());
                    }
                }
            } else if ("barometricPressure".equals(tagName)) {
                System.out.println("***Barometric Pressure*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("pressure".equals(tagName)) {
                        System.out.println("Pressure                  : " + se.getValue());
                    } else if ("trend".equals(tagName)) {
                        System.out.println("Trend                     : " + se.getValue());
                    }
                }
            } else if ("salinity".equals(tagName)) {
                System.out.println("***Salinity*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("wSalinity".equals(tagName)) {
                        System.out.println("Salinity                  : " + se.getValue());
                    }
                }
            } else if ("airGap".equals(tagName)) {
                System.out.println("***Air Gap*** ");
                iterator1 = se.getChildElements();
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("clearance".equals(tagName)) {
                        System.out.println("Clearance                 : " + se.getValue());
                    } else if ("trend".equals(tagName)) {
                        System.out.println("Trend                     : " + se.getValue());
                    }
                }
            } else if ("wind".equals(tagName)) {
                iterator1 = se.getChildElements();
                System.out.println("***Wind*** ");
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("timeStamp".equals(tagName)) {
                        System.out.println("Time Stamp                : " + se.getValue());
                    } else if ("speed".equals(tagName)) {
                        System.out.println("Speed                     : " + se.getValue());
                    } else if ("direction".equals(tagName)) {
                        System.out.println("Direction                 : " + se.getValue());
                    } else if ("gust".equals(tagName)) {
                        System.out.println("Gust                      : " + se.getValue());
                    }
                }
            }
        }
        System.out.println("\n");
    }

    public static void printDefinitions(SOAPElement se) {
        Iterator iterator = se.getChildElements();
        String tagName;
        System.out.println("Definitions: ");
        System.out.println("==================== ");
        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            tagName = se.getElementName().getLocalName();
            if ("level".equals(tagName)) {
                System.out.println("Level                     : " + se.getValue());
            } else if ("datum".equals(tagName)) {
                System.out.println("Datum                     : " + se.getValue());
            } else if ("trend".equals(tagName)) {
                System.out.println("trend                     : " + se.getValue());
            } else if ("missingValue".equals(tagName)) {
                System.out.println("Missing Value             : " + se.getValue());
            }
        }
        System.out.println("\n");
    }

    public static void printUnits(SOAPElement se) {
        Iterator iterator1 = null;
        Iterator iterator = se.getChildElements();
        String tagName;
        System.out.println("Units: ");
        System.out.println("==================== ");
        while (iterator.hasNext()) {
            se = (SOAPElement) iterator.next();
            tagName = se.getElementName().getLocalName();
            if ("timeStamp".equals(tagName)) {
                System.out.println("Time Stamp                : " + se.getValue());
            } else if ("waterLevel ".equals(tagName)) {
                System.out.println("Water Level               : " + se.getValue());
            } else if ("airTemperature".equals(tagName)) {
                System.out.println("Air Temperature           : " + se.getValue());
            } else if ("waterTemperature".equals(tagName)) {
                System.out.println("Water Temperature         : " + se.getValue());
            } else if ("barometricPressure".equals(tagName)) {
                System.out.println("Barometric Pressure       : " + se.getValue());
            } else if ("airGap".equals(tagName)) {
                System.out.println("Air Gap                   : " + se.getValue());
            } else if ("salinity".equals(tagName)) {
                System.out.println("Salinity                  : " + se.getValue());
            } else if ("windUnits".equals(tagName)) {
                iterator1 = se.getChildElements();
                System.out.println("**Wind** ");
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("speed".equals(tagName)) {
                        System.out.println("Speed                     : " + se.getValue());
                    } else if ("direction".equals(tagName)) {
                        System.out.println("Direction                 : " + se.getValue());
                    } else if ("gust".equals(tagName)) {
                        System.out.println("Gust                      : " + se.getValue());
                    }
                }
            } else if ("current".equals(tagName)) {
                iterator1 = se.getChildElements();
                System.out.println("**Current** ");
                while (iterator1.hasNext()) {
                    se = (SOAPElement) iterator1.next();
                    tagName = se.getElementName().getLocalName();
                    if ("speed".equals(tagName)) {
                        System.out.println("speed                     : " + se.getValue());
                    } else if ("direction".equals(tagName)) {
                        System.out.println("Direction                 : " + se.getValue());
                    }
                }
            }
        }
        System.out.println("\n");
    }
}
/**********************
 * 
>java Client
Printing the message that is being sent:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>    
<ports:getPortsConditions xmlns:ports="https://opendap.co-ops.nos.noaa.gov/axis/webservices/portsconditions/wsdl">
<portsId>cn</portsId> 
</ports:getPortsConditions>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Iterating through the response object to get the values:
Date : 20140604
Ports Id :Chesapeake Bay North PORTS                                                            
Time : 12:47
Time Zone : EDT //This time is the local time for PORTS while all the data is in GMT

Definitions: 
==================== 
Level                     : Real time bin for the current instrument
Datum                     : 0 = MLLW, 1 = IGLD, 2 = CRD, 4 = STD
trend                     : 0 = Steady (Slack), 1 = decreasing (Ebbing), 2 = increasing (Flooding), 3 = undefined
Missing Value             : -999.999 = indicates that there was no reading recorded


Units: 
==================== 
Time Stamp                : Timestamp of all data is in GMT
Air Temperature           : Air temperature is in degrees centigrade
Water Temperature         : Water temperature is in degrees centigrade
**Wind** 
Speed                     : Wind speed is in meters per second
Direction                 : Wind direction is in degrees (true)
Gust                      : Wind gust is in meters per second
Barometric Pressure       : Barometric pressure is in millibars
Air Gap                   : Clearance is in meters
Salinity                  : Salinity is in psu -- parts per thousand
**Current** 
speed                     : Current speed is in knots
Direction                 : Current direction is in degrees (true)


Data Source and  Disclaimer: 
==================== 
Data Source               : USDOC/NOAA/NOS/CO-OPS (Center for Operational Oceanographic Products and Services)
Data Disclaimer           : These raw data have not been subjected to the National Ocean Service's  quality control or quality assurance procedures 
                            and do not meet the criteria and standards  of official National Ocean Service data. They are released for limited public use 
                            as  preliminary data to be used only with appropriate caution.

Stations: 
==================== 
ID       	Name                                                                            Latitude	Longitude
8632837 	Rapp. Lt Front Range                                                            37.538		-76.015
8636580 	Windmill Point                                                                  37.615		-76.29
8635750 	Lewisetta                                                                       37.996		-76.464
8578240 	Piney Point                                                                     38.133		-76.533
8577330 	Solomons Island                                                                 38.317		-76.452
cb1001  	Cove Point LNG Pier Currents                                                    38.403		-76.384
8577018 	Cove Point LNG Pier                                                             38.404		-76.385
8594900 	Washington D.C.                                                                 38.873		-77.022
tplm2   	Thomas Pt Light                                                                 38.899		-76.436
8575512 	Annapolis                                                                       38.983		-76.482
8575432 	Chesapeake Bay Brdg                                                             38.993		-76.382
8573364 	Tolchester Beach                                                                39.213		-76.245
8574729 	NE Tower                                                                        39.22		-76.525
8574728 	Baltimore Key Bridge                                                            39.22		-76.528
8574680 	Baltimore                                                                       39.267		-76.578
8573927 	Chesapeake City                                                                 39.527		-75.81
8573928 	Ches. City Bridge                                                               39.527		-75.81
cb1301  	Chesapeake City Currents                                                        39.531		-75.828
8551910 	Reedy Point                                                                     39.558		-75.573
db0201  	Reedy Point (pred)                                                              39.559		-75.552
8551911 	Reedy Point Bridge                                                              39.56		-75.568
cb0901  	Potomac R MCh LWB B                                                             38.115		-76.531
cb1201  	Tolch. Front Range                                                              39.141		-76.33
cb0801  	Rapp. Shl Ch LBB 60                                                             37.674		-76.155
cb1101  	Chesapeake Ch LBB 92                                                            38.982		-76.385



Observations: 
==================== 
Water Level - Met Data for Station ID: 8551911
=============================================== 


Water Level - Met Data for Station ID: 8551910
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:42:00.0
observed                  : 0.629
Trend                     : 2
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:42:00.0
Water Temperature         : 21.5
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:42:00.0
Air Temperature           : 26.2
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:42:00.0
Pressure                  : 1009.8
Trend                     : 1


Water Level - Met Data for Station ID: 8573928
=============================================== 
***Air Gap*** 
Time Stamp                : 2014-06-04 16:30:00.0
Clearance                 : 43.357
Trend                     : 1


Water Level - Met Data for Station ID: 8573927
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.497
Trend                     : 2
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Water Temperature         : 22.5
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Air Temperature           : 26.0
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 1.898
Direction                 : 328.0
Gust                      : 5.0
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1009.8
Trend                     : 1


Water Level - Met Data for Station ID: 8574680
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.554
Trend                     : 1
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Water Temperature         : 23.7
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Air Temperature           : 26.7
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 3.802
Direction                 : 10.29
Gust                      : 4.7
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1010.0
Trend                     : 1
***Salinity*** 
Time Stamp                : 2014-06-04 16:36:00.0
Salinity                  : 1.82


Water Level - Met Data for Station ID: 8574729
=============================================== 
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:30:00.0
Air Temperature           : 26.7
***Wind*** 
Time Stamp                : 2014-06-04 16:30:00.0
Speed                     : 0.478
Direction                 : 240.97
Gust                      : 1.0
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:30:00.0
Pressure                  : 1010.4
Trend                     : 1


Water Level - Met Data for Station ID: 8574728
=============================================== 
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:42:00.0
Air Temperature           : 27.0
***Wind*** 
Time Stamp                : 2014-06-04 16:42:00.0
Speed                     : 0.201
Direction                 : 107.0
Gust                      : 0.6
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:42:00.0
Pressure                  : 1010.5
Trend                     : 1


Water Level - Met Data for Station ID: 8573364
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.54
Trend                     : 0
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Water Temperature         : 21.7
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Air Temperature           : 25.0
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 0.7
Direction                 : 337.0
Gust                      : 0.9
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1010.8
Trend                     : 1


Water Level - Met Data for Station ID: 8575432
=============================================== 
***Air Gap*** 
Time Stamp                : 2014-06-04 16:36:00.0
Clearance                 : 57.203
Trend                     : 1


Water Level - Met Data for Station ID: 8575512
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:30:00.0
observed                  : 0.479
Trend                     : 1
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:30:00.0
Air Temperature           : 24.8
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:30:00.0
Pressure                  : 1010.3
Trend                     : 1


Water Level - Met Data for Station ID: tplm2
=============================================== 


Water Level - Met Data for Station ID: 8594900
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.949
Trend                     : 2
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Water Temperature         : 22.8
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Air Temperature           : 28.4
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 2.243
Direction                 : 265.05
Gust                      : 3.2
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1010.1
Trend                     : 1


Water Level - Met Data for Station ID: 8577018
=============================================== 
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:42:00.0
Air Temperature           : 23.3
***Wind*** 
Time Stamp                : 2014-06-04 16:42:00.0
Speed                     : 2.3
Direction                 : 348.0
Gust                      : 2.5
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:42:00.0
Pressure                  : 1010.7
Trend                     : 1


Water Level - Met Data for Station ID: 8577330
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:30:00.0
observed                  : 0.288
Trend                     : 1
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:30:00.0
Water Temperature         : 21.1


Water Level - Met Data for Station ID: 8578240
=============================================== 
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 2.001
Direction                 : 269.0
Gust                      : 2.1


Water Level - Met Data for Station ID: 8635750
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.238
Trend                     : 1
***Water Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Water Temperature         : 22.8
***Air Temperature*** 
Time Stamp                : 2014-06-04 16:36:00.0
Air Temperature           : 26.1
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 1.739
Direction                 : 66.29
Gust                      : 2.4
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1010.6
Trend                     : 1
***Salinity*** 
Time Stamp                : 2014-06-04 16:36:00.0
Salinity                  : 8.72


Water Level - Met Data for Station ID: 8636580
=============================================== 
***Water Level*** 
Time Stamp                : 2014-06-04 16:36:00.0
observed                  : 0.304
Trend                     : 2


Water Level - Met Data for Station ID: 8632837
=============================================== 
***Wind*** 
Time Stamp                : 2014-06-04 16:36:00.0
Speed                     : 1.698
Direction                 : 335.0
Gust                      : 6.6
***Barometric Pressure*** 
Time Stamp                : 2014-06-04 16:36:00.0
Pressure                  : 1011.3
Trend                     : 1


Current Data for Station ID: cb0801
====================================
Time Stamp                : -999
Speed                     : -999.999
Direction                 : -999.999
Level                     : -999
Trend                     : -999


Current Data for Station ID: cb0901
====================================
Time Stamp                : 2014-06-04 16:35:00.0
Speed                     : 0.377
Direction                 : 109.0
Level                     : 4
Trend                     : 1


Current Data for Station ID: cb1001
====================================
Time Stamp                : 2014-06-04 16:34:00.0
Speed                     : 0.535
Direction                 : 149.0
Level                     : 14
Trend                     : 1


Current Data for Station ID: cb1101
====================================
Time Stamp                : 2014-06-04 16:35:00.0
Speed                     : 0.29
Direction                 : 34.0
Level                     : 4
Trend                     : 2


Current Data for Station ID: cb1201
====================================
Time Stamp                : 2014-06-04 16:34:00.0
Speed                     : 0.432
Direction                 : 353.0
Level                     : 4
Trend                     : 2


Current Data for Station ID: cb1301
====================================
Time Stamp                : -999
Speed                     : -999.999
Direction                 : -999.999
Level                     : -999
Trend                     : -999


Current Data for Station ID: db0201
====================================
Time Stamp                : 2014-06-04 16:47:00.0
Speed                     : 0.87
Direction                 : 179.0
Level                     : 14
Trend                     : 1

 */