ADD

advertisement
Multi-criteria infrastructure for location-based
applications
Shortly known as:
Localization Platform
Application Design Document
Ronen Abraham
Ido Cohen
Yuval Efrati
Tomer Sole'
April 2010
Table Of Contents
1.
Use Cases………………………………………………………………………………………………………4
1.1. The Actors……………………………………………………………………………………………………..4
1.2. Use-Cases………………………………………………………………………………………………………5
2.
Data Model…………………………………………………………………………………………………10
2.1. Android API…………………………………………………………………………………………………10
2.1.1. Description of Data Objects…………………………………………………………………………10
2.1.2. Data Objects Relationships………………………………………………………………………….11
2.2. Storage Server……………………………………………………………………………………….……12
2.2.1. Description of Data Objects…………………………………………………………………………12
2.2.2. Data Objects Relationships………………………………………………………………………….11
2.3. Prediction Server (a registered service) ………………………………………………………13
2.3.1. Description of Data Objects…………………………………………………………………………13
2.3.2. Data Objects Relationships……………………………………………………………………….…14
2.4. Databases……………………………………………………………………………………………………15
2.4.1. Storage Server…………………………………………………………………………………………….15
2.4.1.1. ERD Diagram………………………………………………………………………………………………15
2.4.1.2. Main Tables……………………………………………………………………………………………..…15
2.4.1.3. Main Transactions………………………………………………………………………………………16
2.4.2. Prediction Server…………………………………………………………………………………………18
2.4.2.1. ERD Diagram………………………………………………………………………………………………18
2.4.2.2. Main Tables………………………………………………………………………………………………..18
2.4.2.3. Main Transactions………………………………………………………………………………………19
3.
Behavioral Analysis……………………………………………………………………………………..20
3.1
Sequence Diagrams……………………………………………………………………………………..20
3.1.1 Storage server – add location………………………………………………………………………21
3.1.2 Storage server – get user's last locations…………………………………………………….22
3.1.3 Storage server – Register user……………………………………………………………………..23
3.1.4 Storage server – Unregister user…………………………………………………………………24
3.1.5 Prediction server – add user's location………………..………………………………………25
3.1.6 Prediction server – predict location………………………………….…………………………26
3.2
Events………………………………………………………………………………….………………………28
3.3
States……………………………………………………………………………………….…………………29
3.3.1 Localization server state chart………………………………………………………………….…29
3.3.2 Prediction server state chart ….…………………………………………………………………..30
3.3.3. Localization Client Android state chart………………………………………………………..30
4.
Object-Oriented Analysis…………………………………………………………………………….32
4.1. Android API…………………………………………………………………………………………………32
4.1.1. Class Diagrams……………………………………………………………………………………….…...32
4.1.2. Class Descriptions………………………………………………………………………………………..32
4.2. Storage Server…………………………………………………………………………………………….36
4.2.1. Class Diagrams…………………………………………………………………………………………….36
4.2.2. Class Descriptions………………………………………………………………………………………..39
4.3. Prediction Server…………………………………………………………………………………………41
4.3.1. Class Diagrams…………………………………………………………………………………………….41
4.3.2. Class Descriptions………………………………………………………………………………………..43
4.4. Packages……………………………………………………………………………………………………..45
4.4.1.
4.4.2.
4.4.3.
4.4.4.
4.4.5.
4.5
4.5.1
4.5.2
4.5.3
4.5.4
5.
6.
7.
7.1
8.
Android Client……………………………………………………………………………………………..45
Server – General………………………………………………………………………………………….45
Storage Server…………………………………………………………………………………………….45
Prediction Server………………………………………………………………………………………...46
Other…………………………………………………………………………………………………………..46
Unit Testing…………………………………………………………………………………………………47
Basic Operations Testing……………………………………………………………………………..47
Framework Extensions Testing…………………………………………………………………….49
Framework Monitoring and Learning Testing……………………………………………...50
Server Requirements Testing………………………………………………………………………51
System Architecture…………………………………………………………………………………...53
User Interface Draft…………………………………………………………………………………….56
Testing………………………………………………………………………………………………………..57
Performance Constraints…………………………………………………………………………….57
Task List……………………………………………………………………………………………………….60
1. Use Cases
1.1 The Actors
1.1.1 Location-based application
An application installed on the client mobile device, which uses the "localization
client" to take advantage of the framework's features. This will be developed by
the consumer of our framework.
1.1.2 Registered service client
An application that interacts with a "registered localization service", to take
advantage of the framework's features. This will be developed by the consumer of
our framework.
1.1.3 User
Any person that tests the "mock application" – an application that demonstrates the
usage of the localization platform. Typically a developer who is interested with
using the localization platform and wants to be sure of its capacities.
1.1.4 Administrator
Uses the server GUI to monitor and audit the action on the storage server.
1.2 Use-Cases
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
1. Register user
Location-based application, user
The user adds himself to the system.
 In the mock application, the user clicks on the "Register" button.
 Location-based application calls the "register user" function.
Storage server is up
The location-based application knows the path to the storage server.
The location-based application is running.
The identifier of the user is saved in the DB.
1. A unique identifier taken from the hardware of the client device
(IMEI, MAC address..) is sent to the system.
2. The server generates a system ID for this user, and returns to the user
this new ID.
Case: the user already exists in the DB
Action: the system returns the system ID that was already allocated to
that user
2. Unregister user
User, Location-based application
The user removes himself from the system.
 In the mock application, the user clicks on the "Unregister" button.
 Location-based application calls the "unregister user" function.
Storage server is up
The location-based application knows the path to the storage server.
The location-based application is running.
The storage server sets the user's unregistration date.
1. The user's system ID is sent to the server.
2. The server sets the current date and time as the user's unregistration
date.
3. The system returns a success message.
Case: user does not exist in the system
Action: the system returns a success message anyway
3. Add user location
User, Location-based application
The user informs the system about his current location.
 In the mock application, the user clicks on the "Add new location"
button.
 Location-based application calls the "add new location" function.
Storage server is up
The location-based application knows the path to the storage server.
The location-based application is running.
The current user is registered.
The new location coordinates had been saved in the DB.
The system takes the user's current location, either by the GPS service
or by some prepared optimizations.
The system sends the taken location sent to the server.
The storage server updates the DB with the user's new location
none
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
4. Get last user locations
User, Location-based application
An application needs the last user locations
 In the mock application, the user clicks on the "get last user
locations" button.
 Location-based application calls the "get last user locations"
function.
Storage server is up
The location-based application knows the path to the storage server.
The location-based application is running.
The current user is registered.
The function returns all the past locations of a specific user
1. The getLastUserLocations methods has been called
2. The function returns a list of all the past locations of a specific user
None.
5. Register service
Registered service
A service adds itself to the storage server, to be notified on events
The service calls the "register service" method
Storage server is up
The service knows the path to the storage server
The service is saved in the storage server's DB
The service sends its identity, and the list of events to be notified with
when the occur.
The storage server saves those choices in the DB and generates a system
ID to that service
The storage server returns the system ID to the service
Case: the service is already registered with the server
Action: the storage server updates the list of events the service is
interested with, and returns its existing system ID.
6. Unregister service
Registered service
A service disconnects itself from the storage server.
The service calls the "unregister service" method
Storage server is up
The service knows the path to the storage server
The storage server updates the service's "unregistration date" field.
The service sends its system ID to the storage server.
The storage server updates the service's "unregistration date" field in
the DB.
None.
ID:
Primary actors:
Description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
Alternative flows:
ID:
Main actors:
Short description;
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
ID:
Main actors:
Short
description:
Trigger:
Pre-conditions:
Post-conditions:
Flow of events:
7. Predict location
User, Location-based application
The client asks for its most predicted location.
 In the mock application, the user clicks on the "predict location"
