Skip to content
README.md 3.32 KiB
Newer Older
Ioannis Chatzis's avatar
Ioannis Chatzis committed
```markdown
# ServiceSpecificationFetcher
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Overview
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
The `ServiceSpecificationFetcher` is a Java-based application designed to fetch hierarchical data from RESTful APIs. It starts with a given `ServiceSpecification` UUID and recursively retrieves related `ServiceSpecification` and `ResourceSpecification` objects, saving each as JSON files in a structured directory hierarchy. Attachments and LCM rule specifications are also fetched and saved, ensuring all related data is organized and stored appropriately.
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Prerequisites
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
- Java 17+
- Maven
- Docker (optional, for containerized deployment)
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Configuration
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
The application requires a configuration file named `config.properties` with the following properties:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```ini
keycloak.url=http://keycloak:8080/auth/realms/openslice/protocol/openid-connect/token
client.id=osapiWebClientId
client.secret=admin
username=admin
password=admin
sourceApiEndpoint.url=http://localhost/tmf-api
serviceSpecification.uuid=487b9377-460d-4498-a8f3-a23cd7595b06
Kostis Trantzas's avatar
Kostis Trantzas committed
```

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Building the Project
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
To build the project, use Maven:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```sh
mvn clean install
```
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Running the Project
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
To run the project, execute the following command:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```sh
java -cp target/servicespecificationfetcher.jar org.osl.etsi.util.ServiceSpecificationFetcher
```
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Docker Deployment
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
### Building the Docker Image
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
To build the Docker image, use the following command:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```sh
docker build -t servicespecificationfetcher .
```
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
### Running the Docker Container
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
To run the Docker container, use the following command, ensuring to mount the configuration file and data folder:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```sh
docker run -v /local/path/to/config.properties:/app/config.properties -v /local/path/to/your-data-folder:/app/data-folder servicespecificationfetcher uuid
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
docker run -v C:\openslice\servicespecificationfetcher\src\main\resources\config.properties:/app/config.properties -v C:\openslice\servicespecificationfetcher:/app/data-folder servicespecificationfetcher f51cb185-6663-49e8-b195-83deeae32eed
```
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## File Hierarchy Structure
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
The fetched data is saved in a structured directory hierarchy as follows:
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
```
root_directory/
├── serviceSpecificationId1/
│   ├── serviceSpecificationId1.json
│   ├── serviceSpecificationLcmRules/
│   │   ├── ruleId1.json
│   │   ├── ruleId2.json
│   │   └── ...
│   ├── serviceSpecificationServiceRelationships/
│   │   ├── relatedServiceSpecificationId1/
│   │   │   ├── relatedServiceSpecificationId1.json
│   │   │   ├── ...
│   │   └── ...
│   ├── serviceSpecificationResourceRelationships/
│   │   ├── relatedResourceSpecificationId1/
│   │   │   ├── relatedResourceSpecificationId1.json
│   │   │   ├── ...
│   │   └── ...
│   ├── attachments/
│   │   ├── attachment1.ext
│   │   ├── attachment2.ext
│   │   └── ...
│   └── ...
├── serviceSpecificationId2/
│   ├── serviceSpecificationId2.json
│   ├── ...
└── ...
```
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
## Error Handling & Logging
Kostis Trantzas's avatar
Kostis Trantzas committed

Ioannis Chatzis's avatar
Ioannis Chatzis committed
- **HTTP Errors**: An `IOException` is thrown for non-200 HTTP status codes.
- **JSON Parsing Errors**: Errors are caught and printed to the console.
- **Logging**: `System.out.println` is used for logging.
Kostis Trantzas's avatar
Kostis Trantzas committed

## License

Ioannis Chatzis's avatar
Ioannis Chatzis committed
This project is licensed under the Apache Version 2.0 License.
```