/*
 * Copyright 2018 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.sps.data;
 
// Imports the Google Cloud client library
import com.google.maps.GeocodingApi;
import com.google.maps.GeocodingApiRequest;
import com.google.maps.GeoApiContext;
import com.google.maps.GaeRequestHandler;
import com.google.maps.model.GeocodingResult;
import com.google.maps.model.LatLng;
import com.google.maps.TimeZoneApi;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.util.TimeZone;

/* Location object */
public class Location {
    private String address;
    private double latCoord;
    private double lngCoord;
    private LatLng coords;
    private TimeZone timeZoneObj;
    private String timeZoneID;

    public Location(String address) {
        this.address = address;
        try {
            setProperties();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setProperties() throws Exception {
        GeoApiContext context = new GeoApiContext.Builder()
            .apiKey("YOUR-API-KEY")
            .build();

        try {
            setCoordinates(context, address);
            setTimeZone(context, coords);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setCoordinates(GeoApiContext context, String address) throws Exception {
        try {
            GeocodingResult[] results =  GeocodingApi.geocode(context,
                address).await();
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            this.latCoord = results[0].geometry.location.lat;
            this.lngCoord = results[0].geometry.location.lng;
            this.coords = new LatLng(latCoord, lngCoord);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setTimeZone(GeoApiContext context, LatLng location) throws Exception {
        try {
            TimeZone results =  TimeZoneApi.getTimeZone(context,
                location).await();
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            this.timeZoneObj = results;
            this.timeZoneID = results.getID();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getAddress() {
        return this.address;
    }
 
    public Double getLat() {
        return this.latCoord;
    }

    public Double getLng() {
        return this.lngCoord;
    }

    public LatLng getCoords() {
        return this.coords;
    }
 
    public String getTimeZoneID() {
        return this.timeZoneID;
    }

    public TimeZone getTimeZone() {
        return this.timeZoneObj;
    }
}
@@ -1504,35 +1504,22 @@
         
-e.printStackTrace()
+return
 ;%0A      
@@ -1665,20 +1665,47 @@
 ey(%22
-YOUR-API-KEY
+AIzaSyD-yzkJXzUoSmD3IsclTXwugHGaqrb5ijk
 %22)%0A 
@@ -1872,35 +1872,22 @@
         
-e.printStackTrace()
+return
 ;%0A      
@@ -2403,35 +2403,22 @@
         
-e.printStackTrace()
+return
 ;%0A      
@@ -2836,27 +2836,14 @@
     
-e.printStackTrace()
+return
 ;%0A  

Fix error handling