******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
*     http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GET STARTED
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

**********************************************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
PLEASE BE SURE THAT YOU HAVE FIRST PORTAL INSTALLED AND CONFIGURED ! *
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
**********************************************************************


---------------- REQUIREMENTS -------------
* Java 1.8
* Apache Maven 3.6.1
* Graphviz

IF you have this versions, check if you have set JAVA_HOME and M2_HOME.
    - If yes: Ignore step 1 and 2
    - If no: Follow the corresponding steps below


-------------------- 1 ---------------------
Install java 8

- Open a cmd and check your java version
    $ java -version
- If you dont have java version 1.8 then download and install it from:
        http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- Set JAVA_HOME (Windows OS):
    Right click on This Computer and select Properties.
    On the Advanced tab, select Environment Variables, and then edit JAVA_HOME to point to where the JDK software is located, for example, C:\Program Files\Java\jdk1.8.xxx.
    Also, edit The Path variable in System variables and add the bin path (C:\Program Files\Java\jdk1.8.xxx\bin)
- Restart your PC
- Confirm by checking the version
    $ java -version


-------------------- 2 ---------------------
Install Apache Maven to your pc

Maven is a tool that can be used for building and managing any Java-based project.

- Download maven 3.6.1 from
        https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.1/
- Extract the folder and place it on your C drive
- Set M2_HOME (Windows OS):
    - Right click on This Computer and select Properties.
    - On the Advanced tab, select Environment Variables, and then create M2_HOME to point to where the Maven software is located, for example, C:\apache-maven-3.5.0.
    - Also edit The Path variable in System variables and add the bin path (C:\apache-maven-3.5.0\bin)
- Restart your PC
- Confirm with
    $ mvn -v

-------------------- 3 ---------------------
Install Graphviz
Graphviz is open source graph visualization software. You need this software because of auto-generated graphics in the documentations.

* Download and install Graphviz from https://www.graphviz.org/download/
* If not already done, set the PATH variable

 Value of variable: <GRAPHVIZ_DIR>\bin

-------------------- 4 ---------------------
To get started with the project you have to clone contactBaseData backend and frontend projects.

Backend <project_url>: https://git.eclipse.org/r/openk-coremodules/org.eclipse.openk-coremodules.contactBaseData.backend
Frontend <project_url>: https://git.eclipse.org/r/openk-coremodules/org.eclipse.openk-coremodules.contactBaseData.frontend

- Create a folder and do following for each of them
- Open a cmd and navigate to the folder
- use the command to create a clone of each project
    § git clone <project_url>

Developing only:
- if you are going to develop, important is a switch to the develop branch
    - navigate in the folder with the clone and switch to develop branch
        $ git checkout <branch>
- At the end just pull the actual version of the code
    $ git pull origin <branch>


--------------------------
Active Develop Branches: |
Backend -> DEVELOP_BE    |
Frontend -> DEVELOP_FE   |
-------------------------|
Stable Branches: master  |
--------------------------


-------------------- 5 ---------------------
Build the maven project

Building the maven project, will produce a <project_name>.jar file, which is needed to run the project.
- Open a command line and navigate to the root folder of the backend project
- Use the following call to cleanly build and install artifacts into the local repository:
    $ mvn clean install

-------------------- 6 ---------------------
Open and familiarize yourself with the project

- if you successfully build the maven project you can find in /target/generated-docs all the documentations of this projects
    - "howtoBuild" -> here you can read how to build the whole (backend and frontend) project
    - "howtoRun" -> here you can read how to run the Application
    - "architectureDocumentation" -> here you can read about the architecture pf this module

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NEXT STEP -> READ THE howtoBuild FILE             !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!