swing2/2.Design Document/DD.lyx
2017-01-12 12:58:17 +01:00

5628 lines
99 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#LyX 2.2 created this file. For more info see http://www.lyx.org/
\lyxformat 508
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass article
\begin_preamble
\usepackage{listings}
\usepackage{xcolor}
\usepackage{pdflscape}
\usepackage{courier}
%\usepackage{mathtools}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{listings}
\lstset{columns=fullflexible}
\usepackage{charter}
\usepackage{xspace}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
% Definizione intestazioni e pie' di pagina
\usepackage{fancyhdr}
% _____________________________
\lstdefinelanguage{JS}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
keywordstyle=\color{blue}\bfseries,
ndkeywords={class, export, boolean, throw, implements, import, this}, ndkeywordstyle=\color{darkgray}\bfseries,
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{purple}\ttfamily,
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\lstset{frame=tb,
language=JS,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small\ttfamily},
numbers=none,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=3 }
% _____________________________
\end_preamble
\use_default_options true
\begin_modules
InStar
graphicboxes
fix-cm
fixltx2e
fixme
customHeadersFooters
pdfform
\end_modules
\maintain_unincluded_children false
\begin_forced_local_layout
Format 60
Style "In Preamble"
Category "FrontMatter"
Margin Static
LatexType Paragraph
InTitle 0
InPreamble 1
TocLevel -1000
NeedProtect 0
KeepEmpty 0
NextNoIndent 0
CommandDepth 0
LatexName "dummy"
ItemCommand item
LabelType No_Label
EndLabelType No_Label
ParagraphGroup "0"
ParIndent MM
ParSkip 0.4
ItemSep 0
TopSep 0
BottomSep 0
LabelBottomSep 0
ParSep 0
NewLine 1
Align Block
AlignPossible Block, Center, Layout, Left, Right
FreeSpacing 0
PassThru 0
ParbreakIsNewline 0
RefPrefix OFF
HTMLLabelFirst 0
HTMLStyle
div.standard {
margin-bottom: 2ex;
}
EndHTMLStyle
HTMLForceCSS 0
HTMLTitle 0
Spellcheck 1
ForceLocal 1
End
Style "In Title"
Category "FrontMatter"
Margin Static
LatexType Paragraph
InTitle 1
InPreamble 0
TocLevel -1000
NeedProtect 0
KeepEmpty 0
NextNoIndent 0
CommandDepth 0
LatexName "dummy"
ItemCommand item
LabelType No_Label
EndLabelType No_Label
ParagraphGroup "0"
ParIndent MM
ParSkip 0.4
ItemSep 0
TopSep 0
BottomSep 0
LabelBottomSep 0
ParSep 0
NewLine 1
Align Block
AlignPossible Block, Center, Layout, Left, Right
FreeSpacing 0
PassThru 0
ParbreakIsNewline 0
RefPrefix OFF
HTMLLabelFirst 0
HTMLStyle
div.standard {
margin-bottom: 2ex;
}
EndHTMLStyle
HTMLForceCSS 0
HTMLTitle 0
Spellcheck 1
ForceLocal 1
End
\end_forced_local_layout
\language english
\language_package default
\inputencoding auto
\fontencoding global
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\graphics default
\default_output_format default
\output_sync 1
\bibtex_command default
\index_command default
\float_placement H
\paperfontsize default
\spacing single
\use_hyperref true
\pdf_bookmarks true
\pdf_bookmarksnumbered false
\pdf_bookmarksopen false
\pdf_bookmarksopenlevel 1
\pdf_breaklinks false
\pdf_pdfborder false
\pdf_colorlinks false
\pdf_backref false
\pdf_pdfusetitle true
\papersize default
\use_geometry true
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 1
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 2.5cm
\rightmargin 2.5cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{titlepage}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
newcommand{
\backslash
HRule}{
\backslash
rule{
\backslash
linewidth}{0.5mm}}
\end_layout
\begin_layout Plain Layout
\backslash
center
\end_layout
\begin_layout Plain Layout
\backslash
textsc{
\backslash
LARGE Politecnico di Milano}
\backslash
\backslash
[1.5cm]
\backslash
textsc{
\backslash
Large PowerEnjoy}
\backslash
\backslash
[0.5cm]
\end_layout
\begin_layout Plain Layout
\backslash
textsc{
\backslash
Large Software Engineering 2}
\backslash
\backslash
[0.5cm]
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
HRule
\backslash
\backslash
[0.4cm] {
\backslash
huge
\backslash
bfseries Design Document}
\backslash
\backslash
[0.4cm]
\backslash
HRule
\backslash
\backslash
[1.5cm]
\end_layout
\begin_layout Plain Layout
\backslash
begin{minipage}{0.4
\backslash
textwidth}
\backslash
begin{flushleft}
\backslash
large
\backslash
emph{Authors:}
\backslash
\backslash
Giancarlo
\backslash
textsc{Colaci}
\backslash
newline Giulio
\backslash
textsc{De Pasquale}
\backslash
newline Francesco
\backslash
textsc{Rinaldi}
\backslash
end{flushleft}
\backslash
end{minipage} ~
\backslash
begin{minipage}{0.4
\backslash
textwidth}
\backslash
begin{flushright}
\backslash
large
\backslash
emph{Supervisor:}
\backslash
\backslash
Elisabetta
\backslash
textsc{De Nitto}
\backslash
end{flushright}
\backslash
end{minipage}
\backslash
\backslash
[3cm]
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Graphics
filename res/img/logopm.pdf
width 30text%
\end_inset
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
vfill
\end_layout
\begin_layout Plain Layout
{
\backslash
large
\backslash
today}
\backslash
\backslash
[3cm]
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
end{titlepage}
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
mbox{}
\backslash
thispagestyle{empty}
\backslash
newpage
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents
\end_inset
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
thispagestyle{empty}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
setcounter{page}{1}
\end_layout
\end_inset
\end_layout
\begin_layout Section
Introduction
\end_layout
\begin_layout Subsection
Revision History
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
<lyxtabular version="3" rows="3" columns="4">
<features tabularvalignment="middle">
<column alignment="center" valignment="top">
<column alignment="center" valignment="top">
<column alignment="center" valignment="top">
<column alignment="center" valignment="top">
<row>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Version
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Date
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Author(s)
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Summary
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
1.1
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
14/01/2017
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Giancarlo Colaci, Giulio De Pasquale, Francesco Rinaldi
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Name refactoring
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
1.0
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
12/12/2016
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Giancarlo Colaci, Giulio De Pasquale, Francesco Rinaldi
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Initial Release
\end_layout
\end_inset
</cell>
</row>
</lyxtabular>
\end_inset
\end_layout
\begin_layout Subsection
Brief description
\end_layout
\begin_layout Standard
This document describes design process for PowerEnjoy project based on the
requirements described in the RASD.
It is divided into four sections, following
\shape italic
IEEE
\shape default
standard:
\end_layout
\begin_layout Itemize
\series bold
Architecture Design
\series default
, which describes the structure of the system, highlighting software elements
and relations among them and their properties;
\end_layout
\begin_layout Itemize
\series bold
Data Design
\series default
, which describes the chosen data structures, dictated by attributes and
relationships among data objects;
\end_layout
\begin_layout Itemize
\series bold
Interface Design
\series default
, which describes either internal or external program interfaces;
\end_layout
\begin_layout Itemize
\series bold
Procedural Design
\series default
, which describes procedural details using graphical notations that facilitates
translation to code.
\end_layout
\begin_layout Subsection
Purpose
\end_layout
\begin_layout Standard
The purpose of this document, the Design Document, is to give more technical
details than the RASD about PowerEnjoy system.
In more detail, this document is addressed to software developers to let
them better understand what is to be built and how it is expected to be
done.
The main goal of this document is to completely describe the system-to-be
by detecting and describing the adopted architectural style, the high-level
components of the software-to-be and how these components are distributed
on the architecture's tiers and how they communicate and interact with
each other, according to the dictates and the guide-lines provided by the
RASD.
\end_layout
\begin_layout Subsection
Scope
\end_layout
\begin_layout Standard
The aim of this project is to develop a web/mobile application for PowerEnjoy,
in order to let any registered and active user to reserve a car nearby
and drive it in a simple and effective way.
Thanks to a smarter uniform distribution of cars in the city that maximizes
the probability to find a car nearby and to our competitive prices and
some special discount, every user will experience a totally new feeling
of freedom and will enjoy saving while driving.
No car parking ticket.
No refuelling.
No road tax.
No hidden costs.
PowerEnjoy will make it possible.
\end_layout
\begin_layout Subsection
Definitions, Acronyms, Abbreviations
\end_layout
\begin_layout Standard
Below there are definitions of some terms that will be used in the document,
in order to avoid any ambiguity in their use and their understanding.
\end_layout
\begin_layout Description
API: Application Programming Interface; it is a common way to communicate
with another system.
\end_layout
\begin_layout Description
DBMS: DataBase Management System, a software that control the creation,
maintenance and use of a database.
(e.g.
MySQL)
\end_layout
\begin_layout Description
DD: Design Document.
\end_layout
\begin_layout Description
EJB: Enterprise JavaBeans, a managed server-side component architecture
for modular construction of enterprise applications.
\end_layout
\begin_layout Description
\shape italic
EJB
\begin_inset space ~
\end_inset
Container
\shape default
: a software that implements Sun EJB specifications in order to correctly
manage session and entity beans.
\end_layout
\begin_layout Description
\shape italic
Entity
\begin_inset space ~
\end_inset
bean
\shape default
: a distributed object that have persistent state.
\end_layout
\begin_layout Description
JavaBeans
\begin_inset space ~
\end_inset
Components: Objects that act as temporary data stores for the pages of an
application.
\end_layout
\begin_layout Description
JAX-RS: Java API for RESTful Web Services, a Java programming language API
specification that provides support in creating web services according
to the Representational State Transfer (REST) architectural pattern.
\end_layout
\begin_layout Description
JDBC: Java Database Connectivity, a Java API that allows the application
to communicate with a database.open source database manager system, a software
capable of managing data.
\end_layout
\begin_layout Description
JSF: JavaServer Faces, a Java specification foRevision History
\end_layout
\begin_layout Description
r building component-based user interfaces for web applications.
\end_layout
\begin_layout Description
JSP
\begin_inset space \space{}
\end_inset
Pages: text documents that contain two types of text: static data, which
can be expressed in any text-based format (such as HTML, SVG, WML, and
XML), and JSP elements, which construct dynamic content.
\end_layout
\begin_layout Description
HTML: HyperText Markup Language, a markup language for building web pages.
\end_layout
\begin_layout Description
HTTP: Hypertext Transfer Protocol, an application protocol used by web browsers.
\end_layout
\begin_layout Description
MVC: Model View Controller.
\end_layout
\begin_layout Description
MySQL: open source database manager system, a software capable of managing
data.
\end_layout
\begin_layout Description
RASD: Requirements Analysis and Specifications Document.
\end_layout
\begin_layout Description
\shape italic
URL
\shape default
: Uniform Resource Locator.
\end_layout
\begin_layout Description
\shape italic
Push
\begin_inset space \space{}
\end_inset
notification
\shape default
: it is a notification sent to a smartphone using the mobile application,
so it must be installed.
\end_layout
\begin_layout Description
Push
\begin_inset space \space{}
\end_inset
service: it is a service that allows to send push notifications with own
API.
\end_layout
\begin_layout Description
REST: REpresantional State Transfer.
\end_layout
\begin_layout Description
RESTful: REST with no session.
\end_layout
\begin_layout Description
UX: User eXperience.
\end_layout
\begin_layout Description
UI: User Interface.
\end_layout
\begin_layout Description
BCE: Business Controller Entity.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Reference documents
\end_layout
\begin_layout Itemize
Requirements Analysis and Specification Document produced before: [RASD.pdf]
\end_layout
\begin_layout Itemize
Specification Document: [ASSIGNMENTS AA 2016-2017.pdf]
\end_layout
\begin_layout Subsection
Document Structure
\end_layout
\begin_layout Enumerate
\series bold
Introduction
\series default
: this section introduces the design document.
It contains a justification of his utility and indications on which parts
are covered in this document that are not covered by RASD.
\end_layout
\begin_layout Enumerate
\series bold
Architecture Design
\series default
: this section is divided into different parts.
\end_layout
\begin_deeper
\begin_layout Itemize
\shape italic
Overview
\shape default
: this sections explains the division in tiers of our application.
\end_layout
\begin_layout Itemize
\shape italic
High level components and their interaction
\shape default
: this sections gives a global view of the components of the application
and how they communicate.
\end_layout
\begin_layout Itemize
\shape italic
Component view
\shape default
: this sections gives a more detailed view of the components of the applications.
\end_layout
\begin_layout Itemize
\shape italic
Deploying view
\shape default
: this section shows the components that must be deployed to have the applicatio
n running correctly.
\end_layout
\begin_layout Itemize
\shape italic
Runtime view
\shape default
: this section shows the course of the different tasks of our application
through several sequence diagrams .
\end_layout
\begin_layout Itemize
\shape italic
Component interfaces
\shape default
: this section shows the interfaces between the components.
\end_layout
\begin_layout Itemize
\shape italic
Selected architectural styles and patterns
\shape default
: this section explain the architectural choices taken during the creation
of the application.
\end_layout
\begin_layout Itemize
\shape italic
Other design decisions
\end_layout
\end_deeper
\begin_layout Enumerate
\series bold
Algorithms Design
\series default
: this section describes the most critical parts via some algorithms.
Pseudo code is used in order to hide unnecessary implementation details
in order to focus on the most important parts.
\end_layout
\begin_layout Enumerate
\series bold
User Interface Design
\series default
: this section presents mockups and user experience explained via UX and
BCE diagrams.
\end_layout
\begin_layout Enumerate
\series bold
Requirements Traceability
\series default
: this section aims to explain how the decisions taken in the RASD are linked
to design elements.
\end_layout
\begin_layout Enumerate
\series bold
Appendix
\series default
: in this section will be listed the different tools we used and the hours
of work spent by each member of the team.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Section
Architectural Design
\end_layout
\begin_layout Subsection
Overview
\end_layout
\begin_layout Standard
The PowerEnjoy system will be developed on the Java 2 Enterprise Edition
platform, one of the most important technology used to build large scale,
distributed, component-based, web-enabled and multi-tier applications.
J2EE provides also robustness, efficiency and
\shape italic
portability
\shape default
of code because it is based on Java technology and standard-based Java
programming APIs: in this way, we will be able to “write once” our application
and “run it anywhere”.
The system will be designed according to the traditional multi-tier architectur
e, in order to guarantee:
\end_layout
\begin_layout Itemize
\shape italic
flexibility
\shape default
: by separating the business logic of an application from its presentation
logic, a multi-tier architecture makes the application much more flexible
to changes;
\end_layout
\begin_layout Itemize
\shape italic
maintainability
\shape default
: because of their independence and the different technology used in each
layer, changes should have no effect on any other layer and can be managed
by independent teams with different skills.
\end_layout
\begin_layout Itemize
\shape italic
reusability
\shape default
: separating the application into multiple layers makes it easier to implement
re-usable components.
\end_layout
\begin_layout Itemize
\shape italic
scalability
\shape default
: a multi-tier architecture allows distribution of application components
across multiple servers thus making the system much more scalable
\end_layout
\begin_layout Standard
In detail, PowerEnjoy architecture will be made up of four logical levels:
the
\series bold
Client
\series default
tier, the
\series bold
Web
\series default
tier, the
\series bold
Business
\series default
tier and the
\series bold
EIS
\series default
tier.
\end_layout
\begin_layout Itemize
The
\series bold
Client
\series default
tier consists of application clients that make
\shape italic
requests
\shape default
to the server, which processes the requests and returns a
\shape italic
response
\shape default
back to the client.
The Client tier is accessible via
\shape italic
mobile application
\shape default
(that interacts directly with the application server via RESTful API) or
by a
\shape italic
web browser
\shape default
(that run JavaScript and apply Cascading Style Sheets (CSS) before interpreting
pages marked up with HTML), and it interacts with the Web tier through
an HTTP connection, eventually sending data provided by the user.
\end_layout
\begin_layout Itemize
The
\series bold
Web
\series default
tier consists of components implemented with JEE technology that handle
the interaction between clients and the business tier.
Its main tasks are collect HTTP requests from users of the client interface
and return appropriate anwers with HTML pages, generated with the data
received from the components in the business tier.
\end_layout
\begin_layout Itemize
The
\series bold
Business
\series default
tier consists of Enterprise JavaBean (EJB), software components that encapsulat
e all the logic of an application.
This tier uses the Java Persistence API (JPA) to access the database, abstracti
ng the relational model implemented by the database in a model of data objects,
in order to allow the interaction with the application.
\end_layout
\begin_layout Itemize
The
\series bold
EIS
\series default
tier consists of a Database Management System (DBMS) in charge of create,
manipulate, query and extract data over a database.
The business tier uses the Java Database Connectivity (JDBC) to have access
to the resources located on the database.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/MultiTier Architecture.png
width 85text%
height 85theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
MultiTier Architecture
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/HardwareRepresentation.png
width 100text%
height 100theight%
keepAspectRatio
scaleBeforeRotation
rotateAngle 90
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Hardware Representation
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
High level components and their interaction
\end_layout
\begin_layout Standard
The high level components architecture is composed of different elements.
The client can initiate the communication with the server from his mobile
application or from the webpage of the application.
This communication is made in a synchronous way since the client, who initiates
the communication, has to wait the answer of the application that acknowledge
him that his request has been taken into account.
The application will receive two kinds of requests from the client: direct
ones, if he's using the mobile application, or redirected ones by the webserver
, if he's using the web browser.
The application will later send an asynchronous message to the client to
specifiy the status of his reservation.
The application communicates also with another type of component, the cars.
The application can send synchronous messages to the cars to check their
status and eventually reserve one of them for each user or manage any kind
of maintenance.
\end_layout
\begin_layout Standard
\begin_inset VSpace medskip
\end_inset
The interactions between the main components are shown in figure:
\end_layout
\begin_layout Standard
\align center
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/HighLevel Components.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
High Level Components
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Component view
\end_layout
\begin_layout Standard
We adopted a
\shape italic
top-down
\shape default
approach to separate, at least from a logical point of view, different
set of functionalities.
Once the system was decomposed into several sub-systems, we adopted a
\shape italic
bottom-up
\shape default
approach in order to create more modular and reusable components.
Here are listed the most relevant components the system has been split
into.
\end_layout
\begin_layout Itemize
\series bold
PowerEnjoyApp GUI
\series default
: this is the graphic interface which let the user send request to the server
and receive response via mobile application;
\end_layout
\begin_layout Itemize
\series bold
PowerEnjoyWeb GUI
\series default
: this is the graphic interface which let the user send request to the server
and receive response via web browser;
\end_layout
\begin_layout Itemize
\series bold
Authentication Manager
\series default
: this is the component responsible for the customer registration and login
system.
It handles activities such as creating a new customer account, log into
the system or deleting an existing account;
\end_layout
\begin_layout Itemize
\series bold
AccountInformation Manager
\series default
: this is the component responsible for the customer profile management.
It handles activities such as editing personal and billing data, enabling/disab
ling money saving option and consulting reservation history;
\end_layout
\begin_layout Itemize
\series bold
CheckAvailability Manager
\series default
, this is the component responsible for searching available cars in a specific
location;
\end_layout
\begin_layout Itemize
\series bold
Reservation Manager
\series default
: this is the component that manages each reservation.
It handles activities such as creating a new reservation, checking the
active reservation information (such as the remaining time until it expires,
the reserved car's position and status or the elapsed rental time) and
terminating the active ones;
\end_layout
\begin_layout Itemize
\series bold
Car Manager
\series default
: this is the component that check and manage the status of each car by
communicating with them through the ADS of each present on each car.
If a car needs any kind of maintenance, it will send a request to an external
maintenance service;
\end_layout
\begin_layout Itemize
\series bold
ADS_Application Manager
\series default
: this is the component which guarantee the correct communication between
the Server and the ADS Application installed on each ADS on each electric
car;
\end_layout
\begin_layout Itemize
\series bold
Payment Manager
\series default
: this is the component that calculates the fees for the rides at the end
of each reservation and send a payment request to an external service;
\end_layout
\begin_layout Itemize
\series bold
Data Manager
\series default
: this is the component where the data is managed and viewed;
\end_layout
\begin_layout Itemize
\series bold
Notification Manager
\series default
: this is the component that manages all the notifications.
\end_layout
\begin_layout Standard
Our application will use Google Maps API to manage information about the
actors' position.
\end_layout
\begin_layout Standard
\begin_inset VSpace medskip
\end_inset
The interactions between the main components are shown in figure:
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/ComponentView.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Component View
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
In this representation, in order to avoid redundancy due a duplication of
the same elements, we decide to use a different color for the actors to
enlight the fact that only an active user can have the possibility to reserve
a car.
\end_layout
\begin_layout Subsection
Deployment view
\end_layout
\begin_layout Standard
In this section in shown how the software components are distributed with
respect to the hardware resources available in the system.
The mobile applications communicate directly with application server via
RESTful API while the browser applications communicate with the Web server
that receives users' requests, interacts with the Business server and provides
HTML pages in order to start the user experience.
The system can retrieve information from each car communicating with their
ADS via RESTful API.
The Business server contains the application logic and the modules that
handle the main functionalities of the system.
Every module is accessible only by the allowed users.
All the data needed for the operations handled by the modules are retrieved
from the database in the Data server.
The various interactions with the database are monitored by the DBMS in
order to guarantee the ACID properties of the database.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/DeploymentView.png
width 76text%
height 80theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Deployment View
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Runtime view
\end_layout
\begin_layout Standard
In this section are explained through Sequence diagrams some of the most
relevant interactions between components and actors of the system.
Like in the RASD document, some assumptions are made in order to simplify
the representation and clarify some aspects; by the way, some of the most
important features, if considered implicit in a Sequence diagram, are explicitl
y represented in another one.
\end_layout
\begin_layout Subsubsection*
Login Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/login.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Login Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Registration Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/registration.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Registration Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Check Cars' Availability Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/availability.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Check Cars Availability Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Modify Personal Information Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/editpersonalinfo.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Modify Personal Information Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Car Reservation Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/reservecar.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Car Reservation Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Car Unlock Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/opencar.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Car Unlock Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
Car Rental Sequence Diagram
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/Sequence Diagrams/rental.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Car Rental Sequence Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset VSpace medskip
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Component interfaces
\end_layout
\begin_layout Standard
In this section we're going to describe the interfaces through which the
various components of the system communicate.
For each interface we'll provide a short but exhaustive description of
the main exposed methods.
\end_layout
\begin_layout Subsubsection*
\series bold
Authentication Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Authentication Manager
\series default
:
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
register(UserData)
\family default
: This function creates a new
\family typewriter
User
\family default
instance in the system with all the information provided by the user during
the registration phase.
If the entered data are correct, an email is sent to the user address to
confirm the correct registration to the service.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
login(Credentials)
\family default
: This function allows any registered user to log into the system using
his
\shape italic
username
\shape default
and
\shape italic
password
\shape default
.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
checkCredentials(Credentials)
\family default
: This function verifies the
\shape italic
username
\shape default
-
\shape italic
password
\shape default
combination is correct.
If the credentials are correct, the function returns a token to be used
in the future requests to identify the user.
Otherwise, an error is returned.
\end_layout
\begin_layout Subsubsection*
\series bold
AccountInformation Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
AccountInformation Manager
\series default
:
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
remove(User)
\family default
: This function deletes the
\family typewriter
User
\family default
from the system.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
activate(User)
\family default
: This function restores the privileges of the
\family typewriter
User
\family default
.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
deactivate(User)
\family default
: This function removes some of the privileges from the
\family typewriter
User
\family default
.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
editProfile(User, UserData)
\family default
: This function updates the existent
\family typewriter
User
\family default
instance in the system with all the new information provided by the
\family typewriter
UserData
\family default
object.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
getHistory(User)
\family default
: This function allows a registered
\family typewriter
User
\family default
to consult his complete requests history.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
enableMSO(User):
\family default
This function enables the Money Saving Option for the
\family typewriter
User
\family default
.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
disableMSO(User):
\family default
This function disables the Money Saving Option for the
\family typewriter
User
\family default
.
\end_layout
\begin_layout Subsubsection*
\series bold
CheckAvailability Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
CheckAvailability Manager
\series default
:
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
getUserPosition(User)
\family default
: This function will retrieve the information about the users position
through the Google Maps API.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
getAvailableCars(Location)
\family default
: This function will retrieve the needed information through the Car Manager
and it will return a list of
\shape italic
available
\shape default
cars near the user's
\family typewriter
Location
\family default
.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
\series bold
Reservation Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Reservation Manager
\series default
:
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
checkVerificationCode(User, int)
\family default
: This function verifies the
\family typewriter
User
\family default
-
\shape italic
verification
\shape default
\shape italic
code
\shape default
combination is correct.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
getUserPosition(User)
\family default
: This function will retrieve the information about the users position
through the Google Maps API.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
getReservableCars(Location)
\family default
: This function will retrieve the needed information through the Car Manager
and it will return a list of
\shape italic
reservable
\shape default
cars near the user's
\family typewriter
Location
\family default
.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
startReservation(Car, User)
\family default
: This function creates a new instance of
\family typewriter
Reservation
\family default
, tying together the
\family typewriter
Car
\family default
and
\family typewriter
User
\family default
instances passed as argument, and notifies it to the
\family typewriter
User
\family default
through the Notification Manager.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
checkReservationStatus(Reservation)
\family default
: This function retrieves all the information about the
\family typewriter
Reservation
\family default
instance passed as argument, and shows them to the
\family typewriter
User
\family default
through the Notification Manager.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
endReservation(Reservation)
\family default
: This function terminates the current
\family typewriter
Reservation
\family default
and send a payment request to the Payment Manager.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
startRent(Reservation)
\family default
: This function creates a new instance of
\family typewriter
Rent
\family default
, updating the
\family typewriter
Reservation
\family default
instance passed as argument, and notifies it to the
\family typewriter
User
\family default
through the Notification Manager.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
checkRentStatus(Rent)
\family default
: This function retrieves all the information about the
\family typewriter
Rent
\family default
instance passed as argument, and shows them to the
\family typewriter
User
\family default
through the Notification Manager.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
isTerminable(Rent)
\family default
: This function will check through the Car Manager if all the conditions
to end the
\family typewriter
Rent
\family default
are respected (for example if nobody is still in the car, and so on..) and
it will return
\family typewriter
true
\family default
if the rent is terminable,
\family typewriter
false
\family default
otherwise.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
endRent(Rent)
\family default
: This function terminates the current
\family typewriter
Rent
\family default
, notifies it to the user through the Notification Manager and sends a payment
request to the Payment Manager.
\end_layout
\begin_layout Subsubsection*
\series bold
ADS_Application Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
ADS_Application Manager
\series default
:
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
getStatus()
\family default
: This function asks the ADS to check the current
\family typewriter
Status
\family default
(
\shape slanted
available
\shape default
,
\shape slanted
reserved
\shape default
,
\shape slanted
in_use
\shape default
,
\shape slanted
unavailable
\shape default
) of the car.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
getDamages()
\family default
: This function queries the ADS to check the eventual cars damages through
the sensors installed in there.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
getPosition)
\family default
: This function queries the ADS to check the current position of the car.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
getPassengers()
\family default
: This function queries the ADS the number of passengers actually inside
the car.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
getPowerGrid()
\family default
: This function queries the ADS to check if the car is plugged into the
power grid.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
lockDoors()
\family default
: This function queries the ADS the lock the cars doors and to change the
\family typewriter
Status
\family default
of the car into
\shape slanted
available
\shape default
.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
unlockDoors()
\family default
: This function queries the ADS the unlock the cars doors and to change
the
\family typewriter
Status
\family default
of the car into
\shape slanted
in_use
\shape default
.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
\family typewriter
updateCarStatus(Status)
\family default
: This function queries the ADS to change the cars
\family typewriter
Status
\family default
into the one passed as argument.
\end_layout
\begin_layout Subsubsection*
\series bold
Car Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Car Manager
\series default
:
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
contactMaintainanceService(Car)
\family default
: Every time the Car Manager retrieve information about a cars status,
if necessary, it will send a maintainance request to an external service
through this function.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
ping(Car)
\family default
: This function queries a
\family typewriter
Car
\family default
to check whether it is online.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
carsInRadius(Location)
\family default
: This function retrieves all the cars near the
\family typewriter
Location
\family default
passed as argument.
\end_layout
\begin_layout Subsubsection*
\series bold
Payment Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Payment Manager
\series default
:
\begin_inset VSpace smallskip
\end_inset
\family typewriter
applyReservationFees(Reservation)
\family default
: This function will apply the fees for each
\family typewriter
Reservation
\family default
instance.
Actually, the user can terminate a reservation for free, but in the future
if PowerEnjoy would decide to apply a fee for the termination of a reservation,
it would be very easy to modify this value.
If the user picks up the car, his reservation terminates and the system
will create another instance
\family typewriter
Rent
\family default
: no fees will be applied to transform a
\family typewriter
Reservation
\family default
into a
\family typewriter
Rent
\family default
.
\begin_inset VSpace smallskip
\end_inset
\family typewriter
calculateRentFees(Rent)
\family default
: This function will calculate the fees for each
\family typewriter
Rent
\family default
instance.
In this case we have to consider eventual discounts and other additional
fees before sending the payment request to the external payment service.
It would not be difficult in the future to change some parameters according
to the PowerEnjoy policy.
\begin_inset VSpace smallskip
\end_inset
\family typewriter
calculateRentDiscount(Rent)
\family default
: This function will calculate the eventual discount for each
\family typewriter
Rent
\family default
instance.
\begin_inset VSpace smallskip
\end_inset
\family typewriter
calculateAdditionalFees(Rent)
\family default
: This function will calculate the eventual additional fees for each
\family typewriter
Rent
\family default
instance.
\end_layout
\begin_layout Subsubsection*
\series bold
Data Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Data Manager
\series default
:
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
store(Data)
\family default
: This function allows any authorized entity to store data into the DataBase.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
retrieve(Data)
\family default
:: This function allows any authorized entity to read data from the DataBase.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
delete(Data)
\family default
:: This function allows any authorized entity to delete data from the DataBase.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
edit(Data)
\family default
:: This function allows any authorized entity to modify data into the DataBase.
\end_layout
\begin_layout Subsubsection*
\series bold
Notification Manager
\end_layout
\begin_layout Standard
Functions implemented by
\series bold
Notification Manager
\series default
:
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\family typewriter
notify(User, Notification)
\family default
: This function is used to notify a message to the user.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection*
\series bold
Other Specifications
\end_layout
\begin_layout Itemize
The front-ends of the system (the mobile app and the web application) communicat
e with the Application Server using the back-end interface implemented as
a RESTful interface over the HTTPS protocol.
\end_layout
\begin_layout Itemize
The users browsers will communicate with the web server via HTTPS requests.
Any unencrypted request will be denied.
\end_layout
\begin_layout Itemize
The RESTful interface is implemented in the Application server using JAX-RS
and uses XML as the data representation language.
\end_layout
\begin_layout Itemize
The Application Server communicates with the DBMS via the Java Persistence
API over standard network protocols.
\end_layout
\begin_layout Itemize
The Application Server is configurable by means of a XML configuration file,
that will contain any other setting useful in the implementation phase.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Selected architectural styles and patterns
\end_layout
\begin_layout Subsubsection
The Architecture
\end_layout
\begin_layout Standard
The architecture of the system has been previously described at higher level.
\end_layout
\begin_layout Standard
As we said, we adopted a
\series bold
multi-tier architecture
\series default
in which every tier is hosted on a different machine: the
\shape italic
Client
\shape default
tier is on the pc or smartphone the user access the system from, the
\shape italic
Web
\shape default
tier is hosted on a separate server used only for this purpose, while another
server hosts the
\shape italic
Business
\shape default
tier.
Finally a last server contains the
\shape italic
Data
\shape default
tier.
\end_layout
\begin_layout Standard
This division between all levels has been made in order to allow update
and maintenance on a particular tier without affecting the others, and
to prevent the whole system to interrupt in case of fault of a component.
We also adopted the
\shape italic
thin client
\shape default
paradigm to the interaction between users machine and the system: in this
way all the application logic is on the application server, which has sufficien
t computing power and is able to manage concurrency issue efficiently.
\end_layout
\begin_layout Subsubsection
The Desing Pattern
\end_layout
\begin_layout Standard
The Design pattern used for this system is the
\series bold
Model-View-Controller
\series default
(MVC).
\end_layout
\begin_layout Standard
This choice has been made mainly for the flexibility that this pattern provides:
the
\shape italic
model
\shape default
, the
\shape italic
view
\shape default
and the
\shape italic
controller
\shape default
are separated into different components that can be modified with a minimum
impact with respect to the others, helping to achieve a better scalability
and offering the possibility to add new functionalities to the system or
to apply changes to the code.
In more detail:
\end_layout
\begin_layout Itemize
The
\series bold
Model
\series default
contains the representation of data and the application logic, so all the
functions that manipulates data.
\end_layout
\begin_layout Itemize
The
\series bold
View
\series default
makes the model suitable for the user interaction, providing a GUI: every
user will access the system and all its functionalities through this component.
Furthermore, it provides the possibility to have different representations
(or views) for the same data, depending on the users preference or on
the users permissions.
\end_layout
\begin_layout Itemize
The
\series bold
Controller
\series default
, finally, is responsible for the communication between the View and the
Model: in particular it responds to users actions and invokes changes
on the model.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
Other design decisions
\end_layout
\begin_layout Subsubsection
Storage of passwords
\end_layout
\begin_layout Standard
Users password will not be stored in plain-text, but they will be hashed
and salted with cryptographic hash functions.
This provides a last line of defense in case of data theft.
\end_layout
\begin_layout Subsubsection
Google Maps
\end_layout
\begin_layout Standard
The system uses an external service, Google Maps, to offload all the geolocaliza
tion, distance calculation and map visualization processes.
The reasons of this choice are the following:
\end_layout
\begin_layout Itemize
manually developing maps for each city is not a viable solution due to the
tremendous effort of coding and data collection required;
\end_layout
\begin_layout Itemize
Google Maps is a well-established, tested and reliable software component
already used by millions of people around the world;
\end_layout
\begin_layout Itemize
Google Maps offers APIs, enabling programmatic access to its features;
\end_layout
\begin_layout Itemize
Google Maps can be used both on the server side (calculation, shortest paths,
traffic, incident reporting) and on the client side (map visualization);
\end_layout
\begin_layout Itemize
the users feel comfortable with a software component they know and use everyday.
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Section
Algorithm Design
\end_layout
\begin_layout Standard
In this section we will focus mostly on two important themes: the calculus
of the reservations and rents fees and the uniform redistribution of
the cars.
It is very important to implement the former in a dynamic and easy-to-change
way because of the continuously changing business strategies and it is
fundamental to give a lot of attention to the latter because it would considera
bly increase the quality of the service and incentivize the virtuous behaviours
of the user, according to the core values of PowerEnjoy.
\end_layout
\begin_layout Subsection
The uniform distribution of cars
\end_layout
\begin_layout Standard
Lets start from the attempt to redistribute in a uniform way the cars into
each city.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
The first kind of solution we will propose is valid from a theoretical point
of view, but it is not so suitable to our service.
We will explain it anyway to give a deep and better understanding of the
problem and of our reasoning.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
To guarantee an effectively uniform distribution of the cars, we would act
in this way:
\end_layout
\begin_layout Enumerate
For each point (intended as a couple of two values:
\series bold
latitude
\series default
and
\series bold
longitude
\series default
) inside the city (intended as a
\shape italic
closed ensemble of points
\shape default
), we would calculate the minimum distance with the first available car
found.
\end_layout
\begin_layout Enumerate
Among these minimum distances, we would take in account the greatest one
and we would put a new available car in that exact point.
\end_layout
\begin_layout Standard
By iterating these two steps, we would guarantee an uniform distribution
of cars, starting from a 2-dimensional space (the city) already filled
in part with other cars, unmovable.
\begin_inset VSpace medskip
\end_inset
\end_layout
\begin_layout Standard
However this solution is not a feasible one because it would be necessary
to use an ingent calculus power to effectively substain a similar amount
of operations.
Perhaps it would be possible to achieve the same result with a smaller
quantity of points (taken randomly or in a less accurate way) or in the
opposite way: we could calculate the maximum distant point from each available
car inside the city, and decide to address the user there.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
However this theoretical solution wont take in account two important facts:
\end_layout
\begin_layout Enumerate
the first one is that we cannot address the user into a specific point (intended
as above, a couple of
\shape italic
latitude
\shape default
and
\shape italic
longitude
\shape default
) but we have to address him/her into a recharging station
\shape italic
near
\shape default
the point, so we will be able anyway only to achieve an
\shape italic
approximately
\shape default
uniform distribution of cars.
\end_layout
\begin_layout Enumerate
the second one is that the user will never revolutionize his destination,
so we have to address him into a point not so
\shape italic
far
\shape default
from his final destination.
\end_layout
\begin_layout Standard
So we abandoned the utopia of a
\shape italic
perfect
\shape default
uniform distribution of cars, and we focused mainly on the distribution
of the car taking in account the PowerEnjoy power grid stations.
\end_layout
\begin_layout Standard
\begin_inset VSpace smallskip
\end_inset
We first ranked them according to the
\shape italic
utility function
\shape default
of the user, in agreement with the point of view of some experts: lets
take in account Milan, the first city in which we offered our service.
As showed in figure, we ranked the main zones of Milan giving them a number
from 1 to 6, according to the attractivness of that place for our clients.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/milan.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Ranking of the Power Grid Stations in Milan
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Then we defined a customized radius of 500 - 1000 meters for each power
grid station and we covered the whole map of Milan by drawing one circumference
for each one of them, according to their given radius, as showed in figure.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/milan2.png
width 100text%
height 100theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Radius of the Power Grid Stations in Milan
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
In this way, when a user with the enabled
\series bold
Money Saving Option
\series default
would input his/her final destination at the beginning of a rent, the system
would select a special parking area among all the ones present in the city
by following these steps:
\end_layout
\begin_layout Enumerate
The system will retrieve the latitude and longitude of the final destination
of the user;
\end_layout
\begin_layout Enumerate
The system will list all the circumferences (with the relative power grid
station) that contains that specific point;
\end_layout
\begin_layout Enumerate
If there is only one station (distant in the worst case more or less 500-1000
meters from the final destination of the user), the system will select
it and will provide information about it to the user;
\end_layout
\begin_layout Enumerate
If there isnt any station with free power plugs, a message of error will
be showed to the user;
\end_layout
\begin_layout Enumerate
If there is more than one station that contains that specific point, the
system will select the one with the maximum score according to this formula:
\begin_inset Formula
\[
score=freeSlot*[(ranking-2)+(10-distance/100)*2]
\]
\end_inset
where:
\end_layout
\begin_layout Itemize
\series bold
freeSlot
\series default
is the number of available power plugs;
\end_layout
\begin_layout Itemize
\series bold
ranking
\series default
is the number from 1 to 6 assigned to the zone in which is contained the
selected power grid station;
\end_layout
\begin_layout Itemize
\series bold
distance
\series default
is the quantity of meters that separates the final destination of the user
from the selected power grid station.
\end_layout
\begin_layout Enumerate
Example n°1:
\end_layout
\begin_deeper
\begin_layout Standard
The final destination of the user is in piazza delle Meraviglie, 34.
At this address correspond the point with latitude x and longitude y, and
there are 4 power grid stations that contain it.
The power grid stations are characterized by the following information:
\end_layout
\begin_layout Enumerate
4 freeSlot, ranking 3, distance from the final destination of the user 500m;
\end_layout
\begin_layout Enumerate
3 freeSlot, ranking 4, distance from the final destination of the user 350m;
\end_layout
\begin_layout Enumerate
1 freeSlot, ranking 5, distance from the final destination of the user 650m;
\end_layout
\begin_layout Enumerate
2 freeSlot, ranking 3, distance from the final destination of the user 250m;
\end_layout
\begin_layout Standard
By applying the formula written above, we would obtain the following score:
\end_layout
\begin_layout Enumerate
44
\end_layout
\begin_layout Enumerate
45
\end_layout
\begin_layout Enumerate
10
\end_layout
\begin_layout Enumerate
32
\end_layout
\begin_layout Standard
The system will select the power grid station n°2 and it will provide informatio
n to the user about to get there.
\end_layout
\end_deeper
\begin_layout Enumerate
Example n°2:
\end_layout
\begin_deeper
\begin_layout Standard
The final destination of the user is in piazza Trifoglio, 12.
At this address correspond the point with latitude z and longitude w, and
there are 2 power grid stations that contain it.
The power grid stations are characterized by the following information:
\end_layout
\begin_layout Enumerate
0 freeSlot, ranking 5, distance from the final destination of the user 100m;
\end_layout
\begin_layout Enumerate
2 freeSlot, ranking 4, distance from the final destination of the user 450m;
\end_layout
\begin_layout Standard
By applying the formula written above, we would obtain the following score:
\end_layout
\begin_layout Enumerate
0
\end_layout
\begin_layout Enumerate
26
\end_layout
\begin_layout Standard
The system will select the power grid station n°2 and it will provide informatio
n to the user about to get there.
\end_layout
\end_deeper
\begin_layout Standard
\begin_inset VSpace medskip
\end_inset
In this way we would achieve our goal to distribute cars in the smartest
way we were able to think about.
\end_layout
\begin_layout Subsection
How to apply the Reservation fees
\end_layout
\begin_layout Standard
In this section we will analyze the structure of the code that will handle
the payment for the reservation fees.
\end_layout
\begin_layout Subparagraph*
applyReservationFees(Reservation)
\end_layout
\begin_layout Standard
\SpecialChar ligaturebreak
\begin_inset space ~
\end_inset
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{lstlisting}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
/* This function will apply the fees for each Reservation instance.
Actually, the user can terminate a reservation for free, but in the future
if PowerEnjoy would decide to apply a fee for the termination of a reservation,
it would be very easy to modify this value.
If the user picks up the car, his reservation terminates and the system
will create another object Rent: no fees will be applied to transform a
reservation into a rent.
On the other hand, if the reservation expires before the user picks up
the car, the system will apply to him a fee of one euro.
As said before, it would not be difficult in the future also to change
this amount of money.
\end_layout
\begin_layout Plain Layout
*/
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
function applyReservationFees (Reservation res){
\end_layout
\begin_layout Plain Layout
if (res.isExpired()){
\end_layout
\begin_layout Plain Layout
// This function will return a 'true' value if the reservation is expired
because of the time.
\end_layout
\begin_layout Plain Layout
paymentHandler(res.User, res.expirationFee);
\end_layout
\begin_layout Plain Layout
// This function will send a request of payment to the external payment
service with as input the ID of the user and the amount of money.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
else {
\end_layout
\begin_layout Plain Layout
paymentHandler(res.User, 0);
\end_layout
\begin_layout Plain Layout
// This case covers both the cases in which the user decides to terminate
the reservation and in which he unlocks the car's doors.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
end{lstlisting}
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
How to calculate the Rent fees
\end_layout
\begin_layout Standard
In this section we will analyze the structure of the code that will handle
the payment for the reservation fees.
\end_layout
\begin_layout Subparagraph*
calculateRentDiscount(Rent)
\end_layout
\begin_layout Standard
\SpecialChar ligaturebreak
\begin_inset space ~
\end_inset
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{lstlisting}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
/* This function will calculate the eventual discount for each rent instance.
*/
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
void function calculateRentDiscount(Rent ren){
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
if (ren.atLeastTwoPassengers()){
\end_layout
\begin_layout Plain Layout
// This function will return a 'true' value if almost two passengers
were in the car.
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 0.9;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 10% of discount to the client.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
if (ren.report.batteryLevelAtTheEndOfRent >= 0.5){
\end_layout
\begin_layout Plain Layout
// This function will return the percentage of battery at the end of
the rental.
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 0.8;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 20% of discount to the client.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
if (ren.report.MSOactived() && ren.report.finalDestinationNotEmpty()){
\end_layout
\begin_layout Plain Layout
// The first function will return a 'true' value if the user enabled
the Money Saving Option at the beginning of his/her rent.
The second funtion will return a 'true' value if the user input his/her
final destination.
\end_layout
\begin_layout Plain Layout
if (ren.carParkedAt(ren.report.specialArea) && ren.carLeftUnderCharge()){
\end_layout
\begin_layout Plain Layout
// The first function will return a 'true' value if the user parked
the car in the special area the system provided at the beginning of the
rent.
The second function will return a 'true' value if the car is left under
charge.
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 0.6;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 40% of discount to the client.
\end_layout
\begin_layout Plain Layout
else if (ren.carLeftUnderCharge()){
\end_layout
\begin_layout Plain Layout
// This function will return a 'true' value if the car is left under
charge in another recharging area (not the special one provided by the
system at the beginning of the rent).
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 0.7;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 30% of discount to the client.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
else{
\end_layout
\begin_layout Plain Layout
if (ren.carLeftUnderCharge()){
\end_layout
\begin_layout Plain Layout
// This function will return 'true' if the car is left under charge
in a recharging area.
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 0.7;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 30% of discount to the client.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
end{lstlisting}
\end_layout
\end_inset
\end_layout
\begin_layout Subparagraph*
calculateAdditionalFees(Rent)
\end_layout
\begin_layout Standard
\SpecialChar ligaturebreak
\begin_inset space ~
\end_inset
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{lstlisting}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
/* This function will calculate the additional fees for each rent instance.
*/
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
void function calculateAdditionalFees(Rent ren){
\end_layout
\begin_layout Plain Layout
if (ren.report.batteryLevelAtTheEndOfRent <= 0.2 ||
\end_layout
\begin_layout Plain Layout
ren.report.distanceFromTheNearestPowerGridStationInKm >= 3){
\end_layout
\begin_layout Plain Layout
// The first value is the same explained above
\end_layout
\begin_layout Plain Layout
// The second one is the distance from the nearest power grid station
expressed in km
\end_layout
\begin_layout Plain Layout
ren.totalCost *= 1.3;
\end_layout
\begin_layout Plain Layout
// In this way we will apply a 30% of additional fee to the client.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
end{lstlisting}
\end_layout
\end_inset
\end_layout
\begin_layout Subparagraph*
calculateRentFees(Rent)
\end_layout
\begin_layout Standard
\SpecialChar ligaturebreak
\begin_inset space ~
\end_inset
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{lstlisting}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
/* This function will calculate the fees for each Rent instance.
In this case we have to consider eventual discounts and other additional
fees before sending the payment request to the external payment service.
It would not be difficult in the future to change some parameters according
to the PowerEnjoy policy.
\end_layout
\begin_layout Plain Layout
*/
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
function calculateRentFees (Rent ren){
\end_layout
\begin_layout Plain Layout
ren.totalCost = ren.report.totalTime * ren.report.pricePerMinute;
\end_layout
\begin_layout Plain Layout
// We will first calculate the Total Cost as the multiplication of the
Total Time of the Rental and the Actual Price Per Minute.
In the future it would be easy to modify them, according to the PowerEnjoy
policy.
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
calculateRentDiscount(ren);
\end_layout
\begin_layout Plain Layout
// In this way we will apply all the discount.
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
calculateAdditionalFees(ren);
\end_layout
\begin_layout Plain Layout
// In this way we will apply all the additional fees.
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
paymentHandler(ren.User, ren.totalCost);
\end_layout
\begin_layout Plain Layout
// This function will send a request of payment to the external payment
service with as input the ID of the user and the amount of money .
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\backslash
end{lstlisting}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Section
User Interface Design
\end_layout
\begin_layout Standard
In this section we will provide an overview on how the user interfaces of
our system will look like.
\end_layout
\begin_layout Subsection
UX Diagram
\end_layout
\begin_layout Standard
The UX Diagram shows the interactions between the different screens of the
User Interface of the clients.
\begin_inset Newline linebreak
\end_inset
The services are both accessible via web and mobile application.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/UX Diagram.png
width 100text%
height 76theight%
keepAspectRatio
rotateAngle 90
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
UX Diagram
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsection
User UI
\end_layout
\begin_layout Standard
The following mockups represent the user UI, regarding both the Web Browser
and the Mobile Application interfaces.
\end_layout
\begin_layout Subsubsection
Home Page
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/pc/HomePage.png
width 60text%
height 60theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Home Page - Web Browser
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Login
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/HomePageMobile.png
width 60text%
height 60theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Login - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Subsubsection
Registration
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/pc/Registration Page.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Registration Page - Web Browser
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/RegistrationPageMobile.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Registration Page - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Edit Personal Information
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/pc/EditPersonalInfo.png
width 63text%
height 63theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Edit Personal Information - Web Browser
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Edit Billing Information
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/pc/Edit Billing Information.png
width 63text%
height 63theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Edit Billing Information - Web Browser
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Enable / Disable the Money Saving Option
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/Enable MSO.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Enable Money Saving Option - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/Disable MSO.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Disable Money Saving Option - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Start Reservation
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/Start Reservation.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Start Reservation - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Terminate Reservation
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/End Reservation.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Terminate Reservation - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Unlock the car
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/Unlock Doors.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Unlock Car's Doors - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Lock the car
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/mockup/mobile/Lock Doors.png
width 70text%
height 70theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Lock Car's Doors - Mobile Application
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Section
Requirements Traceability
\end_layout
\begin_layout Standard
In the RASD document we have defined all the system's requirements: in this
section we explaine how they map into the design elements defined in this
document.
\begin_inset VSpace smallskip
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Tabular
<lyxtabular version="3" rows="42" columns="2">
<features tabularvalignment="middle">
<column alignment="center" valignment="top">
<column alignment="center" valignment="top">
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\series bold
Component (DD)
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\series bold
Requirements (RASD)
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.1 Registration of a guest to the system
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Authentication Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.2 Login of a user into the system
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
AccountInformation Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.9 Modify the profile information
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
CheckAvailability Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.3 Find the location of available cars in a specified area
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.4 Book a car with the possibility to cancel the reservation
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Reservation Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.6 Be notified of active reservation status
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.7 End the rental
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Car Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.3 Available cars in a specified area
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.4 Book a car with the possibility to cancel the reservation
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
ADS_Application Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.5 Open his/her reserved car
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.6 Active reservation status
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Payment Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.8 Know the total cost at the end of the rental
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.1 Registration of a guest to the system
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Data Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.2 Login of a user into the system
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
Notification Manager
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
4.1.6 Be notified of active reservation status
\end_layout
\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
<cell alignment="center" valignment="top" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
</cell>
</row>
</lyxtabular>
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Section
Appendix
\end_layout
\begin_layout Subsection
Tools used
\end_layout
\begin_layout Standard
We used the following tools to produce this document:
\end_layout
\begin_layout Itemize
\series bold
LaTex
\series default
as typesetting system to write this document
\end_layout
\begin_layout Itemize
\series bold
LyX
\series default
as editor
\end_layout
\begin_layout Itemize
\series bold
Visio Professional
\series default
and
\series bold
draw.io
\series default
to draw all the diagrams
\end_layout
\begin_layout Subsection
Hours of work
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename res/img/hours.png
width 50text%
height 50theight%
keepAspectRatio
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Newpage pagebreak
\end_inset
\end_layout
\end_inset
\end_layout
\end_body
\end_document