Android istSOS

Introduction
The end goal of the project is to develop an Android-based library for the istSOS project. In order to achieve that objective, a main goal will be to develop an easy-to-use library in Java based on the istSOS, suitable for Android development.

This way, developers can create and customize their own apps depending on the needs of their projects. As it is essential for users to access in real time current and historic sensor data the application will show sensors location, metadata, observed properties, data visualization trough plots and infographics, alerts and notifications, features provided by the application's main core functionality.

Implementation details
The android istSOS client project is divided into two reusable library and a reference implementation application.


 * istSOS Java Core Library which is mainly an REST API wrapper. It will expose in Java language the communication with the istSOS WA REST interface.


 * istSOS Android Tools, a graphical library used to show istSOS metadata and observations in Android.


 * istSOS admin for android, a graphical library used to show istSOS data observations in Android.

Schedule

 * Community bonding (23 April - 23 May)
 * Read istSOS documentation
 * Set up work environment (Linux, istSOS, IDE, Android Studio etc.)
 * Read documentation on Android and get the basics
 * Be active on the mailing list


 * istSOS Java Core (23 May - 18 June)
 * Requirements Analysis
 * Development of core architecture
 * Coding/Implementation


 * istSOS Android Tools (20 June - 23 July)
 * Design and requirements analysis
 * Coding/Implementation


 * istSOS Admin for Android (25 July - 23 August)
 * Design and requirements analysis
 * Coding prototype
 * Testing, more coding, bug fixing

Week 1: 23 - 29 May
What did you get done this week?

This week, I had the task to work together with fellow GSoC student Luka Glusica to identify all the HTTP requests for the istSOS REST API. I've also read some documentation related to event handling during REST requests.

What do you plan on doing next week?

To finish the architecture of the Java core library, and start the development.

Are you blocked on anything?

No, not at the moment.

Week 2: 30 May - 5 June
What did you get done this week?

Worked on the architecture of the core diagram. It took a bit more time than initially expected but in the end it all got sorted out, enough for starting to code and test.

What do you plan on doing next week? Try to implement most functionalities for the proposed classes. I should have a pretty decent amount of implementation by the end of this week.

Update the personal GSoC wiki page on OSGeo wiki.

Are you blocked on anything?

Not really, the diagrams part went a bit too slow. I started to code a little late but I'll catch up some speed soon.

Week 3: 6 - 12 June
What did you get done this week?

I've been focusing on getting the istSOS, Server and Database classes to work, in order to handle requests to istSOS as part of the Java Core e.g. create, delete services on server, connect and validate connection to database among many other.

I've also took more time to update my OSGeo wiki page with links to the github repos, as well as more information about what my project is. At the same time, I'll include my weekly reports on that page.

What do you plan on doing next week? Tweaking the work so far, as well as focusing on implementing features related to services, procedures. I also plan to improve the way it handles configuration settings.

Are you blocked on anything?

I was a couple of days ago but with guidance from my mentor I've managed to overcome that obstacle.

Week 4: 13 - 19 June
What did you get done this week?

Unfortunately, as I had to focus on finishing my master thesis, I did little work this week, thus I've only managed to create additional methods in Service class for GET requests, updated several classes and made some slight improvements.

What do you plan on doing next week?

On the recommendation of my mentors, I should prepare the worked done so far for some more thorough testing.

Apart from that, continue on implementing the classes and methods as planned.

Are you blocked on anything?

Not really, just fell a bit behind than expected.

Week 5: 20 - 26 June
What did you get done this week?

After a meeting with my mentors, they suggested me to make use of AsyncHttpClient and Gson libraries from now on in the project as well as converting the project to Gradle in order to handle dependencies. Therefore I started reorganizing my work which is quite helpful in the long run. Already ran some basic tests with it.

What do you plan on doing next week?

After a meeting with my mentors, they suggested me to make use of AsyncHttpClient and Gson libraries from now on in the project as well as converting the project to Gradle in order to handle dependencies. Therefore I started reorganizing my work which is quite helpful in the long run. Already ran some basic tests with it.

Are you blocked on anything?

Not at the moment.

Week 6: 27 June - 3 July
What did you get done this week?

I tested and fixed some of the methods and adjusted the classes, as well as implementing some of the functionality I didn't manage to do last week.

This week I had to take a few days in order to prepare and support the oral defense for my master thesis.

What do you plan on doing next week?

Implement the remaining functionalities, then create a basic documentation (I plan to do it in the GitHub Wiki) on how to use the Java Core library.