button.
 Location-based application calls the "predict location" function.
The recommendation service is up
The location-based application knows the path to the recommendation
service.
The location-based application is running.
The current user is registered and posted more locations than the
minimum required by the recommendation service.
The client application gets the coordinate of the most predicted
location.
1. The recommendation service runs its internal algorithm and gets the
most predicted location for the given user
2. The client application gets the result.
Case: not enough data / cannot predict a location for the user
Action: a constant result will be returned: the unexisting coordinate
[200,200].
8. Monitor server data
Administrator
View the storage server data via server GUI, exposed as web pages.
The admin browses the server web GUI.
 Storage server (and its database) is up
 Administrator has logged in successfully to the web system
 A web page with the desired data is displayed to the administrator.
1. Admin chooses a database table to view
2. The system displays the table elegantly.
9. Audit server data
Administrator
Edit the storage server data via server GUI, exposed as web pages.
The admin pressed the "edit" button when viewing the server web GUI.
 Administrator is viewing the server data that he wants to change
 Administrator is logged into the system
 Storage server is up
 The storage server has changed according to the administrator's
changes.
 A web page containing the changed data is displayed to the
administrator.
1. The system displays the database table with editable fields.
2. Administrator changes columns, adds or deletes rows, and finally
presses "done"
3. The system changes the database accordingly.
4. The system displays the changed data to the administrator via server
web GUI.
2. Data Model
2.1. Android API
2.1.1. Description of Data Objects
LocaManager – the main interface for the localization framework. Implemented as an
abstract class. Responsible for interacting with the Localization server by the REST protocol.
LocaManagerConfig – holds a configuration file, with parameters that the application
developer can change before using the application.
BestManager – an implementation of the efficient location management in the client side.
Instead of asking the GPS for the exact user location, which is the heavy operation we are
trying to narrow to the minimum, it combines other methods to save energy and
communication.
AcademicManager – an alternative implementation of the location management in the
client side. The application developer can choose which concrete LocaManager he wants to
use.
BestManagerConfig – extends LocaManagerConfig with more parameters inside the same
configuration file. These extra parameters are relevant only to BestManager.
LocationSource – an interface for every input source to calculate the client's current
location.
Coordinate – the most basic description for a location: latitude and longitude.
LocationState – a client location report, consisting of a location (Coordinate) and the
accuracy of that report – in meters.
GPSSynchronizer – implements LocationSource by asking the GPS for the current client
location. The actual call to the GPS is specified by BestManager, which initializes it.
StayPolicy – another LocationSource implementation. Works with the device accelerometer
and compass this way: if the client hasn't moved since the last known location, or barely
moved, it returns the last location with a good accuracy of some meters. Else, it returns the
last location with a "bad accuracy".
GAC – GPS, Accelerometer, Compass. Combines the three to determine the client's current
location. GAC will not call the GPS to calculate the location but rather only consider last
locations given from the GPS, not from any other source. It uses Newton's laws of motion
and earth geometry model to calculate the new location.
LocationManager – an Android class which gives details about the user's location by using
the internal GPS, or the wireless IP.
Accelerometer – an Android class which manages the accelerometer sensor.
Compass – an Android class which manages the compass sensor.
2.1.2. Data Objects Relationships
a. Managers and Location Providers
b. Location Providers, states and resources
2.2. Storage Server
2.2.1. Description of Data Objects
Our data classes are automatically generated from the database schema, using an
automated tool. Therefore, you won't be able to see the direct relationships between the
objects. The relationships will be managed by the algorithm classes. Also, that's why the
class names are in plural, even though it should have been in singular – because the
automated tool took it from the database table names.
Users – manages a user in the application. The user has a unique ID (managed by the
database), and is mapped to his mobile ID - the 'International Mobile Equipment Identity'
(IMEI) used to identify the user's smartphone device. A user also holds the time where he
registered to the localization platform and, if he is a past user, the time when he
unregistered. The system does not delete old users data but rather keep them as "past
users".
UsersLocations + UsersLocationsId – represents a user that has been to a location at some
point in time. The location is identified by longitude and latitude lines.
RegisteredServices – represents an external application that wishes to be notified of
application events, such as: adding a new user location, getting past locations, etc. The
registered application has to have a REST URL, where the localization server will send
updates on the events this application was registered to. Also, the database gives every
service a unique ID.
RegisteredServicesEvents – connects between a registered service (represented by the
service ID) and the event/s it wants to connect to.
2.2.2. Data Objects Relationships
2.3. Prediction Server (a registered service)
2.3.1. Description of Data Objects
The same comment about our auto-generated data classes from the "storage server" section
also holds here.
UsersLocations + UsersLocationsId – represents a user that has been to a location at some
point in time. The location is identified by longitude and latitude lines, and also by a "sector
ID" – a String representation of the Google tile this location is at.
UsersCluster – A cluster is a group of users who have something in common. This algorithm
groups the users by their most X frequent locations. So every cluster has, besides its
automated unique ID, the "build up sequence" – the Google tile ID's (represented as Strings)
that are required for a user to be in this cluster.
UsersProfile – connects between a user (represented by his unique ID) and a cluster (also
represented by his unique ID).
UsersClusterRules - A rule is a sequence that represents the movement of a single user.
Every user has a rule, a movement-path. This path consists of the sectors the user has visited
historically. When a user is in a cluster, this rule becomes a cluster-rule, so a cluster has as
much rules as it has members. A rule will also have a database-generated unique ID.
UsersClusterCandidates – Candidate is a sequence that represents the movement-pattern of
a single cluster. The candidate of a cluster is used for predicting the next step of a user in
this cluster by combining it with the rule of the cluster-member. It's composed of a unique
ID of that candidate, of the cluster, and a sequence of Google tiles.
Tile – the only class that wasn't auto-generated from the database, as we store tiles in
strings and only here we open them up. A tile is a "square" on the map for a certain zoom
level. It is represented by the coordinates which define the north-east and the south-west
latitude and longitude, and begin-end range which represent the zoom level. Unlike
localization "storage" server, the prediction server only works with Google tiles because it's
easier to associate a group of users to a square of locations instead of one specific
coordinate. It is also good for future consideration of data security, which is another factor
that this service was designed according to.
2.3.2. Data Objects Relationships
2.4 Databases
The framework we have developed consists of the main localization "storage server", and a
"location prediction server". They have two completely separate database schemas as they
represent completely different servers.
Explanation to why our DB is not identical to our ERD:
1. In some cases we didn't want to normalize the database just to have a table of 1 field
(clusters in prediction server).
2. MySQL database efficiencies: In some cases we decided to go with a different definition of
primary keys, foreign keys and tables than what is defined in the ERD. This came after
dealing with hundred thousands of rows of fake locations that took a long time to process, and
not in our algorithmic processing side: but in the database "execute query" side. So we
decided to set the database schemas a little different.
2.4.1. Storage Server
2.4.1.1. ER Diagram
2.4.1.2. Main Tables
Users: id, mobileId, registrationTime, unregistrationTime
The 'Users' table holds the information for the registered users. Mainly it uses by the
prediction system during the clusters-dividing process.
Id (Number) - Contains a unique id for each user.
MobileId (Number) - Contains a unique IMEI for each user. The 'International Mobile
Equipment Identity' used to identify the user's smartphone-device.
RegistrationTime (Timestamp) - Contains the date and time of the user registration.
UnregistrationTime (Timestamp) - Contains the date and time of the user un-registration.
This field is updated when the user is unregistering.
Users_Locations: userId, time, longitude, latitude
The 'Users_Locations' table holds a map of all the users and their locations history. This table
saves all the locations (past and present) of the users and allows setting information and
getting existing information from it.
userId (Number) - Contains the id of the user's location.
time (Timestamp) - Contains the date and time of which this user has been at the specfic
location.
longitude (Number) - Specifies the longitude of the location.
latitude (Number) - Specifies the latitude of the location.
Registered_Services: id, url
The 'Registered_Services' table holds services which added themselves to the storage server,
to be notified on events. All those services will be exposed into a larger set of operations
with the server.
id (Number) - Contains a unique id of the service.
url (String) - Contains a unique REST address to which the update will send.
Registered_Services_Events: id, event
The 'Registered_Services_Events' table holds a map of all the services and their related
events. Once an event occurs, an update will be sent to the registered service through his
url.
id (Number) - Contains the id of the service.
event (String) - The specific event which this id has signed for.
2.4.1.3. Main Transactions
Name: Location Addition
Description: Adding a new Location to the system.
Affected Table: users_locations
Added Fields: userId, time, longitude, latitude
Deleted Fields: None
Updated Fields: None
Name: Last User Locations Receiving
Description: Getting the last locations of a user.
Affected Table: None
Added Fields: None
Deleted Fields: None
Updated Fields: None
Name: User Registration
Description: Adding a new User to the system.
Affected Table: users
Added Fields: id, mobileId, registrationTime, unregistrationTime
Deleted Fields: None
Updated Fields: None
Name: User Removal
Description: Removing an User from the system.
Affected Table: users
Added Fields: None
Deleted Fields: id, mobileId, registrationTime, unregistrationTime
Updated Fields: None
Name: Service Registration
Description: Adding a new Service to the system.
Affected Table: registered_services
Added Fields: id, url
Deleted Fields: None
Updated Fields: None
Affected Table: registered_services_events
Added Fields: id, event
Deleted Fields: None
Updated Fields: None
Name: Service Removal
Description: Removing an existing Service from the system.
Affected Table: registered_services
Added Fields: None
Deleted Fields: id, url
Updated Fields: None
Affected Table: registered_services_events
Added Fields: None
Deleted Fields: id, event
Updated Fields: None
2.4.2. Prediction Server
2.4.2.1. ER Diagram
2.4.2.2. Main Tables
Users_Profile: userId, clusterId, contribution
The 'Users_Profile' table holds a map of all the users and their related clusters. Within every
user there is a specific attributes that make him a member of a specific cluster. The
prediction process will use this table for getting the specific users of a given cluster as a step
in the way of finding the next location.
userId (Number) - Contains the id of the user.
clusterId (Number) - Contains the id of the cluster which contain this user.
Users_Cluster: clusterId, clusterBuildupLocationSequence
The 'Users_Cluster' table holds the information for every cluster. For getting the essence of
many moving-patterns, we need the user's friends. That is the only way to make it useful. To
abstract a group of friends, we put them into a cluster: A group of people that is built up by
different attributes of cluster’s members.
clusterId (Number)- Contains the id of the cluster which contain this group of friends.
clusterBuildupLocationSequence (String) - Threshold condition. Only those who were the
most in these locations can enter the cluster.
Users_Cluster_Rules: clusterId , ruleId, rule
The 'users_cluster_rules' table holds a map of all the clusters and their related rules. A rule is
a sequence that represents the movement of a single user. Every user has a rule, a
movement-path. This path consists of the sectors the user has visited historically. When a
user is in a cluster, this rule becomes a cluster-rule, so a cluster has as much rules as it has
members.
clusterId (Number)- Contains the id of the cluster.
ruleId (number) - Contains the id of the cluster which contain this group of friends.
rule (String) - Contains a sequence that represents the movement of a single user.
Users_Cluster_Candidates: candidateId, candidate, clusterId
The 'users_cluster_rules' table holds a map of all the clusters and their related candidate.
Candidate is a sequence that represents the movement-pattern of a single cluster. The
candidate of a cluster is used for predicting the next step of a user in this cluster by
combining it with the rule of the cluster-member.
candidateId (Number) - Contains the id of the candidate.
candidate (String) - Contains a sequence that represents the movement of a single cluster.
clusterId (Number) - Contains the id of the cluster.
2.4.2.3. Main Transactions
Name: Location Addition
Description: Adding a new Location to the system.
Affected Table: users_locations
Added Fields: userId, time, longitude, latitude, sectorId
Deleted Fields: None
Updated Fields: None
Affected Table: users_profiles
Added Fields: userId
Deleted Fields: None
Updated Fields: None
Affected Table: location_frequencies
Added Fields: sectorId, numOfUsers
Deleted Fields: None
Updated Fields: numOfUsers
(* could be either adding a sector that has never been visited before, or just incrementing
the number of users that went to that location).
Name: Location prediction
Description: Predicting a location using prediction algorithm and database
Affected Table: users_profile
Added Fields: userId, clusterId, contribution
Deleted Fields: userId, clusterId, contribution
Updated Fields: userId, clusterId, contribution
(*Because ' Location prediction' is a big transection, we can meet various of cases: It is
possible that after a calculation we'll need to create a new / remove an old user. Another
case can be in which user has moved to another cluster so after the calculation we'll need to
update).
Affected Table: users_cluster
Added Fields: clusterId, clusterBuildupLocationSequence
Deleted Fields: clusterId, clusterBuildupLocationSequence
Updated Fields: None
(*For a set of clusters we must delete all of them and then to create new clusters for
updating the set).
Affected Table: users_cluster_rules
Added Fields: ruleId, rule, clusterId
Deleted Fields: ruleId, rule, clusterId
Updated Fields: None
(* Same for this table, for a set of rules we must delete all of them and then to create new
rules for updating the set).
Affected Table: users_cluster_candidates
Added Fields: candidateId, candidate, clusterId
Deleted Fields: candidateId, candidate, clusterId
Updated Fields: None
(* Same for this table, for a set of candidates we must delete all of them and then to create
new candidates for updating the set).
3. Behavioral Analysis
3.1 Sequence Diagrams
3.1.1 Storage server – add location
3.1.2 Storage server – get user's last locations
3.1.3 Storage server – Register user
3.1.4 Storage server – Unregister user
3.1.5 Prediction server – add user's location
3.1.6 Prediction server – predict location
The sequence continues on next page
3.2 Events
The general client-server event in our application is:
Name
A server operation
was made
Initiated By
System, triggered by
the application
developer (or the
user in the mock
application)
Description
The server
communicates
through REST
protocol. The user
can either use Loca
API to call a client
operation which will
call the server via
REST, or call the
server himself by
entering the right
parameters in a REST
call, or press a
button in the mock
application.
Action
When the server is
triggered, depending
on the operation it
initiates a database
session, and uses the
database to
read/write relevant
data. If the caller was
a client application
and the function has
an output, it is
returned via REST
protocol.
The Android API has more events to follow. Note that the application developer can be
replaced by a user who uses the demo "mock" application:
Name
User registers
Initiated By
Application
developer
Description
The user has to register
itself before starting to
track locations.
LocaManager has a function
for that.
User starts
tracking
location
Application
developer
The user initiates the
location collection process
Location
polling
interval
passed
System
GPS signal is
received
System
Sometimes, we wish to
query the location sources
every X seconds for the
current location, just to
ensure we're synced and a
little more accurate
The system asks GPS for the
current user location, or
receives an event from the
GPSSynchronizer
Accelerator /
Compass
System
The system asks an internal
sensor for some input, or
Action
After notifying Loca Server
with the user's phone
identifier (IMEI), a unique user
ID is returned and saved. From
now on, the system can start
tracking locations.
Concrete LocaManager starts
managing the user's locations.
In BestManager's case, it starts
listening to signals from each
of the LocationSource classes.
Concrete LocaManager asks
the specified LocationSource
for the current location, gets
it, and continues its
calculations.
If BestManager is selected to
manage locations, it sends the
new location with its accuracy
to all the other LocationSource
classes, and they synchronize
accordingly.
StayPolicy calculates whether
the user has moved
signal is
received
User stops
tracking
location
receives an event from it.
Application
developer
The user asks LocaManager
to stop the location
tracking.
significantly from the last
location he was at.
GAC calculates the user's new
location based on his internal
algorithms, and returns the
new location and the expected
accuracy.
If BestManager is selected to
manage locations, it turns off
its input Location Sources
(GPSSync, GAC, Stay) which
turn off Android's internal
location sources (GPS,
compass, accelerometer).
3.3 States
3.3.1. Localization server state chart:
Initialize server: Upon server startup, few components get initialized: the Hibernate
management, which wraps our database tables with objects (instead of us sending SQL
commands), get initialized. Also, startup processes may be executed, such as the initial
locations data import, which is defined to be done or not in a configuration file.
REST request received: The server splits in two: a background thread to handle the request
is made (automatically, through Java REST protocol handling) so that the main thread is still
open for new requests, while that background thread processes the incoming request, let it
be a new location, new user, a user asking for his past locations, user unregisters, or another
server registers for events.
REST processing complete: Any database session that was opened during the process gets
committed. If the server needs to return a value to the caller, Java handles that. Java also
automatically shuts down the processing thread.
Shutdown server: any running objects are freed, and the server is not reachable for calls
anymore.
3.3.2. Prediction server state chart:
Initialize server: Same as localization storage server initialization.
Predict Location request: The way the prediction server is set up at the moment, and,
according to our clients also the way it should be, handling location prediction is sequential.
That means, until one request is finished the other requests are pending. The algorithm
clusters users into groups of their most commons visited locations, and until all that is done,
no other request can interfere.
Clustering complete: After the clustering of users gets done, prediction server returns the
most likely next location of the current user, and lets other prediction requests pass.
Shutdown server: any running objects are freed, and the server is not reachable for calls
anymore.
3.3.3. Localization Client Android state chart:
Register user: Localization Client API can't work without a user ID. Therefore the application
developer must call the "register" function, which ensures that the storage server recognizes
this user. Only after that it is possible to start tracking the user's location.
Start tracking location: When the application developer calls that function, the selected
concrete LocaManager initializes all his LocationSources. If BestManager is selected, GAC,
StayPolicy and GPSSynchronizer are opened and running.
Location update received: The system works on a reacting model. That means, when one
location provider sends a location update, objects that registered to receive those updates
check that location and handle accordingly. For example, BestLocation wires up GAC so that
whenever GPSSynchronizer notifies it with a new location, GAC will update its current
location to the one given, to ensure the correctness of his algorithm (GPS is considered the
most accurate sensor, but also the heaviest one on resources).
Time trigger: Sometimes the location updates are selected to be polled after X seconds pass.
When that happens, the selected LocationSource returns the current location, and the rest
of the system updates itself accordingly.
Stop tracking location: Once the application developer calls this method, the
LocationSources are disconnected and closed.
Unregister user: LocaManager updates the localization storage server that the user doesn't
wish to be a part of this service anymore.
4. Object-Oriented Analysis
4.1. Android API
4.1.1. Class Diagrams
4.1.2. Class Descriptions
LocaManager – the main interface for the localization framework. Implemented as an
abstract class. Its public methods are the entry point for all the use-cases made by the
application developer, as he should work with a class that extends this class.







