diff --git a/src/data/DownloadLevels.java b/src/data/DownloadLevels.java index 6ea9104..5c3a887 100644 --- a/src/data/DownloadLevels.java +++ b/src/data/DownloadLevels.java @@ -13,6 +13,8 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea; import gui.MainGUI; +import gui.MainGUI_Deprecated; +import settingsfunctions.LoadSettings; public class DownloadLevels { @@ -49,6 +51,9 @@ public class DownloadLevels { main.add(scroll); main.add(bar); main.setVisible(true); + + LoadSettings settings = new LoadSettings(); + settings.load(); @@ -84,16 +89,32 @@ public class DownloadLevels { } area.append(" >> ERFOLGREICH \n"); } + + + JOptionPane.showMessageDialog(null, "Alle " + ManageFiles.getMissinglevels().size() + " Level wurden erfolgreich heruntergeladen.", "Download abgeschlossen", JOptionPane.INFORMATION_MESSAGE); main.dispose(); - MainGUI gui = new MainGUI(); - try { - gui.build(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + if(settings.isOldsystem()) { + MainGUI gui = new MainGUI(); + try { + gui.build(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else { + MainGUI_Deprecated gui = new MainGUI_Deprecated(); + try { + gui.build(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + } diff --git a/src/data/GuiData.java b/src/data/GuiData.java index 6d05b9a..a25b2c9 100644 --- a/src/data/GuiData.java +++ b/src/data/GuiData.java @@ -3,16 +3,15 @@ package data; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import org.apache.commons.io.FileUtils; import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; +import database.DatabaseManager; +import database.Sqlite; + public class GuiData { private ArrayList localLevels = new ArrayList(); @@ -21,6 +20,8 @@ public class GuiData { private ArrayList verifier = new ArrayList(); private ArrayList creator = new ArrayList(); private ArrayList ytlink = new ArrayList(); + private ArrayList creators = new ArrayList(); + private ArrayList victors = new ArrayList(); public ArrayList completed = new ArrayList(); private FetchData data = new FetchData(); @@ -55,9 +56,19 @@ public class GuiData { return ytlink; } + public ArrayList getCreators() { + return creators; + } - - public void IndexData() throws IOException { + public ArrayList getVictors() { + return victors; + } + + public void IndexData(ArrayList migrate) throws IOException { + DatabaseManager mgr = new DatabaseManager(); + mgr.queryData("levels"); + + Sqlite sql = new Sqlite("levels"); FetchData data = new FetchData(); @@ -67,10 +78,10 @@ public class GuiData { String jsonstring; localLength = filelengthindex.length; - - for(int i = 0; i < filelengthindex.length; i++) { + + for(int i = 0; i < migrate.size(); i++) { - jsonstring = FileUtils.readFileToString(new File("C:\\ExtremeDemonList\\levels\\" + data.allLevels().get(i) + ".json"), StandardCharsets.UTF_8); + jsonstring = FileUtils.readFileToString(new File("C:\\ExtremeDemonList\\levels\\" + migrate.get(i)), StandardCharsets.UTF_8); jsonstring = jsonstring.trim().replace("\n", "").replace("\t", "").replace("\\", ""); JSONObject obj = new JSONObject(jsonstring); @@ -82,29 +93,12 @@ public class GuiData { creator.add(obj.getString("author")); qualification.add(obj.getInt("percentToQualify") + ""); ytlink.add(obj.getString("verification") + ""); + creators.add(obj.getJSONArray("creators") + ""); + victors.add(obj.getJSONArray("records") + ""); } - } - - public static ArrayList allVictors(String levelname) throws IOException { - ArrayList completed = new ArrayList<>(); - - // JSON-Datei einlesen - String jsonContent = new String(Files.readAllBytes(Paths.get("C:\\ExtremeDemonList\\levels\\" + levelname + ".json"))); - JSONObject jsonObject = new JSONObject(jsonContent); - - // Victors extrahieren - JSONArray recordsArray = jsonObject.getJSONArray("records"); - for (int i = 0; i < recordsArray.length(); i++) { - JSONObject record = recordsArray.getJSONObject(i); - int percent = record.getInt("percent"); - if (percent == 100) { - completed.add(record.getString("user")); - } - } - - return completed; - } + + } } diff --git a/src/data/GuiData_Deprecated.java b/src/data/GuiData_Deprecated.java new file mode 100644 index 0000000..6703f49 --- /dev/null +++ b/src/data/GuiData_Deprecated.java @@ -0,0 +1,129 @@ +package data; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; + +import org.apache.commons.io.FileUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import database.DatabaseManager; + +public class GuiData_Deprecated { + + private ArrayList localLevels = new ArrayList(); + private ArrayList qualification = new ArrayList(); + private ArrayList id = new ArrayList(); + private ArrayList verifier = new ArrayList(); + private ArrayList creator = new ArrayList(); + private ArrayList ytlink = new ArrayList(); + private ArrayList creators = new ArrayList(); + private ArrayList victors = new ArrayList(); + public ArrayList completed = new ArrayList(); + + private FetchData data = new FetchData(); + + private int localLength; + + public int getLocalLength() { + return localLength; + } + + public ArrayList getLocalLevels() { + return localLevels; + } + + public ArrayList getId() { + return id; + } + + public ArrayList getVerifier() { + return verifier; + } + + public ArrayList getCreator() { + return creator; + } + + public ArrayList getQualification() { + return qualification; + } + + public ArrayList getYoutubeLink() { + return ytlink; + } + + public ArrayList getCreators() { + return creators; + } + + public ArrayList getVictors() { + return victors; + } + + + + public void IndexData() throws IOException { + + DatabaseManager mgr = new DatabaseManager(); + mgr.queryData("levels"); + + + + FetchData data = new FetchData(); + + File filelength = new File("C:\\ExtremeDemonList\\levels"); + File[] filelengthindex = filelength.listFiles(); + + String jsonstring; + + localLength = filelengthindex.length; + + for(int i = 0; i < filelengthindex.length; i++) { + + jsonstring = FileUtils.readFileToString(new File("C:\\ExtremeDemonList\\levels\\" + data.allLevels().get(i) + ".json"), StandardCharsets.UTF_8); + jsonstring = jsonstring.trim().replace("\n", "").replace("\t", "").replace("\\", ""); + + JSONObject obj = new JSONObject(jsonstring); + JSONArray recordsArray = obj.getJSONArray("records"); + + localLevels.add(obj.getString("name")); + id.add(obj.getInt("id") + ""); + verifier.add(obj.getString("verifier")); + creator.add(obj.getString("author")); + qualification.add(obj.getInt("percentToQualify") + ""); + ytlink.add(obj.getString("verification") + ""); + creators.add(obj.getJSONArray("creators") + ""); + victors.add(obj.getJSONArray("records") + ""); + + + } + } + + public static ArrayList allVictors(String levelname) throws IOException { + ArrayList completed = new ArrayList<>(); + + // JSON-Datei einlesen + String jsonContent = new String(Files.readAllBytes(Paths.get("C:\\ExtremeDemonList\\levels\\" + levelname + ".json"))); + JSONObject jsonObject = new JSONObject(jsonContent); + + // Victors extrahieren + JSONArray recordsArray = jsonObject.getJSONArray("records"); + for (int i = 0; i < recordsArray.length(); i++) { + JSONObject record = recordsArray.getJSONObject(i); + int percent = record.getInt("percent"); + if (percent == 100) { + completed.add(record.getString("user")); + } + } + + return completed; + } + +} diff --git a/src/data/ManageFiles.java b/src/data/ManageFiles.java index 85dddcb..998d450 100644 --- a/src/data/ManageFiles.java +++ b/src/data/ManageFiles.java @@ -4,7 +4,9 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import database.Sqlite; import gui.MainGUI; +import gui.MainGUI_Deprecated; import gui.MissingLevels; @@ -12,6 +14,7 @@ public class ManageFiles { private FetchData fetch = new FetchData(); private MissingLevels gui = new MissingLevels(); + private Sqlite database = new Sqlite("levels"); private static ArrayList missinglevels = new ArrayList(); // fehlende noch zu herunterladende level private int missing = 0; @@ -23,10 +26,35 @@ public class ManageFiles { missinglevels.add(levelname); } - public void compareArrays() throws IOException { // downloadedlevels und onlinelevels werden verglichen und die fehlenden level in missinglevels gepackt + public void compareArrays(boolean system) throws IOException { // downloadedlevels und onlinelevels werden verglichen und die fehlenden level in missinglevels gepackt fetch.getGithubString(); + database.queryData("levels"); + + if(system) { + System.out.println(database.getLevelname().size()); + + int difference = fetch.allLevels().size() - database.getLevelname().size(); + System.out.println(difference); + + for(int i = 0; i < database.getLevelname().size(); i++) { + //System.out.println("fetch.allLevels(): " + fetch.allLevels().get(i) + "\t database.getRawLevelNames(): " + database.getRawLevelNames().get(i)); + if(!database.getRawLevelNames().contains(fetch.allLevels().get(i))) { + System.out.println(missing); + missing++; + missinglevels.add(fetch.allLevels().get(i)); + } + } + + if(missing > 0) { + gui.show(missinglevels, missing); + } else { + MainGUI gui = new MainGUI(); + gui.build(); + } + + } else { for(int i = 0; i < fetch.allLevels().size(); i++) { @@ -43,8 +71,10 @@ public class ManageFiles { gui.show(missinglevels, missing); } else { - MainGUI gui = new MainGUI(); + MainGUI_Deprecated gui = new MainGUI_Deprecated(); gui.build(); } + + } } } diff --git a/src/data/SortDatabase.java b/src/data/SortDatabase.java new file mode 100644 index 0000000..2bdb7c4 --- /dev/null +++ b/src/data/SortDatabase.java @@ -0,0 +1,22 @@ +package data; + +import java.util.ArrayList; + +public class SortDatabase { + + public void sort() { + FetchData data = new FetchData(); + + + String[][] levels = {}; + + + for(int i = 0; i < data.allLevels().size(); i++) { + levels[i][0] = i + ""; + levels[i][1] = data.allLevels().get(i); + } + + + } + +} diff --git a/src/database/DatabaseManager.java b/src/database/DatabaseManager.java index cfeb354..bb2fa16 100644 --- a/src/database/DatabaseManager.java +++ b/src/database/DatabaseManager.java @@ -1,15 +1,106 @@ package database; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; + +import data.FetchData; +import data.GuiData; +import data.GuiData_Deprecated; +import gui.MainGUI; +import gui.MainGUI_Deprecated; +import settingsfunctions.LoadSettings; + public class DatabaseManager { public void manage() { - Sqlite sql = new Sqlite("test"); - if(sql.exists()) { + Sqlite createLevelDB = new Sqlite("levels"); + if(createLevelDB.exists()) { System.out.println(true); } else { System.out.println(false); - sql.createNewDatabase(); + createLevelDB.createNewDatabase(); } + + createLevelDB.createNewTable("levels"); } + + public void migrateData() { + Sqlite database = new Sqlite("levels"); + FetchData fetch = new FetchData(); + + LoadSettings settings = new LoadSettings(); + try { + settings.load(); + } catch (IOException e) { + e.printStackTrace(); + } + + ArrayList levels = new ArrayList(); + ArrayList rawLevels = new ArrayList(); + + File file = new File("C:\\ExtremeDemonList\\levels"); + File[] listLevels = file.listFiles(); + + for(int i = 0; i < listLevels.length; i++) { + rawLevels.add(listLevels[i].getName()); + } + + for(int i = 0; i < fetch.allLevels().size(); i++) { + System.out.println(fetch.allLevels().get(i)); + if(rawLevels.indexOf(fetch.allLevels().get(i) + ".json") != -1) { + levels.add(rawLevels.get(rawLevels.indexOf(fetch.allLevels().get(i) + ".json"))); + } + + } + + GuiData data = new GuiData(); + try { + data.IndexData(levels); + } catch (IOException e) { + e.printStackTrace(); + } + + try { + fetch.getGithubString(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + for (int i = 0; i < data.getLocalLevels().size(); i++) { + + System.out.println(levels.get(i) + " hat den index " + levels.indexOf(levels.get(i))); + + database.insertData( + "levels", // Tabellenname + fetch.allLevels().indexOf(levels.get(i).replace(".json", "")) + 1, + data.getLocalLevels().get(i), // Level-Name + fetch.allLevels().get(i), // Level-Name-Raw (oder entsprechender Wert aus fetch.allLevels()) + Integer.parseInt(data.getId().get(i)), // ID + data.getCreator().get(i), // Ersteller + data.getCreators().get(i), // Ersteller + data.getVerifier().get(i), // Überprüfer + data.getYoutubeLink().get(i), // YouTube-Link + Integer.parseInt(data.getQualification().get(i)), // Qualifikation + data.getVictors().get(i), // Sieger + false + ); + } + + database.sortData("levels"); + + } + + public void queryData(String tablename) { + Sqlite database = new Sqlite("levels"); + database.queryData(tablename); + } + } diff --git a/src/database/Sqlite.java b/src/database/Sqlite.java index 5b344f0..f8107ce 100644 --- a/src/database/Sqlite.java +++ b/src/database/Sqlite.java @@ -4,19 +4,76 @@ import java.io.File; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; public class Sqlite { private static String url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\"; private static String filename; + private ArrayList levelname = new ArrayList(); + private ArrayList levelID = new ArrayList(); + private ArrayList author = new ArrayList(); + private ArrayList creators = new ArrayList(); + private ArrayList verifier = new ArrayList(); + private ArrayList verificationLink = new ArrayList(); + private ArrayList percenttoqualify = new ArrayList(); + private ArrayList records = new ArrayList(); + private ArrayList completed = new ArrayList(); + private ArrayList rawLevelNames = new ArrayList(); + + + public ArrayList getLevelname() { + return levelname; + } + + public ArrayList getLevelID() { + return levelID; + } + + public ArrayList getAuthor() { + return author; + } + + public ArrayList getCreators() { + return creators; + } + + public ArrayList getVerifier() { + return verifier; + } + + public ArrayList getVerificationLink() { + return verificationLink; + } + + public ArrayList getPercenttoqualify() { + return percenttoqualify; + } + + public ArrayList getRecords() { + return records; + } + + public ArrayList getCompleted() { + return completed; + } + + public ArrayList getRawLevelNames() { + return rawLevelNames; + } + public Sqlite(String dbname) { // setzt variablen + url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\"; url += dbname + ".db"; filename = dbname + ""; } - + public boolean exists() { // überprüft, ob datenbank existiert File file = new File("C:\\ExtremeDemonList\\database\\sqlite\\" + filename + ".db"); @@ -35,4 +92,124 @@ public class Sqlite { e.printStackTrace(); } } + + public void createNewTable(String tablename) { + String sql = "CREATE TABLE IF NOT EXISTS " + tablename + " (\n" + + " id INTEGER PRIMARY KEY,\n" + + " placement INTEGER NOT NULL,\n" + + " levelname TEXT NOT NULL,\n" + + " levelnameRaw TEXT NOT NULL,\n" // Hinzugefügt + + " levelID INTEGER NOT NULL,\n" + + " author TEXT NOT NULL,\n" + + " creators TEXT NOT NULL,\n" + + " verifier TEXT NOT NULL,\n" + + " verificationLink TEXT NOT NULL,\n" + + " percentToQualify INTEGER NOT NULL,\n" + + " records TEXT NOT NULL,\n" + + " completed BOOLEAN NOT NULL\n" + + ");"; + + + + try (Connection conn = DriverManager.getConnection(url); + Statement stmt = conn.createStatement()) { + // create a new table + stmt.execute(sql); + } catch (SQLException e) { + System.out.println(e.getMessage()); + } + } + + public void insertData(String tablename, int placement, String levelname, String levelnameRaw, int levelid, String author, String creators, String verifier, String verificationLink, int percenttoqualify, String records, boolean completed) { + String sql = "INSERT INTO " + tablename + " (placement, levelname, levelnameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, records, completed) VALUES (?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + try (Connection conn = DriverManager.getConnection(url); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, placement); + pstmt.setString(2, levelname); + pstmt.setString(3, levelnameRaw); + pstmt.setInt(4, levelid); + pstmt.setString(5, author); + pstmt.setString(6, creators); + pstmt.setString(7, verifier); + pstmt.setString(8, verificationLink); + pstmt.setInt(9, percenttoqualify); + pstmt.setString(10, records); + pstmt.setBoolean(11, completed); + pstmt.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + + + public void queryData(String tablename) { + + String sql = "SELECT levelname, levelNameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, completed, records FROM " + tablename; + + try (Connection conn = DriverManager.getConnection(url); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql)){ + + // loop through the result set + while (rs.next()) { + levelname.add(rs.getString("levelname")); + levelID.add(rs.getInt("levelID") + ""); + author.add(rs.getString("author")); + creators.add(rs.getString("creators")); + verifier.add(rs.getString("verifier")); + verificationLink.add(rs.getString("verificationLink")); + percenttoqualify.add(rs.getInt("percentToQualify") + ""); + completed.add(rs.getBoolean("completed") + ""); + records.add(rs.getString("records")); + rawLevelNames.add(rs.getString("levelNameRaw")); + + } + + } catch(SQLException e) { + e.printStackTrace(); + } + } + + public void sortData(String tablename) { + String sql = "SELECT * FROM " + tablename + " ORDER BY placement ASC"; + + try (Connection conn = DriverManager.getConnection(url); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + + // Leere die ArrayLists, bevor du die sortierten Daten hinzufügst + levelname.clear(); + levelID.clear(); + author.clear(); + creators.clear(); + verifier.clear(); + verificationLink.clear(); + percenttoqualify.clear(); + completed.clear(); + records.clear(); + rawLevelNames.clear(); + + // Loop durch das Ergebnis der sortierten Abfrage und füge die Daten in die entsprechenden ArrayLists ein + while (rs.next()) { + levelname.add(rs.getString("levelname")); + levelID.add(rs.getInt("levelID") + ""); + author.add(rs.getString("author")); + creators.add(rs.getString("creators")); + verifier.add(rs.getString("verifier")); + verificationLink.add(rs.getString("verificationLink")); + percenttoqualify.add(rs.getInt("percentToQualify") + ""); + completed.add(rs.getBoolean("completed") + ""); + records.add(rs.getString("records")); + rawLevelNames.add(rs.getString("levelNameRaw")); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + } diff --git a/src/gui/LoadMenu.java b/src/gui/LoadMenu.java index ab770b0..3365dfb 100644 --- a/src/gui/LoadMenu.java +++ b/src/gui/LoadMenu.java @@ -19,7 +19,7 @@ public class LoadMenu { Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); load.setMinimum(0); - load.setMaximum(4); + load.setMaximum(6); load.setBounds(1, 178, 398, 20); @@ -58,6 +58,7 @@ public class LoadMenu { index++; load.setValue(index); loading.setText(state); + System.out.println(state); } public void close() { diff --git a/src/gui/MainGUI.java b/src/gui/MainGUI.java index b5fa262..2ac7ebf 100644 --- a/src/gui/MainGUI.java +++ b/src/gui/MainGUI.java @@ -33,7 +33,9 @@ import javax.swing.JTextField; import javax.swing.SwingConstants; import data.FetchData; -import data.GuiData; +import data.GuiData_Deprecated; +import database.Sqlite; +import settingsfunctions.LoadSettings; public class MainGUI { @@ -71,10 +73,12 @@ public class MainGUI { private int completedcount = 0; public void build() throws IOException { - GuiData data = new GuiData(); - data.IndexData(); + LoadSettings load = new LoadSettings(); + + Sqlite data = new Sqlite("levels"); + data.queryData("levels"); - gridLayout.setRows(data.getLocalLevels().size()); + gridLayout.setRows(data.getLevelname().size()); main.setSize(900, 700); main.setLayout(null); @@ -88,7 +92,7 @@ public class MainGUI { progress.setBounds(200, 300, 500, 30); progress.setStringPainted(true); - progress.setMaximum(data.getLocalLength()); + progress.setMaximum(data.getLevelname().size()); info.setBounds(380, 270, 300, 30); @@ -141,14 +145,15 @@ public class MainGUI { Thread thread = new Thread(new Runnable() { @Override public void run() { - for(int i = 0; i < data.getLocalLevels().size(); i++) { + System.out.println(data.getLevelname().size() + " ======== size"); + for(int i = 0; i < data.getLevelname().size(); i++) { final int index = i; progress.setValue(i + 1); - currentLevel.setText(data.getLocalLevels().get(i)); + currentLevel.setText(data.getLevelname().get(i)); JPanel contents = new JPanel(); - contents.setName(data.getLocalLevels().get(i)); + contents.setName(data.getLevelname().get(i)); contents.setPreferredSize(new Dimension(600, 50)); contents.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); contents.setLayout(null); @@ -202,24 +207,24 @@ public class MainGUI { showinfos.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - String url = data.getYoutubeLink().get(index); + String url = data.getVerificationLink().get(index); VerifyInfo ver = VerifyInfo.getInstance(); - ver.showInfo(url, Integer.parseInt(data.getId().get(index))); + ver.showInfo(url, Integer.parseInt(data.getLevelID().get(index))); } }); - level.setText(data.getLocalLevels().get(index)); + level.setText(data.getLevelname().get(index)); verifier.setText("Verifier: " + data.getVerifier().get(index)); - creator.setText("Creator: " + data.getCreator().get(index)); - idshow.setText("ID: " + data.getId().get(index)); - qualify.setText("Qualifikation: " + data.getQualification().get(index) + "%"); + creator.setText("Creator: " + data.getAuthor().get(index)); + idshow.setText("ID: " + data.getLevelID().get(index)); + qualify.setText("Qualifikation: " + data.getPercenttoqualify().get(index) + "%"); level.setVerticalAlignment(SwingConstants.CENTER); FetchData fetchData = new FetchData(); try { - recordspanel.setLayout(new GridLayout(GuiData.allVictors(fetchData.allLevels().get(index)).size(), 1)); + recordspanel.setLayout(new GridLayout(GuiData_Deprecated.allVictors(fetchData.allLevels().get(index)).size(), 1)); } catch (IOException e1) { e1.printStackTrace(); @@ -231,7 +236,7 @@ public class MainGUI { recordspanel.removeAll(); try { - ArrayList victors = GuiData.allVictors(fetchData.allLevels().get(index)); + ArrayList victors = GuiData_Deprecated.allVictors(fetchData.allLevels().get(index)); victorcount.setText("Anzahl Victors: " + victors.size()); @@ -259,7 +264,7 @@ public class MainGUI { @Override public void actionPerformed(ActionEvent e) { - StringSelection stringSelection = new StringSelection(data.getId().get(index)); + StringSelection stringSelection = new StringSelection(data.getLevelID().get(index)); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, null); } @@ -332,7 +337,7 @@ public class MainGUI { }); levelname = new JLabel(); - levelname.setText(data.getLocalLevels().get(i)); + levelname.setText(data.getLevelname().get(i)); levelname.setBounds(290, 10, 300, 30); search.addKeyListener(new KeyListener() { @@ -368,7 +373,7 @@ public class MainGUI { if (e.getStateChange() == ItemEvent.SELECTED) { if (!contents.getBackground().equals(Color.decode("#cbffbf"))) { levelpanel.remove(contents); - gridLayout.setRows(data.getLocalLength()); + gridLayout.setRows(data.getLevelname().size()); scroll.repaint(); scroll.revalidate(); } diff --git a/src/gui/MainGUI_Deprecated.java b/src/gui/MainGUI_Deprecated.java new file mode 100644 index 0000000..613b9b2 --- /dev/null +++ b/src/gui/MainGUI_Deprecated.java @@ -0,0 +1,443 @@ +package gui; + +import java.awt.Button; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.SwingConstants; + +import data.FetchData; +import data.GuiData_Deprecated; +import database.Sqlite; +import settingsfunctions.LoadSettings; + +public class MainGUI_Deprecated { + + public JFrame main = new JFrame("Extreme Demon List"); + public JProgressBar progress = new JProgressBar(); + public JLabel info = new JLabel("Die Liste wird geladen"); + public JLabel currentLevel = new JLabel(); + public JPanel levelpanel = new JPanel(); + public JScrollPane scroll = new JScrollPane(levelpanel); + public JTextField search = new JTextField(); + public JLabel levelname; + public JLabel level = new JLabel("Liste"); + public JLabel creator = new JLabel("Creator"); + public JLabel separator = new JLabel("_______________________________________________________________________________________________________________"); + public JLabel separator2 = new JLabel("_______________________________________________________________________________________________________________"); + public JLabel separator3 = new JLabel("_______________________________________________________________________________________________________________"); + public JLabel verifier = new JLabel("Verifier"); + public JLabel victorcount = new JLabel("Anzahl Victors"); + public JLabel victor = new JLabel("Victors: "); + public JLabel idshow = new JLabel("ID"); + public JLabel qualify = new JLabel("Qualifikation"); + public JPanel recordspanel = new JPanel(); + public JScrollPane records = new JScrollPane(recordspanel); + public JCheckBox filtercompleted = new JCheckBox("Nach geschafft filtern"); + public Button copyid = new Button("Level ID kopieren"); + public Button showinfos = new Button("Mehr Infos anzeigen"); + public JButton settings = new JButton("⚙"); + GridLayout gridLayout = new GridLayout(3, 1); + private String[] showing = {"Alle anzeigen", "Top 3", "Top 50", "Top 150", "Top 200"}; + @SuppressWarnings({ "unchecked", "rawtypes" }) + public JComboBox show = new JComboBox(showing); + private FetchData fetch = new FetchData(); + private Elements elements = new Elements(); + + private int completedcount = 0; + + public void build() throws IOException { + LoadSettings load = new LoadSettings(); + + + GuiData_Deprecated data = new GuiData_Deprecated(); + data.IndexData(); + + //Sqlite data = new Sqlite("levels"); + + gridLayout.setRows(data.getLocalLevels().size()); + + main.setSize(900, 700); + main.setLayout(null); + main.setResizable(false); + main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + level.setBounds(10, 10, 200, 30); + level.setFont(level.getFont().deriveFont(15f)); + + filtercompleted.setBounds(710, 15, 200, 30); + + progress.setBounds(200, 300, 500, 30); + progress.setStringPainted(true); + progress.setMaximum(data.getLocalLength()); + + info.setBounds(380, 270, 300, 30); + + currentLevel.setBounds(200, 330, 200, 30); + + levelpanel.setBackground(Color.LIGHT_GRAY); + levelpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + levelpanel.setLayout(gridLayout); + + victorcount.setBounds(10, 130, 164, 30); + + idshow.setBounds(10, 150, 164, 30); + + copyid.setBounds(10, 50, 164, 30); + + qualify.setBounds(10, 170, 164, 30); + + settings.setBounds(1, 1, 60, 60); + settings.setFont(settings.getFont().deriveFont(30f)); + settings.setBackground(Color.LIGHT_GRAY); + + victor.setBounds(1, 276, 164, 30); + records.getVerticalScrollBar().setUnitIncrement(16); + + showinfos.setBounds(12, 227, 160, 30); + + scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + scroll.setBounds(0, 61, 700, 600); + scroll.getVerticalScrollBar().setUnitIncrement(16); + scroll.setVisible(false); + + elements.infopanel().setBounds(700, 61, 184, 600); + elements.infopanel().setVisible(false); + + separator.setBounds(0, 70, 300, 30); + separator2.setBounds(0 ,178, 400, 30); + separator3.setBounds(0, 263, 300, 30); + + creator.setBounds(10, 90, 164, 30); + + verifier.setBounds(10, 110, 164, 30); + + search.setBounds(60, 1, 440, 60); + + show.setBounds(500, 1, 200, 60); + + recordspanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + for(int i = 0; i < data.getLocalLevels().size(); i++) { + final int index = i; + progress.setValue(i + 1); + + currentLevel.setText(data.getLocalLevels().get(i)); + + JPanel contents = new JPanel(); + contents.setName(data.getLocalLevels().get(i)); + contents.setPreferredSize(new Dimension(600, 50)); + contents.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + contents.setLayout(null); + + JButton completed = new JButton("x"); + completed.setBounds(640, 17, 17, 17); + completed.setMargin(new Insets(0,0,0,0)); + + JButton uncompleted = new JButton("\u2713"); + uncompleted.setBounds(640, 17, 17, 17); + uncompleted.setMargin(new Insets(0,0,0,0)); + + File file = new File("C:\\ExtremeDemonList\\completed\\" + fetch.allLevels().get(i)+ ".json"); + + completed.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + contents.setBackground(Color.decode("#cbffbf")); + completed.setVisible(false); + uncompleted.setVisible(true); + + try { + file.createNewFile(); + } catch (IOException e1) { + + e1.printStackTrace(); + } + } + }); + + uncompleted.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + contents.setBackground(Color.WHITE); + uncompleted.setVisible(false); + completed.setVisible(true); + file.delete(); + } + }); + + if(new File("C:\\ExtremeDemonList\\completed\\" + fetch.allLevels().get(i)+ ".json").exists()) { + contents.setBackground(Color.decode("#cbffbf")); + uncompleted.setVisible(true); + completed.setVisible(false); + completedcount++; + } + + contents.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + showinfos.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String url = data.getYoutubeLink().get(index); + VerifyInfo ver = VerifyInfo.getInstance(); + ver.showInfo(url, Integer.parseInt(data.getId().get(index))); + } + }); + + level.setText(data.getLocalLevels().get(index)); + verifier.setText("Verifier: " + data.getVerifier().get(index)); + creator.setText("Creator: " + data.getCreator().get(index)); + idshow.setText("ID: " + data.getId().get(index)); + qualify.setText("Qualifikation: " + data.getQualification().get(index) + "%"); + level.setVerticalAlignment(SwingConstants.CENTER); + + + FetchData fetchData = new FetchData(); + + try { + recordspanel.setLayout(new GridLayout(GuiData_Deprecated.allVictors(fetchData.allLevels().get(index)).size(), 1)); + } catch (IOException e1) { + + e1.printStackTrace(); + } + recordspanel.setBackground(Color.GRAY); + + records.setBounds(0, 302, 185, 300); + + recordspanel.removeAll(); + + try { + ArrayList victors = GuiData_Deprecated.allVictors(fetchData.allLevels().get(index)); + + victorcount.setText("Anzahl Victors: " + victors.size()); + + recordspanel.setLayout(new GridLayout(victors.size(), 1)); + + for(String victor : victors) { + JPanel contents = new JPanel(); + contents.setPreferredSize(new Dimension(165, 50)); + contents.setLayout(null); + contents.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + + JLabel name = new JLabel(victor); + name.setBounds(10, 10, 100, 30); + contents.add(name); + + recordspanel.add(contents); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + + recordspanel.revalidate(); + + copyid.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + StringSelection stringSelection = new StringSelection(data.getId().get(index)); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(stringSelection, null); + } + + }); + } + @Override + public void mousePressed(MouseEvent e) { + } + @Override + public void mouseReleased(MouseEvent e) { + } + @Override + public void mouseEntered(MouseEvent e) { + contents.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + } + @Override + public void mouseExited(MouseEvent e) { + contents.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + } + }); + + JLabel rank = new JLabel("#" + (i + 1)); + rank.setBounds(10, 10, 40, 30); + rank.setName(i + ""); + + filtercompleted.setText("nach Geschafft filtern (" + completedcount + ")"); + + show.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + levelpanel.add(contents, 0); + if(show.getSelectedIndex() == 1) { + if(!(Integer.parseInt(rank.getName()) >= 0 && Integer.parseInt(rank.getName()) <= 2)) { + levelpanel.remove(contents); + + levelpanel.repaint(); + levelpanel.revalidate(); + } + } else if(show.getSelectedIndex() == 0) { + levelpanel.add(contents, 0); + levelpanel.repaint(); + levelpanel.revalidate(); + } else if(show.getSelectedIndex() == 2) { + if(!(Integer.parseInt(rank.getName()) >= 0 && Integer.parseInt(rank.getName()) <= 49)) { + levelpanel.remove(contents); + levelpanel.repaint(); + levelpanel.revalidate(); + } + } else if(show.getSelectedIndex() == 3) { + if(!(Integer.parseInt(rank.getName()) >= 0 && Integer.parseInt(rank.getName()) <= 149)) { + levelpanel.remove(contents); + levelpanel.repaint(); + levelpanel.revalidate(); + } + } else if(show.getSelectedIndex() == 4) { + if(!(Integer.parseInt(rank.getName()) >= 0 && Integer.parseInt(rank.getName()) <= 199)) { + levelpanel.remove(contents); + levelpanel.repaint(); + levelpanel.revalidate(); + } + } + gridLayout.setRows(levelpanel.getComponentCount()); + gridLayout.setColumns(1); + levelpanel.revalidate(); + scroll.repaint(); + scroll.revalidate(); + } + + }); + + levelname = new JLabel(); + levelname.setText(data.getLocalLevels().get(i)); + levelname.setBounds(290, 10, 300, 30); + + search.addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent e) { + if(!contents.getName().toLowerCase().contains(search.getText().toLowerCase())) { + levelpanel.remove(contents); + levelpanel.repaint(); + levelpanel.revalidate(); + } else if(contents.getName().toLowerCase().contains(search.getText().toLowerCase())) { + levelpanel.add(contents); + levelpanel.repaint(); + levelpanel.revalidate(); + } + gridLayout.setRows(levelpanel.getComponentCount()); + gridLayout.setColumns(1); + levelpanel.revalidate(); + scroll.repaint(); + scroll.revalidate(); + } + @Override + public void keyPressed(KeyEvent e) { + + } + @Override + public void keyReleased(KeyEvent e) { + } + }); + + filtercompleted.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + if (!contents.getBackground().equals(Color.decode("#cbffbf"))) { + levelpanel.remove(contents); + gridLayout.setRows(data.getLocalLength()); + scroll.repaint(); + scroll.revalidate(); + } + } else if (e.getStateChange() == ItemEvent.DESELECTED) { + levelpanel.add(contents, 0); + } + levelpanel.repaint(); + levelpanel.revalidate(); + } + }); + + contents.add(levelname); + contents.add(rank); + contents.add(completed); + contents.add(uncompleted); + levelpanel.add(contents); + + } + + scroll.setVisible(true); + elements.infopanel().setVisible(true); + progress.setVisible(false); + info.setVisible(false); + currentLevel.setVisible(false); + } + }); + thread.start(); + + settings.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + SettingsGui gui = new SettingsGui(); + gui.showSettings(); + + } + + }); + + elements.infopanel().add(copyid); + elements.infopanel().add(level, SwingConstants.CENTER); + elements.infopanel().add(separator); + elements.infopanel().add(separator2); + elements.infopanel().add(separator3); + elements.infopanel().add(creator); + elements.infopanel().add(verifier); + elements.infopanel().add(records); + elements.infopanel().add(victorcount); + elements.infopanel().add(idshow); + elements.infopanel().add(qualify); + elements.infopanel().add(victor); + elements.infopanel().add(showinfos); + + main.add(search); + main.add(currentLevel); + main.add(info); + main.add(scroll); + main.add(progress); + main.add(filtercompleted); + main.add(show); + main.add(settings); + main.add(elements.infopanel()); + main.setVisible(true); + } +} \ No newline at end of file diff --git a/src/gui/MissingLevels.java b/src/gui/MissingLevels.java index 2902892..1c38715 100644 --- a/src/gui/MissingLevels.java +++ b/src/gui/MissingLevels.java @@ -12,6 +12,7 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea; import data.DownloadLevels; +import settingsfunctions.LoadSettings; public class MissingLevels { @@ -51,6 +52,14 @@ public class MissingLevels { scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setBounds(1, 60, 383, 201); + LoadSettings settings = new LoadSettings(); + try { + settings.load(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + for(int i = 0; i < missinglevels.size(); i++) { @@ -75,13 +84,24 @@ public class MissingLevels { @Override public void actionPerformed(ActionEvent e) { main.dispose(); - MainGUI gui = new MainGUI(); - try { - gui.build(); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } + + if(settings.isOldsystem()) { + MainGUI gui = new MainGUI(); + try { + gui.build(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } else { + MainGUI_Deprecated gui = new MainGUI_Deprecated(); + try { + gui.build(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } } }); diff --git a/src/gui/SettingsGui.java b/src/gui/SettingsGui.java index f54a521..37e0785 100644 --- a/src/gui/SettingsGui.java +++ b/src/gui/SettingsGui.java @@ -3,10 +3,13 @@ package gui; import java.awt.Button; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.IOException; import javax.swing.JFrame; import settingsfunctions.DeleteDatabase; +import settingsfunctions.MigrateData; +import settingsfunctions.WriteSettings; public class SettingsGui { @@ -17,6 +20,41 @@ public class SettingsGui { settings.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); settings.setSize(500, 500); settings.setVisible(true); + + Button button = new Button("Daten auf neues System migrieren"); + button.setBounds(20, 20, 200, 30); + + Button save = new Button("speichern"); + save.setBounds(430, 230, 100, 30); + + save.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + WriteSettings write = new WriteSettings(); + try { + write.write(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + }); + + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + MigrateData migrate = new MigrateData(); + migrate.migrateData(); + + } + + }); + + settings.add(button); + settings.add(save); } } diff --git a/src/main/Main.java b/src/main/Main.java index 8b14bed..84b2297 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -6,14 +6,16 @@ import javax.swing.UnsupportedLookAndFeelException; import api.GetApiData; import data.FetchData; +import data.GuiData_Deprecated; import data.ManageFiles; import database.DatabaseManager; import filestructure.CreateFileStructure; import gui.LoadMenu; +import settingsfunctions.LoadSettings; public class Main { - public static void main(String[] args) throws IOException, UnsupportedLookAndFeelException { + public static void main(String[] args) throws IOException { LoadMenu load = new LoadMenu(); load.onLoad(); @@ -23,6 +25,11 @@ public class Main { CreateFileStructure struct = new CreateFileStructure(); struct.create(); + load.updateBar("Konfigurationsdatei wird gelesen..."); + + LoadSettings settings = new LoadSettings(); + settings.load(); + load.updateBar("Updatedaten werden heruntergeladen..."); FetchData fetch = new FetchData(); @@ -31,9 +38,9 @@ public class Main { load.updateBar("Einträge werden Indexiert..."); ManageFiles manager = new ManageFiles(); - manager.compareArrays(); + manager.compareArrays(settings.isOldsystem()); - load.updateBar("Datenbank wird geladen..."); + load.updateBar("Datenbank wird gestartet..."); DatabaseManager data = new DatabaseManager(); data.manage(); diff --git a/src/settingsfunctions/LoadSettings.java b/src/settingsfunctions/LoadSettings.java new file mode 100644 index 0000000..ff3e446 --- /dev/null +++ b/src/settingsfunctions/LoadSettings.java @@ -0,0 +1,35 @@ +package settingsfunctions; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.json.JSONObject; + +public class LoadSettings { + + private boolean oldsystem; + + public void load() throws IOException { + + if(new File("C:\\AnimeWatchList\\config\\config.json").exists()) { + + String configjson = Files.readAllLines(Paths.get("C:\\ExtremeDemonList\\config\\config.json")).get(0); + + JSONObject obj = new JSONObject(configjson); + + oldsystem = obj.getBoolean("newSystem"); + + } else { + + System.out.println("config not found"); + + } + } + + public boolean isOldsystem() { + return oldsystem; + } + +} diff --git a/src/settingsfunctions/MigrateData.java b/src/settingsfunctions/MigrateData.java new file mode 100644 index 0000000..93fe26d --- /dev/null +++ b/src/settingsfunctions/MigrateData.java @@ -0,0 +1,44 @@ +package settingsfunctions; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import database.DatabaseManager; + +public class MigrateData { + + public void migrateData() { + + System.out.println("daten werden migriert"); + + DatabaseManager manager = new DatabaseManager(); + manager.migrateData(); + + + System.out.println("daten fertig migriert. alte datenbank wird gelöscht"); + + Path directory = Paths.get("C:\\ExtremeDemonList\\levels"); + try { + Files.walk(directory) + .filter(Files::isRegularFile) // Filtere nur reguläre Dateien + .forEach(file -> { + try { + Files.deleteIfExists(file); // Lösche die Datei + System.out.println("Datei gelöscht: " + file); + } catch (IOException e) { + System.err.println("Fehler beim Löschen der Datei " + file + ": " + e.getMessage()); + } + }); + + Files.deleteIfExists(directory); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + +} diff --git a/src/settingsfunctions/WriteSettings.java b/src/settingsfunctions/WriteSettings.java new file mode 100644 index 0000000..d60ed1e --- /dev/null +++ b/src/settingsfunctions/WriteSettings.java @@ -0,0 +1,30 @@ +package settingsfunctions; + +import java.io.FileWriter; +import java.io.IOException; + +import org.json.JSONObject; + +public class WriteSettings { + + public void write() throws IOException { +JSONObject writeSettings = new JSONObject(); + + + // Settings in JSON - Format bringen + writeSettings.put("newSystem", true); + + + // FileWriter instanz erstellen + FileWriter writer = new FileWriter("C:\\ExtremeDemonList\\config\\config.json"); + + System.out.println("Write " + writeSettings.toString()); + + // JSON in txt dokument schreiben + writer.write(writeSettings.toString()); + + writer.flush(); + writer.close(); + } + +}