During the next week I will also start planning for development the Android Tools library.

Are you blocked on anything?

Not at the moment.

Week 7: 4 - 10 July
What did you get done this week?

At the suggestion of my mentors, I've started reimplementing some functions following a new pattern, therefore I had to really dig deep this week got get it done. This new implementation style is a lot more compatible for the Android part of the project, there it was necessary. The good news, I'm pretty close now to finishing the JavaCore part.

What do you plan on doing next week

Done some tests, properly document the library and try to go to the next stage.

Are you blocked on anything?

Unfortunately, I haven't transitioned to the Android part yet. I wouldn't consider this a block or a setback, as it definitively helped me improve the library and avoiding future problems.

Week 8: 11 - 17 July
What did you get done this week?

Wrapped up the Java Core by implementing the remaining methods. As a result, the class structure has been reconfigured compared to previous plans, therefore some features were removed as they were not deemed necessary, while others got some improvements. This helped maintain a cleaner structure.

I've managed to write some tests, write a proper README, opened up a wiki for showing examples how to use the Java core.

What do you plan on doing next week?

I'll have a discussion with my mentors and see how to proceed to the next phase. Other than that, I'll add more documentation, improve the wiki, bug fixing if necessary.

Investigate how to adapt the library for Android part.

Are you blocked on anything?

Not at the moment.

Week 9: 18 - 24 July
What did you get done this week?

Had a discussion with the mentors for the Android phase. The first step was to compile the library and integrate it into Android project in order to test it.

My fault was that this week I was traveling for a couple of days, didn't manage my time properly, while also having only some temporary internet led to not accomplishing this week as much as I could have.

What do you plan on doing next week?

Continue testing the library functionalities in Android context such as executing the requests for observation data, inserting observation.

Are you blocked on anything?

Not at the moment, I know what I have to do.

Week 10: 25 - 31 July
What did you get done this week?

At the suggestion of my mentors I started to make a tutorial/showcase of how to use the Java-Core. Besides, this helped me re-evaluate what I've done so far and actually fixed some minor bugs.

Recompiled the Java core and integrated into Android project where I began to make a test run of how the library works. I had a couple of issues with integrating the Java Core to Android as it was developed on Java 8, it took some time to figure a solution on how to overcome the incompatibilities but with the guidance of my mentors I managed to do it.

What do you plan on doing next week?

After I finish with fixing the APK building I'll continue with Android development using the library then make a user guide/tutorial on how to use it.

Are you blocked on anything?

Unfortunately, I'm having issue with building the APK as I'm getting an erro of DuplicateFilesException. Tried a couple of methods but nothing worked out so far.

Week 11: 1 - 7 August
What did you get done this week?

Previously, I had the problem with the Java Core being in the Android. Fortunately, this problem was solved this week with the help of my mentor. The difficulty lied in the fact that AsyncHTTPClient is not supported in Android, a library I used for handling async tasks. As a result, the core as adapted to make use of another library.

This allowed me to return to the Android part and develop further. I made a  design of the app prototype, then I implemented some of the core functionalities.

What do you plan on doing next week?

Finish implementing the core features into the app, test it, document it, make a tutorial on how to develop in Android using the library.

Are you blocked on anything?

Everything is fine.

Who will use results of this project

 * Main goal is to develop an easy-to-use library for developers
 * Java Core is to be an independent library, as in being able to be implemented in other projects
 * Android Tools and Admin Library are built so that developers are able to build and customize their own applications depending on their needs

Repositories
If you want to check how the project is going, code-wise, below I'll give you the links on where to go:

Main istSOS repository (here is where everything will end up)

Java Core: https://github.com/istSOS/java-core

Android: https://github.com/istSOS/android-demo

Personal forks of the repositories

Java Core: https://github.com/masterflorin/java-core

Android: https://github.com/masterflorin/android-demo

Student's biography
My name is Florin Cioloboc. Currently, I'm a MSc Geomatics student at Babes-Bolyai University in Cluj-Napoca, Romania.

Programming/GIS/Technical skills
 * Java, Python, little bit of C++, and R, familiar with HTML & CSS
 * I use Eclipse, Sublime Text, Anaconda, Canopy,
 * Comfortable working on both Windows and Linux
 * Open Source GIS: QGIS, GeoServer, PostgreSQL, PostGIS
 * Familiar with Git and GitHub, Vagrant, VirtualBox
 * Currently learning Android (docs, specs, Android Studio, GenyMotion etc.)