register() : takes the user's mobile ID (his IMEI), sends it to the server via
RestServiceClient, receives the user ID and keeps it. User can't register again if he is
already registered, unless he un-registered.
unregister(): calls the server-side "unregister" method via RestServiceClient. The
user has to be a registered user, meaning, he already registered before.
startTrackingLocation(): only available if the user has called register() before.
stopTrackingLocation(): only available if the user has called register() before. Stops
any resources associated with tracking the location of the user. If the user hasn't
called startTrackingLocation() before, this method will do nothing.
getLocation(): the only abstract method in this class. The concrete LocaManager has
to implement it.
getPastLocations(from: Date, to: Date, maxLocations: int) : Coordinate[] - calls the
server-side "getPastLocations" method via RestServiceClient. The user has to be a
registered user, meaning, he already registered before. It's optional to enter filtering
parameters: maximum backward locations count, and a date range. The returned
value is the array of locations of this user.
sendCurrentLocation(): explicitally calls the "sendLocation" method of
RestServiceClient. LocaManager will also do that periodically according to a
configuration parameter, but the user can ask the class to do it again.
LocaManagerConfig – holds a configuration file, with parameters that the application
developer can change before using the application. An example of the available parameters:

getSendLocationInterval() : long - the fixed interval of milliseconds to send the
current location of the user to the server. Read from a line in the configuration file.
RestServiceClient – interacts with the Localization Server for the operations that should
involve the server. It has the URL of the server to connect to. Implemented as a "proxy" – it
represents all the available server operations, with the exact input types and return types,
only what it does is passing them on to the server using REST protocol, waiting for a
response and parsing the result to the desired return data type.
BestManager – an implementation of the efficient location management in the client side.
Instead of asking the GPS for the exact user location, which is the heavy operation we are
trying to narrow to the minimum, it combines other methods to save energy and
communication. It has references to all the currently implemented location sources: GAC,
GPSSynchronizer, and StayPolicy.

