efekt 1
This commit is contained in:
commit
ef726f68c2
38
.gitignore
vendored
Normal file
38
.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
7
.idea/encodings.xml
Normal file
7
.idea/encodings.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
13
.idea/misc.xml
Normal file
13
.idea/misc.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
65
pom.xml
Normal file
65
pom.xml
Normal file
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.example</groupId>
|
||||
<artifactId>Projekt-nr-1</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.12.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.10</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-core</artifactId>
|
||||
<version>2.12.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-core</artifactId>
|
||||
<version>2.3.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-impl</artifactId>
|
||||
<version>2.3.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
<artifactId>activation</artifactId>
|
||||
<version>1.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jaxb</groupId>
|
||||
<artifactId>jaxb-runtime</artifactId>
|
||||
<version>2.3.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.itextpdf</groupId>
|
||||
<artifactId>itextpdf</artifactId>
|
||||
<version>5.5.13.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
24
src/main/java/projekt/CityCoordinatesLoader.java
Normal file
24
src/main/java/projekt/CityCoordinatesLoader.java
Normal file
@ -0,0 +1,24 @@
|
||||
package projekt;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class CityCoordinatesLoader {
|
||||
|
||||
public static Map<String, Coordinates> loadCityCoordinates(String jsonFilePath) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
try {
|
||||
return mapper.readValue(new File(jsonFilePath),
|
||||
new TypeReference<Map<String, Coordinates>>() {
|
||||
});
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
}
|
22
src/main/java/projekt/Coordinates.java
Normal file
22
src/main/java/projekt/Coordinates.java
Normal file
@ -0,0 +1,22 @@
|
||||
package projekt;
|
||||
|
||||
public class Coordinates {
|
||||
private double lat;
|
||||
private double lon;
|
||||
|
||||
public double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public double getLon() {
|
||||
return lon;
|
||||
}
|
||||
|
||||
public void setLon(double lon) {
|
||||
this.lon = lon;
|
||||
}
|
||||
}
|
21
src/main/java/projekt/DataSaver.java
Normal file
21
src/main/java/projekt/DataSaver.java
Normal file
@ -0,0 +1,21 @@
|
||||
package projekt;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class DataSaver {
|
||||
|
||||
public static void saveDataAsJson(String data, String filePath) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
try {
|
||||
ObjectNode dataNode = mapper.createObjectNode();
|
||||
dataNode.put("weatherData", data);
|
||||
mapper.writeValue(new File(filePath), dataNode);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
56
src/main/java/projekt/DataSaver2.java
Normal file
56
src/main/java/projekt/DataSaver2.java
Normal file
@ -0,0 +1,56 @@
|
||||
package projekt;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.itextpdf.text.Document;
|
||||
import com.itextpdf.text.DocumentException;
|
||||
import com.itextpdf.text.Paragraph;
|
||||
import com.itextpdf.text.pdf.PdfWriter;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class DataSaver2 {
|
||||
|
||||
public static void saveAsJson(String data, String filePath) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ObjectNode node = mapper.createObjectNode();
|
||||
node.put("weatherData", data);
|
||||
|
||||
try {
|
||||
mapper.writeValue(new File(filePath), node);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveAsXml(org.w3c.dom.Document doc, String filePath) {
|
||||
try {
|
||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||
Transformer transformer = transformerFactory.newTransformer();
|
||||
DOMSource source = new DOMSource(doc);
|
||||
StreamResult result = new StreamResult(new File(filePath));
|
||||
|
||||
transformer.transform(source, result);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveAsPdf(String data, String filePath) {
|
||||
Document pdfDocument = new Document();
|
||||
try {
|
||||
PdfWriter.getInstance(pdfDocument, new FileOutputStream(filePath));
|
||||
pdfDocument.open();
|
||||
pdfDocument.add(new Paragraph(data));
|
||||
pdfDocument.close();
|
||||
} catch (FileNotFoundException | DocumentException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
112
src/main/java/projekt/Main.java
Normal file
112
src/main/java/projekt/Main.java
Normal file
@ -0,0 +1,112 @@
|
||||
package projekt;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.io.StringReader;
|
||||
import java.util.*;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
String jsonFilePath = "src/main/resources/miasta.json";
|
||||
String chosenCity;
|
||||
String temperature = "", pressure = "", humidity = "";
|
||||
Map<String, Coordinates> cityCoordinatesMap = CityCoordinatesLoader.loadCityCoordinates(jsonFilePath);
|
||||
List<String> miasta = new ArrayList<>(cityCoordinatesMap.keySet());
|
||||
|
||||
Set<String> formatyZapisu = new HashSet<>(Arrays.asList("PDF", "JSON", "XML"));
|
||||
Scanner scan = new Scanner(System.in);
|
||||
|
||||
while (true) {
|
||||
System.out.println("P-Podaj miasto, Z-Zakończ");
|
||||
String opcja1 = scan.nextLine();
|
||||
|
||||
switch (opcja1) {
|
||||
case "P":
|
||||
chosenCity = wybierzMiastoIWyswietlDane(scan, miasta);
|
||||
WeatherService weatherService = new WeatherService();
|
||||
Coordinates coords = cityCoordinatesMap.get(chosenCity);
|
||||
String xmlString = weatherService.getWeatherData(String.valueOf(coords.getLat()), String.valueOf(coords.getLon()));
|
||||
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
Document doc = dBuilder.parse(new InputSource(new StringReader(xmlString)));
|
||||
|
||||
doc.getDocumentElement().normalize();
|
||||
|
||||
temperature = getAttributeValue(doc, "temperature", "value");
|
||||
pressure = getAttributeValue(doc, "pressure", "value");
|
||||
humidity = getAttributeValue(doc, "humidity", "value");
|
||||
|
||||
System.out.println("Temperatura: " + temperature + "°C");
|
||||
System.out.println("Ciśnienie: " + pressure + " hPa");
|
||||
System.out.println("Wilgotność: " + humidity + "%");
|
||||
break;
|
||||
case "Z":
|
||||
if (wybierzFormatIZapisz(scan, formatyZapisu, temperature, pressure, humidity)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
System.out.println("Podano niedostępną opcję!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static String wybierzMiastoIWyswietlDane(Scanner scan, List<String> miasta) {
|
||||
String miasto;
|
||||
while (true) {
|
||||
System.out.println("Dostępne miasta: " + String.join(", ", miasta));
|
||||
miasto = scan.nextLine();
|
||||
if (miasta.contains(miasto)) {
|
||||
break;
|
||||
} else {
|
||||
System.out.println("Nie można wyświetlić danych dla podanego miasta.");
|
||||
}
|
||||
}
|
||||
return miasto;
|
||||
}
|
||||
|
||||
private static boolean wybierzFormatIZapisz(Scanner scan, Set<String> formatyZapisu, String temperature, String pressure, String humidity) {
|
||||
while (true) {
|
||||
System.out.print("Podaj format zapisu [PDF, JSON, XML]: ");
|
||||
String opcja2 = scan.nextLine();
|
||||
if (formatyZapisu.contains(opcja2)) {
|
||||
System.out.println("Zapis w formacie " + opcja2);
|
||||
String danePogodowe = temperature + "°C, " + pressure + "hPa, " + humidity + "%";
|
||||
if (Objects.equals(opcja2, "PDF")) {
|
||||
DataSaver2.saveAsPdf(danePogodowe, "src/main/resources/pogoda.pdf");
|
||||
} else if (Objects.equals(opcja2, "JSON")) {
|
||||
DataSaver2.saveAsJson(danePogodowe, "src/main/resources/pogoda.json");
|
||||
} else if (Objects.equals(opcja2, "XML")) {
|
||||
Document weatherDoc = XmlCreator.createWeatherDocument(temperature, pressure, humidity);
|
||||
if (weatherDoc != null) {
|
||||
DataSaver2.saveAsXml(weatherDoc, "src/main/resources/pogoda.xml");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
System.out.println("Podano niewłaściwy format!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getAttributeValue(Document doc, String tagName, String attribute) {
|
||||
NodeList nodeList = doc.getElementsByTagName(tagName);
|
||||
if (nodeList != null && nodeList.getLength() > 0) {
|
||||
Element element = (Element) nodeList.item(0);
|
||||
return element.getAttribute(attribute);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
31
src/main/java/projekt/WeatherService.java
Normal file
31
src/main/java/projekt/WeatherService.java
Normal file
@ -0,0 +1,31 @@
|
||||
package projekt;
|
||||
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class WeatherService {
|
||||
|
||||
private static final String API_KEY = "d1c62029fc387217638fd3deda524ece";
|
||||
private static final String BASE_URL = "https://api.openweathermap.org/data/2.5/weather";
|
||||
|
||||
public String getWeatherData(String lat, String lon) {
|
||||
String url = String.format("%s?lat=%s&lon=%s&appid=%s&units=metric&mode=xml", BASE_URL, lat, lon, API_KEY);
|
||||
|
||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||
HttpGet request = new HttpGet(url);
|
||||
try (CloseableHttpResponse response = httpClient.execute(request)) {
|
||||
HttpEntity entity = response.getEntity();
|
||||
return entity != null ? EntityUtils.toString(entity) : null;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
36
src/main/java/projekt/XmlCreator.java
Normal file
36
src/main/java/projekt/XmlCreator.java
Normal file
@ -0,0 +1,36 @@
|
||||
package projekt;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
public class XmlCreator {
|
||||
|
||||
public static Document createWeatherDocument(String temperature, String pressure, String humidity) {
|
||||
try {
|
||||
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = docBuilder.newDocument();
|
||||
Element rootElement = doc.createElement("WeatherData");
|
||||
doc.appendChild(rootElement);
|
||||
|
||||
appendWeatherElement(doc, rootElement, "Temperatura", temperature);
|
||||
appendWeatherElement(doc, rootElement, "Ciśnienie", pressure);
|
||||
appendWeatherElement(doc, rootElement, "Wilgotność", humidity);
|
||||
|
||||
return doc;
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void appendWeatherElement(Document doc, Element parent, String name, String value) {
|
||||
Element element = doc.createElement(name);
|
||||
element.appendChild(doc.createTextNode(value));
|
||||
parent.appendChild(element);
|
||||
}
|
||||
}
|
7
src/main/resources/miasta.json
Normal file
7
src/main/resources/miasta.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"Warszawa": {"lat": 52.2298, "lon": 21.0118},
|
||||
"Szczecin": {"lat": 53.4285, "lon": 14.5528},
|
||||
"Łódź": {"lat": 51.7592, "lon": 19.4560},
|
||||
"Poznań": {"lat": 52.4064, "lon": 16.9252},
|
||||
"Białystok": {"lat": 53.1325, "lon": 23.1688}
|
||||
}
|
1
src/main/resources/pogoda.json
Normal file
1
src/main/resources/pogoda.json
Normal file
@ -0,0 +1 @@
|
||||
{"weatherData":"7.8°C, 1028hPa, 88%"}
|
1
src/main/resources/pogoda.pdf
Normal file
1
src/main/resources/pogoda.pdf
Normal file
@ -0,0 +1 @@
|
||||
{"weatherData":"7.8°C, 1028hPa, 88%"}
|
1
src/main/resources/pogoda.xml
Normal file
1
src/main/resources/pogoda.xml
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><WeatherData><Temperature>20</Temperature><Pressure>1013</Pressure><Humidity>80</Humidity></WeatherData>
|
Loading…
Reference in New Issue
Block a user