Skip to content

Commit

Permalink
Fix codacy
Browse files Browse the repository at this point in the history
Better markdown

Signed-off-by: jk KPADEY <[email protected]>
  • Loading branch information
mivek committed May 23, 2020
1 parent b4c6099 commit 3c205a1
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 70 deletions.
164 changes: 97 additions & 67 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
[![Maven Central](https://img.shields.io/maven-central/v/io.github.mivek/metarParser.svg)](https://search.maven.org/artifact/io.github.mivek/metarParser/)

![](jetbrains_small.png)
# MetarParser

# MetarParser

This java lib provides a Metar and TAF decoder.

Expand All @@ -15,29 +15,30 @@ Use the MetarFacade class and its method retrieveFromAirport to get the metar of
The trends of the metar are not parsed.

## Table of content
1. [Adding dependency](#adding-the-dependency)
2. [Model](#model)
1. [Enumerations](#enumerations)
2. [Classes](#classes)
3. [Examples](#examples)
1. [Parse a metar](#parse-a-metar)
2. [Retrieve a metar](#retrieve-the-metar-of-an-airport)
3. [Parse a taf](#parse-a-taf)
4. [Retrieve a taf](#retrieve-a-taf)
4. [Internationalization](#internationalization)

1. [Adding dependency](#adding-the-dependency)
2. [Model](#model)
1. [Enumerations](#enumerations)
2. [Classes](#classes)
3. [Examples](#examples)
1. [Parse a metar](#parse-a-metar)
2. [Retrieve a metar](#retrieve-the-metar-of-an-airport)
3. [Parse a taf](#parse-a-taf)
4. [Retrieve a taf](#retrieve-a-taf)
4. [Internationalization](#internationalization)

## Architecture of the project

This project is divided into multiple maven module

- metarParser-entities: Contains the model and the enumerations
- metarParser-parsers: Contains the parsers and the commands
- metarParser-services: Contains a service allowing you to parse or retrieve METAR and TAF
- metarParser-spi: Contains the SPI
- metarParser-commons: Contains utility and internationalization classes

- metarParser-entities: Contains the model and the enumerations
- metarParser-parsers: Contains the parsers and the commands
- metarParser-services: Contains a service allowing you to parse or retrieve METAR and TAF
- metarParser-spi: Contains the SPI
- metarParser-commons: Contains utility and internationalization classes

## Adding the dependency

To add the service module :

```xml
Expand All @@ -49,101 +50,121 @@ To add the service module :
```

Or check [here](https://search.maven.org/artifact/io.github.mivek/metarParser/) if you are not using maven.

## Model

The class diagrams are generated by IntelliJ
When updating classes, regenerate the diagrams and save the images in the project.
![class diagram](model.jpg)

### Enumerations

The application contains numerous enumerations to represent data.
- CloudType: to represent the type of cloud.
- CloudQuantity: to represent the amount of clouds.
- Intensity: to represent the intensity of a meteorological phenomenon.
- Descriptive: to represent the descriptive of a meteorological phenomenon.
- Phenomenon: to represent a phenomenon.
- WeatherChangeTime: to represent a trend.
- TimeIndicator: to represent the time of the trend.


- CloudType: to represent the type of cloud.
- CloudQuantity: to represent the amount of clouds.
- Intensity: to represent the intensity of a meteorological phenomenon.
- Descriptive: to represent the descriptive of a meteorological phenomenon.
- Phenomenon: to represent a phenomenon.
- WeatherChangeTime: to represent a trend.
- TimeIndicator: to represent the time of the trend.

### Classes

#### Airport

The airport class is composed of
- Name
- City
- Country
- IATA code
- ICAO code
- latitude
- longitude
- altitude
- timezone
Note: Depending on the source for the airports, fields can be null
#### Cloud

- Name
- City
- Country
- IATA code
- ICAO code
- latitude
- longitude
- altitude
- timezone
Note: Depending on the source for the airports, fields can be null

#### Cloud

In this application a cloud is composed of
- CloudQuantity
- CloudType (optional)
- height (optional)


- CloudQuantity
- CloudType (optional)
- height (optional)

#### Country

A country is represented by its name.

#### Runway information

The runway information is composed of
- The name of the runway
- The minimal visibility on the runway
- The maximal visibility on the runway (optional)
- The trend of the visibility (optional)

- The name of the runway
- The minimal visibility on the runway
- The maximal visibility on the runway (optional)
- The trend of the visibility (optional)

#### Visibility

The visibility class is composed of
- The main visibility
- The minimal visibility (optional)
- The direction of the minimal visibility (optional)

- The main visibility
- The minimal visibility (optional)
- The direction of the minimal visibility (optional)

#### WeatherCondition

The weather condition is class to represent a meteorological phenomenon.
A weather condition is composed of
- an intensity (optional)
- a descriptive (optional)
- a list of phenomenon


- an intensity (optional)
- a descriptive (optional)
- a list of phenomenon

#### Wind

The wind class is composed of
- the speed
- the direction
- the speed of the gust
- the minimal wind variation in degrees
- the maximal wind variation in degrees
- the unit of the wind's speed


- the speed
- the direction
- the speed of the gust
- the minimal wind variation in degrees
- the maximal wind variation in degrees
- the unit of the wind's speed

#### WindShear

This class is a subclass of Wind.
It is composed of
- the height of the wind shear.

- the height of the wind shear.

### Trends

![trends diagram](trend.jpg)
Numerous classes represents the trends. Trends are stored inside a list of the metar object `Metar.getTrends()`.
Trends are composed of
- a Type (BECMG or TEMPO)
- a wind
- a visibility and vertical visibility
- a list of clouds
- a list of weather conditions
- a list of `AbstractMetarTrendTime` to represent the time with its type (AT, FM, TL)

- a Type (BECMG or TEMPO)
- a wind
- a visibility and vertical visibility
- a list of clouds
- a list of weather conditions
- a list of `AbstractMetarTrendTime` to represent the time with its type (AT, FM, TL)

## Airports loading

By default, airports are loaded from the temporary file [airport.dat](metarParser-spi/src/main/resources/data/airports.dat)
It is possible to provide your own source of airports via spi.
See [spi](metarParser-spi/README.md) module for details.


## Examples

### Parse a metar

Instantiate the metarFacade and use its method parse.

```java
Expand All @@ -153,6 +174,7 @@ Metar metar = service.decode(code);
```

### Retrieve the metar of an airport

Instantiate the metarFacade.
Use the its method retrieveFromAirport with the ICAO code of the airport.

Expand All @@ -161,7 +183,9 @@ String icao = "LFPG";
MetarService service = MetarService.getInstance();
Metar metar = service.retrieveFromAirport(icao);
```

### Parse a taf

Use the TAFFacade to decode the taf.

```java
Expand All @@ -175,9 +199,11 @@ String message = "TAF LFPG 150500Z 1506/1612 17005KT 6000 SCT012 \n"
TAFService service = TAFService.getInstance();
TAF taf = service.decode(message);
```
Lines of the message have to be separated by a "\n" character.

Lines of the message have to be separated by a "\\n" character.

### Retrieve a taf

Use the TAFFacade and the method retrieveFromAirport with the ICAO code of the airport.

```java
Expand All @@ -187,14 +213,18 @@ TAF taf = service.retrieveFromAirport(icao);
```

### Internationalization

English and french locales are supported by the library. The library uses the user's locale.
The default locale is english.

#### Change the locale and contributing

To change the locale use the method `setLocale(Locale)` of the class `Messages.java`

```(java)
Messages.getInstance().setLocale(Locale.FRENCH); // Changes the locale to french.
```

If you are willing to add a new locale or contribute to the project please see [Contributing.md file](CONTRIBUTING.md).

[Jetbrains](https://www.jetbrains.com/?from=metarParser) open source project.
7 changes: 6 additions & 1 deletion checkstyle.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Check Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!--
This configuration file was written by the eclipse-cs plugin configuration editor
-->
<!--
Checkstyle-Configuration: MetarParser
Description:
Expand All @@ -27,7 +30,9 @@ Checkstyle configuration that checks the sun coding conventions.
<module name="IllegalImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports">
<property name="severity" value="ignore"/>
<property name="processJavadoc" value="false"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="MethodLength"/>
<module name="ParameterNumber"/>
Expand Down Expand Up @@ -55,8 +60,8 @@ Checkstyle configuration that checks the sun coding conventions.
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="HiddenField">
<property name="ignoreSetter" value="true"/>
<property name="ignoreConstructorParameter" value="true"/>
<property name="ignoreSetter" value="true"/>
</module>
<module name="IllegalInstantiation"/>
<module name="InnerAssignment"/>
Expand Down
6 changes: 4 additions & 2 deletions metarParser-spi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
This module contains interfaces and implementations for the SPI pattern.

## Airport source

The interface `AirportProvider` defines the contract needed for the implementation.
Implementations should return a map of airport. The key should be the ICAO of the station and the value the `Airport` object.

### Default implementations

The project provides 2 default implementations:

- `DefaultAirportProvider` : The implementation uses a file contained in the project `airport.dat` for [openflights](https://openflights.org/).
- `OurAirportsAirportProvider`: This implementation is based on [ourairports](https://ourairports.com) onlines csv of countries and airport. To use this implementation make sure you have internet access.
- `DefaultAirportProvider` : The implementation uses a file contained in the project `airport.dat` for [openflights](https://openflights.org/).
- `OurAirportsAirportProvider`: This implementation is based on [ourairports](https://ourairports.com) onlines csv of countries and airport. To use this implementation make sure you have internet access.

### Specify the implementation

Expand Down

0 comments on commit 3c205a1

Please sign in to comment.