onNewLocation(subject: LocationSource, data: LocationState) : BestManager listens
to "events" from all the LocationSources, and decides what to do when a new
location is notified from each one of them. If GPSSync sent a new location, it also
updates all the other LocationSource's. If it received a poor accurate of the location
from GAC, it checks the time for the next call for the GPS, and if it's too long, it calls
GPSSynchronizer to ask the GPS for the current coordinate. Other improvements will
be implemented as time goes on after measuring results from experiments.
AcademicManager – an alternative implementation of the location management in the
client side. The application developer can choose which concrete LocaManager he wants to
use. Currently this is a place holder for an implementation from other people.
BestManagerConfig – extends LocaManagerConfig with more parameters inside the same
configuration file. These extra parameters are relevant only to BestManager. Examples of
parameters necessary for BestManager:

getGpsSyncInterval() : long – the fixed interval of milliseconds to ask the GPS of the
device for the current location. Read from a line in the configuration file.
LocationSource – an interface for every input source to calculate the client's current
location.


getLocation() : LocationState – asks the concrete LocationSource for the known
current location of the user. The returned location is composed of the location and
an error estimate.
getObservable() : Observable – a client can be subscribe to receive location updates
from a LocationSource, using Java "observer" design pattern.
Coordinate – the most basic description for a location: latitude and longitude.
LocationState – a client location report, consisting of a location (Coordinate) and the
accuracy of that report – in meters.
GPSSynchronizer – implements LocationSource by asking the GPS for the current client
location. The actual call to the GPS is specified by BestManager, which initializes it. Also
extends Java Observable for the observable design pattern. It also subscribes for the GPS for
updates in time and distance.

