From 3d9198ad62935045382f91526225b7f1d51f310d Mon Sep 17 00:00:00 2001 From: mrAsacura Date: Mon, 18 Apr 2022 12:34:41 +0300 Subject: [PATCH] curr --- .vscode/settings.json | 3 + pom.xml | 115 ++++ report.xlsx | Bin 0 -> 30612 bytes src/main/java/ru/egspt/moodle/Access.java | 19 + src/main/java/ru/egspt/moodle/App.java | 14 + src/main/java/ru/egspt/moodle/Base.java | 503 ++++++++++++++++++ src/main/java/ru/egspt/moodle/Quiz.java | 37 ++ src/main/java/ru/egspt/moodle/Result.java | 75 +++ src/main/java/ru/egspt/moodle/User.java | 52 ++ src/test/java/ru/egspt/moodle/AppTest.java | 20 + target/classes/ru/egspt/moodle/Access.class | Bin 0 -> 738 bytes target/classes/ru/egspt/moodle/App.class | Bin 0 -> 671 bytes target/classes/ru/egspt/moodle/Base.class | Bin 0 -> 14491 bytes target/classes/ru/egspt/moodle/Quiz.class | Bin 0 -> 712 bytes target/classes/ru/egspt/moodle/Result.class | Bin 0 -> 1298 bytes target/classes/ru/egspt/moodle/User.class | Bin 0 -> 894 bytes target/dependencies.txt | 107 ++++ .../ru/egspt/moodle/AppTest.class | Bin 0 -> 477 bytes 18 files changed, 945 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 pom.xml create mode 100644 report.xlsx create mode 100644 src/main/java/ru/egspt/moodle/Access.java create mode 100644 src/main/java/ru/egspt/moodle/App.java create mode 100644 src/main/java/ru/egspt/moodle/Base.java create mode 100644 src/main/java/ru/egspt/moodle/Quiz.java create mode 100644 src/main/java/ru/egspt/moodle/Result.java create mode 100644 src/main/java/ru/egspt/moodle/User.java create mode 100644 src/test/java/ru/egspt/moodle/AppTest.java create mode 100644 target/classes/ru/egspt/moodle/Access.class create mode 100644 target/classes/ru/egspt/moodle/App.class create mode 100644 target/classes/ru/egspt/moodle/Base.class create mode 100644 target/classes/ru/egspt/moodle/Quiz.class create mode 100644 target/classes/ru/egspt/moodle/Result.class create mode 100644 target/classes/ru/egspt/moodle/User.class create mode 100644 target/dependencies.txt create mode 100644 target/test-classes/ru/egspt/moodle/AppTest.class diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2b4f8cd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..aaedb37 --- /dev/null +++ b/pom.xml @@ -0,0 +1,115 @@ + + + + 4.0.0 + + ru.egspt.moodle + anyreport + 0.1 + + anyreport + + http://www.example.com + + + UTF-8 + 1.8 + 1.8 + + + + + org.apache.poi + poi + 5.2.2 + + + org.apache.poi + poi-ooxml + 5.2.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + org.apache.poi + poi-scratchpad + 5.2.2 + + + org.apache.poi + ooxml-schemas + 1.1 + + + org.apache.logging.log4j + log4j-to-slf4j + 2.8.2 + + + org.apache.cassandra + cassandra-all + 4.0.3 + + + junit + junit + 4.11 + test + + + mysql + mysql-connector-java + 8.0.28 + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/report.xlsx b/report.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e49b82c3f4bfba4eb352acab3718e97b09b7c548 GIT binary patch literal 30612 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 EKYMreHvj+t literal 0 HcmV?d00001 diff --git a/src/main/java/ru/egspt/moodle/Access.java b/src/main/java/ru/egspt/moodle/Access.java new file mode 100644 index 0000000..df912ce --- /dev/null +++ b/src/main/java/ru/egspt/moodle/Access.java @@ -0,0 +1,19 @@ +package ru.egspt.moodle; + +public class Access { + private static String userName = "esoe"; + private static String password = "psalm6912"; + private static String url = "jdbc:MySQL://45.128.206.87:3306/moodle"; + + //если значение userName отсутствует, запросить его у пользователя + public static String getUserName(){ + return userName; + } + public static String getPassword(){ + return password; + } + public static String getURL(){ + return url; + } + +} diff --git a/src/main/java/ru/egspt/moodle/App.java b/src/main/java/ru/egspt/moodle/App.java new file mode 100644 index 0000000..0594680 --- /dev/null +++ b/src/main/java/ru/egspt/moodle/App.java @@ -0,0 +1,14 @@ +package ru.egspt.moodle; + +/** + * графический интерфейс для + * moodle.anyreport + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Работает подготовщик отчетов по результатам тестирования пользователей ..." ); + } +} diff --git a/src/main/java/ru/egspt/moodle/Base.java b/src/main/java/ru/egspt/moodle/Base.java new file mode 100644 index 0000000..95d737c --- /dev/null +++ b/src/main/java/ru/egspt/moodle/Base.java @@ -0,0 +1,503 @@ +package ru.egspt.moodle; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * Класс предоставляет методы работы с базой данных + * передает данные классам-пользователям + * Включает: + * - подключение к серверу баз данных + * - подключение к базе данных + * - подключение к таблице базы данных + * - запрос данных из таблицы + * - + */ + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; +import java.time.LocalTime; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.util.ArrayList; + +import javax.swing.JOptionPane; + +public class Base { + private ArrayList users; + private ArrayList results; + private ArrayList quizes; + + /** + * @return the quizes + */ + public ArrayList getQuizes() { + return quizes; + } + /** + * @param quizes the quizes to set + */ + public void setQuizes(Connection conn, Base base) { + ArrayList quizList = new ArrayList<>(); + try{ + Statement stmt = conn.createStatement(); + //берем данные о результатах тестирования на сервере + ResultSet rs = stmt.executeQuery("SELECT id, name, timelimit FROM mdl_quiz"); + while(rs.next()){ + int id = rs.getInt("id"); + String name = rs.getString("name"); + //перебираем результаты тестирований, пишем в класс. + int i = 0;// + while (i < base.getResults().size()){ + if (base.getResults().get(i).getQuizid() == id){ + Quiz q = new Quiz(); + q.setId(id); + q.setName(name); + int j = 0; + boolean b = false; + while (j < quizList.size()){ + if (q.getId() == quizList.get(j).getId()){ + b = true; + } + j++; + } + if (b != true){ + quizList.add(q); + } + } + i++; + } + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + this.quizes = quizList; + } + /** + * @return the users + */ + public ArrayList getUsers() { + return users; + } + /** + * @param users the users to set + */ + public void setUsers(ArrayList users) { + this.users = users; + } + /** + * @return the results + */ + public ArrayList getResults() { + return results; + } + /** + * @param results the results to set + * @throws IOException + */ + + public void createExcellReport(Connection conn, Base base) throws IOException{ + System.out.println("Формирование report.xlsx ..."); + // создание самого excel файла в памяти + XSSFWorkbook book = new XSSFWorkbook(); + // создание листа + XSSFSheet sheet = book.createSheet("Report"); + + + //формируем заголовки + System.out.println("Формируем заголовки таблицы ..."); + ArrayList header = new ArrayList(); + header.add("login"); + header.add("mail"); + //пишем названия тестов в заголовки xlsx + System.out.println("Пишем названия тестов в заголовки xlsx ..."); + System.out.println("Количество пройденных тестов участниками выборки составило: " + base.getQuizes().size()); + int i = 0; + while (i < base.getQuizes().size()){ + header.add(base.getQuizes().get(i).getName()); + //System.out.println("Пишем заголовок: " + base.getQuizes().get(i).getName()); + header.add(""); + i++; + } + int row = 0;//строка + int col = 0;//столбец + Row r = sheet.createRow(row); + while (col < header.size()){ + r.createCell(col).setCellValue(header.get(col).toString()); + //System.out.println(header.get(col)); + col++; + } + System.out.println("Заголовки в report.xlsx сформированы."); + + //построчно формируем отчет + System.out.println("Построчно формируем отчет .... "); + row++; + //строк в отчете будет столько же, сколько пользователей попало в выборку (плюс строка- заголовков) + int userCurr = 0; + while (userCurr < base.getUsers().size()){ + col = 0; + r = sheet.createRow(row); + //заполняем данные пользователя (имя и почту) + Cell cname = r.createCell(col); + cname.setCellValue(base.getUsers().get(userCurr).getName()); + col++; + Cell cmail = r.createCell(col); + cmail.setCellValue(base.getUsers().get(userCurr).getMail()); + col++; + //Заполняем результаты тестирвоания пользователя + //Перебираем результаты, получаем результаты текущего пользователя + int resultCurr = 0; + while (resultCurr < base.getResults().size()){ + if (base.getResults().get(resultCurr).getUserid() == base.getUsers().get(userCurr).getId()){ + //если текущий результат относится к текущему пользователю + //взять индекс теста из результата и сопоставить с полями заголовков (определить номер ячейки для формирования записи) + String quizname = ""; + int quizCurr = 0; + while (quizCurr < base.getQuizes().size()){ + if (base.getResults().get(resultCurr).getQuizid() == base.getQuizes().get(quizCurr).getId()){ + quizname = base.getQuizes().get(quizCurr).getName(); + } + quizCurr++; + } + //поиск индекса ячейки, куда писать результаты + int ihead = 0; + int headerCurr = 0;//номер ячейки в которую писать результаты тестирования (+2) + while (ihead < header.size()){ + if (quizname.equals(header.get(ihead))){ + headerCurr = ihead; + } + ihead++; + } + //формируем ячейку grade + Cell cGrade = r.createCell(headerCurr); + cGrade.setCellValue(base.getResults().get(resultCurr).getGrade()); + //формируем ячейку time + Cell cTime = r.createCell(headerCurr + 1); + //Time t = new Time(base.getResults().get(resultCurr).getTime()); + //cTime.setCellValue(t.toString()); + Long time = base.getResults().get(resultCurr).getTime(); + String t = LocalTime.MIN.plusSeconds(time).toString(); + cTime.setCellValue(t); + } + resultCurr++; + } + row++; + userCurr++; + } + //пишем книгу в файл + String location = System.getProperty("user.dir") + "\\report.xlsx"; + Path path = Paths.get(location); + if (Files.exists(path)) { + try (FileOutputStream out = new FileOutputStream(location)) { + book.write(out); + book.close(); + out.close(); + System.out.println("Excel файл успешно перезаписан!"); + System.out.println(location); + } + catch (IOException e){ + e.printStackTrace(); + } + } + else { + try (FileOutputStream out = new FileOutputStream(new File(location))) { + book.write(out); + book.close(); + out.close(); + System.out.println("Excel файл успешно создан!"); + System.out.println(location); + } + catch (IOException e){ + e.printStackTrace(); + } + } + } + public void setResults(Connection conn, ArrayList uFiltered) { + ArrayList rList = new ArrayList<>(); + try{ + Statement stmt = conn.createStatement(); + //берем данные о результатах тестирования на сервере + System.out.println("Берем с сервера данные о результатах тестирования ...."); + ResultSet rs = stmt.executeQuery("SELECT id, quiz, userid, grade, timemodified FROM mdl_quiz_grades"); + while(rs.next()){ + int id = rs.getInt("id"); + int quizid = rs.getInt("quiz"); + /** + * если пользователь с таким ящиком уже существует в выборке, + * удаляем пользователя из выборки и пишем старый id пользователя в result + * либо переписать результаты + * надо в результате указать старый id пользователя. Остальные данные результата при этом сохранить. + * надо удалить пользователя в случае изменения данных результата + */ + int userid = rs.getInt("userid");//проверить почтовый ящик + double grade = rs.getDouble("grade"); + //преобразование данных о времени сдачи теста + long time = 0; + //перебираем результаты тестирования, пишем в класс. + int i = 0;// + while (i < uFiltered.size()){ + if (uFiltered.get(i).getId() == userid){ + Result res = new Result(); + res.setId(id); + res.setQuizid(quizid); + res.setUserid(userid); + res.setGrade(grade); + res.setTime(time); + rList.add(res); + } + i++; + } + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + + try { + //берем данные о попытках с сервера, пишем корректное время сдачи теста + System.out.println("Берем данные о попытках с сервера, запоминаем результаты последней попытки ...."); + Statement stmt = conn.createStatement(); + ResultSet at = stmt.executeQuery("SELECT id, quiz, userid, attempt, timestart, timefinish, timemodified, sumgrades FROM mdl_quiz_attempts"); + while (at.next()){ + int quizidAt = at.getInt("quiz"); + int useridAt = at.getInt("userid"); + Long timestartAt = at.getLong("timestart"); + Long timefinishAt = at.getLong("timefinish"); + double sumgradesAt = at.getDouble("sumgrades"); + int rCurr = 0; + while (rCurr < rList.size()){ + if (rList.get(rCurr).getUserid() == useridAt){ + if (rList.get(rCurr).getQuizid() == quizidAt){ + rList.get(rCurr).setTime(timefinishAt - timestartAt); + rList.get(rCurr).setGrade(sumgradesAt); + } + } + rCurr++; + } + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + this.results = rList; + } + + /** + * + * @param conn + * @param teg + */ + public void setUsersByTeg(Connection conn){ + ArrayList uList = new ArrayList(); + String teg = ""; + int b = 0; + while (b != 2){ + try{ + teg = JOptionPane.showInputDialog("Укажите тег для поиска пользователей:"); + Statement stmt = conn.createStatement(); + //берем данные о базах данных на сервере + ResultSet rs = stmt.executeQuery("SELECT id, username, email FROM mdl_user"); + while(rs.next()){ + //фильтруем выборку user + int id = rs.getInt("id"); + String username = rs.getString("username"); + String email = rs.getString("email"); + //проверяем соответствие тега и записи в таблице + if (username.contains(teg)){ + User u = new User(); + u.setId(id); + u.setMail(email); + u.setName(username); + uList.add(u); + } + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + b = JOptionPane.showConfirmDialog(null, "Добавить еще тег?", "try", JOptionPane.OK_CANCEL_OPTION); + System.out.println("Сделан выбор: " + b); + } + this.users = uList; + } + + /** + * Фильтруем пользователей, находим дубли почтовых ящиков + * когда ящик совпал, перебираем результаты и заменяем ID пользователя в результате + * + * удаляем пользователей, для которых отсутствуют результаты. + * + * @param base + */ + public void filterByMail (ArrayList users, ArrayList results){ + ArrayList fusers = new ArrayList<>();//отфильтрованные пользователи + //ArrayList fresults = new ArrayList<>();//исправленные результаты + //перебираем юзеров + //Stream> streamUsers = Stream.of(users); + //streamUsers.filter(predicate) + int currentUser = 0; + while (currentUser < users.size()){ + User user = users.get(currentUser); + ArrayList userList= new ArrayList<>();//список аккаунтов пользователя с одинаковыми mail + //формируем список аккаунтов пользователя + int c = 0; + //сравниваем почтовый ящик текущего пользователя с пользователями по списку, запоминаем все повторения. + while (c < users.size()){ + if (user.getMail().equals(users.get(c).getMail())){ + userList.add(users.get(c));//список аккаунтов текущего пользователя + } + c++; + } + //если у пользователя больше одного аккаунта, + if (userList.size() != 1){ + //System.out.println("Пользователь: " + userList.get(0).getMail() + "количество аккаунтов: " + userList.size()); + /** + * переписываем результаты тестирования текущего пользователя + * заменяем в старых результатах id пользователя + * перебираем список дублирующихся аккаунтов + * */ + //перебираем список дублирующихся аккаунтов + int uacc = 0; + while (uacc < userList.size()){ + //если аккаунт не первый + if (uacc != 0){ + //перебираем результаты + int rCurr = 0; + while (rCurr < results.size()){ + if (userList.get(uacc).getId() == results.get(rCurr).getUserid()){ + results.get(rCurr).setUserid(userList.get(0).getId());//сменили id пользователя в строке результата + } + rCurr++; + } + } + uacc++; + } + } + //формирование списка пользователей, без дублирований + if (userList.size() != 1){//tесли есть дублирования + if (user.getId() == userList.get(0).getId()){//и пользователь первый в списке дублей + fusers.add(user); + } + } + else{ + fusers.add(user);//нет дублирований + } + currentUser++;//переходим к следующему пользователю + } + + //Вычисляем пользователей, которые не проходили тестирование (нет результатов) + /** + * + */ + //перебираем список не дублирующихся пользователей + ArrayList balbesers = new ArrayList<>(); + int uClear = 0; + while (uClear < fusers.size()){ + //список пользователей, не сдававших тесты + //перебираем результаты + int rClear = 0; + int num = 0; + while (rClear < results.size()){ + if (fusers.get(uClear).getId() == results.get(rClear).getUserid()){ + num++;//считаем количество тестов пройденных пользователем + } + rClear++; + } + if (num == 0){ + balbesers.add(fusers.get(uClear)); + } + uClear++; + } + + /** + * формирование отчетов + * + */ + System.out.println("Учетных записей: " + users.size()); + System.out.println("Пользователей (без дублирований): " + fusers.size()); + System.out.println("Пользователей (balbesers): " + balbesers.size()); + } + + /** + * Главный метод, для проверки кода + * @param args + */ + public static void main (String[] args){ + System.out.println("Подключение к серверу баз данных ..."); + Connection conn = null; + try{ + //данные аккаунта + String userName = Access.getUserName(); + String password = Access.getPassword(); + String url = Access.getURL(); + conn = DriverManager.getConnection (url, userName, password); + System.out.println ("Подключение к серверу баз данных установлено ... "); + + //Формирование перечня пользователей, по которым нужно подготовить отчет + //использование метода setUsersByTeg + Base b = new Base(); + b.setUsersByTeg(conn); + System.out.println("Перечень пользователей для формирования отчета установлен ... "); + + //Формирование результатов тестирования, для указанных пользователей + b.setResults(conn, b.getUsers()); + System.out.println("Результаты тестирования пользователей получены из базы данных ... "); + + //расшифровка данных о пройденных пользователями тестах + b.setQuizes(conn, b); + + //выгрузка отчета в xlsx (по результатам обучения группы, содержащий дублирования и прогульщиков) + b.createExcellReport(conn, b); + + // выводим отчет в консоль + //Выводим перечень тестов в консоль + System.out.println("Всего тестов: " + b.getQuizes().size()); + System.out.println("Всего записано на тестирование человек: " + b.getUsers().size()); + System.out.println("Всего результатов (человеко-тестов): " + b.getResults().size()); + + /** + * Фильтрация результатов по уникальному почтовому ящику + * отчет общий по статистике обучения + */ + b.filterByMail(b.getUsers(), b.getResults()); + + + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + finally{ + if (conn != null){ + try{ + System.out.println("Попытка отключения от базы данных ... "); + conn.close (); + System.out.println ("Подключение к базе данных завершено. "); + } + catch (Exception ex){ + System.out.println ("Подключение к серверу баз данных уже отсутствует."); + System.out.println (ex); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/egspt/moodle/Quiz.java b/src/main/java/ru/egspt/moodle/Quiz.java new file mode 100644 index 0000000..07b2212 --- /dev/null +++ b/src/main/java/ru/egspt/moodle/Quiz.java @@ -0,0 +1,37 @@ +package ru.egspt.moodle; + +/** + * Данные об опросе для подстановки в отчет наименований, вместо id опроса + * - наименование + * - id + * + */ +public class Quiz { + private int id; + private String name; + + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @return the name + */ + public String getName() { + return name; + } +} diff --git a/src/main/java/ru/egspt/moodle/Result.java b/src/main/java/ru/egspt/moodle/Result.java new file mode 100644 index 0000000..7192f72 --- /dev/null +++ b/src/main/java/ru/egspt/moodle/Result.java @@ -0,0 +1,75 @@ +package ru.egspt.moodle; + +/** + * Результат тестирования + * - набранные баллы + * - длительность сдачи теста + */ +public class Result { + private int id; + private int quizid; + private int userid; + private double grade; + private Long time; + + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @return the quiz + */ + public int getQuizid() { + return quizid; + } + /** + * @param quiz the quiz to set + */ + public void setQuizid(int quizid) { + this.quizid = quizid; + } + /** + * @return the userid + */ + public int getUserid() { + return userid; + } + /** + * @param userid the userid to set + */ + public void setUserid(int userid) { + this.userid = userid; + } + /** + * @return the grade + */ + public double getGrade() { + return grade; + } + /** + * @param grade the grade to set + */ + public void setGrade(double grade) { + this.grade = grade; + } + /** + * @return the time + */ + public Long getTime() { + return time; + } + /** + * @param time2 the time to set + */ + public void setTime(Long time2) { + this.time = time2; + } +} diff --git a/src/main/java/ru/egspt/moodle/User.java b/src/main/java/ru/egspt/moodle/User.java new file mode 100644 index 0000000..99e74b4 --- /dev/null +++ b/src/main/java/ru/egspt/moodle/User.java @@ -0,0 +1,52 @@ +package ru.egspt.moodle; + +/** + * Данные пользователей + * - уникальный номер + * - имя + * - почта + * - + * + */ +public class User { + private int id; + private String name; + private String mail; + + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @return the mail + */ + public String getMail() { + return mail; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @param mail the mail to set + */ + public void setMail(String mail) { + this.mail = mail; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } +} diff --git a/src/test/java/ru/egspt/moodle/AppTest.java b/src/test/java/ru/egspt/moodle/AppTest.java new file mode 100644 index 0000000..361a520 --- /dev/null +++ b/src/test/java/ru/egspt/moodle/AppTest.java @@ -0,0 +1,20 @@ +package ru.egspt.moodle; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/target/classes/ru/egspt/moodle/Access.class b/target/classes/ru/egspt/moodle/Access.class new file mode 100644 index 0000000000000000000000000000000000000000..ba2ed464ffd2d42b06d5c2fba545f7d6e7c2f584 GIT binary patch literal 738 zcmZvZ-A>y;5QWd;#EFebQ$xc~e`zTKE@B9fh7?t*D)q{xEor&mIIG~ui6gJws&56& zMI|nH03Hf;b`u4J;)|W#nf+$Z9N*ktT?074+XChoDoN&vt{kRbKaM+*@ID5Ckg|Xr zL%GL)aWCS7uJ^Uw6G6&Q%%n(8cwaEM{$071CgGs_p6Wv`O4uB z$6B8a1J4|+!6s$tc_(7*X*7$n1k$NNQGI3C8KLBsM{wPx5h|CIo5KpN zCEYJaT%ITstGWW>XwXR)kD}_6-}#59cc`h8hDMz61w6+Kx@h4gUQtF#*w7Uq_ZOuL k-CR98X6@;77L7K8a32y2_lVcCh{{8vJS7<3==V4N0}=>%UH||9 literal 0 HcmV?d00001 diff --git a/target/classes/ru/egspt/moodle/App.class b/target/classes/ru/egspt/moodle/App.class new file mode 100644 index 0000000000000000000000000000000000000000..311264fb252c54752f747d7607902c0b3943d643 GIT binary patch literal 671 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 NEdImHTGlbHd;_!dbRGZz literal 0 HcmV?d00001 diff --git a/target/dependencies.txt b/target/dependencies.txt new file mode 100644 index 0000000..d33eb83 --- /dev/null +++ b/target/dependencies.txt @@ -0,0 +1,107 @@ +digraph "ru.egspt.moodle:anyreport:jar:0.1" { + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml-schemas:jar:4.1.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-scratchpad:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:ooxml-schemas:jar:1.1:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:openxml4j:jar:1.0-beta:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "junit:junit:jar:4.11:test" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "mysql:mysql-connector-java:jar:8.0.28:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "commons-codec:commons-codec:jar:1.15:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-collections4:jar:4.4:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-math3:jar:3.6.1:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "commons-io:commons-io:jar:2.11.0:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "com.zaxxer:SparseBitSet:jar:1.2:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.logging.log4j:log4j-api:jar:2.17.2:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.poi:poi-ooxml-lite:jar:5.2.2:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.xmlbeans:xmlbeans:jar:5.0.3:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.commons:commons-compress:jar:1.21:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "com.github.virtuald:curvesapi:jar:1.07:compile" ; + "org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "dom4j:dom4j:jar:1.6.1:compile" ; + "org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "log4j:log4j:jar:1.2.8:compile" ; + "dom4j:dom4j:jar:1.6.1:compile" -> "xml-apis:xml-apis:jar:1.0.b2:compile" ; + "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" -> "org.slf4j:slf4j-api:jar:1.7.24:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.google.guava:guava:jar:r08:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-cli:commons-cli:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-collections:commons-collections:jar:3.2.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-lang:commons-lang:jar:2.4:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.antlr:antlr:jar:3.2:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-core-asl:jar:1.4.0:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-mapper-asl:jar:1.4.0:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "jline:jline:jar:0.9.94:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.json-simple:json-simple:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc.high-scale-lib:high-scale-lib:jar:1.1.2:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.yaml:snakeyaml:jar:1.6:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.thrift:libthrift:jar:0.6.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra:cassandra-thrift:jar:0.8.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc:jamm:jar:0.2.2:compile" ; + "org.antlr:antlr:jar:3.2:compile" -> "org.antlr:antlr-runtime:jar:3.2:compile" ; + "org.antlr:antlr-runtime:jar:3.2:compile" -> "org.antlr:stringtemplate:jar:3.2:compile" ; + "org.antlr:stringtemplate:jar:3.2:compile" -> "antlr:antlr:jar:2.7.7:compile" ; + "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" -> "org.mortbay.jetty:jetty:jar:6.1.22:compile" ; + "org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:jetty-util:jar:6.1.22:compile" ; + "org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile" ; + "org.apache.thrift:libthrift:jar:0.6.1:compile" -> "javax.servlet:servlet-api:jar:2.5:compile" ; + "org.apache.thrift:libthrift:jar:0.6.1:compile" -> "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" ; + "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "org.apache.httpcomponents:httpcore:jar:4.0.1:compile" ; + "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "commons-logging:commons-logging:jar:1.1.1:compile" ; + "junit:junit:jar:4.11:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ; + "mysql:mysql-connector-java:jar:8.0.28:compile" -> "com.google.protobuf:protobuf-java:jar:3.11.4:compile" ; + } digraph "ru.egspt.moodle:anyreport:jar:0.1" { + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-ooxml-schemas:jar:4.1.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:poi-scratchpad:jar:5.2.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:ooxml-schemas:jar:1.1:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.poi:openxml4j:jar:1.0-beta:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "junit:junit:jar:4.11:test" ; + "ru.egspt.moodle:anyreport:jar:0.1" -> "mysql:mysql-connector-java:jar:8.0.28:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "commons-codec:commons-codec:jar:1.15:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-collections4:jar:4.4:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.commons:commons-math3:jar:3.6.1:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "commons-io:commons-io:jar:2.11.0:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "com.zaxxer:SparseBitSet:jar:1.2:compile" ; + "org.apache.poi:poi:jar:5.2.2:compile" -> "org.apache.logging.log4j:log4j-api:jar:2.17.2:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.poi:poi-ooxml-lite:jar:5.2.2:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.xmlbeans:xmlbeans:jar:5.0.3:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "org.apache.commons:commons-compress:jar:1.21:compile" ; + "org.apache.poi:poi-ooxml:jar:5.2.2:compile" -> "com.github.virtuald:curvesapi:jar:1.07:compile" ; + "org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "dom4j:dom4j:jar:1.6.1:compile" ; + "org.apache.poi:openxml4j:jar:1.0-beta:compile" -> "log4j:log4j:jar:1.2.8:compile" ; + "dom4j:dom4j:jar:1.6.1:compile" -> "xml-apis:xml-apis:jar:1.0.b2:compile" ; + "org.apache.logging.log4j:log4j-to-slf4j:jar:2.8.2:compile" -> "org.slf4j:slf4j-api:jar:1.7.24:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.google.guava:guava:jar:r08:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-cli:commons-cli:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-collections:commons-collections:jar:3.2.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "commons-lang:commons-lang:jar:2.4:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.antlr:antlr:jar:3.2:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-core-asl:jar:1.4.0:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.codehaus.jackson:jackson-mapper-asl:jar:1.4.0:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "jline:jline:jar:0.9.94:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.googlecode.json-simple:json-simple:jar:1.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc.high-scale-lib:high-scale-lib:jar:1.1.2:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.yaml:snakeyaml:jar:1.6:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.thrift:libthrift:jar:0.6.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "org.apache.cassandra:cassandra-thrift:jar:0.8.1:compile" ; + "org.apache.cassandra:cassandra-all:jar:0.8.1:compile" -> "com.github.stephenc:jamm:jar:0.2.2:compile" ; + "org.antlr:antlr:jar:3.2:compile" -> "org.antlr:antlr-runtime:jar:3.2:compile" ; + "org.antlr:antlr-runtime:jar:3.2:compile" -> "org.antlr:stringtemplate:jar:3.2:compile" ; + "org.antlr:stringtemplate:jar:3.2:compile" -> "antlr:antlr:jar:2.7.7:compile" ; + "org.apache.cassandra.deps:avro:jar:1.4.0-cassandra-1:compile" -> "org.mortbay.jetty:jetty:jar:6.1.22:compile" ; + "org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:jetty-util:jar:6.1.22:compile" ; + "org.mortbay.jetty:jetty:jar:6.1.22:compile" -> "org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile" ; + "org.apache.thrift:libthrift:jar:0.6.1:compile" -> "javax.servlet:servlet-api:jar:2.5:compile" ; + "org.apache.thrift:libthrift:jar:0.6.1:compile" -> "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" ; + "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "org.apache.httpcomponents:httpcore:jar:4.0.1:compile" ; + "org.apache.httpcomponents:httpclient:jar:4.0.1:compile" -> "commons-logging:commons-logging:jar:1.1.1:compile" ; + "junit:junit:jar:4.11:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ; + "mysql:mysql-connector-java:jar:8.0.28:compile" -> "com.google.protobuf:protobuf-java:jar:3.11.4:compile" ; + } \ No newline at end of file diff --git a/target/test-classes/ru/egspt/moodle/AppTest.class b/target/test-classes/ru/egspt/moodle/AppTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f6ebb152907b82a35d27ba862e8295c292930035 GIT binary patch literal 477 zcmZ{gK~DlP5QSft#np8c1Qa=XLl5?#H;l=~#M4F-C75_C&_K!3lD4bA%ag`~KfoVl zoCOjtdYS3#n|$q?@1M^v0GH@Q2pHP7;Bw*?p3jXL=aQ$3MPE7}A!Mk}#Eam$&=YihP`E_bTm^^3%R82-kTiv{!REP)-pq)!KOBmC=N&XU0zWte_wA zGDI&%1FZ;6vNlfYoU}f{A&wYgu~aK|*nKWT#gC@2BYCUJ?x&QzG literal 0 HcmV?d00001