From 009bd97d4fc0bbbf177e79bd2586e7ab294c09b6 Mon Sep 17 00:00:00 2001 From: Thastertyn Date: Mon, 22 May 2023 15:17:48 +0200 Subject: [PATCH] Changed to java 17, modified marks a bit --- pom.xml | 4 +- .../java/xyz/thastertyn/Scrape/Jidelna.java | 34 +++++---- .../java/xyz/thastertyn/Scrape/Rozvrh.java | 2 +- .../java/xyz/thastertyn/Scrape/Znamky.java | 17 ++--- .../java/xyz/thastertyn/Types/FinalMark.java | 70 +++++++++++++++++++ .../java/xyz/thastertyn/Types/Option.java | 3 - .../java/xyz/thastertyn/Types/Predmet.java | 60 ++++++++-------- .../UserInterface/Content/Znamky.java | 21 +++--- .../UserInterface/Dialogs/EscapeDialog.java | 10 +-- 9 files changed, 138 insertions(+), 83 deletions(-) create mode 100644 src/main/java/xyz/thastertyn/Types/FinalMark.java diff --git a/pom.xml b/pom.xml index 01a0c0e..2e66d96 100644 --- a/pom.xml +++ b/pom.xml @@ -14,8 +14,8 @@ UTF-8 - 11 - 11 + 17 + 17 diff --git a/src/main/java/xyz/thastertyn/Scrape/Jidelna.java b/src/main/java/xyz/thastertyn/Scrape/Jidelna.java index 9a9afbb..505d8d0 100644 --- a/src/main/java/xyz/thastertyn/Scrape/Jidelna.java +++ b/src/main/java/xyz/thastertyn/Scrape/Jidelna.java @@ -7,29 +7,33 @@ import xyz.thastertyn.Types.Options; public class Jidelna extends JecnaScrape { - try { + //public void foo() + //{ + // try { - Document obedy = Jsoup.connect("https://objednavky.jidelnasokolska.cz/faces/secured/month.jsp?terminal=false&keyboard=&printer=") - .header("Connection", "keep-alive") - .cookie("XSRF-TOKEN", XSRF_TOKEN) - .cookie("JSESSIONID", jidelnaJSESSIONID) - .get(); + // Document obedy = Jsoup.connect("https://objednavky.jidelnasokolska.cz/faces/secured/month.jsp?terminal=false&keyboard=&printer=") + // .header("Connection", "keep-alive") + // .cookie("XSRF-TOKEN", XSRF_TOKEN) + // .cookie("JSESSIONID", jidelnaJSESSIONID) + // .get(); - System.out.println(obedy.toString()); + // System.out.println(obedy.toString()); - //#endregion + // //#endregion + + // } catch (IOException e) { + // // TO DO Auto-generated catch block + // e.printStackTrace(); + // } catch (SecurityException e) + // { + // e.printStackTrace(); + // } + //} - } catch (IOException e) { - // TO DO Auto-generated catch block - e.printStackTrace(); - } catch (SecurityException e) - { - e.printStackTrace(); - } @Override public Options[] getOptions() { diff --git a/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java b/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java index 1ff1437..9478de8 100644 --- a/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java +++ b/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java @@ -67,7 +67,7 @@ public class Rozvrh extends JecnaScrape { { String predmet = radkyRozvrhuHTML[i+1].get(j+1).select("span.subject").text(); - // Predmety jako CEL jsou trikrat, staci ale jen jednou + // Subjects like CEL are thrice, even though everyone has them, make it single String[] split = predmet.split(" "); HashSet set = new HashSet<>(Arrays.asList(split)); String pr = String.join("/", set); diff --git a/src/main/java/xyz/thastertyn/Scrape/Znamky.java b/src/main/java/xyz/thastertyn/Scrape/Znamky.java index fc47c0b..bf153b0 100644 --- a/src/main/java/xyz/thastertyn/Scrape/Znamky.java +++ b/src/main/java/xyz/thastertyn/Scrape/Znamky.java @@ -9,6 +9,7 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import xyz.thastertyn.Types.Choice; +import xyz.thastertyn.Types.FinalMark; import xyz.thastertyn.Types.Option; import xyz.thastertyn.Types.Options; import xyz.thastertyn.Types.Predmet; @@ -16,8 +17,6 @@ import xyz.thastertyn.Types.Znamka; public class Znamky extends JecnaScrape { - private boolean wasDownloaded; - // schoolYear, schoolYearId private ArrayList predmety; @@ -74,7 +73,7 @@ public class Znamky extends JecnaScrape { predmety.add(new Predmet(jmenoPredmetu)); }else{ String vyslednaZnamka = radkyPredmetuHTML[i].get(2).select("a.scoreFinal").text(); - predmety.add(new Predmet(jmenoPredmetu, Integer.parseInt(vyslednaZnamka))); + predmety.add(new Predmet(jmenoPredmetu, FinalMark.fromValue(vyslednaZnamka))); } for(Element znamkaElement : radkyPredmetuHTML[i].get(1).select("a.score")) @@ -95,6 +94,8 @@ public class Znamky extends JecnaScrape { predmety.get(subjectIndex).addZnamka(new Znamka(znamka, jeMala, textZnamky)); } + predmety.get(subjectIndex).calculateFinalMark(); + subjectIndex++; } @@ -115,8 +116,6 @@ public class Znamky extends JecnaScrape { boolean isDefault = e.hasAttr("selected"); schoolHalfYearOptions.addOption(new Option(e.text(), e.attr("value"), isDefault)); } - - wasDownloaded = true; } public ArrayList getPredmety() @@ -128,12 +127,4 @@ public class Znamky extends JecnaScrape { { return new Options[] {schoolYearOptions, schoolHalfYearOptions}; } - - @Override - public String toString() - { - return (wasDownloaded) ? - "All up and ready for use" : - "Nothing downloaded yet"; - } } \ No newline at end of file diff --git a/src/main/java/xyz/thastertyn/Types/FinalMark.java b/src/main/java/xyz/thastertyn/Types/FinalMark.java new file mode 100644 index 0000000..2c0d2a2 --- /dev/null +++ b/src/main/java/xyz/thastertyn/Types/FinalMark.java @@ -0,0 +1,70 @@ +package xyz.thastertyn.Types; + +public class FinalMark{ + public static final FinalMark VYBORNY = new FinalMark(1, "1"); + public static final FinalMark CHVALITEBNY = new FinalMark(2, "2"); + public static final FinalMark DOBRY = new FinalMark(3, "3"); + public static final FinalMark DOSTATECNY = new FinalMark(4, "4"); + public static final FinalMark NEDOSTATECNY = new FinalMark(5, "5"); + + public static final FinalMark NEHODNOCEN = new FinalMark(-1, "N"); + public static final FinalMark NAPOMENUT_ZA_NEKLASIFIKACI = new FinalMark(-2, "N?"); + + public static final FinalMark UVOLNEN = new FinalMark(-3, "U"); + + public static final FinalMark NAPOMENUT_ZA_ZAOSTAVANI = new FinalMark(-4, "5?"); + + public static final FinalMark UNKNOWN = new FinalMark(-5, "?"); + // #94701b + private double value; + private String stringValue; + + private FinalMark(double value, String stringValue) + { + this.stringValue = stringValue; + this.value = value; + } + + public FinalMark(double value) + { + this.value = value; + this.stringValue = String.format("%.2f", value); + } + + public double getValue() + { + return value; + } + + @Override + public String toString() + { + return stringValue; + } + + public static FinalMark fromValue(String value) + { + if(!value.matches("[0-9]")) + { + return switch (value) { + case "N" -> NEHODNOCEN; + case "N?" -> NAPOMENUT_ZA_NEKLASIFIKACI; + case "5?" -> NAPOMENUT_ZA_ZAOSTAVANI; + case "U" -> UVOLNEN; + default -> UNKNOWN; + }; + }else{ + int numericValue = Integer.parseInt(value); + + return switch (numericValue) { + case 1 -> VYBORNY; + case 2 -> CHVALITEBNY; + case 3 -> DOBRY; + case 4 -> DOSTATECNY; + case 5 -> NEDOSTATECNY; + default -> UNKNOWN; + }; + } + } +} + diff --git a/src/main/java/xyz/thastertyn/Types/Option.java b/src/main/java/xyz/thastertyn/Types/Option.java index f87561d..90360b6 100644 --- a/src/main/java/xyz/thastertyn/Types/Option.java +++ b/src/main/java/xyz/thastertyn/Types/Option.java @@ -13,9 +13,6 @@ public class Option { public boolean isDefault() { return isDefault; } - public String getText() { - return text; - } public String getValue() { return value; } diff --git a/src/main/java/xyz/thastertyn/Types/Predmet.java b/src/main/java/xyz/thastertyn/Types/Predmet.java index ae5f365..00b78fb 100644 --- a/src/main/java/xyz/thastertyn/Types/Predmet.java +++ b/src/main/java/xyz/thastertyn/Types/Predmet.java @@ -4,52 +4,49 @@ import java.util.ArrayList; public class Predmet { - private ArrayList znamky = new ArrayList<>(); - private String jmenoPredmetu = ""; + private ArrayList marks = new ArrayList<>(); + private String subjectName = ""; private boolean isFinal = false; - private int vyslednaZnamka = 0; + private FinalMark finalMark = FinalMark.UNKNOWN; - public Predmet(String jmenoPredmetu) + public Predmet(String subjectName) { - this.jmenoPredmetu = jmenoPredmetu; + this.subjectName = subjectName; } - public Predmet(String jmenoPredmetu, int vyslednaZnamka) + public Predmet(String subjectName, FinalMark finalMark) { - this.jmenoPredmetu = jmenoPredmetu; - this.vyslednaZnamka = vyslednaZnamka; + this.subjectName = subjectName; + this.finalMark = finalMark; isFinal = true; } - public void addZnamka(Znamka novaZnamka) + public void addZnamka(Znamka newMark) { - znamky.add(novaZnamka); + marks.add(newMark); } - public double getVyslednaZnamka() + public void calculateFinalMark() { - if(vyslednaZnamka != 0) - { - return vyslednaZnamka; - } - - if(znamky.isEmpty()) - { - return 0; - } + int total = marks + .stream() + .mapToInt((z) -> z.getZnamka() * z.getVaha()) + .sum(); - int celkem = znamky - .stream() - .mapToInt((z) -> z.getZnamka() * z.getVaha()) - .sum(); - - int vahy = znamky + int weight = marks .stream() .mapToInt((z) -> z.getVaha()) .sum(); - return (double) celkem / vahy; + double finalMark = ((double) total / weight); + + this.finalMark = new FinalMark(finalMark); + } + + public FinalMark getFinalMark() + { + return finalMark; } public boolean isFinal() @@ -57,13 +54,14 @@ public class Predmet { return isFinal; } - public String getJmenoPredmetu() + public String getSubjectName() { - return jmenoPredmetu; + return subjectName; } - public ArrayList getZnamky() + public ArrayList getMarks() { - return znamky; + return marks; } } + diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java b/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java index f82f44b..bb13cb5 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java @@ -13,6 +13,7 @@ import com.googlecode.lanterna.gui2.LayoutData; import com.googlecode.lanterna.gui2.LinearLayout; import com.googlecode.lanterna.gui2.Panel; +import xyz.thastertyn.Types.FinalMark; import xyz.thastertyn.Types.Predmet; import xyz.thastertyn.Types.Znamka; import xyz.thastertyn.UserInterface.Listeners.UpdateListener; @@ -64,6 +65,7 @@ public class Znamky extends JecnaContent { colors.put(4, new SimpleTheme(ANSI.BLACK, DOSTATECNY)); colors.put(5, new SimpleTheme(ANSI.BLACK, NEDOSTATECNY)); colors.put(-1, new SimpleTheme(ANSI.WHITE, NEHODNOCEN)); + colors.put(-2, new SimpleTheme(ANSI.WHITE, NEHODNOCEN)); // Sloupec pro jmena predmetu Panel jmemaPredmetu = new Panel() @@ -89,33 +91,26 @@ public class Znamky extends JecnaContent { .setLayoutManager(new LinearLayout(Direction.HORIZONTAL)) .addTo(znamky); - if(predmet.getZnamky().isEmpty()) + if(predmet.getMarks().isEmpty()) { jednotliveZnamky.addComponent(new Label("")); } - for(Znamka znamka : predmet.getZnamky()) + for(Znamka znamka : predmet.getMarks()) { Label znamkaLabel = new Label(znamka.getText()); znamkaLabel.setTheme(colors.get(znamka.getZnamka())); jednotliveZnamky.addComponent(znamkaLabel); } - double prumer = predmet.getVyslednaZnamka(); - String prumerAsString; + FinalMark finalMark = predmet.getFinalMark(); - if(predmet.isFinal()) - { - prumerAsString = ((int) prumer) + ""; - }else{ - prumerAsString = String.format("%.2f", prumer); - } - Label vysl = new Label(prumerAsString); + Label vysl = new Label(finalMark.toString()); - vysl.setTheme(colors.get((int) Math.round(prumer))); + vysl.setTheme(colors.get((int) Math.round(finalMark.getValue()))); - jmemaPredmetu.addComponent(new Label(predmet.getJmenoPredmetu())); + jmemaPredmetu.addComponent(new Label(predmet.getSubjectName())); vysledneZnamky.addComponent(vysl); } } diff --git a/src/main/java/xyz/thastertyn/UserInterface/Dialogs/EscapeDialog.java b/src/main/java/xyz/thastertyn/UserInterface/Dialogs/EscapeDialog.java index a211193..49f8e38 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Dialogs/EscapeDialog.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Dialogs/EscapeDialog.java @@ -18,13 +18,13 @@ import xyz.thastertyn.UserInterface.Listeners.ContentResetListener; public class EscapeDialog extends DialogWindow { private WindowBasedTextGUI textGUI; - private ContentResetListener listener; + private ContentResetListener resetListener; - public EscapeDialog(WindowBasedTextGUI textGUI, ContentResetListener listener) + public EscapeDialog(WindowBasedTextGUI textGUI, ContentResetListener resetListener) { super("Escape Menu"); this.textGUI = textGUI; - this.listener = listener; + this.resetListener = resetListener; Panel mainPanel = new Panel() .setLayoutManager(new GridLayout(1) @@ -55,7 +55,7 @@ public class EscapeDialog extends DialogWindow { LocalCredentials.getInstance().deleteCredentials(); LoginController controller = new LoginController(textGUI); controller.loginUsingGui(); - listener.reset(); + resetListener.reset(); } public void onLogout() @@ -63,7 +63,7 @@ public class EscapeDialog extends DialogWindow { close(); LoginController controller = new LoginController(textGUI); controller.loginUsingGui(); - listener.reset(); + resetListener.reset(); } public void onExit()