getLocation() : LocationState – inherited from LocationSource, asks the GPS
ingredient of the device for the current location of the user. The device GPS also
returns an estimation of the error and that will be returned as well. We assume that
most results here are very accurate.

notifyObservers() – inherited from Observable, notifies the new GPS location of the
user.
StayPolicy – another LocationSource implementation. Works with the device accelerometer
and compass this way: if the client hasn't moved since the last known location, or barely
moved, it returns the last location with a good accuracy of some meters. Else, it returns the
last location with a "bad accuracy". Also extends Java Observable for the observable design
pattern.

notifyObservers() – inherited from Observable, notifies current estimated location of
the user.
GAC – GPS, Accelerometer, Compass. Combines the three to determine the client's current
location. GAC will not call the GPS to calculate the location but rather only consider last
locations given from the GPS, not from any other source. It uses Newton's laws of motion
and earth geometry model to calculate the new location. Also extends Java Observable for
the observable design pattern.


getLocation(): LocationState – inherited from LocationSource. Since this class always
keeps track of the current estimated location of the user based on the motion
sensors, it simply returns the current location known to the system. No other
calculation is required. The accuracy estimation is received from its internal
calculators along with the location updates.
notifyObservers() – inherited from Observable, notifies current estimated location of
the user.
LocationManager – an Android class which gives details about the user's location by using
the internal GPS, or the wireless IP.
Accelerometer – an Android class which manages the accelerometer sensor.
Compass – an Android class which manages the compass sensor.
MotionCalculator – uses Newton's laws of motion to try and calculate the new location,
based on a past location, speeds and accelerations.

calculateNewLocation(from: LocationState, speed: Movement, direction:
Movement) : LocationState – uses the basic Newton laws of movement to
determine a new location based on a past location, starting speed (strength and
direction), the change in acceleration in all three directions, and the change in the
movement direction. We don't assume that the acceleration is constant but rather
use the derivative-based formulas for speed and acceleration. Returns a location and
an error estimation in meters.
GeodesyCalculator – uses a geometry representation of earth to calculate a new coordinate
based on a previous coordinate and a distance. As you know, Euclidian distance it not so
accurate for those things. We use a given package for geodesy calculations which was
already tested and proved.

calculateNewLocation(from: LocationState, direction: Movement, movement: int) :
LocationState – calculates a new coordinate from an old coordinate, a change in the
movement direction and the movement in meters. Returns a location and an error
estimation in meters.
Observable – a Java class which supports "push" updates for changes in those who extend it.
For us, every LocationSource has to be connected to an observable, in order to get other
clients connect to it and receive location updates. So far, we implemented that connection
through inheritance – each of the 3 LocationSources extends Java Observable and
implement LocationSource interface.
Observer – a Java class which supports receiving "push" updates by those who extend it, for
changes in "Observable"s. So far, BestManager serves as the client to receive updates about
the observables – the LocationSources.
4.2. Storage Server
4.2.1. Class Diagrams
4.2.2. Class Descriptions
LocationsRestAPI – an interface for the server entry point for all the possible operations. All
its functions are the user cases available for the application developer, or the registered
service, and we talked about them in chapter 1.
LocationsRest – implements that interface using REST. Mostly delegates the work to the
"logic" package. The "services" package is doing more things with putting the server online
and registering for REST protocol queries, and the actual work is delegated to the next
package. Whether to use this class or another implementation is specified in a configuration
file and loaded through ReflectionUtils, so that we don't need to recompile to use a different
implementor.
BaseContextListener – handles the start-up of the server. Initializes the database with input
data (if specified in the configuration). Also handles the shut-down of the server.
LocationsManager – contains all the algorithms that are related to the locations, user
management, storage and retrieval of locations. On each REST call regarding locations
management, one of the operations from LocationsManager is called.




addLocation – checks if the user exists, and if so, adds the new location to the
database in the proper table structure.
getLastUserLocations – according to the given parameters (amount of last locations
to return, starting/ending date), queries the database and returns an appropriate
array of coordinates.
registerUser – if the user already exists, just returns its existing user ID. Else, it adds
the user to the database. The user is identified here by his mobile ID and this
function returns the new ID from the "users" database table.
unregisterUser – sets the user's "unregistration time". This indicates that the user
doesn't use our service anymore; however we still own the past data of him.
ServicesManager – contains all the algorithms that are related to registering external
services to the localization server on some events. On each REST call regarding registering
and unregistering services from events, one of the operations from ServicesManager is
called.



registerService – adds the URL of that external REST service to the database table,
according to the given events that this service wants to register to.
unregisterService – removes the URL's of the external REST service from the
database tables.
triggerEvent – for the given event, this function gets the REST URL's of all the
registered external services, and sends them the new information via REST protocol.
ReflectionUtils – manages our most common use for configuration files – determining which
interface implementation to use. In the server we use many interfaces, and we set the
concrete class in external configuration files, so that we can change it without re-compiling
the code. This class takes the data type defined in the configuration file and turns it into an
actual class, using reflection.
ExceptionKeeper – a utility class to pass an exception object between anonymous
implementations of classes. Since we can't override a function and add a "throws" to the
concrete method only, we use this class to hold the exception and check later if there was
one thrown.
LocationsDao – an interface for the database-related operations (DAO = Data Access
Objects) about locations, user management, storage and retrieval of locations. All its
operations involve holding a Hibernate Session. Works mostly with the data classes, which
are automatically generated from the SQL schema. In section (2) data model we specified
that there were no real connections between the data classes, since they were autogenerated. The connection takes place here – Hibernate will throw an exception if a
database constraint is violated, and this exception will continue as LocaException and bubble
up to the caller of the methods here.
LocationsDaoImpl – a MySQL implementation of LocationsDao. Whether to use this class or
another implementation is specified in a configuration file and loaded through
ReflectionUtils.
ServicesDao – an interface for the database-related operations about registering and
unregistering services to the different server events. Works mostly with the data classes,
which are automatically generated from the SQL schema.
ServicesDaoImpl – a MySQL implementation of ServicesDao. Whether to use this class or
another implementation is specified in a configuration file and loaded through
ReflectionUtils.
4.3. Prediction Server
4.3.1. Class Diagrams
4.3.2. Class Descriptions
Some of the classes here are very similar in their roles to the ones in "storage server", so we
will mostly focus on the new concepts of classes and methods here.
PredictionRestAPI – an interface for the server entry point for all the possible operations.
PredictionRest – implements that interface using REST. Mostly delegates the work to the
"logic" package.
BaseContextListener – handles the start-up and shut-down of the server. Initializes the
database with input data (if specified in the configuration).
IClusterer – an interface for the "clustering" operations, which are mandatory to be created
before doing the actual location prediction. There can be many ways to implement that
interface due to efficiency and handling lots of data on the way. Therefore we chose to
expose it as an interface.



