From 1a41b85daf98982fd303682fef85b86fa41a59b7 Mon Sep 17 00:00:00 2001 From: Albert Date: Sat, 15 Dec 2018 18:54:47 +0300 Subject: [PATCH 01/26] Refactoring: 1. Add ThreadExecutor. 2. One queue in SqlExecutor. 3. Excel report has countdown. 4. Timout counted after thread finished. --- .idea/encodings.xml | 2 +- src/main/java/Controller/Controller.java | 17 +- src/main/java/Frames/ProccessesPanelTab.java | 45 ++--- src/main/java/Frames/View1.java | 2 +- .../AbstratReports/AbstractReport.java | 28 +-- src/main/java/Reports/OktsOilReport.java | 20 +-- src/main/java/Reports/RegularMonitor.java | 167 ++---------------- src/main/java/Utilz/BaseConstants.java | 1 + src/main/java/Utilz/Printer.java | 16 ++ src/main/java/Utilz/SqlExecutor.java | 58 +++--- src/main/java/Utilz/SqlProperties.java | 94 ++++------ 11 files changed, 148 insertions(+), 302 deletions(-) diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 2e11521..73c6415 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -6,7 +6,7 @@ - + diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 6e377a8..983fdad 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -42,20 +42,12 @@ static public void main(String[] args) { public static void init() { initWorkingPool(BaseConstants.getInstance().isIsZip()); - new Thread(() -> createThreads()).start(); - + // Here starts sqlExecuter with tasksQueue + new Thread(() -> createSqlExecuter()).start(); frame = new MyFrame("Hello world of SWING!", null); frame.setPreferredSize(new Dimension(1500, 500)); - while (sqlExecutor == null) { - System.out.println("SQLExecuter is null..."); - try { - sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - frame.getProccessesPanel().init(sqlExecutor.getWorkingPool()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); frame.pack(); frame.setVisible(true); @@ -101,6 +93,7 @@ private static Calendar stringToCalendar(String s) { return new GregorianCalendar(yyyy, mm, dd); } + /* Initalizing tasksQueue with objects of SqlProperties. SqlPropeties reads from report files*/ private static void initWorkingPool(boolean isEncrypted) { try { if (isEncrypted) { @@ -150,7 +143,7 @@ private static void readZipFile() throws ZipException { } } - public static void createThreads() { + public static void createSqlExecuter() { if (tasksQueue.size() > 0) { Printer.printRowToMonitor(String.valueOf(tasksQueue.size())); sqlExecutor = new SqlExecutor(tasksQueue); diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index e4f66cc..fa3a2a8 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -16,24 +16,32 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.PriorityBlockingQueue; +import java.util.stream.Collectors; import static java.lang.Thread.sleep; public class ProccessesPanelTab extends JScrollPane implements Runnable{ private static LinkedHashMap statusMap; + private List taskList= new ArrayList<>(); private MyFrame myFrame; private ProccessesPanelTab.ProcessTableModel ptm; private JTable proccessesTable; + private PriorityBlockingQueue queue; - public void init (Map statusMap) { - if (statusMap==null){ + + public void init (PriorityBlockingQueue queue) { + + if (queue==null){ throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); } - this.statusMap = (LinkedHashMap) statusMap; - //this.initialMap = statusMap; + + //this.statusMap = (LinkedHashMap) statusMap; + + this.queue=queue; + taskList = queue.stream().collect(Collectors.toList()); try { myFrame = (MyFrame) getParent().getParent().getParent().getParent();} catch(Exception e) { @@ -149,7 +157,8 @@ private class ProcessTableModel extends AbstractTableModel { @Override public int getRowCount() { - return statusMap.size(); + return queue.size(); + //return statusMap.size(); } @Override @@ -159,26 +168,20 @@ public int getColumnCount() { @Override public synchronized Object getValueAt(int rowIndex, int columnIndex) { - Iterator> itr = statusMap.entrySet().iterator(); - int i=0; - Map.Entry entry=null; - while (itr.hasNext() ) { - if (i==rowIndex){ - entry = itr.next(); - break; - } - i++; - itr.next(); - } + //Iterator itr = queue.iterator(); + /*Iterator> itr = statusMap.entrySet().iterator(); + + Map.Entry entry=null;*/ + SqlProperties entry=taskList.get(rowIndex); + //int i=0; String result=null; switch (columnIndex){ - case 0: result=entry.getKey().getProperty("description");break; - case 1: result=entry.getValue()?"running":"asleep";break; - case 2: result=entry.getKey().getProperty("timeStampLastExecution");break; - // case 3: result=ms_totime (Long.valueOf(entry.getKey().getProperty("asleeptime")));break; - case 3: result=ms_totime (Long.valueOf(entry.getKey().calcSleepingTime()));break; + case 0: result=entry.getProperty("description");break; + case 1: result=entry.isRunning()?"running":"asleep";break; + case 2: result=entry.getProperty("timeStampLastExecution");break; + case 3: result=ms_totime (Long.valueOf(entry.calcSleepingTime()));break; } return result; } diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index ea1411e..1e8fe76 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -42,7 +42,7 @@ public static void main(String[] args){ GridBagConstraints.NORTH,GridBagConstraints.BOTH, new Insets(1,1,1,1),0,0)); initWorkingPool(false); - ppt.init(statusmap); + // ppt.init(statusmap); frame.setVisible(true); frame.pack(); diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 88d41e4..8f70bb9 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -7,17 +7,21 @@ import java.sql.SQLException; import java.sql.Statement; +import static java.lang.Thread.sleep; + public abstract class AbstractReport implements Report, Runnable { private SqlProperties props; private Thread thread; private SqlExecutor sqlExecutor; - private final static int crashWaitingTime=1;/*minutes*/ + private final static int crashWaitingTime=60*1000*5;/*minutes*/ public AbstractReport(SqlProperties props, SqlExecutor sqlExecutor) { this.sqlExecutor=sqlExecutor; this.props = props; - thread = new Thread (this, getProperty("description")); + //this.thread.setName(getProperty("description")); + /*thread = new Thread (this, getProperty("description")); thread.start(); + */ } @@ -40,15 +44,6 @@ protected ResultSet executeSqlClause (String sqlClause){ ResultSet resultSet=null; try { Connection conn = getConnection(); - /* if (conn ==null){ - try { - System.out.println("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime+" min!"); - thread.sleep(crashWaitingTime*60*1000); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } - return null; - }*/ Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); stm.execute(sqlClause); resultSet = stm.getResultSet(); @@ -62,7 +57,7 @@ protected ResultSet executeSqlClause (String sqlClause){ if (resultSet==null ){ System.out.println("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime+" min!"); try { - thread.sleep(crashWaitingTime*60*1000); + sleep(crashWaitingTime); } catch (InterruptedException e) { e.printStackTrace(); } @@ -81,8 +76,15 @@ private boolean prepareCreation(){ @Override public void run() { - while (!prepareCreation()){ + while (!createReport()){ + try { + sleep(crashWaitingTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + getProps().updatePeriodinFile(); sqlExecutor.addQueue(this); } diff --git a/src/main/java/Reports/OktsOilReport.java b/src/main/java/Reports/OktsOilReport.java index c2ee279..f019b31 100644 --- a/src/main/java/Reports/OktsOilReport.java +++ b/src/main/java/Reports/OktsOilReport.java @@ -24,12 +24,12 @@ public OktsOilReport(SqlProperties props, SqlExecutor sqlExecutor) { public boolean createReport(ResultSet result) { boolean flag=false; List headerXLS = new ArrayList(); - headerXLS.add(" /"); - headerXLS.add(" "); - headerXLS.add("ҹ"); - headerXLS.add(" "); - headerXLS.add(""); - headerXLS.add(" "); + headerXLS.add("№ п/п"); + headerXLS.add("Код ТНВЭД"); + headerXLS.add("ДТ№"); + headerXLS.add("№ товара"); + headerXLS.add("ИТС"); + headerXLS.add("Вес нетто"); HSSFWorkbook workbook =new HSSFWorkbook(); HSSFSheet worksheet =workbook.createSheet("OilReport"); @@ -44,7 +44,7 @@ public boolean createReport(ResultSet result) { Row row=worksheet.createRow(0); /*Creating of header*/ - // + // Создаем стиль ячейки для заголовка таблицы HSSFCellStyle style = workbook.createCellStyle(); style.setWrapText(true); @@ -79,7 +79,7 @@ private int createRows(ResultSet result, HSSFSheet worksheet, int rowNum, String Double summ=0.0; int numLine=1; boolean flag = false; - // 2710198400 + //Записи и итоговая строчка для 2710198400 try { while (result.next()) { Row dataRow = worksheet.createRow(rownum); @@ -109,7 +109,7 @@ private int createRows(ResultSet result, HSSFSheet worksheet, int rowNum, String } - // + //Считаем сумму для строчки итого если были записи if (rownum!=rowNum) { Row conclusionRow = worksheet.createRow(rownum); Cell conclusionCell = conclusionRow.createCell(0, CellType.STRING); @@ -119,7 +119,7 @@ private int createRows(ResultSet result, HSSFSheet worksheet, int rowNum, String 0, 4 )); - conclusionCell.setCellValue(" :"); + conclusionCell.setCellValue("Итого вес нетто:"); Cell summCell = conclusionRow.createCell(5, CellType.STRING); summCell.setCellValue(summ); } diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index 8d7f0c0..4387425 100644 --- a/src/main/java/Reports/RegularMonitor.java +++ b/src/main/java/Reports/RegularMonitor.java @@ -22,7 +22,7 @@ public class RegularMonitor extends AbstractReport { public RegularMonitor(SqlProperties props, SqlExecutor sqlExecutor) { super(props, sqlExecutor); this.description = props.getProperty("description"); - Printer.printRowToMonitor("Конструктор RegularMonitor: cтартуем поток " + description + ", сервер подключения: " + getProperty("server")); + Printer.printRowToMonitor("Constructor of RegularMonitor: here starting new thread " + description + ", server name: " + getProperty("server")); } @Override @@ -31,7 +31,6 @@ public boolean createReport() { Calendar c = new GregorianCalendar(); String sCurrentDateTime = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND); - Printer.printRowToMonitor(sCurrentDateTime); ResultSet result = executeSqlClause(getProperty("sql")); if (result == null) { @@ -39,175 +38,29 @@ public boolean createReport() { return false; } - Printer.saveResult(getProperty("description"),null); - try { result.last(); if (result.getRow() == 0) { Printer.saveResult(getProperty("description"),new StringBuilder("empty selection")); return true; } - } catch (SQLException e) { - e.printStackTrace(); - flag=false; - } StringBuilder resultSB = new StringBuilder(); - try { - result.beforeFirst(); - while (result.next()) { - for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) { - resultSB.append(result.getString(i) + " : "); - } - resultSB.append("\r\n"); - } - Printer.saveResult(getProperty("description"),resultSB); - Printer.printLineToMonitor(resultSB.toString()); + result.beforeFirst(); + while (result.next()) { + for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) { + resultSB.append(result.getString(i) + " : "); + } + resultSB.append("\r\n"); + } + Printer.saveResult(getProperty("description"),resultSB); + Printer.printLineToMonitor(resultSB.toString()); } catch (SQLException e) { e.printStackTrace(); flag=false; } closeConnection(result); - //getProps().updateTimeToStart(); return flag; } - - - - - - - - - - - - /* @Override - public boolean createReport1() { - boolean flag=true; - Calendar c = new GregorianCalendar(); - String sCurrentDate = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR); - String sCurrentDateTime = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR) + " " + - c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND); - Printer.printRowToMonitor(sCurrentDateTime); - ResultSet result = executeSqlClause(getProperty("sql")); - if (result == null) { - Printer.printRowToMonitor(description + " selection returns null " + sCurrentDateTime); - return false; - } - Path path = Paths.get(BaseConstants.getPath() + "\\" + sCurrentDate + ".txt"); - if (!Files.exists(path)) { - try { - Files.createFile(path); - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - } - try { - result.last(); - if (result.getRow() == 0) { - - Printer.printRowToMonitor(description + " empty selection " + sCurrentDateTime); - Files.write(path, (description + " empty selection " + sCurrentDate + "\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - Files.write(path, ("-------------------------------------\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - return true; - } - } catch (SQLException e) { - e.printStackTrace(); - flag=false; - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - StringBuilder resultSB = new StringBuilder(); - try { - result.beforeFirst(); - Files.write(path, (description + " " + sCurrentDateTime + "\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - resultSB.append("----------" + Thread.currentThread().getName() + " start printing " + sCurrentDateTime + "----------------\r\n"); - while (result.next()) { - for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) { - resultSB.append(result.getString(i) + " : "); - } - resultSB.append("\r\n"); - } - resultSB.append("----------" + Thread.currentThread().getName() + " finished printing----------------\r\n"); - - Files.write(path, resultSB.toString().getBytes(), StandardOpenOption.APPEND); - Printer.printLineToMonitor(resultSB.toString()); - } catch (SQLException e) { - e.printStackTrace(); - flag=false; - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - closeConnection(result); - //getProps().updateTimeToStart(); - return flag; - }*/ - /* public boolean createReport1() { - boolean flag=true; - Calendar c = new GregorianCalendar(); - String sCurrentDate = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR); - String sCurrentDateTime = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR) + " " + - c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND); - Printer.printRowToMonitor(sCurrentDateTime); - ResultSet result = executeSqlClause(getProperty("sql")); - if (result == null) { - Printer.printRowToMonitor(description + " selection returns null " + sCurrentDateTime); - return false; - } - Path path = Paths.get(BaseConstants.getPath() + "\\" + sCurrentDate + ".txt"); - if (!Files.exists(path)) { - try { - Files.createFile(path); - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - } - try { - result.last(); - if (result.getRow() == 0) { - - Printer.printRowToMonitor(description + " empty selection " + sCurrentDateTime); - Files.write(path, (description + " empty selection " + sCurrentDate + "\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - Files.write(path, ("-------------------------------------\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - return true; - } - } catch (SQLException e) { - e.printStackTrace(); - flag=false; - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - StringBuilder resultSB = new StringBuilder(); - try { - result.beforeFirst(); - Files.write(path, (description + " " + sCurrentDateTime + "\r\n").getBytes("windows-1251"), StandardOpenOption.APPEND); - resultSB.append("----------" + Thread.currentThread().getName() + " start printing " + sCurrentDateTime + "----------------\r\n"); - while (result.next()) { - for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) { - resultSB.append(result.getString(i) + " : "); - } - resultSB.append("\r\n"); - } - resultSB.append("----------" + Thread.currentThread().getName() + " finished printing----------------\r\n"); - - Files.write(path, resultSB.toString().getBytes(), StandardOpenOption.APPEND); - Printer.printLineToMonitor(resultSB.toString()); - } catch (SQLException e) { - e.printStackTrace(); - flag=false; - } catch (IOException e) { - e.printStackTrace(); - flag=false; - } - closeConnection(result); - //getProps().updateTimeToStart(); - return flag; - }*/ } \ No newline at end of file diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 066beea..5d820d9 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -15,6 +15,7 @@ public class BaseConstants { private String zipFileSQL = "C:\\Java\\SQL.zip"; private String localExcelReportPath = "C:\\RegularReports\\"; private String zipPsw = "123"; + public final static int MAX_COUNT_THREADS=5; public static Map getDbase() { return dbase; diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index cc6c843..1a23ac6 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -1,8 +1,11 @@ package Utilz; +import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -20,6 +23,7 @@ public class Printer { public static void printRowToMonitor(String text){ try { String utfString = new String (text.getBytes("windows-1251")); + String utfString1 =new String (utfString.getBytes("windows-1251"),"windows-1251"); System.out.println(utfString); } catch (UnsupportedEncodingException e) { e.printStackTrace(); @@ -28,6 +32,7 @@ public static void printRowToMonitor(String text){ } public synchronized static void printLineToMonitor(String text){ System.out.print(text); + //printRowToMonitor(text); } public synchronized static void saveResult(String description, StringBuilder result){ @@ -67,6 +72,17 @@ private synchronized static boolean saveMaptoFile(){ sb.append("-----------------------------------\r\n"); sb.append("\n\r"); } +/* + try(FileOutputStream fos = new FileOutputStream(BaseConstants.getPath() + "\\" + sCurrentDate + ".txt","UTF-8"){ + //fout.write(""); + String secondString = new String(sb.toString().getBytes("windows-1251"),"UTF-8"); + while (fos.) + + fout.write (secondString); + } + catch (IOException e) { + e.printStackTrace(); + }*/ try { Files.write(path, diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index cc19d67..320e2ac 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -2,25 +2,29 @@ import Reports.AbstratReports.AbstractReport; +import Reports.AbstratReports.Report; import Reports.ReportFactory; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.PriorityBlockingQueue; public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; - private Map workingPool=new LinkedHashMap<>(); + ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); + //private Map workingPool=new LinkedHashMap<>(); public SqlExecutor(PriorityBlockingQueue queue) { this.waitingQueue=queue; - for (SqlProperties prop:waitingQueue) { - workingPool.put(prop,false); - prop.addProperty("timeStampLastExecution", getCurrentDateTime()); - prop.addProperty("asleeptime", String.valueOf(prop.calcSleepingTime())); - } + /* for (SqlProperties prop:waitingQueue) { + // workingPool.put(prop,false); + *//* prop.addProperty("timeStampLastExecution", getCurrentDateTime()); + prop.addProperty("asleeptime", String.valueOf(prop.calcSleepingTime()));*//* + }*/ } @Override @@ -29,34 +33,34 @@ public void run() { if (waitingQueue.size()>0) { SqlProperties sqlProp = waitingQueue.peek(); long period = sqlProp.calcSleepingTime(); - sqlProp.addProperty("asleeptime", String.valueOf(period)); - if (period == 0) { + //sqlProp.addProperty("asleeptime", String.valueOf(period)); + if (period == 0 && !sqlProp.isRunning()) { + AbstractReport r =(AbstractReport) ReportFactory.create(sqlProp, this); + service.submit(r); waitingQueue.remove(sqlProp); - ReportFactory.create(sqlProp, this); - workingPool.put(sqlProp,true); + sqlProp.setRunning(true); + waitingQueue.put(sqlProp); } } } } + public void addQueue(AbstractReport abstractReport){ abstractReport.addProperty("timeStampLastExecution", getCurrentDateTime()); - abstractReport.addProperty("asleeptime", String.valueOf(abstractReport.getProps().calcSleepingTime())); + //abstractReport.addProperty("asleeptime", String.valueOf(abstractReport.getProps().calcSleepingTime())); + waitingQueue.remove(abstractReport.getProps()); + abstractReport.getProps().setRunning(false); waitingQueue.add(abstractReport.getProps()); - workingPool.put(abstractReport.getProps(),false); - try { - sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - long period = abstractReport.getSleepingTime(); - Printer.printRowToMonitor(" "+abstractReport.getProperty("description")+" " + - String.valueOf(period / 1000 / 60 / 60 / 24) + " " - + String.valueOf(period / 1000 / 60 / 60 % 24) + " " - + String.valueOf(period / 1000 / 60 % 60) + " " - + String.valueOf(period / 1000 % 60) + " " - + String.valueOf(period %1000) + " ."); + //workingPool.put(abstractReport.getProps(),false); - } + long period = abstractReport.getSleepingTime(); + Printer.printRowToMonitor("Thread "+abstractReport.getProperty("description")+" sleep for " + + String.valueOf(period / 1000 / 60 / 60 / 24) + " days " + + String.valueOf(period / 1000 / 60 / 60 % 24) + " hours " + + String.valueOf(period / 1000 / 60 % 60) + " min " + + String.valueOf(period / 1000 % 60) + " sec " + + String.valueOf(period %1000) + " milisec."); + } private String getCurrentDateTime (){ LocalDateTime date = LocalDateTime.now(); @@ -67,9 +71,9 @@ public static PriorityBlockingQueue getWaitingQueue() { return waitingQueue; } - public Map getWorkingPool() { + /*public Map getWorkingPool() { return workingPool; - } + }*/ } diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index dd4c2c9..45c01be 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -15,11 +15,13 @@ -public class SqlProperties implements Comparable{ +public class SqlProperties implements Comparable{ private HashMap map = new HashMap(); private String sourceFile =null; private Calendar startTime; private boolean isZip; + private boolean isRunning; + //private Calendar timeToStart=null; /* *Reading props file with SQL query from param @@ -28,6 +30,7 @@ public class SqlProperties implements Comparable{ public SqlProperties(boolean isZip) { this.isZip = isZip; + this.isRunning=false; } public void setZip(boolean zip) { @@ -62,8 +65,9 @@ public HashMap loadFromFile(InputStreamReader isr, String filePa map.put("sourceFile", filePath); sourceFile=getProperty("sourceFile"); - startTime=GregorianCalendar.getInstance(); - if (getProperty("period")!=null) { + + if (getProperty("date2")==null /*& getProperty("period")!=null*/) { + startTime=GregorianCalendar.getInstance(); addLong(startTime, Long.valueOf(getProperty("period"))); } else { @@ -83,45 +87,6 @@ public HashMap loadFromFile(File file){ return null; } - /* public HashMap loadFromFile(File file) { - StringBuilder stringB = new StringBuilder(); - try (BufferedReader reader = new BufferedReader(new FileReader(file))) { - while (reader.ready()) { - stringB.append (" "); - stringB.append(reader.readLine()); - stringB.append (" "); - } - } catch (IOException e) { - e.printStackTrace(); - } - String [] params = stringB.toString().split(";"); - for (int i=0;i loadFromFile(String file) { - File ffile = new File (file); - sourceFile=file; - return loadFromFile(ffile); - } + /*Print map collection*/ public void printMap(){ @@ -167,15 +128,8 @@ private void printCalendar(Calendar cdate) { } public long calcSleepingTime (){ - Calendar currentMoment = new GregorianCalendar();/*текущее время*/ - long sleepingTime; - if (getProperty("date2")==null) { - sleepingTime = startTime.getTimeInMillis() -currentMoment.getTimeInMillis(); - } - else { - Calendar dateStart=toCalendar(getProperty("date2")); - sleepingTime= dateStart.getTimeInMillis()-currentMoment.getTimeInMillis()-360000; - } + Calendar currentMoment = Calendar.getInstance();/*текущее время*/ + long sleepingTime = startTime.getTimeInMillis() -currentMoment.getTimeInMillis();; return sleepingTime <= 0 ? 0 : sleepingTime; } @@ -186,9 +140,11 @@ public boolean updatePeriodinFile(){ if (getProperty("period")==null){ return false; } + startTime = new GregorianCalendar(); addLong(startTime, Long.valueOf (getProperty("period"))); return true; } + Calendar date1= toCalendar(getProperty("date1")); Calendar date2= toCalendar(getProperty("date2")); switch (map.get("reportPeriod")){ @@ -202,9 +158,10 @@ public boolean updatePeriodinFile(){ break; case "month": date1.add(Calendar.MONTH,1); - date1.add(Calendar.MONTH,1); + date2.add(Calendar.MONTH,1); break; } + startTime=date2; if (isZip) { return updatePropertiesZipFile("date1", toString(date1)) | updatePropertiesZipFile("date2", toString(date2)); } @@ -326,10 +283,27 @@ private StringBuilder getFileContextFromStream(InputStreamReader isr) { return stringB; } + public boolean isRunning() { + return isRunning; + } + + public void setRunning(boolean running) { + isRunning = running; + } + @Override - public int compareTo(Object o) { - if (calcSleepingTime() - ((SqlProperties) o).calcSleepingTime() >0) return 1; - if (calcSleepingTime() - ((SqlProperties) o).calcSleepingTime() <=0) return -1; + public int compareTo(SqlProperties o) { + if (isRunning() & ! o.isRunning() ){ + return 1; + } + else if (isRunning() & o.isRunning() ){ + return 0; + } + else if (!isRunning & o.isRunning){ + return -1; + } + if (calcSleepingTime() - o.calcSleepingTime() >0) return 1; + if (calcSleepingTime() - o.calcSleepingTime() <0) return -1; return 0; } } From 5c2fa40eaf494afcc5123ee3ab26f267ec13f902 Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 17 Dec 2018 00:23:39 +0300 Subject: [PATCH 02/26] Refactoring: 1. Add JSplitPanel. 2. Remake report in file. 3. Add varibale localPeriod witch override period for regular report. --- src/main/java/Frames/MyFrame.java | 17 ++++++++++---- src/main/java/Frames/ProccessesPanelTab.java | 2 +- .../AbstratReports/AbstractReport.java | 2 +- src/main/java/Reports/RegularMonitor.java | 2 +- src/main/java/Utilz/Printer.java | 23 ++++++------------- src/main/java/Utilz/SqlExecutor.java | 2 ++ src/main/java/Utilz/SqlProperties.java | 5 ++++ src/main/java/View.java | 15 ++++++++---- 8 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/main/java/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 3e2c370..9fead12 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -15,9 +15,6 @@ public class MyFrame extends JFrame { private ResultView resultView = new ResultView(); //private JTextArea textArea = new JTextArea(); - public ResultView getTextArea() { - return resultView; - } public MyFrame (String title, Map statusMap){ super(title); @@ -25,13 +22,23 @@ public MyFrame (String title, Map statusMap){ setLayout(new BorderLayout()); //Add swing components to content pane Container c = getContentPane(); - c.add(resultView,BorderLayout.CENTER); proccessesPanel=new ProccessesPanelTab(); - c.add(proccessesPanel, BorderLayout.WEST); + /* c.add(resultView,BorderLayout.CENTER); + c.add(proccessesPanel, BorderLayout.WEST);*/ + JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); + jSplitPane.setRightComponent(resultView); + jSplitPane.setLeftComponent(proccessesPanel); + c.add(jSplitPane); + } public ProccessesPanelTab getProccessesPanel() { return proccessesPanel; } + + public ResultView getTextArea() { + + return resultView; + } } diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index fa3a2a8..e4dc08f 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -43,7 +43,7 @@ public void init (PriorityBlockingQueue queue) { this.queue=queue; taskList = queue.stream().collect(Collectors.toList()); try { - myFrame = (MyFrame) getParent().getParent().getParent().getParent();} + myFrame = (MyFrame) getParent().getParent().getParent().getParent().getParent();} catch(Exception e) { } ptm = new ProcessTableModel(); diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 8f70bb9..1771afd 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -55,7 +55,7 @@ protected ResultSet executeSqlClause (String sqlClause){ } finally { if (resultSet==null ){ - System.out.println("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime+" min!"); + System.out.println("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime/(60*1000)+" min!"); try { sleep(crashWaitingTime); } catch (InterruptedException e) { diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index 4387425..3529d0c 100644 --- a/src/main/java/Reports/RegularMonitor.java +++ b/src/main/java/Reports/RegularMonitor.java @@ -41,7 +41,7 @@ public boolean createReport() { try { result.last(); if (result.getRow() == 0) { - Printer.saveResult(getProperty("description"),new StringBuilder("empty selection")); + Printer.saveResult(getProperty("description"),new StringBuilder("empty selection\r\n")); return true; } StringBuilder resultSB = new StringBuilder(); diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index 1a23ac6..ed2181c 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -20,19 +20,11 @@ public class Printer { private static ConcurrentMap results=new ConcurrentHashMap(); - public static void printRowToMonitor(String text){ - try { - String utfString = new String (text.getBytes("windows-1251")); - String utfString1 =new String (utfString.getBytes("windows-1251"),"windows-1251"); - System.out.println(utfString); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - + public synchronized static void printRowToMonitor(String text){ + System.out.println(text); } public synchronized static void printLineToMonitor(String text){ System.out.print(text); - //printRowToMonitor(text); } public synchronized static void saveResult(String description, StringBuilder result){ @@ -41,7 +33,7 @@ public synchronized static void saveResult(String description, StringBuilder res saveMaptoFile(); } - private synchronized static boolean saveMaptoFile(){ + private static boolean saveMaptoFile(){ Calendar c = new GregorianCalendar(); String sCurrentDate = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR); @@ -58,7 +50,7 @@ private synchronized static boolean saveMaptoFile(){ for (ConcurrentMap.Entry pair: results.entrySet()) { - sb.append("\n\r"); + sb.append("\r\n"); sb.append("--------------------------------"); sb.append(pair.getKey()); sb.append(' '); @@ -69,8 +61,7 @@ private synchronized static boolean saveMaptoFile(){ sb.append("--------------------------------"); sb.append(pair.getKey()); - sb.append("-----------------------------------\r\n"); - sb.append("\n\r"); + sb.append("-----------------------------------\r\n\r\n\r\n"); } /* try(FileOutputStream fos = new FileOutputStream(BaseConstants.getPath() + "\\" + sCurrentDate + ".txt","UTF-8"){ @@ -87,7 +78,7 @@ private synchronized static boolean saveMaptoFile(){ try { Files.write(path, (sb.toString()).getBytes("windows-1251"), - StandardOpenOption.WRITE); + StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { e.printStackTrace(); return false; @@ -120,7 +111,7 @@ public ResultTable(StringBuilder result, Calendar c) { private StringBuilder toStringBulder(Calendar c) { StringBuilder result= new StringBuilder(); - result.append(align(c.get(Calendar.HOUR))); + result.append(align(c.get(Calendar.HOUR_OF_DAY))); result.append(':'); result.append(align(c.get(Calendar.MINUTE))); result.append(':'); diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index 320e2ac..788afbb 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -15,9 +15,11 @@ public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; + ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); //private Map workingPool=new LinkedHashMap<>(); + public SqlExecutor(PriorityBlockingQueue queue) { this.waitingQueue=queue; /* for (SqlProperties prop:waitingQueue) { diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 45c01be..68fd38b 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -21,6 +21,7 @@ public class SqlProperties implements Comparable{ private Calendar startTime; private boolean isZip; private boolean isRunning; + private int localPeriod=0; //private Calendar timeToStart=null; /* @@ -60,6 +61,10 @@ public HashMap loadFromFile(InputStreamReader isr, String filePa parammedSql=parammedSql.replace("&&date2",map.get("date2")); map.put("sql",parammedSql); } + + if (getProperty("period")!=null && localPeriod>0){ + map.put("period", String.valueOf(localPeriod)); + } //updateTimeToStart(); map.put("sourceFile", filePath); diff --git a/src/main/java/View.java b/src/main/java/View.java index 8797056..8fb6f3a 100644 --- a/src/main/java/View.java +++ b/src/main/java/View.java @@ -9,8 +9,14 @@ public class View extends JDialog { private JTabbedPane tabbedPane1; public View() { - setContentPane(contentPane); - /*модальность - блоктрует/неблокирует другие окна приложения*/ + + JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); + jSplitPane.setRightComponent(new JButton("Right")); + jSplitPane.setLeftComponent(new JButton("Left")); + add(jSplitPane); +/* + //setContentPane(contentPane); + *//*модальность - блоктрует/неблокирует другие окна приложения*//* setModal(true); getRootPane().setDefaultButton(buttonOK); @@ -40,7 +46,7 @@ public void windowClosing(WindowEvent e) { public void actionPerformed(ActionEvent e) { onCancel(); } - }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);*/ } private void onOK() { @@ -57,7 +63,8 @@ public static void main(String[] args) { View dialog = new View(); dialog.pack(); dialog.setVisible(true); - System.exit(0); + //System.exit(0); + System.out.println("dsfsdf"); } } From 49158e4220c5ec4302bbce44a92b31650d8efd36 Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 17 Dec 2018 22:57:48 +0300 Subject: [PATCH 03/26] Refactoring: 1. Added class StringUtilz. 2. Add in SqlExecuter HashMap. It creates different thread poll for each SQL server 3. Printer writes to file using StrinUtilz.alignStringAfter. 4. Removed bag in ConnectorToOracle. --- src/main/java/Controller/Controller.java | 7 ++-- .../AbstratReports/AbstractExcelReport.java | 11 +++--- .../AbstratReports/AbstractReport.java | 2 +- src/main/java/Utilz/ConnectorToOracle.java | 36 +++++++++---------- src/main/java/Utilz/Printer.java | 22 ++++++------ src/main/java/Utilz/SqlExecutor.java | 8 ++++- src/main/java/Utilz/SqlProperties.java | 4 +-- src/main/java/Utilz/StringUtilz.java | 23 ++++++++++++ 8 files changed, 71 insertions(+), 42 deletions(-) create mode 100644 src/main/java/Utilz/StringUtilz.java diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 983fdad..22d9860 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -168,11 +168,10 @@ private static Calendar getCurrentDate() { String sDate = null; for (Map.Entry pair : BaseConstants.getDbase().entrySet()) { - Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); - if (conn==null) continue; - Statement stm = null; try { - stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); + if (conn==null) continue; + Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); stm.execute(sqlClause); ResultSet resultSet = stm.getResultSet(); resultSet.next(); diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index c76c928..684a009 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -3,6 +3,7 @@ import Utilz.Printer; import Utilz.SqlExecutor; import Utilz.SqlProperties; +import Utilz.StringUtilz; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -83,22 +84,22 @@ protected String getCurrentDate (String delimiter){ String sDate= String.valueOf(c.get(Calendar.DAY_OF_MONTH)); String sMonth = String.valueOf ((c.get(Calendar.MONTH)+1)); String sYear = String.valueOf (c.get(Calendar.YEAR)); - String currentDate= alignString (sDate,2,"0") +delimiter - +alignString (sMonth,2,"0")+delimiter - +alignString (sYear,4,"20"); + String currentDate= StringUtilz.alignString (sDate,2,"0") +delimiter + +StringUtilz.alignString (sMonth,2,"0")+delimiter + +StringUtilz.alignString (sYear,4,"20"); return currentDate; } /* * sign quantitySigns * */ - protected String alignString (String object, int quantitySigns, String sign){ + /* protected String alignString (String object, int quantitySigns, String sign){ if (object.length()>=quantitySigns) return object; StringBuilder result = new StringBuilder(object); while (result.length() pair: results.entrySet()) { sb.append("\r\n"); - sb.append("--------------------------------"); - sb.append(pair.getKey()); - sb.append(' '); - sb.append(pair.getValue().getDateTime()); - sb.append("-----------------------------------\r\n"); - + StringBuilder header = new StringBuilder(); + header.append("--------------------------------"); + header.append(pair.getKey()); + header.append(' '); + header.append(pair.getValue().getDateTime()); + header.append("-----------------------------------\r\n"); + + sb.append(header); sb.append(pair.getValue().getResult()); - - sb.append("--------------------------------"); - sb.append(pair.getKey()); - sb.append("-----------------------------------\r\n\r\n\r\n"); + String closingHeader = StringUtilz.alignStringAfter("--------------------------------" +pair.getKey(), + header.length()-2,"-"); + sb.append(closingHeader); + sb.append("\r\n\r\n\r\n"); } /* try(FileOutputStream fos = new FileOutputStream(BaseConstants.getPath() + "\\" + sCurrentDate + ".txt","UTF-8"){ diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index 788afbb..06ca7a2 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -6,6 +6,7 @@ import Reports.ReportFactory; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.ExecutorService; @@ -17,6 +18,7 @@ public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); + HashMap services = new HashMap<>(); //private Map workingPool=new LinkedHashMap<>(); @@ -38,7 +40,11 @@ public void run() { //sqlProp.addProperty("asleeptime", String.valueOf(period)); if (period == 0 && !sqlProp.isRunning()) { AbstractReport r =(AbstractReport) ReportFactory.create(sqlProp, this); - service.submit(r); + if (services.get(r.getProperty("server"))==null){ + services.put(r.getProperty("server"), Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS)); + } + services.get(r.getProperty("server")).submit(r); + //service.submit(r); waitingQueue.remove(sqlProp); sqlProp.setRunning(true); waitingQueue.put(sqlProp); diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 68fd38b..0a5ff59 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -6,7 +6,7 @@ import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters;; import java.io.*; -import java.nio.charset.StandardCharsets; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -134,7 +134,7 @@ private void printCalendar(Calendar cdate) { public long calcSleepingTime (){ Calendar currentMoment = Calendar.getInstance();/*текущее время*/ - long sleepingTime = startTime.getTimeInMillis() -currentMoment.getTimeInMillis();; + long sleepingTime = startTime.getTimeInMillis() -currentMoment.getTimeInMillis(); return sleepingTime <= 0 ? 0 : sleepingTime; } diff --git a/src/main/java/Utilz/StringUtilz.java b/src/main/java/Utilz/StringUtilz.java new file mode 100644 index 0000000..d30604e --- /dev/null +++ b/src/main/java/Utilz/StringUtilz.java @@ -0,0 +1,23 @@ +package Utilz; + +public class StringUtilz { + /* + * Метод выравнивает длину строки знаками sign до длины строки quantitySigns + * */ + public static String alignString (String object, int quantitySigns, String sign){ + if (object.length()>=quantitySigns) return object; + StringBuilder result = new StringBuilder(object); + while (result.length()=quantitySigns) return object; + StringBuilder result = new StringBuilder(object); + while (result.length() Date: Tue, 18 Dec 2018 23:51:00 +0300 Subject: [PATCH 04/26] debagging: 1. Bag with period of excel report. --- .../AbstratReports/AbstractExcelReport.java | 4 +- .../AbstratReports/AbstractReport.java | 10 +++- src/main/java/Reports/AutoRegistration.java | 2 +- src/main/java/Utilz/SqlProperties.java | 48 +++++++++---------- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index 684a009..ce84276 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -69,8 +69,8 @@ protected boolean createFile(HSSFWorkbook workbook){ } } closeConnection(resultSet); - flag= getProps().updatePeriodinFile(); - return flag; + //flag= getProps().updatePeriodinFile(); + return true; } /* */ protected void addUnloadPath(String outputFile){ diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index ef203a8..444e710 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -76,6 +76,8 @@ private boolean prepareCreation(){ @Override public void run() { + + while (!createReport()){ try { sleep(crashWaitingTime); @@ -84,7 +86,13 @@ public void run() { } } - getProps().updatePeriodinFile(); + while (!getProps().updatePeriodinFile()){ + try { + sleep(crashWaitingTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } sqlExecutor.addQueue(this); } diff --git a/src/main/java/Reports/AutoRegistration.java b/src/main/java/Reports/AutoRegistration.java index 931eaa6..0d28eab 100644 --- a/src/main/java/Reports/AutoRegistration.java +++ b/src/main/java/Reports/AutoRegistration.java @@ -87,7 +87,7 @@ public boolean createReport(ResultSet result) { 0, 3 )); - cell_header.setCellValue(" : " + startDate + " " + finishDate+"."); + cell_header.setCellValue(" : " + getProperty("date1") + " " + getProperty("date2")+"."); Row row=worksheet.createRow(1); /*Creating of header*/ // diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 0a5ff59..b81b29c 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -39,16 +39,8 @@ public void setZip(boolean zip) { } public HashMap loadFromFile(InputStreamReader isr, String filePath) { - StringBuilder stringB = getFileContextFromStream(isr); -/* try (BufferedReader reader = new BufferedReader(isr)) { - while (reader.ready()) { - stringB.append(" "); - stringB.append(reader.readLine()); - stringB.append(" "); - } - } catch (IOException e) { - e.printStackTrace(); - }*/ + StringBuilder stringB = getFileContextFromStream(isr); + String [] params = stringB.toString().split(";"); for (int i=0;i Date: Thu, 20 Dec 2018 23:36:11 +0300 Subject: [PATCH 05/26] Debagging 1. Bag with coding in JAR-file. --- .idea/encodings.xml | 16 ++-- pom.xml | 4 + src/main/java/Frames/StartUpWindow.java | 85 +++++++++++++++++++ .../AbstratReports/AbstractExcelReport.java | 16 ++-- src/main/java/Reports/AutoRegistration.java | 68 +++++++-------- src/main/java/Reports/RegularMonitor.java | 2 +- src/main/java/Reports/ReportFactory.java | 2 +- src/main/java/Reports/Table.java | 2 +- src/main/java/Utilz/SqlProperties.java | 3 +- src/main/java/Utilz/Table.java | 2 +- 10 files changed, 145 insertions(+), 55 deletions(-) create mode 100644 src/main/java/Frames/StartUpWindow.java diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 73c6415..2a99450 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,17 +1,17 @@ - - - - + + + + - + - - + + - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 27a3f75..abda8b0 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,10 @@ Reporter Reporter 1.0-SNAPSHOT + + UTF-8 + UTF-8 + codelds diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java new file mode 100644 index 0000000..426e573 --- /dev/null +++ b/src/main/java/Frames/StartUpWindow.java @@ -0,0 +1,85 @@ +package Frames; + +import Controller.Controller; +import Utilz.BaseConstants; +import net.lingala.zip4j.core.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.FileHeader; +import net.lingala.zip4j.model.ZipParameters; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +public class StartUpWindow extends JFrame { + private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key."); + private JLabel logginLabel = new JLabel(" Please, enter here new key: "); + private JTextField logginText = new JTextField(60); + private JButton logginButton = new JButton("Enter key"); + + + + + public StartUpWindow() throws HeadlessException { + super ("License window"); + setSize(new Dimension(400,150)); + setLayout(new BorderLayout()); + Container c= getContentPane(); + c.add(textLabel,BorderLayout.NORTH); + textLabel.setHorizontalAlignment(0); + c.add(logginLabel,BorderLayout.WEST); + c.add(logginText,BorderLayout.CENTER); + c.add (logginButton,BorderLayout.SOUTH); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + logginButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.out.println("Button clicked!!!"); + if (Controller.checkKey(logginText.getText())){ + saveKey(logginText.getText()); + Controller.init(); + } + dispose(); + } + }); + + } + + private void saveKey(String text) { + String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); + FileHeader fHeader=null; + ZipFile zipFile =null; + try { + zipFile=new ZipFile(zipFilePath); + if (zipFile.isEncrypted()){ + zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); + } + fHeader =zipFile.getFileHeader("liesence.txt"); + zipFile.removeFile(fHeader); + + } catch (ZipException e) { + e.printStackTrace(); + } + try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { + ZipParameters zp = new ZipParameters(); + zp.setSourceExternalStream(true); + zp.setFileNameInZip(fHeader.getFileName()); + zp.setPassword(BaseConstants.getInstance().getZipPsw()); + zipFile.addStream(is, zp); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ZipException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index ce84276..69fccd8 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -32,7 +32,7 @@ public AbstractExcelReport(SqlProperties props, SqlExecutor sqlExecutor) { if (getProperty("excel")!=null){ paths.add(getProperty("excel")); } - Printer.printRowToMonitor(" AbstractMonitor: c " + getProperty("description") + ", : " + getProperty("server")); + Printer.printRowToMonitor("Start thread " + getProperty("description") + ", server: " + getProperty("server") + " (AbstractExcelReport constructor)"); } public abstract boolean createReport(ResultSet result); @@ -72,12 +72,12 @@ protected boolean createFile(HSSFWorkbook workbook){ //flag= getProps().updatePeriodinFile(); return true; } - /* */ + /*Добавляет путь для выгрузки*/ protected void addUnloadPath(String outputFile){ paths.add(outputFile); } /* - * delimiter + * Метод возвращают текущую дату в виде строки с разделителем delimiter * */ protected String getCurrentDate (String delimiter){ Calendar c= new GregorianCalendar(); @@ -90,7 +90,7 @@ protected String getCurrentDate (String delimiter){ return currentDate; } /* - * sign quantitySigns + * Метод выравнивает длину строки знаками sign до длины строки quantitySigns * */ /* protected String alignString (String object, int quantitySigns, String sign){ if (object.length()>=quantitySigns) return object; @@ -103,8 +103,8 @@ protected String getCurrentDate (String delimiter){ private String getUniqFileName(String outputFile) { for (int i = 0; ; i++) { - if (!Files.exists(Paths.get(outputFile + "\\" + " 3_"+getCurrentDate(" ") + "_" + String.valueOf(i) + ".xls"))) { - outputFile = outputFile + "\\" + " 3_"+ getCurrentDate(" ") + "_" + String.valueOf(i) + ".xls"; + if (!Files.exists(Paths.get(outputFile + "\\" + "ОТОиТК 3_"+getCurrentDate(" ") + "_" + String.valueOf(i) + ".xls"))) { + outputFile = outputFile + "\\" + "ОТОиТК 3_"+ getCurrentDate(" ") + "_" + String.valueOf(i) + ".xls"; break; } } @@ -169,7 +169,7 @@ protected void createHeader (List headerXLS, HSSFSheet worksheet, HSSFCe createHeader(headerXLS,style,row,column); } /* - * @Param column - + * @Param column - номер столбца с которого начнется в ставка * */ protected void createHeader (List headerXLS, HSSFCellStyle style,Row row, int column ){ for (int i=0;i headerXLS, HSSFCellStyle style,Row row protected void createVerticalHeader (List headerXLS, HSSFCellStyle style,HSSFSheet sheet, int rowNum,int colNum ){ for (int i=0;i headerXLS = new ArrayList(); - headerXLS.add(" "); - headerXLS.add("10 "); - headerXLS.add("10 "); - headerXLS.add("10 , %"); + headerXLS.add("Код ТО"); + headerXLS.add("ЭК10 ГОД Регистрация"); + headerXLS.add("ЭК10 ГОД АвтоРегистрация"); + headerXLS.add("ЭК10 ГОД Доля, %"); - headerXLS.add("10 "); - headerXLS.add("10 "); - headerXLS.add("10 , %"); + headerXLS.add("ЭК10 Неделя Регистрация"); + headerXLS.add("ЭК10 Неделя АвтоРегистрация"); + headerXLS.add("ЭК10 Неделя Доля, %"); - headerXLS.add("40,78 "); - headerXLS.add("40,78 "); - headerXLS.add("40,78 , %"); + headerXLS.add("ИМ40,78 ГОД Регистрация"); + headerXLS.add("ИМ40,78 ГОД АвтоРегистрация"); + headerXLS.add("ИМ40,78 ГОД Доля, %"); - headerXLS.add("40,78 "); - headerXLS.add("40,78 "); - headerXLS.add("40,78 , %"); + headerXLS.add("ИМ40,78 Неделя Регистрация"); + headerXLS.add("ИМ40,78 Неделя АвтоРегистрация"); + headerXLS.add("ИМ40,78 Неделя Доля, %"); - headerXLS.add("10 "); - headerXLS.add("10 "); - headerXLS.add("10 , %"); + headerXLS.add("ЭК10 ГОД Выпуск"); + headerXLS.add("ЭК10 ГОД АвтоВыпуск"); + headerXLS.add("ЭК10 ГОД Доля автовыпуск, %"); - headerXLS.add("10 "); - headerXLS.add("10 "); - headerXLS.add("10 , %"); + headerXLS.add("ЭК10 Неделя Выпуск"); + headerXLS.add("ЭК10 Неделя АвтоВыпуск"); + headerXLS.add("ЭК10 Неделя Доля автовыпуск, %"); - headerXLS.add("40 "); - headerXLS.add("40 "); - headerXLS.add("40 , %"); + headerXLS.add("ИМ40 ГОД выпуск"); + headerXLS.add("ИМ40 ГОД Автовыпуск"); + headerXLS.add("ИМ40 ГОД Доля автовыпуска, %"); - headerXLS.add("40 "); - headerXLS.add("40 "); - headerXLS.add("40 , %"); + headerXLS.add("ИМ40 Неделя выпуск"); + headerXLS.add("ИМ40 Неделя Автовыпуск"); + headerXLS.add("ИМ40 Неделя Доля автовыпуск, %"); - headerXLS.add(" "); - headerXLS.add(" "); - headerXLS.add(" , %"); + headerXLS.add("Все таможенные процедуры за год"); + headerXLS.add("ТУВ за год"); + headerXLS.add("Доля ТУВ за год, %"); - headerXLS.add(" "); - headerXLS.add(" "); - headerXLS.add(" , %"); + headerXLS.add("Все таможенные процедуры за неделю"); + headerXLS.add("ТУВ за неделю"); + headerXLS.add("Доля ТУВ за неделю, %"); HSSFWorkbook workbook =new HSSFWorkbook(); - HSSFSheet worksheet =workbook.createSheet("0006-"); + HSSFSheet worksheet =workbook.createSheet("0006-Р"); for (int i=0;i<31;i++){ worksheet.setColumnWidth(i,10*256); @@ -87,10 +87,10 @@ public boolean createReport(ResultSet result) { 0, 3 )); - cell_header.setCellValue(" : " + getProperty("date1") + " " + getProperty("date2")+"."); + cell_header.setCellValue("Отчетный период: с " + getProperty("date1") + " по " + getProperty("date2")+"."); Row row=worksheet.createRow(1); /*Creating of header*/ - // + // Создаем стиль ячейки для заголовка таблицы HSSFCellStyle style = workbook.createCellStyle(); style.setWrapText(true); diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index 3529d0c..f6693c2 100644 --- a/src/main/java/Reports/RegularMonitor.java +++ b/src/main/java/Reports/RegularMonitor.java @@ -22,7 +22,7 @@ public class RegularMonitor extends AbstractReport { public RegularMonitor(SqlProperties props, SqlExecutor sqlExecutor) { super(props, sqlExecutor); this.description = props.getProperty("description"); - Printer.printRowToMonitor("Constructor of RegularMonitor: here starting new thread " + description + ", server name: " + getProperty("server")); + Printer.printRowToMonitor("Thread starting " + description + ", server: " + getProperty("server") + " (Constructor of RegularMonitor)"); } @Override diff --git a/src/main/java/Reports/ReportFactory.java b/src/main/java/Reports/ReportFactory.java index 1218e7e..0348430 100644 --- a/src/main/java/Reports/ReportFactory.java +++ b/src/main/java/Reports/ReportFactory.java @@ -21,7 +21,7 @@ public static Report create (SqlProperties prop, SqlExecutor sqlExecutor) { } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { - System.out.println("Класс не существует"); + System.out.println("Class not found!!! (report factory)"); e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); diff --git a/src/main/java/Reports/Table.java b/src/main/java/Reports/Table.java index 6c31033..0665035 100644 --- a/src/main/java/Reports/Table.java +++ b/src/main/java/Reports/Table.java @@ -7,7 +7,7 @@ public class Table { private String [][] matrix ; /* -* +* Конструктор копирует результаты запроса в двумерный массив * */ public Table(ResultSet resultSet) { if (resultSet == null) return; diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index b81b29c..54c9a2e 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -75,7 +75,8 @@ public HashMap loadFromFile(InputStreamReader isr, String filePa } public HashMap loadFromFile(File file){ - try (FileReader fileReader =new FileReader(file)){ + //try (FileReader fileReader =new FileReader(file,"utf-8")){ + try (InputStreamReader fileReader =new InputStreamReader(new FileInputStream(file),"utf-8")){ return loadFromFile(fileReader,file.getPath()); } catch (FileNotFoundException e) { e.printStackTrace(); diff --git a/src/main/java/Utilz/Table.java b/src/main/java/Utilz/Table.java index 49e5e59..d86a90d 100644 --- a/src/main/java/Utilz/Table.java +++ b/src/main/java/Utilz/Table.java @@ -7,7 +7,7 @@ public class Table { private String [][] matrix ; /* -* +* Конструктор копирует результаты запроса в двумерный массив * */ public Table(ResultSet resultSet) { if (resultSet == null) return; From 71edc003aada161dca807ce2812ce5514541f5c5 Mon Sep 17 00:00:00 2001 From: Albert Date: Fri, 21 Dec 2018 22:46:41 +0300 Subject: [PATCH 06/26] 1. Add start waiting window --- src/main/java/Controller/Controller.java | 7 ++++++- src/main/java/Frames/StartUpWindow.java | 22 +++------------------- src/main/java/Frames/View1.java | 8 ++++++-- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 22d9860..165d2d5 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -30,10 +30,14 @@ public class Controller { private static PriorityBlockingQueue tasksQueue = new PriorityBlockingQueue<>(); private static SqlExecutor sqlExecutor; private static MyFrame frame; + private static StartUpWindow startFrame; static public void main(String[] args) { - if (!checkLisence(true)) { + startFrame = new StartUpWindow(); + startFrame.setVisible(true); + if (!checkLisence(BaseConstants.isIsZip())) { + startFrame.dispose(); new LogginWindow(); } else { init(); @@ -49,6 +53,7 @@ public static void init() { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); frame.pack(); + startFrame.dispose(); frame.setVisible(true); } diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index 426e573..7035748 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -17,7 +17,7 @@ import java.io.UnsupportedEncodingException; public class StartUpWindow extends JFrame { - private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key."); + private JLabel textLabel = new JLabel("Please wait some minutes..."); private JLabel logginLabel = new JLabel(" Please, enter here new key: "); private JTextField logginText = new JTextField(60); private JButton logginButton = new JButton("Enter key"); @@ -26,28 +26,12 @@ public class StartUpWindow extends JFrame { public StartUpWindow() throws HeadlessException { - super ("License window"); + super ("Start up window"); setSize(new Dimension(400,150)); setLayout(new BorderLayout()); Container c= getContentPane(); c.add(textLabel,BorderLayout.NORTH); - textLabel.setHorizontalAlignment(0); - c.add(logginLabel,BorderLayout.WEST); - c.add(logginText,BorderLayout.CENTER); - c.add (logginButton,BorderLayout.SOUTH); - setVisible(true); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - logginButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - System.out.println("Button clicked!!!"); - if (Controller.checkKey(logginText.getText())){ - saveKey(logginText.getText()); - Controller.init(); - } - dispose(); - } - }); + } diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index 1e8fe76..f101679 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -29,7 +29,11 @@ public class View1 { private static int counter; public static void main(String[] args){ - JFrame frame= new JFrame ("FRAME"); + + JFrame frame0= new StartUpWindow(); + frame0.setVisible(true); + + /* JFrame frame= new JFrame ("FRAME"); frame.setSize(new Dimension(600,400)); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); @@ -44,7 +48,7 @@ public static void main(String[] args){ initWorkingPool(false); // ppt.init(statusmap); frame.setVisible(true); - frame.pack(); + frame.pack();*/ } From 8755b7b4c8e19fb2a6c19a9d03256db89dba1898 Mon Sep 17 00:00:00 2001 From: Albert Date: Sun, 30 Dec 2018 15:56:27 +0300 Subject: [PATCH 07/26] 1. Add start waiting window --- src/main/java/Controller/Controller.java | 6 +++--- src/main/java/Frames/LogginWindow.java | 2 +- src/main/java/Frames/ProccessesPanelTab.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 165d2d5..6bff194 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -40,12 +40,12 @@ static public void main(String[] args) { startFrame.dispose(); new LogginWindow(); } else { - init(); + init(BaseConstants.getInstance().isIsZip()); } } - public static void init() { - initWorkingPool(BaseConstants.getInstance().isIsZip()); + public static void init(boolean isZip) { + initWorkingPool(isZip); // Here starts sqlExecuter with tasksQueue new Thread(() -> createSqlExecuter()).start(); frame = new MyFrame("Hello world of SWING!", null); diff --git a/src/main/java/Frames/LogginWindow.java b/src/main/java/Frames/LogginWindow.java index a9894b8..c7cf2ca 100644 --- a/src/main/java/Frames/LogginWindow.java +++ b/src/main/java/Frames/LogginWindow.java @@ -43,7 +43,7 @@ public void actionPerformed(ActionEvent e) { System.out.println("Button clicked!!!"); if (Controller.checkKey(logginText.getText())){ saveKey(logginText.getText()); - Controller.init(); + Controller.init(BaseConstants.isIsZip()); } dispose(); } diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index e4dc08f..d56cb35 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -34,7 +34,7 @@ public class ProccessesPanelTab extends JScrollPane implements Runnable{ public void init (PriorityBlockingQueue queue) { - if (queue==null){ + while (queue==null){ throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); } From 9b9479b8967ab2e82d0dc1f3de28dfd7098e404f Mon Sep 17 00:00:00 2001 From: Albert Date: Fri, 11 Jan 2019 00:37:24 +0300 Subject: [PATCH 08/26] 1. Debugged regularReport with zip storage --- src/main/java/Frames/ProccessesPanelTab.java | 10 ++-- .../AbstratReports/AbstractReport.java | 2 - src/main/java/Utilz/SqlExecutor.java | 56 ++++++++++++------- src/main/java/Utilz/SqlProperties.java | 16 ++++-- src/test/java/Utilz/SqlPropertiesTest.java | 28 +++++++++- 5 files changed, 79 insertions(+), 33 deletions(-) diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index d56cb35..e8a3da5 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -35,7 +35,7 @@ public class ProccessesPanelTab extends JScrollPane implements Runnable{ public void init (PriorityBlockingQueue queue) { while (queue==null){ - throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); + //throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); } //this.statusMap = (LinkedHashMap) statusMap; @@ -90,13 +90,13 @@ private void updateJComponentsFromQueue() { private String ms_totime(long ms) { Integer [] time = new Integer[4]; - time[3] = (int)ms/86400000; + time[3] = (int)(ms/86400000); ms=ms%86400000; - time[2] = (int)ms/3600000; + time[2] = (int)(ms/3600000); ms=ms%3600000; - time[1] = (int)ms/60000; + time[1] = (int)(ms/60000); ms=ms%60000; - time[0] = (int)ms/1000; + time[0] = (int)(ms/1000); ms=ms%1000; StringBuilder formatted_time = new StringBuilder(); for (int i=time.length-1;i>=0;i--){ diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 444e710..795af72 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -76,8 +76,6 @@ private boolean prepareCreation(){ @Override public void run() { - - while (!createReport()){ try { sleep(crashWaitingTime); diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index 06ca7a2..3f19097 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -16,6 +16,7 @@ public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; + private final Object lock = new Object(); ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); HashMap services = new HashMap<>(); @@ -33,34 +34,47 @@ public SqlExecutor(PriorityBlockingQueue queue) { @Override public void run() { - while (true){ - if (waitingQueue.size()>0) { - SqlProperties sqlProp = waitingQueue.peek(); - long period = sqlProp.calcSleepingTime(); - //sqlProp.addProperty("asleeptime", String.valueOf(period)); - if (period == 0 && !sqlProp.isRunning()) { - AbstractReport r =(AbstractReport) ReportFactory.create(sqlProp, this); - if (services.get(r.getProperty("server"))==null){ - services.put(r.getProperty("server"), Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS)); + while (true) { + synchronized (lock) { + if (waitingQueue.size() > 0) { + SqlProperties sqlProp = waitingQueue.peek(); + long period = sqlProp.calcSleepingTime(); + //sqlProp.addProperty("asleeptime", String.valueOf(period)); + if (period == 0 && !sqlProp.isRunning()) { + AbstractReport r = (AbstractReport) ReportFactory.create(sqlProp, this); + if (services.get(r.getProperty("server")) == null) { + services.put(r.getProperty("server"), Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS)); + } + services.get(r.getProperty("server")).submit(r); + //service.submit(r); + waitingQueue.remove(sqlProp); + sqlProp.setRunning(true); + waitingQueue.put(sqlProp); } - services.get(r.getProperty("server")).submit(r); - //service.submit(r); - waitingQueue.remove(sqlProp); - sqlProp.setRunning(true); - waitingQueue.put(sqlProp); + else if(period > 0 && !sqlProp.isRunning()){ + try { + lock.wait(period); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + lock.notifyAll(); } } } public void addQueue(AbstractReport abstractReport){ - abstractReport.addProperty("timeStampLastExecution", getCurrentDateTime()); - //abstractReport.addProperty("asleeptime", String.valueOf(abstractReport.getProps().calcSleepingTime())); - waitingQueue.remove(abstractReport.getProps()); - abstractReport.getProps().setRunning(false); - waitingQueue.add(abstractReport.getProps()); - //workingPool.put(abstractReport.getProps(),false); - + synchronized (lock) { + abstractReport.addProperty("timeStampLastExecution", getCurrentDateTime()); + //abstractReport.addProperty("asleeptime", String.valueOf(abstractReport.getProps().calcSleepingTime())); + waitingQueue.remove(abstractReport.getProps()); + abstractReport.getProps().setRunning(false); + waitingQueue.add(abstractReport.getProps()); + //workingPool.put(abstractReport.getProps(),false); + lock.notifyAll(); + } long period = abstractReport.getSleepingTime(); Printer.printRowToMonitor("Thread "+abstractReport.getProperty("description")+" sleep for " + String.valueOf(period / 1000 / 60 / 60 / 24) + " days " diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 54c9a2e..4abc6b1 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -34,11 +34,15 @@ public SqlProperties(boolean isZip) { this.isRunning=false; } + public Calendar getStartTime() { + return startTime; + } + public void setZip(boolean zip) { isZip = zip; } - public HashMap loadFromFile(InputStreamReader isr, String filePath) { + public synchronized HashMap loadFromFile(InputStreamReader isr, String filePath) { StringBuilder stringB = getFileContextFromStream(isr); String [] params = stringB.toString().split(";"); @@ -161,6 +165,8 @@ public boolean updatePeriodinFile(){ break; } //startTime=date2; + + startTime=toCalendar(toString(date2)+ " 23:59:59"); if (isZip) { return updatePropertiesZipFile("date2", toString(date2)) | updatePropertiesZipFile("date1", toString(date1)); } @@ -221,7 +227,7 @@ private boolean updatePropertiesFile(String nameProperty, String value){ return true; } - private boolean updatePropertiesZipFile(String nameProperty, String value) { + private synchronized boolean updatePropertiesZipFile(String nameProperty, String value) { /*read source in zip file to StringBuilder*/ String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); FileHeader fHeader=null; @@ -252,7 +258,9 @@ private boolean updatePropertiesZipFile(String nameProperty, String value) { int start = stringB.indexOf(map.get(nameProperty)); int end = start + map.get(nameProperty).length(); stringB.replace(start,end,value); - /*write StringBuolder to source in zip file */ + //map.put(nameProperty,value); + /*write StringBulder to source in zip file */ + map.put(nameProperty,value); byte [] b=null; try (InputStream is = new ByteArrayInputStream(stringB.toString().getBytes("utf-8"))) { //b = stringB.toString().getBytes("UTF-8"); @@ -261,7 +269,7 @@ private boolean updatePropertiesZipFile(String nameProperty, String value) { zp.setFileNameInZip(sourceFile); zp.setPassword(BaseConstants.getInstance().getZipPsw()); zipFile.addStream(is, zp); - map.put(nameProperty,value); + //map.put(nameProperty,value); } catch (IOException e) { e.printStackTrace(); } catch (ZipException e) { diff --git a/src/test/java/Utilz/SqlPropertiesTest.java b/src/test/java/Utilz/SqlPropertiesTest.java index f52ac00..ab34e22 100644 --- a/src/test/java/Utilz/SqlPropertiesTest.java +++ b/src/test/java/Utilz/SqlPropertiesTest.java @@ -2,12 +2,15 @@ import org.junit.Before; import org.junit.Test; +import sun.misc.Cleaner; -import java.io.FileNotFoundException; +import java.io.*; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Formatter; import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.stream.IntStream; import static org.junit.Assert.*; @@ -40,4 +43,27 @@ public void alignString() { String result="0000011111"; assertEquals(result,sqlProperties.alignString(test,10,"0")); } + + @Test + public void loadFromFile(){ + String sqlProp="date2 = 01/01/2019"; + String filePath = "TestFilePath"; + HashMap result =null; + + InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(sqlProp.getBytes())); + + result = sqlProperties.loadFromFile(isr, filePath); + System.out.println("startTime = " +sqlProperties.getStartTime().getTime()); + System.out.println(sqlProperties.toCalendar(result.get("date2")+ " 23:59:59").getTime()); + assertEquals(result.get("date2"), "01/01/2019"); + assertEquals(result.get("sourceFile"),filePath); + Calendar c1 =sqlProperties.toCalendar(result.get("date2")+ " 23:59:59"); + c1.clear(Calendar.MILLISECOND); + Calendar c2 = sqlProperties.getStartTime(); + c2.clear(Calendar.MILLISECOND); + assertEquals(c1,c2); + + + } + } \ No newline at end of file From 628356b478e9ebe21eb61b0c87ace4f325b6f484 Mon Sep 17 00:00:00 2001 From: Albert Date: Sat, 12 Jan 2019 02:28:29 +0300 Subject: [PATCH 09/26] 1. Debugged checkLicense() 2. Added Jlablel with e-mail --- src/main/java/Controller/Controller.java | 7 ++++++- .../java/Frames/{LogginWindow.java => LicenseWindow.java} | 7 ++++--- src/main/java/Frames/MyFrame.java | 5 ++++- src/main/java/Utilz/Desipher.java | 5 +++++ 4 files changed, 19 insertions(+), 5 deletions(-) rename src/main/java/Frames/{LogginWindow.java => LicenseWindow.java} (88%) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 6bff194..d5f3259 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -34,11 +34,12 @@ public class Controller { static public void main(String[] args) { + BaseConstants.getInstance(); startFrame = new StartUpWindow(); startFrame.setVisible(true); if (!checkLisence(BaseConstants.isIsZip())) { startFrame.dispose(); - new LogginWindow(); + new LicenseWindow(); } else { init(BaseConstants.getInstance().isIsZip()); } @@ -85,6 +86,9 @@ private static boolean checkLisence(boolean b) { } return false; } else { + /*если изфайла*/ + + return true; } } @@ -161,6 +165,7 @@ public static boolean checkKey(String text) { if (decodeData == null) return false; Calendar c = stringToCalendar(decodeData); if (c == null) return false; + c.add(Calendar.MONTH,-1); if (c.getTimeInMillis() - getCurrentDate().getTimeInMillis() >= 0) { return true; } else { diff --git a/src/main/java/Frames/LogginWindow.java b/src/main/java/Frames/LicenseWindow.java similarity index 88% rename from src/main/java/Frames/LogginWindow.java rename to src/main/java/Frames/LicenseWindow.java index c7cf2ca..8e695d7 100644 --- a/src/main/java/Frames/LogginWindow.java +++ b/src/main/java/Frames/LicenseWindow.java @@ -16,8 +16,8 @@ import java.io.InputStream; import java.io.UnsupportedEncodingException; -public class LogginWindow extends JFrame { - private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key."); +public class LicenseWindow extends JFrame { + private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key.
Contact e-mail: albtutanota@tutanota.com"); private JLabel logginLabel = new JLabel(" Please, enter here new key: "); private JTextField logginText = new JTextField(60); private JButton logginButton = new JButton("Enter key"); @@ -25,7 +25,7 @@ public class LogginWindow extends JFrame { - public LogginWindow() throws HeadlessException { + public LicenseWindow() throws HeadlessException { super ("License window"); setSize(new Dimension(400,150)); setLayout(new BorderLayout()); @@ -35,6 +35,7 @@ public LogginWindow() throws HeadlessException { c.add(logginLabel,BorderLayout.WEST); c.add(logginText,BorderLayout.CENTER); c.add (logginButton,BorderLayout.SOUTH); + //c.add(new JLabel("Contact e-mail: albtutanota@tutanota.com"),BorderLayout.SOUTH); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); logginButton.addActionListener(new ActionListener() { diff --git a/src/main/java/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 9fead12..362106b 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -28,7 +28,10 @@ public MyFrame (String title, Map statusMap){ JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); jSplitPane.setRightComponent(resultView); jSplitPane.setLeftComponent(proccessesPanel); - c.add(jSplitPane); + BorderLayout bl = new BorderLayout(); + c.setLayout(bl); + c.add(jSplitPane,BorderLayout.CENTER); + c.add(new JLabel("Contact e-mail: albtutanota@tutanota.com"),BorderLayout.SOUTH); } diff --git a/src/main/java/Utilz/Desipher.java b/src/main/java/Utilz/Desipher.java index 5200f38..55383e6 100644 --- a/src/main/java/Utilz/Desipher.java +++ b/src/main/java/Utilz/Desipher.java @@ -5,6 +5,11 @@ import java.util.GregorianCalendar; public class Desipher { + + public static void main(String[] args) { + System.out.println(decodeData("e3x1x17")); + System.out.println(encodeData("01/03/2019")); + } public static String decodeData(String s){ String decodedData = s.substring(s.length()-1,s.length()) + s.substring(0,s.length()-1); From 7d36f98405f1260962df02be0c7315b4bf7ca9a0 Mon Sep 17 00:00:00 2001 From: Albert Date: Sat, 12 Jan 2019 15:10:42 +0300 Subject: [PATCH 10/26] 1. Added class StringCrypter. Removed Desipher 2. Updated working with keys --- src/main/java/Controller/Controller.java | 16 ++- src/main/java/Frames/LicenseWindow.java | 66 +++++++----- src/main/java/Utilz/Desipher.java | 48 --------- src/main/java/Utilz/StringCrypter.java | 130 +++++++++++++++++++++++ src/test/java/Utilz/DesipherTest.java | 19 ---- 5 files changed, 180 insertions(+), 99 deletions(-) delete mode 100644 src/main/java/Utilz/Desipher.java create mode 100644 src/main/java/Utilz/StringCrypter.java diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index d5f3259..a20751a 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -31,6 +31,7 @@ public class Controller { private static SqlExecutor sqlExecutor; private static MyFrame frame; private static StartUpWindow startFrame; + private static StringCrypter stringCrypter = new StringCrypter(); static public void main(String[] args) { @@ -86,11 +87,18 @@ private static boolean checkLisence(boolean b) { } return false; } else { - /*если изфайла*/ + /*если из файла*/ + try (BufferedReader bf = new BufferedReader(new FileReader(BaseConstants.getInstance().getPathSQL() + "\\liesence.txt"))) + { + return checkKey(bf.readLine()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } - - return true; } + return false; } private static Calendar stringToCalendar(String s) { @@ -161,7 +169,7 @@ public static void createSqlExecuter() { } public static boolean checkKey(String text) { - String decodeData = Desipher.decodeData(text); + String decodeData = stringCrypter.decrypt(text); if (decodeData == null) return false; Calendar c = stringToCalendar(decodeData); if (c == null) return false; diff --git a/src/main/java/Frames/LicenseWindow.java b/src/main/java/Frames/LicenseWindow.java index 8e695d7..a4d91f0 100644 --- a/src/main/java/Frames/LicenseWindow.java +++ b/src/main/java/Frames/LicenseWindow.java @@ -11,10 +11,7 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; +import java.io.*; public class LicenseWindow extends JFrame { private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key.
Contact e-mail: albtutanota@tutanota.com"); @@ -53,32 +50,45 @@ public void actionPerformed(ActionEvent e) { } private void saveKey(String text) { - String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); - FileHeader fHeader=null; - ZipFile zipFile =null; - try { - zipFile=new ZipFile(zipFilePath); - if (zipFile.isEncrypted()){ - zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); - } - fHeader =zipFile.getFileHeader("liesence.txt"); - zipFile.removeFile(fHeader); + if (BaseConstants.isIsZip()) { + String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); + FileHeader fHeader = null; + ZipFile zipFile = null; + try { + zipFile = new ZipFile(zipFilePath); + if (zipFile.isEncrypted()) { + zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); + } + fHeader = zipFile.getFileHeader("liesence.txt"); + zipFile.removeFile(fHeader); - } catch (ZipException e) { - e.printStackTrace(); + } catch (ZipException e) { + e.printStackTrace(); + } + try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { + ZipParameters zp = new ZipParameters(); + zp.setSourceExternalStream(true); + zp.setFileNameInZip(fHeader.getFileName()); + zp.setPassword(BaseConstants.getInstance().getZipPsw()); + zipFile.addStream(is, zp); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ZipException e) { + e.printStackTrace(); + } } - try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { - ZipParameters zp = new ZipParameters(); - zp.setSourceExternalStream(true); - zp.setFileNameInZip(fHeader.getFileName()); - zp.setPassword(BaseConstants.getInstance().getZipPsw()); - zipFile.addStream(is, zp); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (ZipException e) { - e.printStackTrace(); + else{ + try (BufferedWriter bfw = new BufferedWriter(new FileWriter(BaseConstants.getInstance().getPathSQL() + "\\liesence.txt"))) + { + bfw.write(text); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/Utilz/Desipher.java b/src/main/java/Utilz/Desipher.java deleted file mode 100644 index 55383e6..0000000 --- a/src/main/java/Utilz/Desipher.java +++ /dev/null @@ -1,48 +0,0 @@ -package Utilz; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; - -public class Desipher { - - public static void main(String[] args) { - System.out.println(decodeData("e3x1x17")); - System.out.println(encodeData("01/03/2019")); - } - public static String decodeData(String s){ - String decodedData = s.substring(s.length()-1,s.length()) + - s.substring(0,s.length()-1); - String [] dataParts =decodedData.split("x"); - try { - int year_1 = Integer.parseInt(dataParts[0], 16); - int month_1 = Integer.parseInt(dataParts[1], 16); - int day_1 = Integer.parseInt(dataParts[2], 16); - Calendar c = new GregorianCalendar(year_1, month_1 - 1, day_1); - SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy"); - String currentDate = formatter.format(c.getTime()); - return currentDate; - } - catch (NumberFormatException e){ - return null; - } - - } - - public static String encodeData(String s){ - StringBuilder data= new StringBuilder(s); - Calendar c= new GregorianCalendar(); - c.set( - Integer.valueOf(data.substring(6,10)), - Integer.valueOf(data.substring(3,5)), - Integer.valueOf(data.substring(0,2)) - ); - int year = c.get(Calendar.YEAR); - int month = c.get (Calendar.MONTH); - int day = c.get (Calendar.DAY_OF_MONTH); - String offsetedData = Integer.toString(year,16) +'x' +Integer.toString(month,16) +'x' + Integer.toString(day,16); - offsetedData = offsetedData.substring(1,offsetedData.length()) + offsetedData.substring(0,1); - return offsetedData; - } - -} diff --git a/src/main/java/Utilz/StringCrypter.java b/src/main/java/Utilz/StringCrypter.java new file mode 100644 index 0000000..bd76a72 --- /dev/null +++ b/src/main/java/Utilz/StringCrypter.java @@ -0,0 +1,130 @@ +package Utilz; +// Файл StringCrypter.java + +import java.io.IOException; +import org.apache.commons.codec.binary.Base64; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; + +/** + * Класс для шифрования и дешифрования строк + * Использует библиотеку Apache Codec http://commons.apache.org/codec/ + * @author Рудницкий Валентин + */ +public class StringCrypter { + public static void main(String[] args) { + StringCrypter crypter=new StringCrypter(new byte[]{1,4,5,6,8,9,7,8}); + String testStr = "01/01/2019"; + // шифрование + System.out.println( crypter.encrypt(testStr)); + System.out.println(crypter.decrypt(crypter.encrypt(testStr))); + + } + + /** + * Упрощенный конструктор. Создает StringCrypter с ключом DESSecretKey со значением по умолчанию (не рекомендуется) + */ + public StringCrypter() { + this(new byte[]{1,4,5,6,8,9,7,8}); + } + + /** + * Упрощенный конструктор. Создает StringCrypter с ключом + * DESSecretKey (алгоритм шифрования DES) со значением key. + * Ключ key должен иметь длину 8 байт + */ + public StringCrypter(byte[] key) { + try { + updateSecretKey(new DESSecretKey(key)); + } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException ex) { + throw new IllegalArgumentException(ex.getMessage()); + } + } + + public StringCrypter(SecretKey key) throws NoSuchPaddingException, + NoSuchAlgorithmException, + InvalidKeyException { + updateSecretKey(key); + } + + private void updateSecretKey(SecretKey key) throws NoSuchPaddingException, + NoSuchAlgorithmException, + InvalidKeyException { + ecipher = Cipher.getInstance(key.getAlgorithm()); + dcipher = Cipher.getInstance(key.getAlgorithm()); + ecipher.init(Cipher.ENCRYPT_MODE, key); + dcipher.init(Cipher.DECRYPT_MODE, key); + } + + public static class DESSecretKey implements SecretKey { + + private final byte[] key; + + /** + * ключ должен иметь длину 8 байт + */ + public DESSecretKey(byte[] key) { + this.key = key; + } + + @Override + public String getAlgorithm() { + return "DES"; + } + + @Override + public String getFormat() { + return "RAW"; + } + + @Override + public byte[] getEncoded() { + return key; + } + } + + private Cipher ecipher; + private Cipher dcipher; + + /** + * Функция шифрования + * + * @param str строка открытого текста + * @return зашифрованная строка в формате Base64 + */ + public String encrypt(String str) { + try { + byte[] utf8 = str.getBytes("UTF8"); + byte[] enc = ecipher.doFinal(utf8); + return Base64.encodeBase64String(enc); + } catch (IllegalBlockSizeException | BadPaddingException | UnsupportedEncodingException ex) { + Logger.getLogger(StringCrypter.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } + + /** + * Функция дешифрования + * + * @param str зашифрованная строка в формате Base64 + * @return расшифрованная строка + */ + public String decrypt(String str) { + try { + byte[] dec = Base64.decodeBase64(str); + byte[] utf8 = dcipher.doFinal(dec); + return new String(utf8, "UTF8"); + } catch (IllegalBlockSizeException | BadPaddingException | IOException ex) { + Logger.getLogger(StringCrypter.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } +} diff --git a/src/test/java/Utilz/DesipherTest.java b/src/test/java/Utilz/DesipherTest.java index 313e8e5..e69de29 100644 --- a/src/test/java/Utilz/DesipherTest.java +++ b/src/test/java/Utilz/DesipherTest.java @@ -1,19 +0,0 @@ -package Utilz; - -import static org.junit.Assert.*; - -public class DesipherTest { - DesipherTest desipherTest; - - @org.junit.Test - public void decodeData() { - assertEquals("e3x1x17",Desipher.encodeData("01/01/2019")); - assertNotEquals("e3x1x17",Desipher.encodeData("01/02/2019")); - } - - @org.junit.Test - public void encodeData() { - assertEquals("01.01.2019",Desipher.decodeData("e3x1x17")); - assertNotEquals("01.02.2019",Desipher.decodeData("e3x1x17")); - } -} \ No newline at end of file From b989898731c378693da4566165894039945c700d Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 14 Jan 2019 00:08:54 +0300 Subject: [PATCH 11/26] 1. licenes file searching in any place in zip. 2. close programm with closing any window --- src/main/java/Controller/Controller.java | 6 +++--- src/main/java/Frames/LicenseWindow.java | 4 ++-- src/main/java/Frames/StartUpWindow.java | 3 ++- src/main/java/Frames/View1.java | 1 - src/main/java/Utilz/BaseConstants.java | 12 +++++++++++- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index a20751a..edc7e22 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -76,6 +76,7 @@ private static boolean checkLisence(boolean b) { } for (FileHeader fh : headers) { if (!fh.isDirectory() && fh.getFileName().equals("liesence.txt")) { + BaseConstants.setLiesencePath(fh.getFileName()); try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh)))) { return checkKey(bf.readLine()); } catch (IOException e) { @@ -88,9 +89,8 @@ private static boolean checkLisence(boolean b) { return false; } else { /*если из файла*/ - try (BufferedReader bf = new BufferedReader(new FileReader(BaseConstants.getInstance().getPathSQL() + "\\liesence.txt"))) - { - return checkKey(bf.readLine()); + try (BufferedReader bf = new BufferedReader(new FileReader(BaseConstants.getLiesencePath()))) + {return checkKey(bf.readLine()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/src/main/java/Frames/LicenseWindow.java b/src/main/java/Frames/LicenseWindow.java index a4d91f0..cf968e1 100644 --- a/src/main/java/Frames/LicenseWindow.java +++ b/src/main/java/Frames/LicenseWindow.java @@ -59,7 +59,7 @@ private void saveKey(String text) { if (zipFile.isEncrypted()) { zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); } - fHeader = zipFile.getFileHeader("liesence.txt"); + fHeader = zipFile.getFileHeader(BaseConstants.getLiesencePath()); zipFile.removeFile(fHeader); } catch (ZipException e) { @@ -80,7 +80,7 @@ private void saveKey(String text) { } } else{ - try (BufferedWriter bfw = new BufferedWriter(new FileWriter(BaseConstants.getInstance().getPathSQL() + "\\liesence.txt"))) + try (BufferedWriter bfw = new BufferedWriter(new FileWriter(BaseConstants.getLiesencePath()))) { bfw.write(text); } catch (FileNotFoundException e) { diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index 7035748..09bade7 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -30,6 +30,7 @@ public StartUpWindow() throws HeadlessException { setSize(new Dimension(400,150)); setLayout(new BorderLayout()); Container c= getContentPane(); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); c.add(textLabel,BorderLayout.NORTH); @@ -44,7 +45,7 @@ private void saveKey(String text) { if (zipFile.isEncrypted()){ zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); } - fHeader =zipFile.getFileHeader("liesence.txt"); + fHeader =zipFile.getFileHeader(BaseConstants.getLiesencePath()); zipFile.removeFile(fHeader); } catch (ZipException e) { diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index f101679..0920504 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -1,7 +1,6 @@ package Frames; import Utilz.BaseConstants; -import Utilz.Desipher; import Utilz.SqlProperties; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 5d820d9..8ea553f 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -14,6 +14,16 @@ public class BaseConstants { private String pathSQL = "C:\\Java\\SQL\\"; private String zipFileSQL = "C:\\Java\\SQL.zip"; private String localExcelReportPath = "C:\\RegularReports\\"; + private static String liesencePath="C:\\Java\\SQL\\liesence.txt"; + + public static String getLiesencePath() { + return liesencePath; + } + + public static void setLiesencePath(String liesencePath) { + BaseConstants.liesencePath = liesencePath; + } + private String zipPsw = "123"; public final static int MAX_COUNT_THREADS=5; @@ -38,7 +48,7 @@ private BaseConstants() { isZip = Boolean.valueOf(startProps.getProperty("isZip").trim()); dbase.put("SZATP",new DBConnection("post190","post190", "jdbc:oracle:thin:@10.37.0.7:1521:SZATP")); - dbase.put("CAT",new DBConnection("okts","okts", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); + dbase.put("CAT",new DBConnection("opsur","opsur", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); dbase.put("HOME",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); dbase.put("HOME1",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); } From 27ebd2930018e4d3ab4e2ee84306669855b2eef3 Mon Sep 17 00:00:00 2001 From: Albert Date: Thu, 17 Jan 2019 00:12:32 +0300 Subject: [PATCH 12/26] 1. Add logging to file 2. Remove exceding rendering for results --- src/main/java/Controller/Controller.java | 38 +++++++---- src/main/java/Frames/LicenseWindow.java | 17 +++-- src/main/java/Frames/ProccessesPanel.java | 2 +- src/main/java/Frames/ProccessesPanelTab.java | 11 +-- src/main/java/Frames/StartUpWindow.java | 9 +-- src/main/java/Frames/View1.java | 23 ++++--- .../AbstratReports/AbstractExcelReport.java | 6 +- .../AbstratReports/AbstractReport.java | 15 +++-- src/main/java/Reports/OktsOilReport.java | 3 +- src/main/java/Reports/RegularMonitor.java | 3 +- src/main/java/Reports/ReportFactory.java | 20 ++++-- src/main/java/Reports/Table.java | 12 +++- src/main/java/Utilz/BaseConstants.java | 3 +- src/main/java/Utilz/ConnectorToOracle.java | 9 +-- src/main/java/Utilz/Printer.java | 67 ++++++++++++++++--- src/main/java/Utilz/SqlExecutor.java | 3 +- src/main/java/Utilz/SqlProperties.java | 44 ++++++------ src/main/java/Utilz/StringUtilz.java | 9 +++ src/main/java/Utilz/Table.java | 4 +- src/test/java/Utilz/SqlPropertiesTest.java | 5 +- 20 files changed, 197 insertions(+), 106 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index edc7e22..cc758e9 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.concurrent.PriorityBlockingQueue; +import static Utilz.Printer.printRowToMonitor; import static java.lang.Thread.sleep; public class Controller { @@ -72,7 +73,8 @@ private static boolean checkLisence(boolean b) { headers = zipFile.getFileHeaders(); } } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } for (FileHeader fh : headers) { if (!fh.isDirectory() && fh.getFileName().equals("liesence.txt")) { @@ -80,9 +82,11 @@ private static boolean checkLisence(boolean b) { try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh)))) { return checkKey(bf.readLine()); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } } } @@ -92,9 +96,11 @@ private static boolean checkLisence(boolean b) { try (BufferedReader bf = new BufferedReader(new FileReader(BaseConstants.getLiesencePath()))) {return checkKey(bf.readLine()); } catch (FileNotFoundException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } } @@ -119,11 +125,13 @@ private static void initWorkingPool(boolean isEncrypted) { readFolderSql(); } } catch (ZipException e) { - e.printStackTrace(); - System.out.println("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; + printRowToMonitor("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); } catch (IOException e) { - e.printStackTrace(); - System.out.println("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; + printRowToMonitor("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); } } @@ -151,7 +159,7 @@ private static void readZipFile() throws ZipException { } List headers = zipFile.getFileHeaders(); for (FileHeader fh : headers) { - System.out.println("Entry: " + fh.getFileName()); + printRowToMonitor("Entry: " + fh.getFileName()); if (!fh.isDirectory() && fh.getFileName().endsWith(".rep")) { SqlProperties prop = new SqlProperties(true); prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh)), fh.getFileName()); @@ -162,7 +170,7 @@ private static void readZipFile() throws ZipException { public static void createSqlExecuter() { if (tasksQueue.size() > 0) { - Printer.printRowToMonitor(String.valueOf(tasksQueue.size())); + printRowToMonitor(String.valueOf(tasksQueue.size())); sqlExecutor = new SqlExecutor(tasksQueue); sqlExecutor.run(); } @@ -199,7 +207,8 @@ private static Calendar getCurrentDate() { conn.close(); break; } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } } @@ -209,10 +218,11 @@ private static Calendar getCurrentDate() { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); try { cal.setTime(sdf.parse(sDate)); - System.out.println("Oracle date " + sDate); + printRowToMonitor("Oracle date " + sDate); return cal; } catch (ParseException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; + ; } } return Calendar.getInstance(); diff --git a/src/main/java/Frames/LicenseWindow.java b/src/main/java/Frames/LicenseWindow.java index cf968e1..5ce5c19 100644 --- a/src/main/java/Frames/LicenseWindow.java +++ b/src/main/java/Frames/LicenseWindow.java @@ -2,6 +2,7 @@ import Controller.Controller; import Utilz.BaseConstants; +import Utilz.Printer; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; @@ -13,6 +14,8 @@ import java.awt.event.ActionListener; import java.io.*; +import static Utilz.Printer.printRowToMonitor; + public class LicenseWindow extends JFrame { private JLabel textLabel = new JLabel("The period of use of the software has expired. Enter the new key.
Contact e-mail: albtutanota@tutanota.com"); private JLabel logginLabel = new JLabel(" Please, enter here new key: "); @@ -38,7 +41,7 @@ public LicenseWindow() throws HeadlessException { logginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - System.out.println("Button clicked!!!"); + printRowToMonitor("Button clicked!!!"); if (Controller.checkKey(logginText.getText())){ saveKey(logginText.getText()); Controller.init(BaseConstants.isIsZip()); @@ -63,7 +66,7 @@ private void saveKey(String text) { zipFile.removeFile(fHeader); } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { ZipParameters zp = new ZipParameters(); @@ -72,11 +75,11 @@ private void saveKey(String text) { zp.setPassword(BaseConstants.getInstance().getZipPsw()); zipFile.addStream(is, zp); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } else{ @@ -84,9 +87,9 @@ private void saveKey(String text) { { bfw.write(text); } catch (FileNotFoundException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } diff --git a/src/main/java/Frames/ProccessesPanel.java b/src/main/java/Frames/ProccessesPanel.java index 5da0a94..d1ec516 100644 --- a/src/main/java/Frames/ProccessesPanel.java +++ b/src/main/java/Frames/ProccessesPanel.java @@ -190,7 +190,7 @@ private String ms_totime(long ms) { formatted_time.append(":"); } formatted_time.deleteCharAt(formatted_time.length()-1); - //System.out.println(formatted_time); + //printRowToMonitor(formatted_time); return formatted_time.toString(); } diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index e8a3da5..33332e0 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -57,8 +57,11 @@ public void valueChanged(ListSelectionEvent e) { if (row==-1) return; String desc = (String)proccessesTable.getModel().getValueAt(row,0); List res = Printer.getResults(desc); - myFrame.getTextArea().setText("Last run time " + res.get(1).toString()+ "\r\n"); - myFrame.getTextArea().append(res.get(0).toString()); + if (!res.get(0).toString().equals(myFrame.getTextArea())){ + myFrame.getTextArea().setText(res.get(0).toString()); + } + //myFrame.getTextArea().setText("Last run time " + res.get(1).toString()+ "\r\n"); + //myFrame.getTextArea().append(res.get(0).toString()); } }); proccessesTable.setSelectionModel(ssm); @@ -107,7 +110,7 @@ private String ms_totime(long ms) { formatted_time.append(":"); } formatted_time.deleteCharAt(formatted_time.length()-1); - // System.out.println(formatted_time); + // printRowToMonitor(formatted_time); return formatted_time.toString(); } @@ -147,7 +150,7 @@ public void run() { sleep(1000); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } } diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index 09bade7..32bc793 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -2,6 +2,7 @@ import Controller.Controller; import Utilz.BaseConstants; +import Utilz.Printer; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; @@ -49,7 +50,7 @@ private void saveKey(String text) { zipFile.removeFile(fHeader); } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { ZipParameters zp = new ZipParameters(); @@ -58,11 +59,11 @@ private void saveKey(String text) { zp.setPassword(BaseConstants.getInstance().getZipPsw()); zipFile.addStream(is, zp); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index 0920504..0b84742 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -1,6 +1,7 @@ package Frames; import Utilz.BaseConstants; +import Utilz.Printer; import Utilz.SqlProperties; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; @@ -21,6 +22,8 @@ import java.util.HashMap; import java.util.List; +import static Utilz.Printer.printRowToMonitor; + public class View1 { private static HashMap statusmap = new HashMap<>(); @@ -55,7 +58,7 @@ private void test1 (){ try { readZipFile(); } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } printMap(); initWorkingPool(false); @@ -75,7 +78,7 @@ public void run() { try { Thread.sleep (1000); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } //frame.getProccessesPanel().updateProccessList(); } @@ -88,11 +91,11 @@ private static void initWorkingPool(boolean isEncrypted){ readFolderSql(); } } catch (ZipException e) { - e.printStackTrace(); - System.out.println("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); + e.printStackTrace(); Printer.saveLogFile(e); ; + printRowToMonitor("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); } catch (IOException e) { - e.printStackTrace(); - System.out.println("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); + e.printStackTrace(); Printer.saveLogFile(e); ; + printRowToMonitor("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); } } @@ -120,7 +123,7 @@ private static void readZipFile () throws ZipException { } List headers =zipFile.getFileHeaders(); for (FileHeader fh:headers) { - System.out.println("Entry: " + fh.getFileName()); + printRowToMonitor("Entry: " + fh.getFileName()); if (!fh.isDirectory() && fh.getFileName().endsWith(".rep")) { SqlProperties prop = new SqlProperties(true); prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh)),fh.getFileName()); @@ -131,9 +134,9 @@ private static void readZipFile () throws ZipException { private static void printMap(){ for (HashMap.Entry pair: statusmap.entrySet()) { - System.out.println( "-------------------->>>>"); - System.out.println( pair.getKey().getProperty("description")); - System.out.println( pair.getKey().getProperty("sql")); + printRowToMonitor( "-------------------->>>>"); + printRowToMonitor( pair.getKey().getProperty("description")); + printRowToMonitor( pair.getKey().getProperty("sql")); } } } diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index 69fccd8..a12326b 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -63,7 +63,8 @@ protected boolean createFile(HSSFWorkbook workbook){ Printer.printRowToMonitor("File created " + s); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; Printer.printRowToMonitor("Error when writing " + s+ " file!"); } @@ -141,7 +142,8 @@ protected void insertData (ResultSet result,HSSFSheet worksheet, int rowNum, int rownum++; } } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } } diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 795af72..f81b480 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import java.sql.Statement; +import static Utilz.Printer.printRowToMonitor; import static java.lang.Thread.sleep; public abstract class AbstractReport implements Report, Runnable { @@ -36,7 +37,7 @@ public void closeConnection(ResultSet result){ stm.close(); ConnectorToOracle.getInstance().closeConnection(getProperty("server")); } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } @@ -48,18 +49,18 @@ protected ResultSet executeSqlClause (String sqlClause){ stm.execute(sqlClause); resultSet = stm.getResultSet(); } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (NullPointerException e){ - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } finally { if (resultSet==null ){ - System.out.println("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime/(60*1000)+" min!"); + printRowToMonitor("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime/(60*1000)+" min!"); try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } } @@ -80,7 +81,7 @@ public void run() { try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } @@ -88,7 +89,7 @@ public void run() { try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } sqlExecutor.addQueue(this); diff --git a/src/main/java/Reports/OktsOilReport.java b/src/main/java/Reports/OktsOilReport.java index f019b31..8bb92f7 100644 --- a/src/main/java/Reports/OktsOilReport.java +++ b/src/main/java/Reports/OktsOilReport.java @@ -1,6 +1,7 @@ package Reports; import Reports.AbstratReports.AbstractExcelReport; +import Utilz.Printer; import Utilz.SqlExecutor; import Utilz.SqlProperties; import org.apache.poi.hssf.usermodel.HSSFCellStyle; @@ -125,7 +126,7 @@ private int createRows(ResultSet result, HSSFSheet worksheet, int rowNum, String } result.beforeFirst(); } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } return rownum; diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index f6693c2..8a88d7a 100644 --- a/src/main/java/Reports/RegularMonitor.java +++ b/src/main/java/Reports/RegularMonitor.java @@ -56,7 +56,8 @@ public boolean createReport() { Printer.printLineToMonitor(resultSB.toString()); } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; flag=false; } closeConnection(result); diff --git a/src/main/java/Reports/ReportFactory.java b/src/main/java/Reports/ReportFactory.java index 0348430..613a862 100644 --- a/src/main/java/Reports/ReportFactory.java +++ b/src/main/java/Reports/ReportFactory.java @@ -2,12 +2,15 @@ import Reports.AbstratReports.Report; import Utilz.BaseConstants; +import Utilz.Printer; import Utilz.SqlExecutor; import Utilz.SqlProperties; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import static Utilz.Printer.printRowToMonitor; + public class ReportFactory { public static Report create (SqlProperties prop, SqlExecutor sqlExecutor) { Report report=null; @@ -17,17 +20,22 @@ public static Report create (SqlProperties prop, SqlExecutor sqlExecutor) { report = (Report)c.newInstance(prop,sqlExecutor); report.addProperty("path", prop.getProperty("excel")); } catch (InstantiationException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); } catch (IllegalAccessException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } catch (ClassNotFoundException e) { - System.out.println("Class not found!!! (report factory)"); - e.printStackTrace(); + printRowToMonitor("Class not found!!! (report factory)"); + e.printStackTrace(); Printer.saveLogFile(e); + ; } catch (NoSuchMethodException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } catch (InvocationTargetException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } + } else { report = new RegularMonitor(prop, sqlExecutor); diff --git a/src/main/java/Reports/Table.java b/src/main/java/Reports/Table.java index 0665035..8f0c19b 100644 --- a/src/main/java/Reports/Table.java +++ b/src/main/java/Reports/Table.java @@ -1,8 +1,13 @@ package Reports; +import Utilz.Printer; + import java.sql.ResultSet; import java.sql.SQLException; +import static Utilz.Printer.printLineToMonitor; +import static Utilz.Printer.printRowToMonitor; + public class Table { private String [][] matrix ; @@ -28,7 +33,8 @@ public Table(ResultSet resultSet) { } resultSet.beforeFirst(); }catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } } public void transposeTable (){ @@ -46,9 +52,9 @@ public void printMatrix (){ if (matrix==null) return; for (int i=0;i results=new ConcurrentHashMap(); + private final static Object lock = new Object(); + + public static void saveLogFile(Exception e){ + synchronized (lock){ + Path path = Paths.get (getLogFile()); + if (!Files.exists(path)&!Files.isDirectory(path)) { + try { + Files.createFile(path); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + File file = new File (getLogFile()); + try (PrintWriter pw = new PrintWriter(new FileWriter(file,true), true);) { + e.printStackTrace(pw); + } catch (IOException e1) { + e1.printStackTrace(); + } + lock.notifyAll(); + } + + } + + private static String getLogFile() { + return BaseConstants.logFile + "\\"+StringUtilz.toString(Calendar.getInstance()).replace("/","_") + "_logReporer.txt"; + } + + private static void saveLogFile(String text){ + synchronized (lock) { + System.out.println(getLogFile()); + Path path = Paths.get(getLogFile()); + if (!Files.exists(path)&!Files.isDirectory(path)) { + try { + Files.createFile(path); + } catch (IOException e) { + e.printStackTrace(); Printer.saveLogFile(e); + } + } + + try (FileWriter fw = new FileWriter(path.toString(), true)) { + + // fw.write("--------------- " + StringUtilz.toString(Calendar.getInstance()) + "\n\r--------------- "); + fw.write(text + "\r\n"); + } catch (IOException e) { + e.printStackTrace(); Printer.saveLogFile(e); + + } + lock.notifyAll(); + } + } public synchronized static void printRowToMonitor(String text){ - System.out.println(text); + System.out.println(text); + saveLogFile(text); } public synchronized static void printLineToMonitor(String text){ - System.out.print(text); + System.out.println(text); + saveLogFile(text); } public synchronized static void saveResult(String description, StringBuilder result){ @@ -42,7 +91,7 @@ private static boolean saveMaptoFile(){ try { Files.createFile(path); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; return false; } } @@ -74,7 +123,7 @@ private static boolean saveMaptoFile(){ fout.write (secondString); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; }*/ try { @@ -82,7 +131,7 @@ private static boolean saveMaptoFile(){ (sb.toString()).getBytes("windows-1251"), StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; return false; } return true; diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index 3f19097..09ab571 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -55,7 +55,8 @@ else if(period > 0 && !sqlProp.isRunning()){ try { lock.wait(period); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); + ; } } diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 4abc6b1..67e9eeb 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -2,7 +2,6 @@ import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; -import net.lingala.zip4j.io.ZipOutputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters;; import java.io.*; @@ -10,9 +9,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.text.SimpleDateFormat; import java.util.*; +import static Utilz.Printer.printRowToMonitor; public class SqlProperties implements Comparable{ @@ -83,9 +82,9 @@ public HashMap loadFromFile(File file){ try (InputStreamReader fileReader =new InputStreamReader(new FileInputStream(file),"utf-8")){ return loadFromFile(fileReader,file.getPath()); } catch (FileNotFoundException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } return null; } @@ -108,12 +107,12 @@ private Calendar addLong (Calendar calendar, Long milliseconds){ /*Print map collection*/ public void printMap(){ if (map == null || map.size()==0) { - System.out.println("Empty PropMap"); + printRowToMonitor("Empty PropMap"); return; } for (Map.Entry pair: map.entrySet()) { - System.out.println("Key: " + pair.getKey() + "; Value " + pair.getValue() ); + printRowToMonitor("Key: " + pair.getKey() + "; Value " + pair.getValue() ); } } @@ -127,7 +126,7 @@ public void addProperty (String key, String value){ private void printCalendar(Calendar cdate) { String sdate=cdate.get(Calendar.DAY_OF_MONTH)+"."+cdate.get(Calendar.MONTH)+"."+cdate.get(Calendar.YEAR); - System.out.println(sdate); + printRowToMonitor(sdate); } public long calcSleepingTime (){ @@ -166,12 +165,12 @@ public boolean updatePeriodinFile(){ } //startTime=date2; - startTime=toCalendar(toString(date2)+ " 23:59:59"); + startTime=toCalendar(StringUtilz.toString(date2)+ " 23:59:59"); if (isZip) { - return updatePropertiesZipFile("date2", toString(date2)) | updatePropertiesZipFile("date1", toString(date1)); + return updatePropertiesZipFile("date2", StringUtilz.toString(date2)) | updatePropertiesZipFile("date1", StringUtilz.toString(date1)); } else{ - return updatePropertiesFile("date2", toString(date2)) | updatePropertiesFile("date1", toString(date1)); + return updatePropertiesFile("date2", StringUtilz.toString(date2)) | updatePropertiesFile("date1", StringUtilz.toString(date1)); } } @@ -190,16 +189,11 @@ public Calendar toCalendar(String sdate){ c.set(Calendar.MINUTE,Integer.valueOf(dateParts[4])); c.set(Calendar.SECOND,Integer.valueOf(dateParts[5])); } - System.out.println(sdate); - System.out.println(c.getTime()); + printRowToMonitor(sdate); + //printRowToMonitor(c.getTime()); return c; } - public static String toString(Calendar cdate){ - if (cdate==null) return null; - SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); - return format.format(cdate.getTime()); - } /* * Метод выравнивает длину строки знаками sign до длины строки quantitySigns * */ @@ -214,7 +208,7 @@ protected String alignString (String object, int quantitySigns, String sign){ private boolean updatePropertiesFile(String nameProperty, String value){ //найти в файле свойство и переписать его значение и перезагрузить - System.out.println("FileName sourceFile " + sourceFile); + printRowToMonitor("FileName sourceFile " + sourceFile); Path path = Paths.get(sourceFile); try { String contentOfFile = new String(Files.readAllBytes(path)); @@ -222,7 +216,7 @@ private boolean updatePropertiesFile(String nameProperty, String value){ Files.write(path,contentOfFile.getBytes()); map=loadFromFile(path.toFile()); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } return true; } @@ -239,7 +233,7 @@ private synchronized boolean updatePropertiesZipFile(String nameProperty, Strin } fHeader =zipFile.getFileHeader(sourceFile); } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } StringBuilder stringB=null; try (InputStreamReader isr =new InputStreamReader( @@ -250,9 +244,9 @@ private synchronized boolean updatePropertiesZipFile(String nameProperty, Strin stringB = getFileContextFromStream(isr); zipFile.removeFile(fHeader); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } /*replace value in StringBuilder*/ int start = stringB.indexOf(map.get(nameProperty)); @@ -271,9 +265,9 @@ private synchronized boolean updatePropertiesZipFile(String nameProperty, Strin zipFile.addStream(is, zp); //map.put(nameProperty,value); } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } return true; } @@ -290,7 +284,7 @@ private StringBuilder getFileContextFromStream(InputStreamReader isr) { //stringB.append(" "); } } catch (IOException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } return stringB; } diff --git a/src/main/java/Utilz/StringUtilz.java b/src/main/java/Utilz/StringUtilz.java index d30604e..cf60b6a 100644 --- a/src/main/java/Utilz/StringUtilz.java +++ b/src/main/java/Utilz/StringUtilz.java @@ -1,5 +1,8 @@ package Utilz; +import java.text.SimpleDateFormat; +import java.util.Calendar; + public class StringUtilz { /* * Метод выравнивает длину строки знаками sign до длины строки quantitySigns @@ -20,4 +23,10 @@ public static String alignStringAfter (String object, int quantitySigns, String } return result.toString(); } + + public static String toString(Calendar cdate){ + if (cdate==null) return null; + SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); + return format.format(cdate.getTime()); + } } diff --git a/src/main/java/Utilz/Table.java b/src/main/java/Utilz/Table.java index d86a90d..9820f28 100644 --- a/src/main/java/Utilz/Table.java +++ b/src/main/java/Utilz/Table.java @@ -28,7 +28,7 @@ public Table(ResultSet resultSet) { } resultSet.beforeFirst(); }catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } } public void transposeTable (){ @@ -46,7 +46,7 @@ public void printMatrix (){ if (matrix==null) return; for (int i=0;i Date: Thu, 17 Jan 2019 23:20:34 +0300 Subject: [PATCH 13/26] 1. Add UTF-8 enocding for all InputStreamReaders --- src/main/java/Controller/Controller.java | 8 ++++---- src/main/java/Frames/View1.java | 3 ++- src/main/java/Utilz/BaseConstants.java | 4 +++- src/test/java/Utilz/SqlPropertiesTest.java | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index cc758e9..9e92627 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -10,6 +10,7 @@ import javax.swing.*; import java.awt.*; import java.io.*; +import java.nio.charset.Charset; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.sql.Connection; @@ -79,7 +80,7 @@ private static boolean checkLisence(boolean b) { for (FileHeader fh : headers) { if (!fh.isDirectory() && fh.getFileName().equals("liesence.txt")) { BaseConstants.setLiesencePath(fh.getFileName()); - try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh)))) { + try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")))) { return checkKey(bf.readLine()); } catch (IOException e) { e.printStackTrace(); Printer.saveLogFile(e); ; @@ -92,8 +93,7 @@ private static boolean checkLisence(boolean b) { } return false; } else { - /*если из файла*/ - try (BufferedReader bf = new BufferedReader(new FileReader(BaseConstants.getLiesencePath()))) + try (BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(BaseConstants.getLiesencePath()),Charset.forName("UTF-8")))) {return checkKey(bf.readLine()); } catch (FileNotFoundException e) { e.printStackTrace(); Printer.saveLogFile(e); ; @@ -162,7 +162,7 @@ private static void readZipFile() throws ZipException { printRowToMonitor("Entry: " + fh.getFileName()); if (!fh.isDirectory() && fh.getFileName().endsWith(".rep")) { SqlProperties prop = new SqlProperties(true); - prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh)), fh.getFileName()); + prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh),Charset.forName("UTF-8")), fh.getFileName()); tasksQueue.put(prop); } } diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index 0b84742..cf8ca91 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -13,6 +13,7 @@ import javax.swing.event.*; import java.awt.*; import java.io.*; +import java.nio.charset.Charset; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.sql.SQLOutput; @@ -126,7 +127,7 @@ private static void readZipFile () throws ZipException { printRowToMonitor("Entry: " + fh.getFileName()); if (!fh.isDirectory() && fh.getFileName().endsWith(".rep")) { SqlProperties prop = new SqlProperties(true); - prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh)),fh.getFileName()); + prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")),fh.getFileName()); statusmap.put(prop,false); } } diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 04999f8..0e68195 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -3,6 +3,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -39,7 +41,7 @@ public static Map getDbase() { private BaseConstants() { Properties startProps = new Properties(); try { - startProps.load(new FileInputStream(new File(startFile))); + startProps.load(new InputStreamReader(new FileInputStream(new File(startFile)), Charset.forName("UTF-8"))); } catch (IOException e) { e.printStackTrace(); Printer.saveLogFile(e); ; } diff --git a/src/test/java/Utilz/SqlPropertiesTest.java b/src/test/java/Utilz/SqlPropertiesTest.java index a1c30f1..4d8e163 100644 --- a/src/test/java/Utilz/SqlPropertiesTest.java +++ b/src/test/java/Utilz/SqlPropertiesTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import java.io.*; +import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; @@ -47,7 +48,7 @@ public void loadFromFile(){ String filePath = "TestFilePath"; HashMap result =null; - InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(sqlProp.getBytes())); + InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(sqlProp.getBytes()), Charset.forName("UTF-8")); result = sqlProperties.loadFromFile(isr, filePath); System.out.println("startTime = " +sqlProperties.getStartTime().getTime()); From 40f3acdadeac470b376b27ded193fd6b78cb566b Mon Sep 17 00:00:00 2001 From: Albert Date: Thu, 17 Jan 2019 23:27:58 +0300 Subject: [PATCH 14/26] 1. Add CAT1 (opsur-opsur) --- src/main/java/Utilz/BaseConstants.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 0e68195..ee5f61f 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -51,7 +51,8 @@ private BaseConstants() { isZip = Boolean.valueOf(startProps.getProperty("isZip").trim()); dbase.put("SZATP",new DBConnection("post190","post190", "jdbc:oracle:thin:@10.37.0.7:1521:SZATP")); - dbase.put("CAT",new DBConnection("opsur","opsur", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); + dbase.put("CAT",new DBConnection("okts","okts", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); + dbase.put("CAT1",new DBConnection("opsur","opsur", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); dbase.put("HOME",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); dbase.put("HOME1",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); } From 8842276e1de66b4f6126dc78fd8a4cf8bae586b9 Mon Sep 17 00:00:00 2001 From: Albert Date: Fri, 18 Jan 2019 23:36:58 +0300 Subject: [PATCH 15/26] 1. Load propperty map from monitor.ini - the path to zipFile 2. Debaged methodcheckLisence for liesence in zip file --- src/main/java/Controller/Controller.java | 2 +- src/main/java/Utilz/BaseConstants.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 9e92627..2f28782 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -78,7 +78,7 @@ private static boolean checkLisence(boolean b) { ; } for (FileHeader fh : headers) { - if (!fh.isDirectory() && fh.getFileName().equals("liesence.txt")) { + if (!fh.isDirectory() && fh.getFileName().endsWith("liesence.txt")) { BaseConstants.setLiesencePath(fh.getFileName()); try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")))) { return checkKey(bf.readLine()); diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index ee5f61f..cd8755c 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -49,6 +49,7 @@ private BaseConstants() { path = startProps.getProperty("path"); pathSQL = startProps.getProperty("pathSQL"); isZip = Boolean.valueOf(startProps.getProperty("isZip").trim()); + zipFileSQL=startProps.getProperty("map")==null?zipFileSQL:startProps.getProperty("map"); dbase.put("SZATP",new DBConnection("post190","post190", "jdbc:oracle:thin:@10.37.0.7:1521:SZATP")); dbase.put("CAT",new DBConnection("okts","okts", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); From f3466917d962e510e2ccf360edcb6a7a9a118a6b Mon Sep 17 00:00:00 2001 From: Albert Date: Thu, 24 Jan 2019 00:06:32 +0300 Subject: [PATCH 16/26] 1. Load propperty map from monitor.ini - the path to zipFile 2. Debaged methodcheckLisence for liesence in zip file --- src/main/java/Controller/Controller.java | 8 +++++++- src/main/java/Utilz/Printer.java | 21 +++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 2f28782..c0ba6af 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -44,7 +44,13 @@ static public void main(String[] args) { startFrame.dispose(); new LicenseWindow(); } else { - init(BaseConstants.getInstance().isIsZip()); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + init(BaseConstants.getInstance().isIsZip()); + } + }); + } } diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index d432335..642fd9a 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -7,6 +7,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; @@ -51,7 +53,7 @@ private static void saveLogFile(String text){ try { Files.createFile(path); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); + e.printStackTrace(); } } @@ -60,7 +62,7 @@ private static void saveLogFile(String text){ // fw.write("--------------- " + StringUtilz.toString(Calendar.getInstance()) + "\n\r--------------- "); fw.write(text + "\r\n"); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); + e.printStackTrace(); } lock.notifyAll(); @@ -91,7 +93,7 @@ private static boolean saveMaptoFile(){ try { Files.createFile(path); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + e.printStackTrace(); ; return false; } } @@ -104,6 +106,11 @@ private static boolean saveMaptoFile(){ header.append("--------------------------------"); header.append(pair.getKey()); header.append(' '); + System.out.println("test befor convert date tostring"); + System.out.println(pair.getValue().getDateTime()); + /* DateFormat df=new SimpleDateFormat("dd.MM.yyyy"); + String dateTime = df.format(pair.getValue().getDateTime()); + System.out.println(dateTime);*/ header.append(pair.getValue().getDateTime()); header.append("-----------------------------------\r\n"); @@ -123,7 +130,7 @@ private static boolean saveMaptoFile(){ fout.write (secondString); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + e.printStackTrace(); ; }*/ try { @@ -131,7 +138,7 @@ private static boolean saveMaptoFile(){ (sb.toString()).getBytes("windows-1251"), StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + e.printStackTrace(); ; return false; } return true; @@ -157,6 +164,8 @@ private static class ResultTable { public ResultTable(StringBuilder result, Calendar c) { this.result=result; dateTime=toStringBulder(c); + + } private StringBuilder toStringBulder(Calendar c) { @@ -170,7 +179,7 @@ private StringBuilder toStringBulder(Calendar c) { result.append(' '); result.append(align(c.get(Calendar.DAY_OF_MONTH))); result.append('.'); - result.append(align(c.get(Calendar.MONTH))); + result.append(align(c.get(Calendar.MONTH)+1)); result.append('.'); result.append(align(c.get(Calendar.YEAR))); return result; From 5e457fff881ccc1535fc6cbc158bc1ae3e4f129b Mon Sep 17 00:00:00 2001 From: Albert Date: Fri, 25 Jan 2019 23:13:13 +0300 Subject: [PATCH 17/26] 1. Load propperty map from monitor.ini - the path to zipFile 2. Debaged methodcheckLisence for liesence in zip file --- src/main/java/Controller/Controller.java | 8 +++----- src/main/java/Utilz/Printer.java | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index c0ba6af..7c3209e 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -44,6 +44,7 @@ static public void main(String[] args) { startFrame.dispose(); new LicenseWindow(); } else { + startFrame.dispose(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -63,7 +64,6 @@ public static void init(boolean isZip) { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); frame.pack(); - startFrame.dispose(); frame.setVisible(true); } @@ -102,11 +102,9 @@ private static boolean checkLisence(boolean b) { try (BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(BaseConstants.getLiesencePath()),Charset.forName("UTF-8")))) {return checkKey(bf.readLine()); } catch (FileNotFoundException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + e.printStackTrace(); Printer.saveLogFile(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + e.printStackTrace(); Printer.saveLogFile(e); } } diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index 642fd9a..55e1ca9 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -84,7 +84,7 @@ public synchronized static void saveResult(String description, StringBuilder res saveMaptoFile(); } - private static boolean saveMaptoFile(){ + private synchronized static boolean saveMaptoFile(){ Calendar c = new GregorianCalendar(); String sCurrentDate = c.get(Calendar.DATE) + "." + (c.get(Calendar.MONTH) + 1) + "." + c.get(Calendar.YEAR); From 8c2f8383e40f0935db9147caf6ac55a8e35df4e6 Mon Sep 17 00:00:00 2001 From: Albert Date: Sun, 3 Feb 2019 12:34:38 +0300 Subject: [PATCH 18/26] 1. Debugged lastExecutionTime for xls report 2. Added timeout for startup window 3. Changed default size window 4. reduced length of row for task reult pane --- src/main/java/Controller/Controller.java | 101 ++++++++++++---- src/main/java/Frames/ProccessesPanelTab.java | 17 ++- src/main/java/Frames/ResultView.java | 6 +- .../AbstratReports/AbstractReport.java | 3 +- src/main/java/Reports/NSHS.java | 90 +++++++++++++++ src/main/java/Utilz/BaseConstants.java | 15 ++- src/main/java/Utilz/SqlProperties.java | 108 ++++++++++-------- src/main/java/Utilz/StringCrypter.java | 2 +- 8 files changed, 264 insertions(+), 78 deletions(-) create mode 100644 src/main/java/Reports/NSHS.java diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 7c3209e..84643ab 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -21,7 +21,7 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.List; -import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.*; import static Utilz.Printer.printRowToMonitor; import static java.lang.Thread.sleep; @@ -60,7 +60,7 @@ public static void init(boolean isZip) { // Here starts sqlExecuter with tasksQueue new Thread(() -> createSqlExecuter()).start(); frame = new MyFrame("Hello world of SWING!", null); - frame.setPreferredSize(new Dimension(1500, 500)); + frame.setPreferredSize(new Dimension(1000, 500)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); frame.pack(); @@ -186,37 +186,92 @@ public static boolean checkKey(String text) { Calendar c = stringToCalendar(decodeData); if (c == null) return false; c.add(Calendar.MONTH,-1); - if (c.getTimeInMillis() - getCurrentDate().getTimeInMillis() >= 0) { + long currentDate =0; + + try { + currentDate = getCurrentDate().getTimeInMillis(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (TimeoutException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + if (c.getTimeInMillis() - currentDate >= 0) { return true; } else { return false; } } - private static Calendar getCurrentDate() { + private static Calendar getCurrentDate() throws InterruptedException, TimeoutException, ExecutionException { String sqlClause = "select to_char (current_date, 'dd.MM.yyyy') from dual"; - String sDate = null; - for (Map.Entry pair : - BaseConstants.getDbase().entrySet()) { - try { - Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); - if (conn==null) continue; - Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - stm.execute(sqlClause); - ResultSet resultSet = stm.getResultSet(); - resultSet.next(); - sDate = resultSet.getString(1); - resultSet.close(); - stm.close(); - conn.close(); - break; - } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + FutureTask task = new FutureTask(new Callable() { + @Override + public Object call() throws Exception { + String sDate=null; + for (Map.Entry pair : + BaseConstants.getDbase().entrySet()) { + try { + Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); + if (conn==null) continue; + Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + stm.execute(sqlClause); + ResultSet resultSet = stm.getResultSet(); + resultSet.next(); + sDate = resultSet.getString(1); + resultSet.close(); + stm.close(); + conn.close(); + break; + } catch (SQLException e) { + e.printStackTrace(); Printer.saveLogFile(e); + } + + } + return sDate; } + }); + Thread th = new Thread (task); + th.start(); - } + +/* Thread thr = new Thread() { + String sDate = null; + public String getsDate() { + return sDate; + } + public void setsDate(String sDate) { + this.sDate = sDate; + } + @Override + public void run() { + for (Map.Entry pair : + BaseConstants.getDbase().entrySet()) { + try { + Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); + if (conn==null) continue; + Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + stm.execute(sqlClause); + ResultSet resultSet = stm.getResultSet(); + resultSet.next(); + sDate = resultSet.getString(1); + resultSet.close(); + stm.close(); + conn.close(); + break; + } catch (SQLException e) { + e.printStackTrace(); Printer.saveLogFile(e); + } + + } + } + }; + thr.start(); + thr.join();*/ + String sDate= (String) task.get(1000*60/**10*/, TimeUnit.MILLISECONDS); if (sDate != null) { Calendar cal = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index 33332e0..64f835b 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -57,11 +57,20 @@ public void valueChanged(ListSelectionEvent e) { if (row==-1) return; String desc = (String)proccessesTable.getModel().getValueAt(row,0); List res = Printer.getResults(desc); + /* if (!res.get(0).toString().equals(myFrame.getTextArea())){ myFrame.getTextArea().setText(res.get(0).toString()); + }*/ + if (!res.get(0).toString().equals(myFrame.getTextArea().getText().split("\r\n"))){ + String resText=""; + String[]arr=res.get(0).toString().split("\r\n"); + for (int i=0;i300?300:arr[i].length(); + resText+=arr[i].substring(0,length)+ "\r\n"; + } + myFrame.getTextArea().setText(resText); } - //myFrame.getTextArea().setText("Last run time " + res.get(1).toString()+ "\r\n"); - //myFrame.getTextArea().append(res.get(0).toString()); + } }); proccessesTable.setSelectionModel(ssm); @@ -69,8 +78,8 @@ public void valueChanged(ListSelectionEvent e) { proccessesTable.getColumnModel().getColumn(i).setCellRenderer(new Renderer()); } setViewportView(proccessesTable); - setBorder(BorderFactory.createTitledBorder("This is ScrollPanel")); - setPreferredSize(new Dimension(600,100)); + setBorder(BorderFactory.createTitledBorder("TaskPanel")); + setPreferredSize(new Dimension(500,100)); updateJComponentsFromQueue(); (new Thread(this)).start(); } diff --git a/src/main/java/Frames/ResultView.java b/src/main/java/Frames/ResultView.java index 897a660..4b70450 100644 --- a/src/main/java/Frames/ResultView.java +++ b/src/main/java/Frames/ResultView.java @@ -9,13 +9,17 @@ public class ResultView extends JScrollPane { public ResultView() { //textArea.setEnabled(false); setViewportView(textArea); - setBorder(BorderFactory.createTitledBorder("This is ScrollPanel")); + setBorder(BorderFactory.createTitledBorder("Task result panel")); setPreferredSize(new Dimension(300,100)); + textArea.setColumns(400); } public void setText (String text){ textArea.setText(text); } + public String getText(){ + return textArea.getText(); + } public void append (String text){ textArea.append(text); } diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index f81b480..c489194 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -89,9 +89,10 @@ public void run() { try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + e.printStackTrace(); Printer.saveLogFile(e); } } + System.out.println("run finished for " + getProps().getProperty("description")); sqlExecutor.addQueue(this); } diff --git a/src/main/java/Reports/NSHS.java b/src/main/java/Reports/NSHS.java new file mode 100644 index 0000000..3f038f2 --- /dev/null +++ b/src/main/java/Reports/NSHS.java @@ -0,0 +1,90 @@ +package Reports; + +import Reports.AbstratReports.AbstractExcelReport; +import Utilz.SqlExecutor; +import Utilz.SqlProperties; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.List; + +public class NSHS extends AbstractExcelReport { + private String currentDate; + private String startDate; + private String finishDate; + + public NSHS(SqlProperties sqlprop, SqlExecutor sqlExecutor) { + super(sqlprop,sqlExecutor); + Calendar c =new GregorianCalendar(); + currentDate=c.get(Calendar.DAY_OF_MONTH)+"_"+c.get(Calendar.MONTH)+"_"+c.get(Calendar.YEAR); + } + + @Override + public boolean createReport(ResultSet result) { + List headerXLS = new ArrayList(); + headerXLS.add("№ п/п"); + headerXLS.add("Код ТО"); + headerXLS.add("Дата"); + headerXLS.add("Номер"); + headerXLS.add("Время регистрации ДТ"); + headerXLS.add("Дата выпуска товаров"); + headerXLS.add("Время выпуска товаров"); + headerXLS.add("Время на выпуск товаров"); + headerXLS.add("Обоснование превышения срока, установленного пп. 1, 3 ст. 119 ТК ЕАЭС"); + + HSSFWorkbook workbook =new HSSFWorkbook(); + HSSFSheet worksheet =workbook.createSheet("0007-р"); + for (int i=0;i<31;i++){ + worksheet.setColumnWidth(i,10*256); + } + + try { + result.last(); + System.out.println(result.getRow()); + result.beforeFirst(); + } catch (SQLException e) { + e.printStackTrace(); + } + + + Row preRow=worksheet.createRow(0); + Cell cell_header = preRow.createCell(0,CellType.STRING); + worksheet.addMergedRegion(new CellRangeAddress( + 0, + 0, + 0, + 3 + )); + cell_header.setCellValue("Отчетный период: с " + startDate + " по " + finishDate+"."); + + Row row=worksheet.createRow(1); + /*Creating of header*/ + // Создаем стиль ячейки для заголовка таблицы + HSSFCellStyle style = workbook.createCellStyle(); + + style.setWrapText(true); + style.setAlignment (HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + HSSFFont fontHeader = workbook.createFont(); + fontHeader.setFontName("Times New Roman"); + fontHeader.setFontHeightInPoints((short)12); + fontHeader.setBold (true); + style.setFont(fontHeader); + style.setRotation((short) 90); + createHeader(headerXLS,worksheet,style,1); + insertData(result,worksheet,3); + createFile(workbook); + return true; + } + + +} diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index cd8755c..340aaa8 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -5,9 +5,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; +import java.util.*; public class BaseConstants { /*Initinalizating parameters*/ @@ -56,6 +54,17 @@ private BaseConstants() { dbase.put("CAT1",new DBConnection("opsur","opsur", "jdbc:oracle:thin:@10.37.12.20:1521/WH01")); dbase.put("HOME",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); dbase.put("HOME1",new DBConnection("test","test", "jdbc:oracle:thin:@localhost:1521:orcle")); + List keys = new ArrayList(startProps.keySet()); + for (String key:keys ) { + if (key.startsWith("BD_")){ + + String [] arr = String.valueOf(startProps.get(key)).split("_"); + dbase.put (key.substring(3), + new DBConnection(arr[0],arr[1],arr[2]) + ); + + } + } } public static synchronized BaseConstants getInstance(){ diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 67e9eeb..854f1d0 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -21,6 +21,7 @@ public class SqlProperties implements Comparable{ private boolean isZip; private boolean isRunning; private int localPeriod=0; + private static final Object lock = new Object(); //private Calendar timeToStart=null; /* @@ -167,10 +168,13 @@ public boolean updatePeriodinFile(){ startTime=toCalendar(StringUtilz.toString(date2)+ " 23:59:59"); if (isZip) { - return updatePropertiesZipFile("date2", StringUtilz.toString(date2)) | updatePropertiesZipFile("date1", StringUtilz.toString(date1)); + + boolean r= updatePropertiesZipFile("date2", StringUtilz.toString(date2)) | updatePropertiesZipFile("date1", StringUtilz.toString(date1)); + return r; } else{ - return updatePropertiesFile("date2", StringUtilz.toString(date2)) | updatePropertiesFile("date1", StringUtilz.toString(date1)); + boolean r= updatePropertiesFile("date2", StringUtilz.toString(date2)) | updatePropertiesFile("date1", StringUtilz.toString(date1)); + return r; } } @@ -221,53 +225,67 @@ private boolean updatePropertiesFile(String nameProperty, String value){ return true; } - private synchronized boolean updatePropertiesZipFile(String nameProperty, String value) { - /*read source in zip file to StringBuilder*/ - String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); - FileHeader fHeader=null; - ZipFile zipFile =null; + private boolean updatePropertiesZipFile(String nameProperty, String value) { + synchronized (lock) { + /*read source in zip file to StringBuilder*/ + String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); + FileHeader fHeader = null; + ZipFile zipFile = null; + try { + zipFile = new ZipFile(zipFilePath); + if (zipFile.isEncrypted()) { + zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); + } + fHeader = zipFile.getFileHeader(sourceFile); + } catch (ZipException e) { + e.printStackTrace(); + Printer.saveLogFile(e); try { - zipFile=new ZipFile(zipFilePath); - if (zipFile.isEncrypted()){ - zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); - } - fHeader =zipFile.getFileHeader(sourceFile); - } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + wait(10000); + } catch (InterruptedException e1) { + e1.printStackTrace(); } - StringBuilder stringB=null; - try (InputStreamReader isr =new InputStreamReader( - zipFile.getInputStream(fHeader),"utf-8" + } + StringBuilder stringB = null; + try (InputStreamReader isr = new InputStreamReader( + zipFile.getInputStream(fHeader), "utf-8" ) - ) { - isr.getEncoding(); - stringB = getFileContextFromStream(isr); - zipFile.removeFile(fHeader); - } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - } - /*replace value in StringBuilder*/ - int start = stringB.indexOf(map.get(nameProperty)); - int end = start + map.get(nameProperty).length(); - stringB.replace(start,end,value); - //map.put(nameProperty,value); - /*write StringBulder to source in zip file */ - map.put(nameProperty,value); - byte [] b=null; - try (InputStream is = new ByteArrayInputStream(stringB.toString().getBytes("utf-8"))) { - //b = stringB.toString().getBytes("UTF-8"); - ZipParameters zp = new ZipParameters(); - zp.setSourceExternalStream(true); - zp.setFileNameInZip(sourceFile); - zp.setPassword(BaseConstants.getInstance().getZipPsw()); - zipFile.addStream(is, zp); + ) { + isr.getEncoding(); + stringB = getFileContextFromStream(isr); + zipFile.removeFile(fHeader); + } catch (IOException e) { + e.printStackTrace(); + Printer.saveLogFile(e); + } catch (ZipException e) { + e.printStackTrace(); + Printer.saveLogFile(e); + } + /*replace value in StringBuilder*/ + int start = stringB.indexOf(map.get(nameProperty)); + int end = start + map.get(nameProperty).length(); + stringB.replace(start, end, value); //map.put(nameProperty,value); - } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + /*write StringBulder to source in zip file */ + map.put(nameProperty, value); + byte[] b = null; + try (InputStream is = new ByteArrayInputStream(stringB.toString().getBytes("utf-8"))) { + //b = stringB.toString().getBytes("UTF-8"); + ZipParameters zp = new ZipParameters(); + zp.setSourceExternalStream(true); + zp.setFileNameInZip(sourceFile); + zp.setPassword(BaseConstants.getInstance().getZipPsw()); + zipFile.addStream(is, zp); + //map.put(nameProperty,value); + } catch (IOException e) { + e.printStackTrace(); + Printer.saveLogFile(e); + + } catch (ZipException e) { + e.printStackTrace(); + Printer.saveLogFile(e); + + } } return true; } diff --git a/src/main/java/Utilz/StringCrypter.java b/src/main/java/Utilz/StringCrypter.java index bd76a72..b24bc21 100644 --- a/src/main/java/Utilz/StringCrypter.java +++ b/src/main/java/Utilz/StringCrypter.java @@ -22,7 +22,7 @@ public class StringCrypter { public static void main(String[] args) { StringCrypter crypter=new StringCrypter(new byte[]{1,4,5,6,8,9,7,8}); - String testStr = "01/01/2019"; + String testStr = "01/03/2019"; // шифрование System.out.println( crypter.encrypt(testStr)); System.out.println(crypter.decrypt(crypter.encrypt(testStr))); From e56846f8e4ecc10bb85440d11377bb19d0c8b3cf Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 4 Feb 2019 00:35:23 +0300 Subject: [PATCH 19/26] 1. Add description windows --- src/main/java/Controller/Controller.java | 2 +- src/main/java/Frames/MyFrame.java | 28 ++++++++++++++++---- src/main/java/Frames/ProccessesPanelTab.java | 14 ++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 84643ab..c0569ca 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -59,7 +59,7 @@ public static void init(boolean isZip) { initWorkingPool(isZip); // Here starts sqlExecuter with tasksQueue new Thread(() -> createSqlExecuter()).start(); - frame = new MyFrame("Hello world of SWING!", null); + frame = new MyFrame("Monitoring - analyzing. Useful edition.", null); frame.setPreferredSize(new Dimension(1000, 500)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); diff --git a/src/main/java/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 362106b..5b9be8d 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -13,6 +13,7 @@ public class MyFrame extends JFrame { private ProccessesPanelTab proccessesPanel; private TestPanel testPanel; private ResultView resultView = new ResultView(); + private JTextArea description = new JTextArea(); //private JTextArea textArea = new JTextArea(); @@ -23,10 +24,10 @@ public MyFrame (String title, Map statusMap){ //Add swing components to content pane Container c = getContentPane(); proccessesPanel=new ProccessesPanelTab(); - /* c.add(resultView,BorderLayout.CENTER); - c.add(proccessesPanel, BorderLayout.WEST);*/ JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); - jSplitPane.setRightComponent(resultView); + JSplitPane right = setHorizontalSplitPanel(); + jSplitPane.setResizeWeight(0.5); + jSplitPane.setRightComponent(right); jSplitPane.setLeftComponent(proccessesPanel); BorderLayout bl = new BorderLayout(); c.setLayout(bl); @@ -39,9 +40,26 @@ public MyFrame (String title, Map statusMap){ public ProccessesPanelTab getProccessesPanel() { return proccessesPanel; } + public ResultView getTextArea() { return resultView;} + public JTextArea getDescriptionArea(){return description;} - public ResultView getTextArea() { + private JSplitPane setHorizontalSplitPanel(){ + JSplitPane jSplitPaneInternal = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true); + jSplitPaneInternal.setTopComponent(resultView); + description.setLineWrap(true); + description.setPreferredSize(new Dimension(300,100)); + JScrollPane jsc = new JScrollPane(); + jsc.setViewportView(description); + jSplitPaneInternal.setBottomComponent(jsc); + return jSplitPaneInternal; - return resultView; + } + private JPanel setRightSplitPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(resultView,BorderLayout.NORTH); + //description.setLineWrap(true); + panel.add(description,BorderLayout.SOUTH); + return panel; } } diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index 64f835b..2541687 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -70,6 +70,20 @@ public void valueChanged(ListSelectionEvent e) { } myFrame.getTextArea().setText(resText); } + for (SqlProperties sqlP:taskList ) { + if (sqlP.getProperty("description").equals(desc)){ + if (myFrame.getDescriptionArea().getText()==null && sqlP.getProperty("extendedDescription")!=null){ + myFrame.getDescriptionArea().setText(sqlP.getProperty("extendedDescription")); + } + else if (myFrame.getDescriptionArea().getText()==null && sqlP.getProperty("extendedDescription")==null){ + continue; + } + else if (!myFrame.getDescriptionArea().getText().equals(sqlP.getProperty("extendedDescription"))){ + myFrame.getDescriptionArea().setText(sqlP.getProperty("extendedDescription")); + } + } + } + } }); From 456ff8e6c80cdb68a684a0c8eef49d97ba29b1e0 Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 4 Feb 2019 23:39:50 +0300 Subject: [PATCH 20/26] 1. Updated loggingin file --- src/main/java/Controller/Controller.java | 38 ++++++++----------- src/main/java/Frames/LicenseWindow.java | 14 +++---- src/main/java/Frames/ProccessesPanelTab.java | 2 +- src/main/java/Frames/StartUpWindow.java | 8 ++-- src/main/java/Frames/View1.java | 10 ++--- .../AbstratReports/AbstractExcelReport.java | 10 ++--- .../AbstratReports/AbstractReport.java | 14 +++---- src/main/java/Reports/NSHS.java | 1 - src/main/java/Reports/OktsOilReport.java | 2 +- src/main/java/Reports/RegularMonitor.java | 7 ++-- src/main/java/Reports/ReportFactory.java | 19 ++++------ src/main/java/Reports/Table.java | 5 +-- src/main/java/Utilz/BaseConstants.java | 2 +- src/main/java/Utilz/ConnectorToOracle.java | 8 ++-- src/main/java/Utilz/Printer.java | 21 +++++----- src/main/java/Utilz/SqlExecutor.java | 5 +-- src/main/java/Utilz/SqlProperties.java | 32 ++++++---------- src/main/java/Utilz/Table.java | 6 +-- src/main/java/View.java | 2 +- src/test/java/Utilz/SqlPropertiesTest.java | 6 +-- 20 files changed, 92 insertions(+), 120 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index c0569ca..679dc82 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -22,9 +22,7 @@ import java.util.*; import java.util.List; import java.util.concurrent.*; - import static Utilz.Printer.printRowToMonitor; -import static java.lang.Thread.sleep; public class Controller { @@ -89,11 +87,9 @@ private static boolean checkLisence(boolean b) { try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")))) { return checkKey(bf.readLine()); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + Printer.printLog(e); } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + Printer.printLog(e); } } } @@ -102,13 +98,12 @@ private static boolean checkLisence(boolean b) { try (BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(BaseConstants.getLiesencePath()),Charset.forName("UTF-8")))) {return checkKey(bf.readLine()); } catch (FileNotFoundException e) { - e.printStackTrace(); Printer.saveLogFile(e); + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); + Printer.printLog(e); } - } - return false; + return false; } private static Calendar stringToCalendar(String s) { @@ -129,13 +124,11 @@ private static void initWorkingPool(boolean isEncrypted) { readFolderSql(); } } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; - printRowToMonitor("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); + Printer.printLog(e); + Printer.printLog("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; - printRowToMonitor("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); + Printer.printLog(e); + Printer.printLog("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); } } @@ -163,7 +156,7 @@ private static void readZipFile() throws ZipException { } List headers = zipFile.getFileHeaders(); for (FileHeader fh : headers) { - printRowToMonitor("Entry: " + fh.getFileName()); + Printer.printLog("Entry: " + fh.getFileName()); if (!fh.isDirectory() && fh.getFileName().endsWith(".rep")) { SqlProperties prop = new SqlProperties(true); prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh),Charset.forName("UTF-8")), fh.getFileName()); @@ -174,7 +167,7 @@ private static void readZipFile() throws ZipException { public static void createSqlExecuter() { if (tasksQueue.size() > 0) { - printRowToMonitor(String.valueOf(tasksQueue.size())); + Printer.printLog(String.valueOf(tasksQueue.size())); sqlExecutor = new SqlExecutor(tasksQueue); sqlExecutor.run(); } @@ -226,7 +219,7 @@ public Object call() throws Exception { conn.close(); break; } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); + Printer.printLog(e); } } @@ -277,12 +270,11 @@ public void run() { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); try { cal.setTime(sdf.parse(sDate)); - printRowToMonitor("Oracle date " + sDate); + Printer.printLog("Oracle date " + sDate); return cal; } catch (ParseException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; - } + Printer.saveLogFile(e); + } } return Calendar.getInstance(); diff --git a/src/main/java/Frames/LicenseWindow.java b/src/main/java/Frames/LicenseWindow.java index 5ce5c19..5dbd660 100644 --- a/src/main/java/Frames/LicenseWindow.java +++ b/src/main/java/Frames/LicenseWindow.java @@ -41,7 +41,7 @@ public LicenseWindow() throws HeadlessException { logginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - printRowToMonitor("Button clicked!!!"); + Printer.printLog("Button in LicenseWindow clicked!!!"); if (Controller.checkKey(logginText.getText())){ saveKey(logginText.getText()); Controller.init(BaseConstants.isIsZip()); @@ -66,7 +66,7 @@ private void saveKey(String text) { zipFile.removeFile(fHeader); } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { ZipParameters zp = new ZipParameters(); @@ -75,11 +75,11 @@ private void saveKey(String text) { zp.setPassword(BaseConstants.getInstance().getZipPsw()); zipFile.addStream(is, zp); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } else{ @@ -87,9 +87,9 @@ private void saveKey(String text) { { bfw.write(text); } catch (FileNotFoundException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index 2541687..8ff4bb9 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -173,7 +173,7 @@ public void run() { sleep(1000); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } } diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index 32bc793..53824b7 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -50,7 +50,7 @@ private void saveKey(String text) { zipFile.removeFile(fHeader); } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { ZipParameters zp = new ZipParameters(); @@ -59,11 +59,11 @@ private void saveKey(String text) { zp.setPassword(BaseConstants.getInstance().getZipPsw()); zipFile.addStream(is, zp); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } diff --git a/src/main/java/Frames/View1.java b/src/main/java/Frames/View1.java index cf8ca91..6aba6ea 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Frames/View1.java @@ -63,7 +63,7 @@ private void test1 (){ } printMap(); initWorkingPool(false); - System.out.println("--------------------"); + Printer.printLog("--------------------"); printMap(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -92,11 +92,11 @@ private static void initWorkingPool(boolean isEncrypted){ readFolderSql(); } } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - printRowToMonitor("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); + Printer.printLog(e); + Printer.printLog("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - printRowToMonitor("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); + Printer.printLog(e); + Printer.printLog("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); } } diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index a12326b..c6b337d 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -60,12 +60,11 @@ protected boolean createFile(HSSFWorkbook workbook){ File file = new File (getUniqFileName(s)); try (FileOutputStream fos = new FileOutputStream(file)){ workbook.write(fos); - Printer.printRowToMonitor("File created " + s); + Printer.printLog("File created " + s); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; - Printer.printRowToMonitor("Error when writing " + s+ " file!"); + Printer.printLog(e); + Printer.printLog("Error when writing " + s+ " file!"); } } @@ -142,8 +141,7 @@ protected void insertData (ResultSet result,HSSFSheet worksheet, int rowNum, int rownum++; } } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); } } diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index c489194..5c8d888 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -37,7 +37,7 @@ public void closeConnection(ResultSet result){ stm.close(); ConnectorToOracle.getInstance().closeConnection(getProperty("server")); } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } @@ -52,15 +52,15 @@ protected ResultSet executeSqlClause (String sqlClause){ e.printStackTrace(); Printer.saveLogFile(e); ; } catch (NullPointerException e){ - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } finally { if (resultSet==null ){ - printRowToMonitor("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime/(60*1000)+" min!"); + Printer.printLog("Due to connection error thread "+ props.getProperty("description") + " asleep for " +crashWaitingTime/(60*1000)+" min!"); try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } } @@ -81,7 +81,7 @@ public void run() { try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } @@ -89,10 +89,10 @@ public void run() { try { sleep(crashWaitingTime); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); + Printer.printLog(e); } } - System.out.println("run finished for " + getProps().getProperty("description")); + Printer.printLog("run finished for " + getProps().getProperty("description")); sqlExecutor.addQueue(this); } diff --git a/src/main/java/Reports/NSHS.java b/src/main/java/Reports/NSHS.java index 3f038f2..3cdba2e 100644 --- a/src/main/java/Reports/NSHS.java +++ b/src/main/java/Reports/NSHS.java @@ -49,7 +49,6 @@ public boolean createReport(ResultSet result) { try { result.last(); - System.out.println(result.getRow()); result.beforeFirst(); } catch (SQLException e) { e.printStackTrace(); diff --git a/src/main/java/Reports/OktsOilReport.java b/src/main/java/Reports/OktsOilReport.java index 8bb92f7..866c587 100644 --- a/src/main/java/Reports/OktsOilReport.java +++ b/src/main/java/Reports/OktsOilReport.java @@ -126,7 +126,7 @@ private int createRows(ResultSet result, HSSFSheet worksheet, int rowNum, String } result.beforeFirst(); } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } return rownum; diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index 8a88d7a..6196daf 100644 --- a/src/main/java/Reports/RegularMonitor.java +++ b/src/main/java/Reports/RegularMonitor.java @@ -22,7 +22,7 @@ public class RegularMonitor extends AbstractReport { public RegularMonitor(SqlProperties props, SqlExecutor sqlExecutor) { super(props, sqlExecutor); this.description = props.getProperty("description"); - Printer.printRowToMonitor("Thread starting " + description + ", server: " + getProperty("server") + " (Constructor of RegularMonitor)"); + Printer.printLog("Thread starting " + description + ", server: " + getProperty("server") + " (Constructor of RegularMonitor)"); } @Override @@ -34,7 +34,7 @@ public boolean createReport() { ResultSet result = executeSqlClause(getProperty("sql")); if (result == null) { - Printer.printRowToMonitor(description + " selection returns null " + sCurrentDateTime); + Printer.printLog(description + " selection returns null " + sCurrentDateTime); return false; } @@ -56,8 +56,7 @@ public boolean createReport() { Printer.printLineToMonitor(resultSB.toString()); } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); flag=false; } closeConnection(result); diff --git a/src/main/java/Reports/ReportFactory.java b/src/main/java/Reports/ReportFactory.java index 613a862..081e746 100644 --- a/src/main/java/Reports/ReportFactory.java +++ b/src/main/java/Reports/ReportFactory.java @@ -20,28 +20,23 @@ public static Report create (SqlProperties prop, SqlExecutor sqlExecutor) { report = (Report)c.newInstance(prop,sqlExecutor); report.addProperty("path", prop.getProperty("excel")); } catch (InstantiationException e) { - e.printStackTrace(); Printer.saveLogFile(e); + Printer.printLog(e); } catch (IllegalAccessException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); } catch (ClassNotFoundException e) { - printRowToMonitor("Class not found!!! (report factory)"); - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog("Class not found!!! (report factory)"); + Printer.printLog(e); } catch (NoSuchMethodException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); } catch (InvocationTargetException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); } } else { report = new RegularMonitor(prop, sqlExecutor); report.addProperty("path", BaseConstants.getPath()); - }; - //report.setIntervalDate(prop.getProperty("date1"), prop.getProperty("date2")); + } return report; } } diff --git a/src/main/java/Reports/Table.java b/src/main/java/Reports/Table.java index 8f0c19b..e645f9b 100644 --- a/src/main/java/Reports/Table.java +++ b/src/main/java/Reports/Table.java @@ -33,9 +33,8 @@ public Table(ResultSet resultSet) { } resultSet.beforeFirst(); }catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; - } + Printer.printLog(e); + } } public void transposeTable (){ String [][]rotatedMatrix = new String [matrix[0].length][matrix.length]; diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 340aaa8..4826fe2 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -41,7 +41,7 @@ private BaseConstants() { try { startProps.load(new InputStreamReader(new FileInputStream(new File(startFile)), Charset.forName("UTF-8"))); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } // String path, String pathSQL, String cat, String log, String psw path = startProps.getProperty("path"); diff --git a/src/main/java/Utilz/ConnectorToOracle.java b/src/main/java/Utilz/ConnectorToOracle.java index 82d46cd..69bee6a 100644 --- a/src/main/java/Utilz/ConnectorToOracle.java +++ b/src/main/java/Utilz/ConnectorToOracle.java @@ -39,7 +39,7 @@ public Connection getConnection (String server) throws SQLException { if (num != null && num != 0 && !conections.get(server).isClosed()) { num++; counterConections.put(server, num); - printRowToMonitor("Count of connections for " + server + " is: " +counterConections.get(server)); + Printer.printLog("Count of connections for " + server + " is: " +counterConections.get(server)); return conections.get(server); } num=0; @@ -49,11 +49,11 @@ public Connection getConnection (String server) throws SQLException { BaseConstants.getInstance().getConnectionString(server), BaseConstants.getInstance().getLog(server), BaseConstants.getInstance().getPsw(server)); - printRowToMonitor("Connected Successfully to Oracle instance " + server); + Printer.printLog("Connected Successfully to Oracle instance " + server); conections.put(server, con); num++; counterConections.put(server, num); - printRowToMonitor("Count of connections for " + server + " is first: " +counterConections.get(server)); + Printer.printLog("Count of connections for " + server + " is first: " +counterConections.get(server)); return conections.get(server); } } @@ -68,7 +68,7 @@ public boolean closeConnection (String server){ conections.get(server).close(); return true; } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); return false; } } diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index 55e1ca9..23f6673 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -58,24 +58,30 @@ private static void saveLogFile(String text){ } try (FileWriter fw = new FileWriter(path.toString(), true)) { - - // fw.write("--------------- " + StringUtilz.toString(Calendar.getInstance()) + "\n\r--------------- "); fw.write(text + "\r\n"); } catch (IOException e) { e.printStackTrace(); - } lock.notifyAll(); } } + public synchronized static void printLog(String text){ + saveLogFile(text); + System.out.println(text); + } + public synchronized static void printLog(Exception e){ + saveLogFile(e); + e.printStackTrace(); + } + public synchronized static void printRowToMonitor(String text){ System.out.println(text); - saveLogFile(text); + //saveLogFile(text); } public synchronized static void printLineToMonitor(String text){ System.out.println(text); - saveLogFile(text); + //saveLogFile(text); } public synchronized static void saveResult(String description, StringBuilder result){ @@ -106,11 +112,6 @@ private synchronized static boolean saveMaptoFile(){ header.append("--------------------------------"); header.append(pair.getKey()); header.append(' '); - System.out.println("test befor convert date tostring"); - System.out.println(pair.getValue().getDateTime()); - /* DateFormat df=new SimpleDateFormat("dd.MM.yyyy"); - String dateTime = df.format(pair.getValue().getDateTime()); - System.out.println(dateTime);*/ header.append(pair.getValue().getDateTime()); header.append("-----------------------------------\r\n"); diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index 09ab571..f9e1143 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -55,8 +55,7 @@ else if(period > 0 && !sqlProp.isRunning()){ try { lock.wait(period); } catch (InterruptedException e) { - e.printStackTrace(); Printer.saveLogFile(e); - ; + Printer.printLog(e); } } @@ -77,7 +76,7 @@ public void addQueue(AbstractReport abstractReport){ lock.notifyAll(); } long period = abstractReport.getSleepingTime(); - Printer.printRowToMonitor("Thread "+abstractReport.getProperty("description")+" sleep for " + + Printer.printLog("Thread "+abstractReport.getProperty("description")+" sleep for " + String.valueOf(period / 1000 / 60 / 60 / 24) + " days " + String.valueOf(period / 1000 / 60 / 60 % 24) + " hours " + String.valueOf(period / 1000 / 60 % 60) + " min " diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 854f1d0..23f1a48 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -83,9 +83,9 @@ public HashMap loadFromFile(File file){ try (InputStreamReader fileReader =new InputStreamReader(new FileInputStream(file),"utf-8")){ return loadFromFile(fileReader,file.getPath()); } catch (FileNotFoundException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } return null; } @@ -108,7 +108,7 @@ private Calendar addLong (Calendar calendar, Long milliseconds){ /*Print map collection*/ public void printMap(){ if (map == null || map.size()==0) { - printRowToMonitor("Empty PropMap"); + Printer.printLog("Empty PropMap"); return; } for (Map.Entry pair: @@ -212,7 +212,7 @@ protected String alignString (String object, int quantitySigns, String sign){ private boolean updatePropertiesFile(String nameProperty, String value){ //найти в файле свойство и переписать его значение и перезагрузить - printRowToMonitor("FileName sourceFile " + sourceFile); + Printer.printLog(getProperty("description") + ", updatePropertiesFile. FileName sourceFile " + sourceFile); Path path = Paths.get(sourceFile); try { String contentOfFile = new String(Files.readAllBytes(path)); @@ -220,7 +220,7 @@ private boolean updatePropertiesFile(String nameProperty, String value){ Files.write(path,contentOfFile.getBytes()); map=loadFromFile(path.toFile()); } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } return true; } @@ -238,12 +238,11 @@ private boolean updatePropertiesZipFile(String nameProperty, String value) { } fHeader = zipFile.getFileHeader(sourceFile); } catch (ZipException e) { - e.printStackTrace(); - Printer.saveLogFile(e); + Printer.printLog(e); try { wait(10000); } catch (InterruptedException e1) { - e1.printStackTrace(); + Printer.printLog(e1); } } StringBuilder stringB = null; @@ -255,11 +254,9 @@ private boolean updatePropertiesZipFile(String nameProperty, String value) { stringB = getFileContextFromStream(isr); zipFile.removeFile(fHeader); } catch (IOException e) { - e.printStackTrace(); - Printer.saveLogFile(e); + Printer.printLog(e); } catch (ZipException e) { - e.printStackTrace(); - Printer.saveLogFile(e); + Printer.printLog(e); } /*replace value in StringBuilder*/ int start = stringB.indexOf(map.get(nameProperty)); @@ -278,14 +275,9 @@ private boolean updatePropertiesZipFile(String nameProperty, String value) { zipFile.addStream(is, zp); //map.put(nameProperty,value); } catch (IOException e) { - e.printStackTrace(); - Printer.saveLogFile(e); - + Printer.printLog(e); } catch (ZipException e) { - e.printStackTrace(); - Printer.saveLogFile(e); - - } + Printer.printLog(e); } } return true; } @@ -302,7 +294,7 @@ private StringBuilder getFileContextFromStream(InputStreamReader isr) { //stringB.append(" "); } } catch (IOException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } return stringB; } diff --git a/src/main/java/Utilz/Table.java b/src/main/java/Utilz/Table.java index 9820f28..90053c5 100644 --- a/src/main/java/Utilz/Table.java +++ b/src/main/java/Utilz/Table.java @@ -28,7 +28,7 @@ public Table(ResultSet resultSet) { } resultSet.beforeFirst(); }catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + Printer.printLog(e); } } public void transposeTable (){ @@ -46,9 +46,9 @@ public void printMatrix (){ if (matrix==null) return; for (int i=0;i Date: Sat, 9 Feb 2019 01:44:41 +0300 Subject: [PATCH 21/26] 1. Start windows with checking monitor.ini 2. Timeout for each database connection 3. Remove unnecessary classes --- src/main/java/Controller/Controller.java | 110 +++----- src/main/java/Frames/DetailEvent.java | 16 -- src/main/java/Frames/DetailListener.java | 10 - src/main/java/Frames/DetailsPanel.java | 93 ------ src/main/java/Frames/LicenseWindow.java | 2 - src/main/java/Frames/MyFrame.java | 4 - src/main/java/Frames/ProccessTableModel.java | 53 ---- src/main/java/Frames/ProccessesPanel.java | 264 ------------------ src/main/java/Frames/ProccessesPanelTab.java | 35 +-- src/main/java/Frames/StartUpWindow.java | 56 +--- src/main/java/Frames/TestPanel.java | 37 --- .../AbstratReports/AbstractReport.java | 8 - src/main/java/{ => Test}/View.java | 4 +- src/main/java/{Frames => Test}/View1.java | 6 +- src/main/java/Utilz/BaseConstants.java | 30 +- src/main/java/Utilz/Printer.java | 10 +- src/main/java/Utilz/SqlExecutor.java | 9 +- src/main/java/Utilz/Table.java | 58 ---- 18 files changed, 75 insertions(+), 730 deletions(-) delete mode 100644 src/main/java/Frames/DetailEvent.java delete mode 100644 src/main/java/Frames/DetailListener.java delete mode 100644 src/main/java/Frames/DetailsPanel.java delete mode 100644 src/main/java/Frames/ProccessTableModel.java delete mode 100644 src/main/java/Frames/ProccessesPanel.java delete mode 100644 src/main/java/Frames/TestPanel.java rename src/main/java/{ => Test}/View.java (97%) rename src/main/java/{Frames => Test}/View1.java (97%) delete mode 100644 src/main/java/Utilz/Table.java diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 679dc82..94b5e89 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.concurrent.*; import static Utilz.Printer.printRowToMonitor; +import static java.lang.Thread.sleep; public class Controller { @@ -35,9 +36,13 @@ public class Controller { static public void main(String[] args) { - BaseConstants.getInstance(); - startFrame = new StartUpWindow(); + startFrame = new StartUpWindow("Reading startup parameters..."); startFrame.setVisible(true); + if (BaseConstants.getInstance()==null){ + startFrame.setMessage("File " + BaseConstants.startFile + " not found!" ); + return; + } + startFrame.setMessage("monitor.ini is handled properly. Please wait some minutes for initialization..."); if (!checkLisence(BaseConstants.isIsZip())) { startFrame.dispose(); new LicenseWindow(); @@ -78,8 +83,7 @@ private static boolean checkLisence(boolean b) { headers = zipFile.getFileHeaders(); } } catch (ZipException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; - ; + e.printStackTrace(); Printer.saveLogFile(e); } for (FileHeader fh : headers) { if (!fh.isDirectory() && fh.getFileName().endsWith("liesence.txt")) { @@ -185,9 +189,7 @@ public static boolean checkKey(String text) { currentDate = getCurrentDate().getTimeInMillis(); } catch (InterruptedException e) { e.printStackTrace(); - } catch (TimeoutException e) { - e.printStackTrace(); - } catch (ExecutionException e) { + } catch (ExecutionException e) { e.printStackTrace(); } @@ -198,73 +200,41 @@ public static boolean checkKey(String text) { } } - private static Calendar getCurrentDate() throws InterruptedException, TimeoutException, ExecutionException { + private static Calendar getCurrentDate() throws InterruptedException, ExecutionException { String sqlClause = "select to_char (current_date, 'dd.MM.yyyy') from dual"; - FutureTask task = new FutureTask(new Callable() { - @Override - public Object call() throws Exception { String sDate=null; - for (Map.Entry pair : - BaseConstants.getDbase().entrySet()) { - try { - Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); - if (conn==null) continue; - Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - stm.execute(sqlClause); - ResultSet resultSet = stm.getResultSet(); - resultSet.next(); - sDate = resultSet.getString(1); - resultSet.close(); - stm.close(); - conn.close(); - break; - } catch (SQLException e) { - Printer.printLog(e); + for (Map.Entry pair : BaseConstants.getDbase().entrySet()) { + FutureTask task = new FutureTask(new Callable() { + @Override + public Object call() throws Exception { + try { + Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); + if (conn==null) return null; + Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + stm.execute(sqlClause); + ResultSet resultSet = stm.getResultSet(); + resultSet.next(); + String sDate = resultSet.getString(1); + resultSet.close(); + stm.close(); + conn.close(); + return sDate; + } catch (SQLException e) { + Printer.printLog(e); + } + return null; + } + }); + Thread th= new Thread (task); + th.start(); + try { + sDate=(String) task.get(300,TimeUnit.SECONDS); + } catch (TimeoutException e) { + e.printStackTrace(); } + if (sDate!=null) break; + } - } - return sDate; - } - }); - Thread th = new Thread (task); - th.start(); - - - -/* Thread thr = new Thread() { - String sDate = null; - public String getsDate() { - return sDate; - } - public void setsDate(String sDate) { - this.sDate = sDate; - } - @Override - public void run() { - for (Map.Entry pair : - BaseConstants.getDbase().entrySet()) { - try { - Connection conn = ConnectorToOracle.getInstance().getConnection(pair.getKey()); - if (conn==null) continue; - Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - stm.execute(sqlClause); - ResultSet resultSet = stm.getResultSet(); - resultSet.next(); - sDate = resultSet.getString(1); - resultSet.close(); - stm.close(); - conn.close(); - break; - } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); - } - - } - } - }; - thr.start(); - thr.join();*/ - String sDate= (String) task.get(1000*60/**10*/, TimeUnit.MILLISECONDS); if (sDate != null) { Calendar cal = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); diff --git a/src/main/java/Frames/DetailEvent.java b/src/main/java/Frames/DetailEvent.java deleted file mode 100644 index 2793693..0000000 --- a/src/main/java/Frames/DetailEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package Frames; - -import java.util.EventObject; - -public class DetailEvent extends EventObject { - private String text; - public DetailEvent(Object source, String text) { - super(source); - this.text=text; - } - - public String getText() { - return text; - } - -} diff --git a/src/main/java/Frames/DetailListener.java b/src/main/java/Frames/DetailListener.java deleted file mode 100644 index ff23262..0000000 --- a/src/main/java/Frames/DetailListener.java +++ /dev/null @@ -1,10 +0,0 @@ -package Frames; - - -import java.util.EventListener; - -public interface DetailListener extends EventListener { - public void detailEventOccurred (DetailEvent event); - - -} diff --git a/src/main/java/Frames/DetailsPanel.java b/src/main/java/Frames/DetailsPanel.java deleted file mode 100644 index 6efc10c..0000000 --- a/src/main/java/Frames/DetailsPanel.java +++ /dev/null @@ -1,93 +0,0 @@ -package Frames; - -import javax.swing.*; -import javax.swing.event.EventListenerList; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - - -public class DetailsPanel extends JPanel { - private EventListenerList listenerList = new EventListenerList(); - - - public DetailsPanel() { - Dimension size=getPreferredSize(); - size.width=250; - setPreferredSize(size); - setBorder(BorderFactory.createTitledBorder("Personal Details")); - JLabel nameLabel = new JLabel("Name: "); - JLabel occupationLabel = new JLabel("Occupation: "); - - JTextField nameField = new JTextField(10); - JTextField occupationField = new JTextField(10); - - JButton addBtn = new JButton("Add"); - addBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String name = nameField.getText(); - String occupation = occupationField.getText(); - - String text = name + ": " + occupation + "\n"; - fireDetailEvent(new DetailEvent(this,text)); - } - }); - - setLayout(new GridBagLayout()); - - GridBagConstraints gc = new GridBagConstraints(); - - /// First Column - gc.anchor = GridBagConstraints.LINE_END;//выровнять в право в столбце - gc.weightx=0.5; - gc.weighty=0.5; - - gc.gridx=0; - gc.gridy=0; - add(nameLabel,gc); - - gc.gridx=0; - gc.gridy=1; - add (occupationLabel,gc); - - ////Second column - gc.anchor=GridBagConstraints.LINE_START;//выравнять в лево в столбце - gc.gridx=1; - gc.gridy=0; - add(nameField,gc); - - gc.gridx=1; - gc.gridy=1; - add(occupationField,gc); - - //Final Row - gc.weighty=10; - - gc.anchor=GridBagConstraints.FIRST_LINE_START; - gc.gridx=1; - gc.gridy=2; - add (addBtn,gc); - - } - /*пары - 1. - ссылка на класс, 2. сам объект */ - public void fireDetailEvent(DetailEvent event){ - add(new JTextArea("Test text area")); - Object[] listeners = listenerList.getListenerList(); - for (int i=0;iThe period of use of the software has expired. Enter the new key.
Contact e-mail: albtutanota@tutanota.com"); private JLabel logginLabel = new JLabel(" Please, enter here new key: "); diff --git a/src/main/java/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 5b9be8d..25c49c6 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -9,13 +9,9 @@ public class MyFrame extends JFrame { - private DetailsPanel detailsPanel; private ProccessesPanelTab proccessesPanel; - private TestPanel testPanel; private ResultView resultView = new ResultView(); private JTextArea description = new JTextArea(); - //private JTextArea textArea = new JTextArea(); - public MyFrame (String title, Map statusMap){ super(title); diff --git a/src/main/java/Frames/ProccessTableModel.java b/src/main/java/Frames/ProccessTableModel.java deleted file mode 100644 index 5aebb67..0000000 --- a/src/main/java/Frames/ProccessTableModel.java +++ /dev/null @@ -1,53 +0,0 @@ -package Frames; - -import javax.swing.table.AbstractTableModel; -import java.lang.reflect.Array; -import java.util.ArrayList; - -public class ProccessTableModel extends AbstractTableModel { - private int columnCount=5; - private ArrayList dataArrayList; - - - public ProccessTableModel() { - dataArrayList=new ArrayList(); - for (int i=0;i waitingQueue; - private static BlockingQueue runningQueue ; - - - - private static Map statusMap; - private static List processList; - private List> elements = new ArrayList<>(); - private GridBagConstraints gc; - private JPanel jPanel; - private GridBagLayout layout ; - private GridBagConstraints gbc; - private MyFrame myFrame; - private JLabel greenLabel=null; - private List greenLine=null; - private Color greenColor = new Color (10,200,10); - private Color grayColor = null; - private List header= new ArrayList<>(); - - - - - public void setStatusMap(Map statusMap) { - if (statusMap==null){ - throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); - } - myFrame = (MyFrame) getParent().getParent().getParent().getParent(); - ProccessesPanel.statusMap = statusMap; -// layout = new GridLayout(/*ProccessesPanel.statusMap.size()*/1, 4, 5, 1); - layout = new GridBagLayout(); - jPanel = new JPanel(); - jPanel.setLayout(layout); - jPanel.setBorder(BorderFactory.createTitledBorder("Task list jpanel")); - - - gbc = new GridBagConstraints(0,0,1,1,1,1, - GridBagConstraints.NORTH, GridBagConstraints.BOTH, - new Insets(2,0,2,0),1,1); - - Border bottomBorder = BorderFactory.createCompoundBorder(); - bottomBorder=BorderFactory.createCompoundBorder(bottomBorder,BorderFactory.createMatteBorder(0,0,2,0,Color.gray)); - - JLabel jLabel1 =new JLabel("DESCRIPTION"); - jLabel1.setBorder(bottomBorder); - jPanel.add(jLabel1,gbc); - gbc.gridx=1; - JLabel jLabel2 =new JLabel("CURRENT STATUS"); - jLabel2.setBorder(bottomBorder); - jPanel.add(jLabel2,gbc); - gbc.gridx=2; - JLabel jLabel3 =new JLabel("LAST EXECUTION TIME"); - jLabel3.setBorder(bottomBorder); - jPanel.add(jLabel3,gbc); - gbc.gridx=3; - JLabel jLabel4 =new JLabel("WAIT TIME"); - jLabel4.setBorder(bottomBorder); - jPanel.add(jLabel4,gbc); - - //updateJComponentsFromQueue(); - setViewportView(jPanel); - - setBorder(BorderFactory.createTitledBorder("This is ScrollPanel")); - setPreferredSize(new Dimension(600,100)); - updateJComponentsFromQueue(); - } - - public ProccessesPanel (){ - // this.myFrame = myFrame; - } - - private void updateJComponentsFromQueue() { - if (statusMap==null)return; - Point pos = getViewport().getViewPosition(); - /*if (layout==null) { - layout = new GridLayout(ProccessesPanel.statusMap.size(), 4, 5, 1); - jPanel.setLayout(layout); - }*/ - /*зачищаем панель от элементов*/ - for (int i =0;i pair: - statusMap.entrySet()) { - String threadStatus = pair.getValue()?"running":"asleep"; - - List componentRow = Arrays.asList( - new JLabel(pair.getKey().getProperty("description")), - new JLabel(threadStatus), - new JLabel(pair.getKey().getProperty("timeStampLastExecution")), - new JLabel (ms_totime (Long.valueOf(pair.getKey().getProperty("asleeptime")))) - ); - - componentRow.get(0).addMouseListener(new GetDetails()); - if (greenLine!=null && ((JLabel)componentRow.get(0)).getText().equals(((JLabel)greenLine.get(0)).getText())){ - setLineColor(componentRow, greenColor); - } - gbc.gridy=y++; - gbc.gridx=x++; - jPanel.add(componentRow.get(0),gbc); - gbc.gridx=x++; - jPanel.add(componentRow.get(1),gbc); - gbc.gridx=x++; - jPanel.add(componentRow.get(2),gbc); - gbc.gridx=x++; - jPanel.add(componentRow.get(3),gbc); - gbc.gridx=0; - x=0; - elements.add(componentRow); - - //addJComponent(); - - jPanel.revalidate(); - getViewport().setViewPosition(pos); - //getVerticalScrollBar().setValue(pos); - //jPanel.repaint(); - } - - } - - private void setLineColor(List componentRow, Color color) { - for (JComponent jLabel:componentRow) { - jLabel.setOpaque(true); - ((JLabel)jLabel).setBackground(color); - } - if (greenLine!=null) { - for (JComponent jLabel : greenLine) { - ((JLabel) jLabel).setBackground(null); - } - } - greenLine=componentRow; - } - private void setLineColor(JComponent component, Color color) { - for(List list:elements){ - for (JComponent comp:list){ - if (comp==component){ - setLineColor(list,color); - } - } - } - } - private String ms_totime(long ms) { - Integer [] time = new Integer[4]; - time[3] = (int)ms/86400000; - ms=ms%86400000; - time[2] = (int)ms/3600000; - ms=ms%3600000; - time[1] = (int)ms/60000; - ms=ms%60000; - time[0] = (int)ms/1000; - ms=ms%1000; - StringBuilder formatted_time = new StringBuilder(); - for (int i=time.length-1;i>=0;i--){ - if (time[i].toString().length()<2) { - formatted_time.append('0'); - } - formatted_time.append(time[i]); - formatted_time.append(":"); - } - formatted_time.deleteCharAt(formatted_time.length()-1); - //printRowToMonitor(formatted_time); - return formatted_time.toString(); - } - - private void addJComponent() { - for (int i=0;i componentList = Arrays.asList(new JLabel("description " +i), new JLabel("Time till start " + i), new JLabel("Time of last execution " + i)); - elements.add(componentList); - } - } - - synchronized public void updateProccessList (){ - updateJComponentsFromQueue(); -} - private class GetDetails implements MouseListener { - - @Override - public void mouseClicked(MouseEvent e) { - JLabel source = (JLabel)e.getSource(); - String description= source.getText(); - List res = Printer.getResults(description); - ////////////////////////////// - if (greenLine!=null){ - setLineColor(greenLine,greenColor); - } - setLineColor(source,greenColor); - if (res==null) { - myFrame.getTextArea().setText("no results"); - return; - } - myFrame.getTextArea().setText("Last run time " + res.get(1).toString()+ "\r\n"); - myFrame.getTextArea().append(res.get(0).toString()); - - } - - @Override - public void mousePressed(MouseEvent e) { - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - } -} diff --git a/src/main/java/Frames/ProccessesPanelTab.java b/src/main/java/Frames/ProccessesPanelTab.java index 8ff4bb9..b5324a3 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -35,10 +35,7 @@ public class ProccessesPanelTab extends JScrollPane implements Runnable{ public void init (PriorityBlockingQueue queue) { while (queue==null){ - //throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); - } - - //this.statusMap = (LinkedHashMap) statusMap; + } this.queue=queue; taskList = queue.stream().collect(Collectors.toList()); @@ -143,28 +140,6 @@ private String ms_totime(long ms) { public void run() { while (true) { try { - /* - for (int i = 0; i < ptm.getRowCount(); i++) { - String key = (String) ptm.getValueAt(i, 0); - SqlProperties keyObject = statusMap.keySet() - .stream() - .filter(s -> s.getProperty("description").equals(key)) - .findFirst() - .get(); - - String status= statusMap.get(key)?"running":"asleep"; - if (!ptm.getValueAt(i, 1).equals(status)) { - ptm.setValueAt(status, i, 1); - } - - if (!ptm.getValueAt(i, 2).equals(keyObject.getProperty("timeStampLastExecution"))) { - ptm.setValueAt(keyObject.getProperty("timeStampLastExecution"), i, 2); - } - if (!ptm.getValueAt(i, 3).equals(ms_totime (Long.valueOf(keyObject.calcSleepingTime())))) { - ptm.setValueAt(ms_totime (Long.valueOf(keyObject.calcSleepingTime())), i, 3); - } - ((AbstractTableModel)proccessesTable.getModel()).fireTableRowsUpdated(i,i); - }*/ int row = proccessesTable.getSelectedRow(); ptm.fireTableDataChanged(); if (row!=-1)proccessesTable.setRowSelectionInterval(row,row); @@ -194,13 +169,7 @@ public int getColumnCount() { @Override public synchronized Object getValueAt(int rowIndex, int columnIndex) { - - //Iterator itr = queue.iterator(); - /*Iterator> itr = statusMap.entrySet().iterator(); - - Map.Entry entry=null;*/ - SqlProperties entry=taskList.get(rowIndex); - //int i=0; + SqlProperties entry=taskList.get(rowIndex); String result=null; switch (columnIndex){ diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index 53824b7..b28f145 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -1,70 +1,26 @@ package Frames; -import Controller.Controller; -import Utilz.BaseConstants; -import Utilz.Printer; -import net.lingala.zip4j.core.ZipFile; -import net.lingala.zip4j.exception.ZipException; -import net.lingala.zip4j.model.FileHeader; -import net.lingala.zip4j.model.ZipParameters; + import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; public class StartUpWindow extends JFrame { - private JLabel textLabel = new JLabel("Please wait some minutes..."); - private JLabel logginLabel = new JLabel(" Please, enter here new key: "); - private JTextField logginText = new JTextField(60); - private JButton logginButton = new JButton("Enter key"); - + private JLabel textLabel = new JLabel(); - public StartUpWindow() throws HeadlessException { + public StartUpWindow(String message) throws HeadlessException { super ("Start up window"); setSize(new Dimension(400,150)); setLayout(new BorderLayout()); Container c= getContentPane(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + textLabel.setText(message); c.add(textLabel,BorderLayout.NORTH); - - } - - private void saveKey(String text) { - String zipFilePath = BaseConstants.getInstance().getZipFileSQL(); - FileHeader fHeader=null; - ZipFile zipFile =null; - try { - zipFile=new ZipFile(zipFilePath); - if (zipFile.isEncrypted()){ - zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); - } - fHeader =zipFile.getFileHeader(BaseConstants.getLiesencePath()); - zipFile.removeFile(fHeader); - - } catch (ZipException e) { - Printer.printLog(e); - } - try (InputStream is = new ByteArrayInputStream(text.getBytes("utf-8"))) { - ZipParameters zp = new ZipParameters(); - zp.setSourceExternalStream(true); - zp.setFileNameInZip(fHeader.getFileName()); - zp.setPassword(BaseConstants.getInstance().getZipPsw()); - zipFile.addStream(is, zp); - } catch (UnsupportedEncodingException e) { - Printer.printLog(e); - } catch (IOException e) { - Printer.printLog(e); - } catch (ZipException e) { - Printer.printLog(e); - } + public void setMessage (String message){ + textLabel.setText(message); } diff --git a/src/main/java/Frames/TestPanel.java b/src/main/java/Frames/TestPanel.java deleted file mode 100644 index 544f693..0000000 --- a/src/main/java/Frames/TestPanel.java +++ /dev/null @@ -1,37 +0,0 @@ -package Frames; - -import javax.swing.*; -import java.awt.*; - -public class TestPanel extends JScrollPane implements Scrollable{ - - - public TestPanel(Component test) { - super (test); - } - - @Override - public Dimension getPreferredScrollableViewportSize() { - return new Dimension(100,100); - } - - @Override - public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { - return 2; - } - - @Override - public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { - return 2; - } - - @Override - public boolean getScrollableTracksViewportWidth() { - return false; - } - - @Override - public boolean getScrollableTracksViewportHeight() { - return true; - } -} diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 5c8d888..62580fc 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -67,14 +67,6 @@ protected ResultSet executeSqlClause (String sqlClause){ return resultSet; } - private boolean prepareCreation(){ - if (createReport()) { - return getProps().updatePeriodinFile(); - } - return false; - } - - @Override public void run() { while (!createReport()){ diff --git a/src/main/java/View.java b/src/main/java/Test/View.java similarity index 97% rename from src/main/java/View.java rename to src/main/java/Test/View.java index 73c836b..441bffc 100644 --- a/src/main/java/View.java +++ b/src/main/java/Test/View.java @@ -1,6 +1,6 @@ +package Test; + import javax.swing.*; -import java.awt.*; -import java.awt.event.*; public class View extends JDialog { private JPanel contentPane; diff --git a/src/main/java/Frames/View1.java b/src/main/java/Test/View1.java similarity index 97% rename from src/main/java/Frames/View1.java rename to src/main/java/Test/View1.java index 6aba6ea..88a5243 100644 --- a/src/main/java/Frames/View1.java +++ b/src/main/java/Test/View1.java @@ -1,5 +1,7 @@ -package Frames; +package Test; +import Frames.MyFrame; +import Frames.StartUpWindow; import Utilz.BaseConstants; import Utilz.Printer; import Utilz.SqlProperties; @@ -33,7 +35,7 @@ public class View1 { public static void main(String[] args){ - JFrame frame0= new StartUpWindow(); + JFrame frame0= new StartUpWindow(""); frame0.setVisible(true); /* JFrame frame= new JFrame ("FRAME"); diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 4826fe2..251ac36 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -1,17 +1,14 @@ package Utilz; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; +import java.io.*; import java.nio.charset.Charset; import java.util.*; public class BaseConstants { /*Initinalizating parameters*/ - private final static String startFile = "c:\\Java\\monitor.ini"; + public final static String startFile = "c:\\Java\\monitor.ini"; private static String path = "C:\\Java\\"; - private String pathSQL = "C:\\Java\\SQL\\"; + private String pathSQL ; private String zipFileSQL = "C:\\Java\\SQL.zip"; private String localExcelReportPath = "C:\\RegularReports\\"; private static String liesencePath="C:\\Java\\SQL\\liesence.txt"; @@ -32,17 +29,14 @@ public static Map getDbase() { return dbase; } - private static Map dbase = new HashMap(); + private static Map dbase = new HashMap<>(); private static BaseConstants baseConstants = null; private static boolean isZip =false; - private BaseConstants() { + private BaseConstants() throws IOException { Properties startProps = new Properties(); - try { - startProps.load(new InputStreamReader(new FileInputStream(new File(startFile)), Charset.forName("UTF-8"))); - } catch (IOException e) { - Printer.printLog(e); - } + startProps.load(new InputStreamReader(new FileInputStream(new File(startFile)), Charset.forName("UTF-8"))); + // String path, String pathSQL, String cat, String log, String psw path = startProps.getProperty("path"); pathSQL = startProps.getProperty("pathSQL"); @@ -57,7 +51,6 @@ private BaseConstants() { List keys = new ArrayList(startProps.keySet()); for (String key:keys ) { if (key.startsWith("BD_")){ - String [] arr = String.valueOf(startProps.get(key)).split("_"); dbase.put (key.substring(3), new DBConnection(arr[0],arr[1],arr[2]) @@ -68,7 +61,14 @@ private BaseConstants() { } public static synchronized BaseConstants getInstance(){ - if (baseConstants ==null) baseConstants =new BaseConstants(); + if (baseConstants ==null) { + try { + baseConstants =new BaseConstants(); + } catch (IOException e) { + Printer.printLog(e); + return null; + } + } return baseConstants; } diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index 23f6673..44079b8 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -7,8 +7,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; @@ -31,7 +29,7 @@ public static void saveLogFile(Exception e){ } } File file = new File (getLogFile()); - try (PrintWriter pw = new PrintWriter(new FileWriter(file,true), true);) { + try (PrintWriter pw = new PrintWriter(new FileWriter(file,true), true)) { e.printStackTrace(pw); } catch (IOException e1) { e1.printStackTrace(); @@ -99,7 +97,7 @@ private synchronized static boolean saveMaptoFile(){ try { Files.createFile(path); } catch (IOException e) { - e.printStackTrace(); ; + e.printStackTrace(); return false; } } @@ -139,14 +137,14 @@ private synchronized static boolean saveMaptoFile(){ (sb.toString()).getBytes("windows-1251"), StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { - e.printStackTrace(); ; + e.printStackTrace(); return false; } return true; } public static List getResults(String description) { - List temp = new ArrayList(); + List temp = new ArrayList<>(); if (results==null||results.get(description)==null) { temp.add(new StringBuilder()); temp.add(new StringBuilder()); diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index f9e1143..c73eed7 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -18,13 +18,13 @@ public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; private final Object lock = new Object(); - ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); + //ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); HashMap services = new HashMap<>(); //private Map workingPool=new LinkedHashMap<>(); public SqlExecutor(PriorityBlockingQueue queue) { - this.waitingQueue=queue; + SqlExecutor.waitingQueue=queue; /* for (SqlProperties prop:waitingQueue) { // workingPool.put(prop,false); *//* prop.addProperty("timeStampLastExecution", getCurrentDateTime()); @@ -93,9 +93,4 @@ public static PriorityBlockingQueue getWaitingQueue() { return waitingQueue; } - /*public Map getWorkingPool() { - return workingPool; - }*/ - - } diff --git a/src/main/java/Utilz/Table.java b/src/main/java/Utilz/Table.java deleted file mode 100644 index 90053c5..0000000 --- a/src/main/java/Utilz/Table.java +++ /dev/null @@ -1,58 +0,0 @@ -package Utilz; - -import java.sql.ResultSet; -import java.sql.SQLException; - -public class Table { - private String [][] matrix ; - -/* -* Конструктор копирует результаты запроса в двумерный массив -* */ - public Table(ResultSet resultSet) { - if (resultSet == null) return; - int q=0; - try { - - while(resultSet.next()){ - q++; - } - matrix=new String[q][resultSet.getMetaData().getColumnCount()]; - resultSet.beforeFirst(); - int rownum=0; - while (resultSet.next()) { - for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) { - matrix[rownum][i]=resultSet.getString(i+1); - } - rownum++; - } - resultSet.beforeFirst(); - }catch (SQLException e) { - Printer.printLog(e); - } - } - public void transposeTable (){ - String [][]rotatedMatrix = new String [matrix[0].length][matrix.length]; - - for (int i=0;i Date: Sat, 9 Feb 2019 23:41:52 +0300 Subject: [PATCH 22/26] 1. Update --- src/main/java/Controller/Controller.java | 20 ++++++++------------ src/main/java/Frames/MyFrame.java | 2 ++ src/main/java/Frames/StartUpWindow.java | 7 ++++++- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/java/Controller/Controller.java b/src/main/java/Controller/Controller.java index 94b5e89..a79def3 100644 --- a/src/main/java/Controller/Controller.java +++ b/src/main/java/Controller/Controller.java @@ -22,8 +22,7 @@ import java.util.*; import java.util.List; import java.util.concurrent.*; -import static Utilz.Printer.printRowToMonitor; -import static java.lang.Thread.sleep; + public class Controller { @@ -42,7 +41,7 @@ static public void main(String[] args) { startFrame.setMessage("File " + BaseConstants.startFile + " not found!" ); return; } - startFrame.setMessage("monitor.ini is handled properly. Please wait some minutes for initialization..."); + startFrame.setMessage("monitor.ini handled properly. Please wait some minutes for initialization..."); if (!checkLisence(BaseConstants.isIsZip())) { startFrame.dispose(); new LicenseWindow(); @@ -51,7 +50,7 @@ static public void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - init(BaseConstants.getInstance().isIsZip()); + init(BaseConstants.isIsZip()); } }); @@ -65,7 +64,7 @@ public static void init(boolean isZip) { frame = new MyFrame("Monitoring - analyzing. Useful edition.", null); frame.setPreferredSize(new Dimension(1000, 500)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.getProccessesPanel().init(sqlExecutor.getWaitingQueue()); + frame.getProccessesPanel().init(SqlExecutor.getWaitingQueue()); frame.pack(); frame.setVisible(true); @@ -90,11 +89,12 @@ private static boolean checkLisence(boolean b) { BaseConstants.setLiesencePath(fh.getFileName()); try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")))) { return checkKey(bf.readLine()); - } catch (IOException e) { - Printer.printLog(e); } catch (ZipException e) { Printer.printLog(e); } + catch (IOException e) { + Printer.printLog(e); + } } } return false; @@ -193,11 +193,7 @@ public static boolean checkKey(String text) { e.printStackTrace(); } - if (c.getTimeInMillis() - currentDate >= 0) { - return true; - } else { - return false; - } + return c.getTimeInMillis() - currentDate >= 0; } private static Calendar getCurrentDate() throws InterruptedException, ExecutionException { diff --git a/src/main/java/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 25c49c6..806a3f1 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -43,6 +43,8 @@ private JSplitPane setHorizontalSplitPanel(){ JSplitPane jSplitPaneInternal = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true); jSplitPaneInternal.setTopComponent(resultView); description.setLineWrap(true); + description.setWrapStyleWord(true); + description.setEditable(false); description.setPreferredSize(new Dimension(300,100)); JScrollPane jsc = new JScrollPane(); jsc.setViewportView(description); diff --git a/src/main/java/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java index b28f145..9b11dd9 100644 --- a/src/main/java/Frames/StartUpWindow.java +++ b/src/main/java/Frames/StartUpWindow.java @@ -6,7 +6,7 @@ import java.awt.*; public class StartUpWindow extends JFrame { - private JLabel textLabel = new JLabel(); + private JTextArea textLabel = new JTextArea(); @@ -16,8 +16,13 @@ public StartUpWindow(String message) throws HeadlessException { setLayout(new BorderLayout()); Container c= getContentPane(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + textLabel.setWrapStyleWord(true); + textLabel.setLineWrap(true); + textLabel.setEditable(false); textLabel.setText(message); + textLabel.setBackground(getBackground()); c.add(textLabel,BorderLayout.NORTH); + } public void setMessage (String message){ textLabel.setText(message); From 0d4416670aae2e8487b810ba18a7d8ffaffe75bb Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 11 Feb 2019 23:12:07 +0300 Subject: [PATCH 23/26] 1. Optimizated saving! --- src/main/java/Test/View1.java | 15 ++------------- src/main/java/Utilz/Printer.java | 8 +++++++- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/main/java/Test/View1.java b/src/main/java/Test/View1.java index 88a5243..b35f339 100644 --- a/src/main/java/Test/View1.java +++ b/src/main/java/Test/View1.java @@ -1,5 +1,6 @@ package Test; +import Controller.Controller; import Frames.MyFrame; import Frames.StartUpWindow; import Utilz.BaseConstants; @@ -87,19 +88,7 @@ public void run() { } private static void initWorkingPool(boolean isEncrypted){ - try { - if (isEncrypted) { - readZipFile(); - } else { - readFolderSql(); - } - } catch (ZipException e) { - Printer.printLog(e); - Printer.printLog("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); - } catch (IOException e) { - Printer.printLog(e); - Printer.printLog("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); - } + Controller.init(isEncrypted); } private static void readFolderSql() throws IOException { diff --git a/src/main/java/Utilz/Printer.java b/src/main/java/Utilz/Printer.java index 44079b8..0cc760d 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -83,7 +83,13 @@ public synchronized static void printLineToMonitor(String text){ } public synchronized static void saveResult(String description, StringBuilder result){ - if (result==null || description==null) return; + if (result==null || description==null) { + return; + } + /*optimizating section*/ + else if (results.get(description)!=null&&results.get(description).getResult().equals(result)){ + return; + } results.put(description,new ResultTable(result, new GregorianCalendar())); saveMaptoFile(); } From 7bb99cdfdaa4d56314f11274a32421d73d441eed Mon Sep 17 00:00:00 2001 From: Albert Date: Mon, 25 Feb 2019 21:02:08 +0300 Subject: [PATCH 24/26] 1. Debaged ExcelReport! --- src/main/java/Reports/IssueSpeed.java | 2 +- src/main/java/Reports/NSHS.java | 2 +- src/main/java/Utilz/SqlProperties.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/Reports/IssueSpeed.java b/src/main/java/Reports/IssueSpeed.java index 71161b0..6b47f5c 100644 --- a/src/main/java/Reports/IssueSpeed.java +++ b/src/main/java/Reports/IssueSpeed.java @@ -136,7 +136,7 @@ public boolean createReport(ResultSet result) { 0, 17 )); - cell_header6.setCellValue("Отчет о сроках принятия решений о выпуске/отказе в выпуске товаров с " +startDate+" по " + finishDate+"."); + cell_header6.setCellValue("Отчет о сроках принятия решений о выпуске/отказе в выпуске товаров с " +getProperty("date1")+" по " + getProperty("date2")+"."); style2.cloneStyleFrom(style); style2.setRotation((short) 0); cell_header6.setCellStyle(style2); diff --git a/src/main/java/Reports/NSHS.java b/src/main/java/Reports/NSHS.java index 3cdba2e..950b4f7 100644 --- a/src/main/java/Reports/NSHS.java +++ b/src/main/java/Reports/NSHS.java @@ -63,7 +63,7 @@ public boolean createReport(ResultSet result) { 0, 3 )); - cell_header.setCellValue("Отчетный период: с " + startDate + " по " + finishDate+"."); + cell_header.setCellValue("Отчетный период: с " + getProperty("date1") + " по " + getProperty("date2")+"."); Row row=worksheet.createRow(1); /*Creating of header*/ diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index 23f1a48..929c406 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -169,11 +169,11 @@ public boolean updatePeriodinFile(){ startTime=toCalendar(StringUtilz.toString(date2)+ " 23:59:59"); if (isZip) { - boolean r= updatePropertiesZipFile("date2", StringUtilz.toString(date2)) | updatePropertiesZipFile("date1", StringUtilz.toString(date1)); + boolean r= updatePropertiesZipFile("date2", StringUtilz.toString(date2)) & updatePropertiesZipFile("date1", StringUtilz.toString(date1)); return r; } else{ - boolean r= updatePropertiesFile("date2", StringUtilz.toString(date2)) | updatePropertiesFile("date1", StringUtilz.toString(date1)); + boolean r= updatePropertiesFile("date2", StringUtilz.toString(date2)) & updatePropertiesFile("date1", StringUtilz.toString(date1)); return r; } } From 417bc0489ec215ff5292ca5b4471ffe7706ac98e Mon Sep 17 00:00:00 2001 From: Albert Date: Sun, 3 Mar 2019 21:41:50 +0300 Subject: [PATCH 25/26] 1. Debaged ExcelReport! --- src/main/java/Utilz/StringCrypter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Utilz/StringCrypter.java b/src/main/java/Utilz/StringCrypter.java index b24bc21..5292623 100644 --- a/src/main/java/Utilz/StringCrypter.java +++ b/src/main/java/Utilz/StringCrypter.java @@ -22,7 +22,7 @@ public class StringCrypter { public static void main(String[] args) { StringCrypter crypter=new StringCrypter(new byte[]{1,4,5,6,8,9,7,8}); - String testStr = "01/03/2019"; + String testStr = "01/05/2019"; // шифрование System.out.println( crypter.encrypt(testStr)); System.out.println(crypter.decrypt(crypter.encrypt(testStr))); From a7ad0e19c3a31350eddf7ddd8e9f9de9ac556013 Mon Sep 17 00:00:00 2001 From: Albert Date: Sun, 10 Mar 2019 22:30:36 +0300 Subject: [PATCH 26/26] 1. Debaged ExcelReport! --- src/main/java/Reports/AbstratReports/AbstractExcelReport.java | 3 +++ src/main/java/Reports/AbstratReports/AbstractReport.java | 3 ++- src/main/java/Reports/AutoRegistration.java | 1 + src/main/java/Utilz/BaseConstants.java | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index c6b337d..030c5a0 100644 --- a/src/main/java/Reports/AbstratReports/AbstractExcelReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java @@ -39,6 +39,9 @@ public AbstractExcelReport(SqlProperties props, SqlExecutor sqlExecutor) { @Override public boolean createReport() { resultSet=executeSqlClause(getProperty("sql")); + if (resultSet==null){ + return false; + } if (createReport(resultSet)){ StringBuilder resultSB = new StringBuilder(); resultSB.append("Report paths:" + "\r\n"); diff --git a/src/main/java/Reports/AbstratReports/AbstractReport.java b/src/main/java/Reports/AbstratReports/AbstractReport.java index 62580fc..d45b567 100644 --- a/src/main/java/Reports/AbstratReports/AbstractReport.java +++ b/src/main/java/Reports/AbstratReports/AbstractReport.java @@ -49,7 +49,8 @@ protected ResultSet executeSqlClause (String sqlClause){ stm.execute(sqlClause); resultSet = stm.getResultSet(); } catch (SQLException e) { - e.printStackTrace(); Printer.saveLogFile(e); ; + e.printStackTrace(); + Printer.saveLogFile(e); ; } catch (NullPointerException e){ Printer.printLog(e); diff --git a/src/main/java/Reports/AutoRegistration.java b/src/main/java/Reports/AutoRegistration.java index 0aeae58..221279b 100644 --- a/src/main/java/Reports/AutoRegistration.java +++ b/src/main/java/Reports/AutoRegistration.java @@ -104,6 +104,7 @@ public boolean createReport(ResultSet result) { style.setRotation((short) 90); createHeader(headerXLS,worksheet,style,1); + insertData(result,worksheet,2); flag=createFile(workbook); return flag; diff --git a/src/main/java/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 251ac36..b8ec025 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -22,7 +22,7 @@ public static void setLiesencePath(String liesencePath) { BaseConstants.liesencePath = liesencePath; } - private String zipPsw = "123"; + private String zipPsw = "albmonitor"; public final static int MAX_COUNT_THREADS=5; public static Map getDbase() {