Ad GpsCoordinates: Base your class declaration on the class diagram below. Do no
ID: 3558246 • Letter: A
Question
Ad GpsCoordinates:
Base your class declaration on the class diagram below. Do not add or remove any public methods or constructors.All the output happes in GpsApp. There should be NO print statements in class GpsCoordinates
Ad toString:
The method toString should return a String that includes the latitude followed by the longitude. Both latitude andlongitude should display 6 digits after the decimal point. (see output)
NO print statements in class Gps.
Ad toString:
The method toString should return a String that includes the name followed by the position. (see output)Make sure to include the @Override annotation
Ad updatePosition:
The method updatePosition should set the field position to the current GPS position.We simulate the movement of the GPS and the reading of the current GPS position by calculating a random numbersbetween -2.5 and 2.5 (exclusive) and adding it to the longitude. Then it calculates another random number form thesame range and adds it to the latitude.
Write jUnit tests for class Gps(to keep the scope of the assignment in check you don
Explanation / Answer
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import org.greenstone.client.Place;
import java.util.HashMap;
public class PlaceInformation
{
static Statement _database = null;
static HashMap<String, ArrayList<Place>> _knownPlaces = new HashMap<String, ArrayList<Place>>();
/**
* Default constructor Creates a connection to the database
*/
public static void init()
{
try
{
System.out.print("Loading postgresql driver... ");
Class.forName("org.postgresql.Driver");
Connection c = DriverManager.getConnection("jdbc:postgresql://localhost/GS3MapDB", "sam", "password");//DriverManager.getConnection("jdbc:postgresql://localhost/test", "sjm84", "password");
System.out.println("Done!");
_database = c.createStatement();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* Searches the database for a specific place by using the place name and
* the parent's place names
*
* @param id
* is the id of the place to search for in the database
* @return the list of places found (in case there is more than one match)
*/
public static ArrayList<Place> getSpecificPlace(Long id)
{
try
{
ResultSet results = _database.executeQuery("SELECT * FROM places WHERE id = " + id);
// Go through the results and create a list of places
ArrayList<Place> placeList = new ArrayList<Place>();
while (results.next())
{
Place p = Place.createPlaceFromInformation(results.getLong("id"), results.getString("placename"), results.getString("subregion"), results.getString("region"), results.getString("country"), results.getString("placetype"), (Float) (results.getObject("longitude")), (Float) (results.getObject("latitude")), results.getLong("population"));
if (p != null)
{
placeList.add(p);
}
}
if (placeList.size() == 0)
{
placeList = null;
}
results.close();
// Return the list of places
return placeList;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
}
}
/**
* Searches the database for a specific place by using the place name and
* the parent's place names
*
* @param placeName
* is the name of the place to find
* @param parentPlaceName
* is the name of the place's parents (seperated by ", ")
* @return the list of places found (in case there is more than one match)
*/
public static ArrayList<Place> getSpecificPlace(String placeName, String parentPlaceName)
{
// Make sure the place name to find is not null
if (placeName == null)
{
return null;
}
ResultSet results = null;
String firstParent = null;
String secondParent = null;
String thirdParent = null;
// Separate the parents
if (parentPlaceName != null)
{
String[] parents = parentPlaceName.split(", ");
if (parents.length == 1)
{
firstParent = parents[0];
}
else if (parents.length == 2)
{
firstParent = parents[0];
secondParent = parents[1];
}
else
{
firstParent = parents[0];
secondParent = parents[1];
thirdParent = parents[2];
}
}
try
{
// If the place does not have a parent
if (parentPlaceName == null)
{
results = _database.executeQuery("SELECT * FROM places WHERE placename = '" + placeName.replaceAll("'", "\\'") + "' " + "and subregion is null " + "and region is null " + "and country is null;");
}
// If the place has one parent
else if (secondParent == null)
{
results = _database.executeQuery("SELECT * FROM places WHERE placename = '" + placeName.replaceAll("'", "\\'") + "' " + "and subregion is null " + "and region is null " + "and country = '" + firstParent.replaceAll("'", "\\'") + "';");
}
// If the place has two parents
else if (thirdParent == null)
{
results = _database.executeQuery("SELECT * FROM places WHERE placename = '" + placeName.replaceAll("'", "\\'") + "' " + "and subregion is null " + "and region = '" + firstParent.replaceAll("'", "\\'") + "' " + "and country = '" + secondParent.replaceAll("'", "\\'") + "';");
}
// If the place has three parents
else
{
results = _database.executeQuery("SELECT * FROM places WHERE placename = '" + placeName.replaceAll("'", "\\'") + "' " + "and subregion = '" + firstParent.replaceAll("'", "\\'") + "' " + "and region = '" + secondParent.replaceAll("'", "\\'") + "' " + "and country = '" + thirdParent.replaceAll("'", "\\'") + "';");
}
// Go through the results and create a list of places
ArrayList<Place> placeList = new ArrayList<Place>();
while (results.next())
{
Place p = Place.createPlaceFromInformation(results.getLong("id"), results.getString("placename"), results.getString("subregion"), results.getString("region"), results.getString("country"), results.getString("placetype"), (Float) (results.getObject("longitude")), (Float) (results.getObject("latitude")), results.getLong("population"));
if (p != null)
{
placeList.add(p);
}
}
if (placeList.size() == 0)
{
placeList = null;
}
results.close();
// Return the list of places
return placeList;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
}
}
/**
* Gets all of the place with the given name
*
* @param placeName
* @return
*/
public static ArrayList<Place> getPlaces(String placeName)
{
ArrayList<Place> placeList = new ArrayList<Place>();
ArrayList<Place> places = null;
if((places = _knownPlaces.get(placeName)) != null)
{
return places;
}
try
{
if (_database == null)
{
System.out.println("***?***");
}
// Do a database query with the given place name
ResultSet results = _database.executeQuery("SELECT * FROM places WHERE placename = '" + placeName.replaceAll("'", "\\'") + "'");
// Go through the results and add them to the list of found places
while (results.next())
{
Place p = Place.createPlaceFromInformation(results.getLong("id"), results.getString("placename"), results.getString("subregion"), results.getString("region"), results.getString("country"), results.getString("placetype"), (Float) (results.getObject("longitude")), (Float) (results.getObject("latitude")), results.getLong("population"));
if (p != null)
{
placeList.add(p);
}
}
results.close();
// Find if any places have this place name as a alternative name
ResultSet altNames = _database.executeQuery("SELECT * FROM alternatenames WHERE alternatename = '" + placeName.replaceAll("'", "\\'") + "'");
ArrayList<Long> alternateIndexes = new ArrayList<Long>();
while (altNames.next())
{
alternateIndexes.add(altNames.getLong("placeindex"));
}
altNames.close();
for (Long index : alternateIndexes)
{
results = _database.executeQuery("SELECT * FROM places WHERE id = " + index);
while (results.next())
{
Place p = Place.createPlaceFromInformation(results.getLong("id"), results.getString("placename"), results.getString("subregion"), results.getString("region"), results.getString("country"), results.getString("placetype"), (Float) (results.getObject("longitude")), (Float) (results.getObject("latitude")), results.getLong("population"));
if (p != null)
{
placeList.add(p);
}
}
}
results.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
_knownPlaces.put(placeName, placeList);
return placeList;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.