createAndPersistClusters – divides the users into cluster groups. Every user's X most
frequent visited locations (X is configurable) represent his cluster. For each cluster,
its entrance rule ("build up sequence") is calculated. If that cluster representation
already exists, the user is added to that cluster; otherwise a new cluster is created.
createAndPersistUsers – updates the users' profiles to their given clusters
createAndPersistCandidates – for each cluster, calculates the "candidate" – the next
best location/s to predict for anyone in that cluster.
Clusterer – currently the only implementation of IClusterer. Implements all the operations
for clustering the users and the locations in groups, which has to happen before doing the
actual prediction of the next location.
IPredictor – an interface for predicting the next location, based on existing clustering of the
users to groups.

getPredictedUsers – given a location (a Google tile ID named here as "sector ID"),
this function uses the prediction algorithm to return a "feasibility map" – for each
user (key = user ID), the probability that that user is expected to visit that location,
for all users but the asking user. This function was written in the original location
prediction package by a Deutsche Telekom intern, and we inherited that function. In
our application we will use a simpler method.
Predictor – an implementation of IPredictor to predict the next location of a user, based on
past locations and clustering of all the users to groups.
LocaPredictor – during the implementation process we found out that the interface is not
exactly what we need, and we really want a simpler function with different input and output
variables. However, we wanted to reuse the helper methods from the original Predictor. So
we chose to extend Predictor with the input and output variables that we needed, and called
some of the functions in Predictor (which were originally private, now protected).

predictNextBestLocation – given a user ID, this function uses the location prediction
algorithm, to find the most likely location that this user will visit next. The returned
data a representation of a coordinate on the map. On every "predict next location"
REST call, PredictionRest calls LocaPredictor and asks it to do the actual prediction
algorithm.
MitToUsersLocations – to simulate large data, we have an input database table from an MIT
simulation. No data of real users is kept there, only their ID's and past locations. This class
takes the input table and adds the information to our database. Whether to operate it or not
is saved in a configuration file and loaded (or not) in the start of the server.
Tile – represents a Google Tile. A tile is a "square" on the map for a certain zoom level. It is
represented by the coordinates which define the north-east and the south-west latitude and
longitude, and begin-end range which represent the zoom level. Unlike localization "storage"
server, the prediction server only works with Google tiles because it's easier to associate a
group of users to a square of locations instead of one specific coordinate. It is also good for
future consideration of data security, which is another factor that this service was designed
according to.
GoogleTileUtils – conversions and measurements of google tiles to other external location
data types.
CoordinateUtils – utility class of calculations for Euclidian distance and earth distance
between places.


