diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 42b4767606cdc1e814445e4e15200335a2458395..8a7ab2a634edb67a43c5f5d4abe52525278b36df 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -10,6 +10,7 @@ + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000000000000000000000000000000000000..797acea53eb091cf5b30518802c3073f544adeed --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index dba8aaea75087148fb187f4f95b6adfb02a38b6b..25729289e787f5592abf6cee7dd474a6b3691cf5 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,12 @@ ${junit.version} test + + + org.reflections + reflections + 0.10.2 + @@ -107,6 +113,11 @@ jfoenix 9.0.10 + + com.google.inject + guice + 4.2.1 + diff --git a/src/main/java/it/unibz/videotaxi/LogReader.java b/src/main/java/it/unibz/videotaxi/LogReader.java deleted file mode 100644 index 44d400baba7b2d965fdcaece59c2313e5291a12d..0000000000000000000000000000000000000000 --- a/src/main/java/it/unibz/videotaxi/LogReader.java +++ /dev/null @@ -1,87 +0,0 @@ -package it.unibz.videotaxi; - -import org.json.JSONObject; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class LogReader { - - List objects = new ArrayList<>(); - - public LogReader(String filePath) { - reader(filePath); - getCategory(); - getBufferLen(); - } - - /** - * reads the file line by line and calls jsonObject - * @param filePath String containing the filepath of the log file - */ - public void reader(String filePath){ - BufferedReader reader; - - try { - reader = new BufferedReader(new FileReader(filePath)); - String line = reader.readLine(); - while (line != null && line.charAt(0) == '{'){ - //System.out.println("line: " + line); - jsonObject(line); - line = reader.readLine(); - } - reader.close(); - } - catch(IOException e) { - e.printStackTrace(); - } - } - - /** - * adds each read line to a JSONObject Arraylist, which will be used for further processing - * @param line read line from reader - */ - public void jsonObject(String line){ - JSONObject obj = new JSONObject(line); - objects.add(obj); - } - - - /** - * searches all entries of type category - * @return hashmap with amount per found string (e.g. "warn" : 5) - */ - public Map getCategory(){ - List categoryList = new ArrayList<>(); - for (JSONObject object : objects) { - categoryList.add(object.get("category").toString()); - } - return categoryList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); - } - - - /** - * searches all entries of type buffer length - * @return hashmap with time and buffer length - */ - public Map getBufferLen(){ - List bufferList = new ArrayList<>(); - Map timeStampBuffer = new HashMap<>(); - - for (int i = 0; i < objects.size(); i++){ - if (objects.get(i).has("measurement") && objects.get(i).getJSONObject("measurement").has("buffer_len")){ - String buffer = objects.get(i).getJSONObject("measurement").get("buffer_len").toString(); - String timeStamp = objects.get(i).get("timestamp").toString(); - bufferList.add(buffer); - timeStampBuffer.put(timeStamp,buffer); - } - } - return timeStampBuffer; - } - -} diff --git a/src/main/java/it/unibz/videotaxi/Main.java b/src/main/java/it/unibz/videotaxi/Main.java index dd72dbdd967cbf0727b28c4fd250f4e4dc5c4b08..08e193777ffb9add4c95297b17771fd1cd1f6a11 100644 --- a/src/main/java/it/unibz/videotaxi/Main.java +++ b/src/main/java/it/unibz/videotaxi/Main.java @@ -4,7 +4,7 @@ import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; - +import it.unibz.videotaxi.filters.Filter; import java.io.IOException; public class Main extends Application { @@ -21,7 +21,4 @@ public class Main extends Application { stage.show(); } - - - } \ No newline at end of file diff --git a/src/main/java/it/unibz/videotaxi/TryProgram.java b/src/main/java/it/unibz/videotaxi/TryProgram.java deleted file mode 100644 index 69dd0dbbfdb8c7fec493d1af1a640a4a930276b0..0000000000000000000000000000000000000000 --- a/src/main/java/it/unibz/videotaxi/TryProgram.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.unibz.videotaxi; - -import it.unibz.videotaxi.diagrams.Diagram_barChart; -import javafx.application.Application; -import javafx.stage.Stage; -import java.io.IOException; -import java.util.Map; - -public class TryProgram extends Application { - - public static void main(String[] args) { - launch(args); - } - - //EXAMPLE - @Override - public void start(Stage stage){ - - - LogReader logReader = new LogReader("src/main/resources/example-livesub.log"); - Map mapCategory = logReader.getCategory(); - - Diagram_barChart diagram = new Diagram_barChart("Event Category", - "Category", - mapCategory); - diagram.setxLabel("Category"); - diagram.setyLabel("Amount"); - stage = diagram.returnStage(); - stage.show(); - - } - -} \ No newline at end of file diff --git a/src/main/java/it/unibz/videotaxi/controllers/mainPageController.java b/src/main/java/it/unibz/videotaxi/controllers/mainPageController.java index 529568b77bce23acadf63146d33c16891f403970..c758aeed6e9635fca24aa9149837f3bb70bb3eb7 100644 --- a/src/main/java/it/unibz/videotaxi/controllers/mainPageController.java +++ b/src/main/java/it/unibz/videotaxi/controllers/mainPageController.java @@ -2,11 +2,11 @@ package it.unibz.videotaxi.controllers; import com.jfoenix.controls.JFXButton; import it.unibz.videotaxi.FileReader; +import it.unibz.videotaxi.diagrams.Diagram; import it.unibz.videotaxi.diagrams.Diagram_barChart; import it.unibz.videotaxi.diagrams.Diagram_pieChart; import it.unibz.videotaxi.diagrams.Diagram_timeLine; -import it.unibz.videotaxi.filters.BufferFilter; -import it.unibz.videotaxi.filters.CategoryFilter; +import it.unibz.videotaxi.filters.*; import javafx.collections.FXCollections; import javafx.event.ActionEvent; import javafx.fxml.Initializable; @@ -16,11 +16,11 @@ import javafx.stage.FileChooser; import javafx.stage.Stage; -import java.awt.*; import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URL; -import java.util.Objects; -import java.util.ResourceBundle; +import java.util.*; public class mainPageController implements Initializable { @@ -30,15 +30,19 @@ public class mainPageController implements Initializable { final FileChooser fileChooser = new FileChooser(); private File selectedFile; - public FileReader reader; - public Stage stage = new Stage(); - public Stage stageD = new Stage(); + private FileReader reader; + public Stage stage; + public Stage stageD; + + public Filter fl; /** JAVA FX CONTROLLING METHODS*/ @Override public void initialize(URL url, ResourceBundle resourceBundle) { + stage = new Stage(); + stageD = new Stage(); } public void selectFile(ActionEvent actionEvent) { @@ -55,23 +59,33 @@ public class mainPageController implements Initializable { public void displayChoiceBox(){ filterCombo.setVisible(true); - String[] listFilters = {"Audio buffer", "Categories"}; - filterCombo.setItems(FXCollections.observableArrayList(listFilters)); - + List results = new ArrayList(); + File[] files = new File("src/main/java/it/unibz/videotaxi/filters").listFiles(); + if (files!=null) { + for (File file : files) { + if (file.isFile() && file.getName().endsWith("Filter.java") && file.getName().length()>11) { + int totalLenght = file.getName().length(); + results.add(file.getName().substring(0, totalLenght-5)); + } + } + filterCombo.setItems(FXCollections.observableArrayList(results)); + } diagramCombo.setVisible(true); + } - public void selectFilter(ActionEvent actionEvent) { - String[] diagramBuffer = {"Timeline"}; - String[] diagramCategory = {"Bar-Chart", "Pie-Chart"}; + public void selectFilter(ActionEvent actionEvent) throws ClassNotFoundException { + Map filters = new HashMap<>(); + ServiceLoader serviceLoaderFilter = ServiceLoader.load(Filter.class); - if (filterCombo.getSelectionModel().getSelectedIndex() == 0){ - diagramCombo.setItems(FXCollections.observableArrayList(diagramBuffer)); - } - else { - diagramCombo.setItems(FXCollections.observableArrayList(diagramCategory)); + for (Filter fl: serviceLoaderFilter) + { + filters.put(fl.getName(), fl); } + + fl = filters.get(filterCombo.getSelectionModel().getSelectedItem()); + diagramCombo.setItems(FXCollections.observableArrayList(fl.getEnabledDiagrams())); } public void selectDiagram(ActionEvent actionEvent) { @@ -79,28 +93,11 @@ public class mainPageController implements Initializable { } - public void generateDiagram(ActionEvent actionEvent) { - if (filterCombo.getValue() != null && diagramCombo.getValue() != null){ - if (Objects.equals(filterCombo.getSelectionModel().getSelectedItem(), "Audio buffer")){ - Diagram_timeLine diagram = new Diagram_timeLine("Audio Buffer", "Audio Buffer", new BufferFilter(reader.getObjects()).getBuffer()); - diagram.setxLabel("Category"); - diagram.setyLabel("Amount"); - stageD = diagram.returnStage(); - stageD.show(); - } - else if (Objects.equals(diagramCombo.getSelectionModel().getSelectedItem(), "Bar-Chart")){ - Diagram_barChart diagram = new Diagram_barChart("Event Category", "Category", new CategoryFilter(reader.getObjects()).getCategories()); - diagram.setxLabel("Category"); - diagram.setyLabel("Amount"); - stageD = diagram.returnStage(); - stageD.show(); - } - else if (Objects.equals(diagramCombo.getSelectionModel().getSelectedItem(), "Pie-Chart")){ - Diagram_pieChart diagram = new Diagram_pieChart("Event Category", "Category", new CategoryFilter(reader.getObjects()).getCategories()); - stageD = diagram.returnStage(); - stageD.show(); - } - } + public void generateDiagram(ActionEvent actionEvent) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + + String methodName = fl.getName()+"And"+diagramCombo.getSelectionModel().getSelectedItem(); + Method method = fl.getClass().getMethod(methodName, FileReader.class); + method.invoke(fl, reader); } diff --git a/src/main/java/it/unibz/videotaxi/diagrams/Diagram.java b/src/main/java/it/unibz/videotaxi/diagrams/Diagram.java index af556d417bc05d842a9a96868c0ebd28a9d25684..62c93a41e273289201cb4a8d2a04eb380461ae6e 100644 --- a/src/main/java/it/unibz/videotaxi/diagrams/Diagram.java +++ b/src/main/java/it/unibz/videotaxi/diagrams/Diagram.java @@ -1,11 +1,17 @@ package it.unibz.videotaxi.diagrams; -import it.unibz.videotaxi.LogReader; import javafx.stage.Stage; -import java.util.Map; +import java.io.File; +import java.util.*; public abstract class Diagram { + public enum Diagrams { + Diagram_barChart, + Diagram_pieChart, + Diagram_timeLine + } + Stage stage = new Stage(); private String namePane; @@ -18,6 +24,14 @@ public abstract class Diagram { abstract Stage returnStage(); + public static Map getDiagrams() { + Map diagramsMap = new HashMap<>(); + Diagrams[] diagramsArray = Diagrams.values(); + for (Diagrams diagrams : diagramsArray) + diagramsMap.put(diagrams.toString(), false); + return diagramsMap; + } + /* GETTER AND SETTERS */ public String getNamePane() { diff --git a/src/main/java/it/unibz/videotaxi/diagrams/Diagram_pieChart.java b/src/main/java/it/unibz/videotaxi/diagrams/Diagram_pieChart.java index 0cd5098a9c08562010827d30aec8a0f5c0531f7e..8cece61723103cde0c1c5d53aec1001b38d084e9 100644 --- a/src/main/java/it/unibz/videotaxi/diagrams/Diagram_pieChart.java +++ b/src/main/java/it/unibz/videotaxi/diagrams/Diagram_pieChart.java @@ -1,6 +1,5 @@ package it.unibz.videotaxi.diagrams; -import it.unibz.videotaxi.LogReader; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; diff --git a/src/main/java/it/unibz/videotaxi/diagrams/Diagram_timeLine.java b/src/main/java/it/unibz/videotaxi/diagrams/Diagram_timeLine.java index c377e970b32e3ec4a3640c41c268827bddb3e262..20e649964ecc5a65c84ce03592619d61aff0fe05 100644 --- a/src/main/java/it/unibz/videotaxi/diagrams/Diagram_timeLine.java +++ b/src/main/java/it/unibz/videotaxi/diagrams/Diagram_timeLine.java @@ -1,7 +1,5 @@ package it.unibz.videotaxi.diagrams; -import it.unibz.videotaxi.LogReader; -import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.chart.*; import javafx.stage.Stage; diff --git a/src/main/java/it/unibz/videotaxi/filters/BufferFilter.java b/src/main/java/it/unibz/videotaxi/filters/BufferFilter.java index a195b90f193b53eb73e49f13dc413b83cee94122..c01c7e7fd86a6c5fdf939714c3d7b1c7eb80c580 100644 --- a/src/main/java/it/unibz/videotaxi/filters/BufferFilter.java +++ b/src/main/java/it/unibz/videotaxi/filters/BufferFilter.java @@ -1,20 +1,42 @@ package it.unibz.videotaxi.filters; +import it.unibz.videotaxi.FileReader; +import it.unibz.videotaxi.diagrams.Diagram; +import it.unibz.videotaxi.diagrams.Diagram_timeLine; +import javafx.stage.Stage; import org.json.JSONObject; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -public class BufferFilter { +public class BufferFilter implements Filter { + + public BufferFilter(){} + private List objects; + private Stage stage = new Stage(); + + private List enabledDiagram = new ArrayList<>(); public BufferFilter(List objects) { this.objects = objects; } - public Map getBuffer(){ + public void BufferFilterAndDiagram_timeLine(FileReader reader) + { + Map mapBufferLength = new BufferFilter(reader.getObjects()).getResult(); + String date = mapBufferLength.entrySet().toArray()[0].toString().substring(0,10); + Diagram_timeLine diagram = new Diagram_timeLine("Event Category", "Category", mapBufferLength); + diagram.setxLabel("Minutes"); + diagram.setNameChart("Buffer Length of " + date); + stage = diagram.returnStage(); + stage.setTitle("Buffer Length"); + stage.show(); + } + + @Override + public Map getResult(){ List bufferList = new ArrayList<>(); Map timeStampBuffer = new HashMap<>(); @@ -29,4 +51,15 @@ public class BufferFilter { return timeStampBuffer; } + @Override + public List getEnabledDiagrams() { + enabledDiagram.add(Diagram.Diagrams.Diagram_timeLine.toString()); + return enabledDiagram; + } + + @Override + public String getName() { + return "BufferFilter"; + } + } diff --git a/src/main/java/it/unibz/videotaxi/filters/CategoryFilter.java b/src/main/java/it/unibz/videotaxi/filters/CategoryFilter.java index 19de187b1d5909b2401ec8c1852dc8dc9102625c..e0665c69e83e28b756292c0270c6f3d178c045d3 100644 --- a/src/main/java/it/unibz/videotaxi/filters/CategoryFilter.java +++ b/src/main/java/it/unibz/videotaxi/filters/CategoryFilter.java @@ -1,24 +1,64 @@ package it.unibz.videotaxi.filters; +import it.unibz.videotaxi.FileReader; +import it.unibz.videotaxi.diagrams.Diagram; +import it.unibz.videotaxi.diagrams.Diagram_barChart; +import it.unibz.videotaxi.diagrams.Diagram_pieChart; +import javafx.stage.Stage; import org.json.JSONObject; - import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -public class CategoryFilter { +public class CategoryFilter implements Filter { + + public CategoryFilter(){} + + private Stage stage; + private List objects; + private List enabledDiagram = new ArrayList<>(); + public CategoryFilter(List objects) { this.objects = objects; } - public Map getCategories(){ + public Map getResult(){ List categoryList = new ArrayList<>(); for (JSONObject object : objects) { categoryList.add(object.get("category").toString()); } return categoryList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); } + + public void CategoryFilterAndDiagram_barChart(FileReader reader) + { + Diagram_barChart diagram = new Diagram_barChart("Event Category", "Category", new CategoryFilter(reader.getObjects()).getResult()); + diagram.setxLabel("Category"); + diagram.setyLabel("Amount"); + stage = diagram.returnStage(); + stage.show(); + } + + public void CategoryFilterAndDiagram_pieChart(FileReader reader) + { + Diagram_pieChart diagram = new Diagram_pieChart("Event Category", "Category", new CategoryFilter(reader.getObjects()).getResult()); + stage = diagram.returnStage(); + stage.show(); + } + + @Override + public List getEnabledDiagrams() { + enabledDiagram.add(Diagram.Diagrams.Diagram_barChart.toString()); + enabledDiagram.add(Diagram.Diagrams.Diagram_pieChart.toString()); + return enabledDiagram; + } + + @Override + public String getName() { + return "CategoryFilter"; + } + } diff --git a/src/main/java/it/unibz/videotaxi/filters/Filter.java b/src/main/java/it/unibz/videotaxi/filters/Filter.java new file mode 100644 index 0000000000000000000000000000000000000000..cf3be7487f7932266ac0364f0405f92583e3d978 --- /dev/null +++ b/src/main/java/it/unibz/videotaxi/filters/Filter.java @@ -0,0 +1,10 @@ +package it.unibz.videotaxi.filters; +import it.unibz.videotaxi.diagrams.Diagram; +import java.util.List; + +public interface Filter { + + Object getResult(); + List getEnabledDiagrams(); + String getName(); +} diff --git a/src/main/resources/META-INF/services/it.unibz.videotaxi.filters.Filter b/src/main/resources/META-INF/services/it.unibz.videotaxi.filters.Filter new file mode 100644 index 0000000000000000000000000000000000000000..ea1a1e96d0c973aa93edbe9c48027316228afd0f --- /dev/null +++ b/src/main/resources/META-INF/services/it.unibz.videotaxi.filters.Filter @@ -0,0 +1,2 @@ +it.unibz.videotaxi.filters.CategoryFilter +it.unibz.videotaxi.filters.BufferFilter \ No newline at end of file diff --git a/target/classes/META-INF/services/it.unibz.videotaxi.filters.Filter b/target/classes/META-INF/services/it.unibz.videotaxi.filters.Filter new file mode 100644 index 0000000000000000000000000000000000000000..ea1a1e96d0c973aa93edbe9c48027316228afd0f --- /dev/null +++ b/target/classes/META-INF/services/it.unibz.videotaxi.filters.Filter @@ -0,0 +1,2 @@ +it.unibz.videotaxi.filters.CategoryFilter +it.unibz.videotaxi.filters.BufferFilter \ No newline at end of file diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index c5d7245a0af9993799cf289793412b1ef61e12c4..747879d48395e479d3be59b37e2bf8e07372741c 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,8 +1,12 @@ -Diagram_barChart.class -Diagram_timeLine.class -LogReader.class -HelloController.class -tryFXApp.class -Diagram.class -Diagram_pieChart.class -HelloApplication.class +it\unibz\videotaxi\filters\BufferFilter.class +it\unibz\videotaxi\diagrams\Diagram$Diagrams.class +it\unibz\videotaxi\filters\Filter.class +it\unibz\videotaxi\TryStuff.class +it\unibz\videotaxi\diagrams\Diagram_barChart.class +it\unibz\videotaxi\diagrams\Diagram_timeLine.class +it\unibz\videotaxi\filters\CategoryFilter.class +it\unibz\videotaxi\Main.class +it\unibz\videotaxi\controllers\mainPageController.class +it\unibz\videotaxi\diagrams\Diagram.class +it\unibz\videotaxi\FileReader.class +it\unibz\videotaxi\diagrams\Diagram_pieChart.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index f3b00a3b1101f8608203fe8c739e690c36bde032..d11a05cf4498b89e7a5652de2b361a3d5d5a09d7 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,8 +1,11 @@ -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\Diagram_pieChart.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\tryFXApp.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\Diagram.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\Diagram_barChart.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\HelloApplication.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\LogReader.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\Diagram_timeLine.java -C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\HelloController.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\diagrams\Diagram_timeLine.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\diagrams\Diagram.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\filters\CategoryFilter.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\diagrams\Diagram_barChart.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\FileReader.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\diagrams\Diagram_pieChart.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\filters\BufferFilter.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\TryStuff.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\Main.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\controllers\mainPageController.java +C:\Users\alice\OneDrive\Desktop\challenge_video.taxi\src\main\java\it\unibz\videotaxi\filters\Filter.java diff --git a/video_taxi.iml b/video_taxi.iml index b1d3634ba14a35bd3891802ba34c394074872177..7145110451c9327f155cc08ab4635844d39d052a 100644 --- a/video_taxi.iml +++ b/video_taxi.iml @@ -35,7 +35,19 @@ + + + + + + + + + + + + \ No newline at end of file