euclidianDistance – calculates the "blind" distance of a straight line between two
coordinates.
earchSurfaceDistance – calculates the distance between two coordinates on Earth.
For example, the distance between Alaska and Russia will be very big on
euclidianDistance, because the longitudes are very different from each other, but
here, the distance will be relatively small, as expected.
ReflectionUtils – manages our most common use for configuration files – determining which
interface implementation to use. In the server we use many interfaces, and we set the
concrete class in external configuration files, so that we can change it without re-compiling
the code. This class takes the data type defined in the configuration file and turns it into an
actual class, using reflection.
PredictionDao – an interface for the database-related operations (DAO = Data Access
Objects). The operations there are very simple and either query or command, not both.
Every function basically wraps an SQL query. The calls to those functions are usually through
the "logic" package.
PredictionDaoImpl – a MySQL implementation of PredictionDao. The determination to use
this class as the implementer or another class is defined in a textual configuration file.
4.4. Packages
4.4.1. Android Client
loca.client: consists of the main application objects: LocaManager, LocaManagerConfig and
the implementers of them.
loca.client.communication: classes which deal with communicating to the storage server.
loca.client.locationSources: the classes which can provide the user's current location.
loca.client.processing: calculators and different algorithms which will be used for internal
calculation of the user's location, and similar things.
loca.client.utils: Utility classes with no specific reference to this project but more general
methods to solve common problems.
4.4.2. Server – general
We have divided our server into several subprojects (not packages, different JAR's), so that
we can work in tiers:
dao: stands for Data Access Objects. Contains classes for Database access, and also for
retrieving information from other external input sources such as files.
logic: contains the main algorithms of the project. Handles the processing of operations.
Depends on "dao".
services: entry points for the server to operate. The service project only deals with tasks of
initiating a service and running it. When a request is made, the first thing it does is passing it
on to "logic". Depends on "logic".
commons-loca: cross-project classes, including: the data classes automatically generated
from the database schemas, and utility classes. All the other subprojects depend on this one.
4.4.3. Storage Server
loca.dao: general things like constants, and interfaces for all the database operations.
loca.dao.impl.mysql: a MySQL implementation for all the database-related operations.
loca.commons: general cross-project things like database constants and customized
exceptions.
loca.commons.vo.db: data classes that are automatically generated from the database
schema by a tool.
loca.logic: all the storage server algorithms for dealing with users, locations, and registered
services.
loca.services: general services operating classes such as the startup listener, constants and
configurations reader.
loca.services.locations: interfaces for all the server operations.
loca.services.locations.rest: an implementation of the interface from the above package in
REST protocol.
4.4.4. Prediction Server
loca.prediction.dao: general things like constants, and interfaces for all the database
operations.
loca.prediction.dao.impl.mysql: a MySQL implementation for all the database-related
operations.
loca.prediction.commons: general cross-project things like database constants and
customized exceptions.
loca.prediction.commons.vo.db: data classes that are automatically generated from the
database schema by a tool.
loca.prediction.logic.dataGeneration: algorithms and processes for creating fake input data,
loading new data, initiating a new location row, and displaying that data on the screen for
auditing.
loca.prediction.logic.clustering: algorithms for grouping the users based on common
behavior.
loca.prediction.logic.findCandidates: algorithms for processing the clusters and finding the
most likely next locations for a given user, or group of users.
loca.prediction.logic.prediction: algorithms for predicting the next location. Also initiating
the previous algorithms of clustering and finding candidates.
loca.prediction.services: general services operating classes such as the startup listener,
constants and configurations reader.
loca.prediction.services.prediction: interfaces for all the server operations.
loca.prediction.services.prediction.rest: an implementation of the interface from the above
package in REST protocol.
4.4.5. Other
commons: some classes may be useful for both servers and the Android client. One example
is "reflection utils" to read from a configuration file and create an instance from it.
4.5 Unit Testing
4.5.1. Basic Operations Testing
Functionality
Add user
location
Description
Localization client / 
registered service send to
the storage server a location
update, about a user, a 
specific time, and location
coordinate.


Get last user
locations
Localization client / 
registered service query the
storage server about
locations of a group of
users. Optional filtering 
parameters: date range,
max results to return.



Start
localization
client
Localization client begins 
getting user's locations
every period of time, and
sending updates to the 
server.
Stop
localization
client
Localization client stops the 
process of requirement
Register
service
A service adds itself to 
receive event notifications
from the storage server
("push").
This also gives the service 
permission to ask the server
Tests
Test that Localization
client can add a valid
location.
Test that a client can’t
add a non existing
location.
Test that a nonregistered client can’t
add new location
Verify that added
locations are stored in
the DB
Comments
Test that the
Localization client can
query for single user
last location
Test that the
Localization client can
query for a group of
users last location
Test filtering by date
on a query
Test filtering by max
results query
Test that a nonregistered client can’t
get user locations
Test that starting the
client does add
location periodically
Test that the location
sent are saved in the
right order in the DB
Test that after
stopping, no new
locations are added
for the client
Test that a service can
register to receive
notifications from the
server.
Test that a service
can’t register itself
This is mainly a
timed call to
“add location”
and so its tests
are covered by
it
for past locations and add
new user locations. 
more than one time
Test that a registered
service does get
notifications when
relevant events
happen (relevant
locations are added)
Unregister
service
Removes a service from the 
list of known clients from
the storage server.

Test that a service can
un-register itself from
the server.
Test that an
unregistered service
doesn’t get
notifications for any
event
Register user
Localization client sends a 
unique identifier of the user
("strong identity") to the
storage server. The storage
server returns an ID of the 
user, and that's how the
user is recognized from now
on. If the user already exists,
the server returns its
existing ID. 
Unregister
user
Localization client lets the 
server know that a user has
unregistered from the 
platform. The server simply
mentions the unregistration
date and time.

Events for the
registered
service
Previous Functional 
requirements can trigger
events for any registered
service that registered to
accept them. Whenever one
of those functions happens,
the storage server triggers
the following event in the
registered services that
requested to be notified on
that event.
Test that a user can
register from a client
and get an ID from the
server
Test that if an existing
user tries to register
again he will get his
stored ID (same one as
the first time)
Test the two different
registering users get
different IDs
Test that a user can
unregister.
Test that the server
reply an unregistering
user with the current
time
Test that the user is
removed from the DB
Test that a registered
service gets events for
every update – add
location, get last
location, register a
user and unregister a
user.
4.5.2. Framework Extensions Testing
Functionality
Location
prediction
Predict next
location
Description
Three algorithms for
recommending the next
movement of a user in the
system will be implemented
by a "registered service".
That service will register for
the event of "add user
location", so that every time
a new location is added, the
recommendation service is
notified.
A function of the 
recommendation service.
Returns the next
recommended location of 
the given user based on the
algorithm inside it.

Mock
application
A demonstrator for the 
localization client and the
registered service will be
Implemented.



Tests
Test that Prediction
for a registered
return a location.
Test that the
locations returned
are valid
coordinates
Test the a nonregistered user
trying to use
prediction get an
error message
Test that Users can
register and
unregister using the
demo client
Test that Users can
add and get
location using the
demo client.
Test that it is
possible to start
and stop periodic
location sending.
Test that registered
service gets all 4
types of updates
Comments
Evaluating the
quality of the
prediction
algorithms is not a
functional
requirement
itself. Deciding the
quality of the
prediction will be
done later by beta
tester.
4.5.3. Framework Monitoring and Learning Testing
Functionality
Configuration
management
Description
The framework should
provide the user the ability
to control the
configuration of
the data usage frequency:
 Duration between the
location updates a
localization client
sends.
 If using the location
prediction service,
frequency of calling
that service.
And additional parameters,
such as:
 Address of the storage
server





Security
The framework should not 
expose the entire database
to one user, only the
information that relevant
for him. The localization 
client will get information
only relevant to the user it
represents.

Logger
The system shall have a 
logging mechanism, to
view all the user
commands


Tests
Test that the
default
configurations
work smoothly
Change the
frequency of
sending locations
using the demo
client UI
Change the
update
frequency using
the demo client
UI
Test the ability to
change the
location storage
server
Test that after
changing the
location server
location are still
saved
Test that the user
can’t get
prediction for
other users
Test that a user
can’t add
location for
another user
Test that a user
cant register
without its
unique ID
Test that it’s
possible to
change log level
from info to
debug and error
Test that all
added location
are accounted
for in the log.
Test that all user
logins and
logouts are
accounted for in
Comments
the log.
Deployment
The localization client will 
be a code library, to be
used as reference inside
the location-based
application that will be
developed by the 
platform's user.
Test that the
localization client
can be imported
and added to a
new project
Test run the
client with the
imported project
4.5.4. Server Requirements Testing
Functionality
Server
Database
Server
sessions
monitoring
Description
The storage server shall
hold a database with all the
users, the users' locations,
registered services and the
events the services are
registered to.
The storage server shall 
manage a log file that will
indicate who contacted the
server, when the
connection occurred and all 
the data transfer.

Server GUI
The storage server will have 
basic GUI, exposed via web
pages, with a pleasant view
of the database and past
operations. Access to the
pages will require the 
username & password of
the storage server
administrator.


Tests
Test that all
connections to
the server are
logged
Test that failed
connections
attempt are
logged
Test that all
location data
transfers are
logged
Test that the
server GUI can
be logged in with
valid admin
credentials
Test that the
server GUI can’t
be access
without logging
in
Test that it is
possible to get a
specific User
location via the
server GUI
Test that it is
Comments

Server
Deployment
An installation guide on 
how to set up a new
storage server will be
provided
possible to
unregister and
delete a user
using the GUI
Test that it is
possible
Verify that
Server is
installed and
working after
following the
steps described
in the manual
5. System Architecture
5.1. Components
"Localization Platform" is composed of:
The "storage server" saves all the locations (past and present) of the users (registered, past, online and offline) in
the application. That server will expose different interfaces for setting information and
getting existing information from it.
"Localization clients" –
client-side code packages that handle the interaction with the storage server. We will
provide localization clients for Android platforms. In addition to triggering the logics in the
server, the clients will also handle the device's own localization data, starting/stopping it,
reading from it, etc., leaving the consumer the simple option to turn the localization usage
on and off. One of the key limitations of the localization clients is that they only manage one
user's localization data. This is a security requirement in order not to take advantage of the
sensitive data.
"Registered service" –
another way of interacting with the storage server, is by letting the server know about the
presence of the client. The service will register itself in the server, and as a result will be
exposed into a larger set of operations with the server. The consumer will use this when he
needs to manage localization data of more than one user. The server can trigger events on
the registered services, instead of the services checking the server every now and then
("push" instead of "pull").
"Location recommendation" –
an example of a registered service that will be provided with the framework. This contains
an algorithm that based on the users' past locations, can try to recommend their upcoming
movement. The storage server will push new data to it, so when a client asks to recommend
his next movement, the service will be ready to solve it quickly.
"Location-based application" –
uses the "localization client" or interacts with a "registered localization service", to take
advantage of the framework's features. This will be developed by the consumer of our
framework. We will provide a "mock application" that takes use of every feature in the
localization framework, as a placeholder for the real application.
5.2. Architecture Diagram
Registered service
Storage server
Location recommendation
Localization client
Location-based
application
Mock application
Legend:
Communication
Inheritance
5.3. Configuration
The Android client configuration uses an XML file of configuration parameters, and lets
Android transform it into hard-coded variables when the code compiles. This mechanism is
built-in from the Android SDK. Some of the configuration parameters are:



The URL of the storage server (and the external services)
The fixed duration (milliseconds) for polling the GPS for location
The fixed duration (milliseconds) for getting the location with the accelerometer
The server configuration is written in textual .properties files. Those files are made of
key=value lines, and we use an API for this type of files to get values from the keys. The
parameters can be changed only when the server is down, and after we put the server up
again, the new values are used.
The most common use for configuration in our architecture is when using interfaces, such as
the data access interface or the service interface. We don't want to hard-code construct the
concrete class in our code, so we use reflection, to take the package and name of the
concrete class from the configuration file and work with it as the interface.
Another common configuration parameters group in the servers is the databases URL paths,
schema names, username and password.
In the prediction server, we have a few more configuration parameters:



The X most-frequent locations to define a new cluster
The minimum support for apriori candidate generation (between 0.0 and 1.0),
defines the threshold for the candidate-generation. e.g. 40 means 2 of 5 users have
to support the sequence.
The zoom level needed for all the locations being represented in Google Tiles. A
Google tile consists of X, Y (identifiers) and a zoom level. The bigger the zoom, the
smaller the square on the map.
The servers also have other files for configuration:



An SQL file that represents the database schema. Hibernate-friendly data classes are
automatically generated from it using a script.
Hibernate configuration files.
Web.XML – a file required for the server to know which classes to run, and special
mechanisms like the REST protocol facades.
5.4. Server GUI
The localization framework will typically need a server administrator. To make his life easier,
we put together an HTML file for basic viewing and editing operations on the system. That
page allows him to:




Look at the current database tables
Edit some of the database tables' data, such as: users past locations, registration and
unregistration times, and mostly things that are not primary key or constraintrelated.
Import new data of users locations into the system
Register and unregister external services to the storage server
Of course, this page can only be accessed from inside the server computer and no external
user is given access. We also use that page to debug our application more carefully.
5.5. Deployment
The Android client is compiled very easily: the API compiles into JAR, and if there's a
location-based application like our Mock Application, it imports that JAR and compiles using
Android SDK or the Eclipse plugin. For the server/s, we use a big ant file for the deployment
of the different components. The automatic ant deployment consists of a few steps, and
both are the same in the storage server and the prediction server. Right now we use an
Apache Tomcat server and the deployment fits it and no other server:
1.
2.
3.
4.
Compile the SQL schema into automatic classes (the commons.loca package).
Import external JARs and libraries to use by the server.
Copy all the JARs, libraries and projects, into the server "shared\lib" folder.
Compile the server "services" project into a "war" file, which is a file that the Apache
Tomcat server can handle.
5. Copy the "war" file into the server "webapps" folder.
A "war" file is basically a zip of all the classes and references. When the server gets up, it
takes all the "war" files from its "webapps" folder, unzips them, and calls start-up classes it
recognizes (they have to inherit a superclass of Apache, we have BaseContextListener for
that). It also reads web.xml and finds out that we have REST protocol entry points, and the
classes that correspond to them.
The server can be deployed in any computer that's connected to the internet. The only thing
is that the Android client will have to know the server's IP address to connect to its REST
functions.
6. User Interface Draft
Our application is mostly a framework for other developers, but we did make a mock
application to demonstrate the capabilities of the application. Here are a few screens from
our demo "mock" application:
7. Testing
7.1. Performance Constraints
In order to check the most of the constraints, we will use a cluster of computers to set a
large array of android systems emulators each one running a client (About 150 emulators).
We will perform the following tests:
Functionality
Constraints
Tests
Comments
Speed
In order to test the speed
 The connection with the
constraint We will use
storage server should take
the emulator array to less than 5 seconds.
 Connecting to the
 The location update from
server
the client to the server
should take less than 5
 Adding a new
seconds.
location
 The location prediction
 Getting a prediction
should take less than 10
seconds.
Capacity
 The number of users that
 Test that it is possible
can access the storage
to add 999 users to
server simultaneously will
the system
not exceed 999(TCP/IP
 We will use the
capabilities).
emulator array to
 The number of active users
check that it is
can the storage server can
possible to connect
handle will not exceed 999
with up to 80 client
simultaneously
 A higher capacity test
will be performed at
the beta testing
stage
Throughput  The storage server should
 We will use the
handle as many as 150
emulator array to
requests simultaneously
send 150 prediction
(The server is available to
requests
max. 999 users
simultaneously.
simultaneously, although
 We will verify that
some of them might wait
the 150 request got a
until a thread becomes
location prediction as
available).
an answer
 The predication server
should handle as many as
150 requests simultaneously
Reliability
 In 100% of the cases when
 Legal and illegal
an unregistered client
registration requests
makes a request, the
will be sent to test
operation fails.
durability of the
system. Simulation of
 Each registration that is
a
supposed to succeed shall
take place.
 Registered and
unregistered users
 Each request of a register


Safety &
Security


client should be succeeded,
in case the server is online.
Each request for location
update should be
succeeded, in case the
server is online.
Each request for location
prediction should be
succeeded, in case the
server is online.
When a user sends a
location update the storage
server will update only this
specific user's data
When a user sends a
location prediction request,
he will get the correct
information only about him
will send prediction
request, all
registered should get
a prediction and all
unregistered should
get an error message


Portability &
Reliability





The system works on the
Android mobile operating
The server GUI web
interface will be 100%
compatible with HTML
standards and therefore be
available to every standardscompatible web browser.
The following web browsers
are expected to be fully
supported: Google Chrome,
and Firefox.
The system should support
only in an English text
In case of a network failure
any connection between
client and server will be
disconnected.
When the server crashes,
whether it is its software
crashing or its hardware
crashing, it is supposed to
go back up restoring above
90% of the data it previously
acquired.




We will use the
emulator array to
simulate a state
where many users
are adding different
locations, and check
that for each user it
own unique location
was added
We will create a state
where each user has
a different unique
prediction, and then
check that each user
gets its own specific
unique prediction.
All of the client teat
will be performed on
Android OS.
(Emulators and real
phones)
Test that it is possible
to install the
application on the
last version of the
Android OS
We will perform the
server GUI functional
test on the three
web browsers
mentioned above to
make sure that the
application is not
failing on them.
Test that it is possible
to restore the system
from a daily backup
dump - To verify
support of restoring
in case of the server
crushing.
Usability



Availability


The API documentation will
be available as static stand
alone web pages
("Javadoc").
The mock application will
provide a way to check the
following functions:
o Registration.
o Send current
location.
o Predict next location
The client will be able to
configure the sending
current location frequency
and the prediction
frequency
The database server and
prediction server shall run at
least 95% of the time, and
listen to requests from
clients.
On the client side, the
application can be shut
down and the client decides
when to turn it on.





Test that the javadoc
is accessible via the
internet
Functional testing of
the mock application
will cover the
usability test of the
application
This will have to
tested over a long
period of running
time. Mainly in the
beta testing stage.
Test that the android
application is starting
smoothly
Test that the android
application shutting
down gracefully on
the users command
8. Task List
Period
10/4 - 23/4
Length
2 weeks
24/4 - 7/5
2 weeks
8/5 - 21/5
2 weeks
22/5 - 4/6
2 weeks
5/6 - 17/6
3 weeks
Task
Implementing The GAC algorithm and
the Stay policy
Implementing the BestManager,
rearranging the server GUI
Finishing up the UI for prototype
presentation, integrating the
BestManager with the three algorithms
Writing a User manual, expanding the
documentADD test part to a testing
Setting up a large scale emulator test,
Starting a field test (Beta release).
Download