diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 2e11521..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/Controller/Controller.java b/src/main/java/Controller/Controller.java index 6e377a8..a79def3 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; @@ -20,9 +21,8 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.List; -import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.*; -import static java.lang.Thread.sleep; public class Controller { @@ -30,32 +30,41 @@ public class Controller { private static PriorityBlockingQueue tasksQueue = new PriorityBlockingQueue<>(); private static SqlExecutor sqlExecutor; private static MyFrame frame; + private static StartUpWindow startFrame; + private static StringCrypter stringCrypter = new StringCrypter(); static public void main(String[] args) { - if (!checkLisence(true)) { - new LogginWindow(); + 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 handled properly. Please wait some minutes for initialization..."); + if (!checkLisence(BaseConstants.isIsZip())) { + startFrame.dispose(); + new LicenseWindow(); } else { - init(); + startFrame.dispose(); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + init(BaseConstants.isIsZip()); + } + }); + } } - public static void init() { - initWorkingPool(BaseConstants.getInstance().isIsZip()); - new Thread(() -> createThreads()).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()); + public static void init(boolean isZip) { + initWorkingPool(isZip); + // Here starts sqlExecuter with tasksQueue + new Thread(() -> createSqlExecuter()).start(); + 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.pack(); frame.setVisible(true); @@ -73,23 +82,32 @@ 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")) { - try (BufferedReader bf = new BufferedReader(new InputStreamReader(zipFile.getInputStream(fh)))) { + 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()); - } catch (IOException e) { - e.printStackTrace(); } catch (ZipException e) { - e.printStackTrace(); + Printer.printLog(e); + } + catch (IOException e) { + Printer.printLog(e); } } } return false; } else { - return true; + try (BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(BaseConstants.getLiesencePath()),Charset.forName("UTF-8")))) + {return checkKey(bf.readLine()); + } catch (FileNotFoundException e) { + Printer.printLog(e); + } catch (IOException e) { + Printer.printLog(e); + } } + return false; } private static Calendar stringToCalendar(String s) { @@ -101,6 +119,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) { @@ -109,11 +128,11 @@ private static void initWorkingPool(boolean isEncrypted) { readFolderSql(); } } catch (ZipException e) { - e.printStackTrace(); - System.out.println("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(); - System.out.println("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); + Printer.printLog(e); + Printer.printLog("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); } } @@ -141,69 +160,87 @@ private static void readZipFile() throws ZipException { } List headers = zipFile.getFileHeaders(); for (FileHeader fh : headers) { - System.out.println("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)), fh.getFileName()); + prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh),Charset.forName("UTF-8")), fh.getFileName()); tasksQueue.put(prop); } } } - public static void createThreads() { + public static void createSqlExecuter() { if (tasksQueue.size() > 0) { - Printer.printRowToMonitor(String.valueOf(tasksQueue.size())); + Printer.printLog(String.valueOf(tasksQueue.size())); sqlExecutor = new SqlExecutor(tasksQueue); sqlExecutor.run(); } } 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; - if (c.getTimeInMillis() - getCurrentDate().getTimeInMillis() >= 0) { - return true; - } else { - return false; + c.add(Calendar.MONTH,-1); + long currentDate =0; + + try { + currentDate = getCurrentDate().getTimeInMillis(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); } + + return c.getTimeInMillis() - currentDate >= 0; } - private static Calendar getCurrentDate() { + private static Calendar getCurrentDate() throws InterruptedException, ExecutionException { String sqlClause = "select to_char (current_date, 'dd.MM.yyyy') from dual"; - 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); - 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(); - } - - } + String sDate=null; + 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; + } if (sDate != null) { Calendar cal = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); try { cal.setTime(sdf.parse(sDate)); - System.out.println("Oracle date " + sDate); + Printer.printLog("Oracle date " + sDate); return cal; } catch (ParseException e) { - e.printStackTrace(); - } + Printer.saveLogFile(e); + } } return Calendar.getInstance(); 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: "); + private JTextField logginText = new JTextField(60); + private JButton logginButton = new JButton("Enter key"); + + + + + public LicenseWindow() 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); + //c.add(new JLabel("Contact e-mail: albtutanota@tutanota.com"),BorderLayout.SOUTH); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + logginButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Printer.printLog("Button in LicenseWindow clicked!!!"); + if (Controller.checkKey(logginText.getText())){ + saveKey(logginText.getText()); + Controller.init(BaseConstants.isIsZip()); + } + dispose(); + } + }); + + } + + private void saveKey(String text) { + 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(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); + } + } + else{ + try (BufferedWriter bfw = new BufferedWriter(new FileWriter(BaseConstants.getLiesencePath()))) + { + bfw.write(text); + } catch (FileNotFoundException e) { + Printer.printLog(e); + } catch (IOException e) { + Printer.printLog(e); + } + + } + } + + +} diff --git a/src/main/java/Frames/LogginWindow.java b/src/main/java/Frames/LogginWindow.java deleted file mode 100644 index a9894b8..0000000 --- a/src/main/java/Frames/LogginWindow.java +++ /dev/null @@ -1,85 +0,0 @@ -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 LogginWindow 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 LogginWindow() 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/Frames/MyFrame.java b/src/main/java/Frames/MyFrame.java index 3e2c370..806a3f1 100644 --- a/src/main/java/Frames/MyFrame.java +++ b/src/main/java/Frames/MyFrame.java @@ -9,15 +9,9 @@ public class MyFrame extends JFrame { - private DetailsPanel detailsPanel; private ProccessesPanelTab proccessesPanel; - private TestPanel testPanel; private ResultView resultView = new ResultView(); - //private JTextArea textArea = new JTextArea(); - - public ResultView getTextArea() { - return resultView; - } + private JTextArea description = new JTextArea(); public MyFrame (String title, Map statusMap){ super(title); @@ -25,13 +19,45 @@ 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); + JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); + JSplitPane right = setHorizontalSplitPanel(); + jSplitPane.setResizeWeight(0.5); + jSplitPane.setRightComponent(right); + jSplitPane.setLeftComponent(proccessesPanel); + BorderLayout bl = new BorderLayout(); + c.setLayout(bl); + c.add(jSplitPane,BorderLayout.CENTER); + c.add(new JLabel("Contact e-mail: albtutanota@tutanota.com"),BorderLayout.SOUTH); + } public ProccessesPanelTab getProccessesPanel() { return proccessesPanel; } + public ResultView getTextArea() { return resultView;} + public JTextArea getDescriptionArea(){return description;} + + 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); + jSplitPaneInternal.setBottomComponent(jsc); + return jSplitPaneInternal; + + } + 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/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); - //System.out.println(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 e4f66cc..b5324a3 100644 --- a/src/main/java/Frames/ProccessesPanelTab.java +++ b/src/main/java/Frames/ProccessesPanelTab.java @@ -16,26 +16,31 @@ 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){ - throw new NullPointerException("ProccessPanel.setStatusMap get null parameter"); - } - this.statusMap = (LinkedHashMap) statusMap; - //this.initialMap = statusMap; + + public void init (PriorityBlockingQueue queue) { + + while (queue==null){ + } + + 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(); @@ -49,8 +54,34 @@ 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()); + }*/ + 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); + } + 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")); + } + } + } + + } }); proccessesTable.setSelectionModel(ssm); @@ -58,8 +89,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(); } @@ -82,13 +113,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--){ @@ -99,7 +130,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(); } @@ -109,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); @@ -139,7 +148,7 @@ public void run() { sleep(1000); } catch (InterruptedException e) { - e.printStackTrace(); + Printer.printLog(e); } } } @@ -149,7 +158,8 @@ private class ProcessTableModel extends AbstractTableModel { @Override public int getRowCount() { - return statusMap.size(); + return queue.size(); + //return statusMap.size(); } @Override @@ -159,26 +169,14 @@ 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(); - - } + SqlProperties entry=taskList.get(rowIndex); 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/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/Frames/StartUpWindow.java b/src/main/java/Frames/StartUpWindow.java new file mode 100644 index 0000000..9b11dd9 --- /dev/null +++ b/src/main/java/Frames/StartUpWindow.java @@ -0,0 +1,32 @@ +package Frames; + + + +import javax.swing.*; +import java.awt.*; + +public class StartUpWindow extends JFrame { + private JTextArea textLabel = new JTextArea(); + + + + 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.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); + } + + +} 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/AbstractExcelReport.java b/src/main/java/Reports/AbstratReports/AbstractExcelReport.java index c76c928..030c5a0 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; @@ -31,13 +32,16 @@ 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); @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"); @@ -59,51 +63,51 @@ 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.printRowToMonitor("Error when writing " + s+ " file!"); + Printer.printLog(e); + Printer.printLog("Error when writing " + s+ " file!"); } } closeConnection(resultSet); - flag= getProps().updatePeriodinFile(); - return flag; + //flag= getProps().updatePeriodinFile(); + return true; } - /* */ + /*Добавляет путь для выгрузки*/ protected void addUnloadPath(String outputFile){ paths.add(outputFile); } /* - * delimiter + * Метод возвращают текущую дату в виде строки с разделителем delimiter * */ protected String getCurrentDate (String delimiter){ Calendar c= new GregorianCalendar(); 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 + * Метод выравнивает длину строки знаками 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() 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(" : " + startDate + " " + finishDate+"."); + cell_header.setCellValue("Отчетный период: с " + getProperty("date1") + " по " + getProperty("date2")+"."); Row row=worksheet.createRow(1); /*Creating of header*/ - // + // Создаем стиль ячейки для заголовка таблицы HSSFCellStyle style = workbook.createCellStyle(); style.setWrapText(true); @@ -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/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 new file mode 100644 index 0000000..950b4f7 --- /dev/null +++ b/src/main/java/Reports/NSHS.java @@ -0,0 +1,89 @@ +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(); + 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("Отчетный период: с " + getProperty("date1") + " по " + getProperty("date2")+"."); + + 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/Reports/OktsOilReport.java b/src/main/java/Reports/OktsOilReport.java index c2ee279..866c587 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; @@ -24,12 +25,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 +45,7 @@ public boolean createReport(ResultSet result) { Row row=worksheet.createRow(0); /*Creating of header*/ - // + // Создаем стиль ячейки для заголовка таблицы HSSFCellStyle style = workbook.createCellStyle(); style.setWrapText(true); @@ -79,7 +80,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 +110,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,13 +120,13 @@ 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); } result.beforeFirst(); } catch (SQLException e) { - e.printStackTrace(); + Printer.printLog(e); } return rownum; diff --git a/src/main/java/Reports/RegularMonitor.java b/src/main/java/Reports/RegularMonitor.java index 8d7f0c0..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("Конструктор RegularMonitor: cтартуем поток " + description + ", сервер подключения: " + getProperty("server")); + Printer.printLog("Thread starting " + description + ", server: " + getProperty("server") + " (Constructor of RegularMonitor)"); } @Override @@ -31,183 +31,36 @@ 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) { - Printer.printRowToMonitor(description + " selection returns null " + sCurrentDateTime); + Printer.printLog(description + " selection returns null " + sCurrentDateTime); return false; } - Printer.saveResult(getProperty("description"),null); - 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; } - } 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(); + Printer.printLog(e); 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/Reports/ReportFactory.java b/src/main/java/Reports/ReportFactory.java index 1218e7e..081e746 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,23 +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.printLog(e); } catch (IllegalAccessException e) { - e.printStackTrace(); + Printer.printLog(e); } catch (ClassNotFoundException e) { - System.out.println("Класс не существует"); - e.printStackTrace(); + Printer.printLog("Class not found!!! (report factory)"); + Printer.printLog(e); } catch (NoSuchMethodException e) { - e.printStackTrace(); + Printer.printLog(e); } catch (InvocationTargetException e) { - e.printStackTrace(); + 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 6c31033..e645f9b 100644 --- a/src/main/java/Reports/Table.java +++ b/src/main/java/Reports/Table.java @@ -1,13 +1,18 @@ 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 ; /* -* +* Конструктор копирует результаты запроса в двумерный массив * */ public Table(ResultSet resultSet) { if (resultSet == null) return; @@ -28,8 +33,8 @@ public Table(ResultSet resultSet) { } resultSet.beforeFirst(); }catch (SQLException e) { - e.printStackTrace(); - } + Printer.printLog(e); + } } public void transposeTable (){ String [][]rotatedMatrix = new String [matrix[0].length][matrix.length]; @@ -46,9 +51,9 @@ public void printMatrix (){ if (matrix==null) return; for (int i=0;i statusmap = new HashMap<>(); @@ -29,7 +35,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); @@ -42,9 +52,9 @@ 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(); + frame.pack();*/ } @@ -52,11 +62,11 @@ private void test1 (){ try { readZipFile(); } catch (ZipException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } printMap(); initWorkingPool(false); - System.out.println("--------------------"); + Printer.printLog("--------------------"); printMap(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -72,25 +82,13 @@ public void run() { try { Thread.sleep (1000); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); Printer.saveLogFile(e); ; } //frame.getProccessesPanel().updateProccessList(); } private static void initWorkingPool(boolean isEncrypted){ - try { - if (isEncrypted) { - readZipFile(); - } else { - readFolderSql(); - } - } catch (ZipException e) { - e.printStackTrace(); - System.out.println("File " + BaseConstants.getInstance().getZipFileSQL() + " generated I/O exception!"); - } catch (IOException e) { - e.printStackTrace(); - System.out.println("Folder " + BaseConstants.getInstance().getPathSQL() + " generated I/O exception!"); - } + Controller.init(isEncrypted); } private static void readFolderSql() throws IOException { @@ -117,10 +115,10 @@ 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()); + prop.loadFromFile(new InputStreamReader(zipFile.getInputStream(fh), Charset.forName("UTF-8")),fh.getFileName()); statusmap.put(prop,false); } } @@ -128,9 +126,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/Utilz/BaseConstants.java b/src/main/java/Utilz/BaseConstants.java index 066beea..b8ec025 100644 --- a/src/main/java/Utilz/BaseConstants.java +++ b/src/main/java/Utilz/BaseConstants.java @@ -1,49 +1,74 @@ package Utilz; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; +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 String zipPsw = "123"; + private static String liesencePath="C:\\Java\\SQL\\liesence.txt"; + public final static String logFile = "C:\\Java"; + + public static String getLiesencePath() { + return liesencePath; + } + + public static void setLiesencePath(String liesencePath) { + BaseConstants.liesencePath = liesencePath; + } + + private String zipPsw = "albmonitor"; + public final static int MAX_COUNT_THREADS=5; 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 FileInputStream(new File(startFile))); - } catch (IOException e) { - e.printStackTrace(); - } + 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"); 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")); + 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(){ - 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/ConnectorToOracle.java b/src/main/java/Utilz/ConnectorToOracle.java index 72d5d07..69bee6a 100644 --- a/src/main/java/Utilz/ConnectorToOracle.java +++ b/src/main/java/Utilz/ConnectorToOracle.java @@ -5,6 +5,7 @@ import java.sql.SQLException; import java.util.HashMap; +import static Utilz.Printer.printRowToMonitor; import static java.lang.Thread.sleep; public class ConnectorToOracle { @@ -30,33 +31,31 @@ public static ConnectorToOracle getInstance() { } } - public Connection getConnection (String server) { + public Connection getConnection (String server) throws SQLException { synchronized (ConnectorToOracle.class){ Integer num = counterConections.get(server); - Connection con; - if (num != null && num != 0) { + + + if (num != null && num != 0 && !conections.get(server).isClosed()) { num++; - } else { - try { - DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); - con = DriverManager.getConnection( + counterConections.put(server, num); + Printer.printLog("Count of connections for " + server + " is: " +counterConections.get(server)); + return conections.get(server); + } + num=0; + counterConections.put(server, num); + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection con = DriverManager.getConnection( BaseConstants.getInstance().getConnectionString(server), BaseConstants.getInstance().getLog(server), BaseConstants.getInstance().getPsw(server)); - Printer.printRowToMonitor("Connected Successfully to Oracle instance " + server); - conections.put(server, con); - num = 1; - } catch (SQLException e) { - Printer.printRowToMonitor("Error when connect to Oracle instance " + server); - e.printStackTrace(); - } - finally { - - } - } + Printer.printLog("Connected Successfully to Oracle instance " + server); + conections.put(server, con); + num++; counterConections.put(server, num); + Printer.printLog("Count of connections for " + server + " is first: " +counterConections.get(server)); return conections.get(server); - } + } } public boolean closeConnection (String server){ @@ -69,7 +68,7 @@ public boolean closeConnection (String server){ conections.get(server).close(); return true; } catch (SQLException e) { - e.printStackTrace(); + Printer.printLog(e); return false; } } diff --git a/src/main/java/Utilz/Desipher.java b/src/main/java/Utilz/Desipher.java deleted file mode 100644 index 5200f38..0000000 --- a/src/main/java/Utilz/Desipher.java +++ /dev/null @@ -1,43 +0,0 @@ -package Utilz; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; - -public class Desipher { - 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/Printer.java b/src/main/java/Utilz/Printer.java index cc6c843..0cc760d 100644 --- a/src/main/java/Utilz/Printer.java +++ b/src/main/java/Utilz/Printer.java @@ -1,8 +1,8 @@ package Utilz; -import java.io.IOException; -import java.io.UnsupportedEncodingException; +import java.io.*; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -16,22 +16,80 @@ public class Printer { private static ConcurrentMap 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(); + } - public static void printRowToMonitor(String text){ - try { - String utfString = new String (text.getBytes("windows-1251")); - System.out.println(utfString); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + } + + 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(); + } + } + + try (FileWriter fw = new FileWriter(path.toString(), true)) { + 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); } 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){ - 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(); } @@ -53,25 +111,37 @@ private synchronized static boolean saveMaptoFile(){ for (ConcurrentMap.Entry pair: results.entrySet()) { - sb.append("\n\r"); - sb.append("--------------------------------"); - sb.append(pair.getKey()); - sb.append(' '); - sb.append(pair.getValue().getDateTime()); - sb.append("-----------------------------------\r\n"); - + 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()); + 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"){ + //fout.write(""); + String secondString = new String(sb.toString().getBytes("windows-1251"),"UTF-8"); + while (fos.) - sb.append("--------------------------------"); - sb.append(pair.getKey()); - sb.append("-----------------------------------\r\n"); - sb.append("\n\r"); + fout.write (secondString); } + catch (IOException e) { + e.printStackTrace(); ; + }*/ try { Files.write(path, (sb.toString()).getBytes("windows-1251"), - StandardOpenOption.WRITE); + StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { e.printStackTrace(); return false; @@ -80,7 +150,7 @@ private synchronized static boolean saveMaptoFile(){ } 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()); @@ -99,12 +169,14 @@ private static class ResultTable { public ResultTable(StringBuilder result, Calendar c) { this.result=result; dateTime=toStringBulder(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(':'); @@ -112,7 +184,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; diff --git a/src/main/java/Utilz/SqlExecutor.java b/src/main/java/Utilz/SqlExecutor.java index cc19d67..c73eed7 100644 --- a/src/main/java/Utilz/SqlExecutor.java +++ b/src/main/java/Utilz/SqlExecutor.java @@ -2,61 +2,87 @@ import Reports.AbstratReports.AbstractReport; +import Reports.AbstratReports.Report; 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; +import java.util.concurrent.Executors; import java.util.concurrent.PriorityBlockingQueue; public class SqlExecutor extends Thread{ private static PriorityBlockingQueue waitingQueue; - private Map workingPool=new LinkedHashMap<>(); + private final Object lock = new Object(); + + //ExecutorService service = Executors.newFixedThreadPool(BaseConstants.MAX_COUNT_THREADS); + HashMap services = new HashMap<>(); + //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())); - } + SqlExecutor.waitingQueue=queue; + /* for (SqlProperties prop:waitingQueue) { + // workingPool.put(prop,false); + *//* prop.addProperty("timeStampLastExecution", getCurrentDateTime()); + prop.addProperty("asleeptime", String.valueOf(prop.calcSleepingTime()));*//* + }*/ } @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) { - waitingQueue.remove(sqlProp); - ReportFactory.create(sqlProp, this); - workingPool.put(sqlProp,true); + 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); + } + else if(period > 0 && !sqlProp.isRunning()){ + try { + lock.wait(period); + } catch (InterruptedException e) { + Printer.printLog(e); + } + } + } + lock.notifyAll(); } } } + public void addQueue(AbstractReport abstractReport){ - abstractReport.addProperty("timeStampLastExecution", getCurrentDateTime()); - abstractReport.addProperty("asleeptime", String.valueOf(abstractReport.getProps().calcSleepingTime())); - waitingQueue.add(abstractReport.getProps()); - workingPool.put(abstractReport.getProps(),false); - try { - sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); + 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(" "+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) + " ."); - - } + 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 " + + String.valueOf(period / 1000 % 60) + " sec " + + String.valueOf(period %1000) + " milisec."); + } private String getCurrentDateTime (){ LocalDateTime date = LocalDateTime.now(); @@ -67,9 +93,4 @@ public static PriorityBlockingQueue getWaitingQueue() { return waitingQueue; } - public Map getWorkingPool() { - return workingPool; - } - - } diff --git a/src/main/java/Utilz/SqlProperties.java b/src/main/java/Utilz/SqlProperties.java index dd4c2c9..929c406 100644 --- a/src/main/java/Utilz/SqlProperties.java +++ b/src/main/java/Utilz/SqlProperties.java @@ -2,24 +2,27 @@ 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.*; -import java.nio.charset.StandardCharsets; + 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{ +public class SqlProperties implements Comparable{ private HashMap map = new HashMap(); private String sourceFile =null; private Calendar startTime; private boolean isZip; + private boolean isRunning; + private int localPeriod=0; + private static final Object lock = new Object(); + //private Calendar timeToStart=null; /* *Reading props file with SQL query from param @@ -28,23 +31,20 @@ public class SqlProperties implements Comparable{ public SqlProperties(boolean isZip) { this.isZip = isZip; + this.isRunning=false; + } + + public Calendar getStartTime() { + return startTime; } public void setZip(boolean zip) { isZip = 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(); - }*/ + public synchronized HashMap loadFromFile(InputStreamReader isr, String filePath) { + StringBuilder stringB = getFileContextFromStream(isr); + String [] params = stringB.toString().split(";"); for (int i=0;i0){ + map.put("period", String.valueOf(localPeriod)); + } //updateTimeToStart(); 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 { - startTime=toCalendar(getProperty("date2")); + + startTime=toCalendar(getProperty("date2")+ " 23:59:59"); } return map; } 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(); + Printer.printLog(e); } catch (IOException e) { - e.printStackTrace(); + Printer.printLog(e); } 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(){ if (map == null || map.size()==0) { - System.out.println("Empty PropMap"); + Printer.printLog("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() ); } } @@ -163,19 +127,12 @@ 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 (){ - 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 +143,11 @@ public boolean updatePeriodinFile(){ if (getProperty("period")==null){ return false; } + startTime = GregorianCalendar.getInstance(); addLong(startTime, Long.valueOf (getProperty("period"))); return true; } + Calendar date1= toCalendar(getProperty("date1")); Calendar date2= toCalendar(getProperty("date2")); switch (map.get("reportPeriod")){ @@ -202,37 +161,43 @@ public boolean updatePeriodinFile(){ break; case "month": date1.add(Calendar.MONTH,1); - date1.add(Calendar.MONTH,1); + date2.add(Calendar.MONTH,1); break; } + //startTime=date2; + + startTime=toCalendar(StringUtilz.toString(date2)+ " 23:59:59"); if (isZip) { - return updatePropertiesZipFile("date1", toString(date1)) | updatePropertiesZipFile("date2", toString(date2)); + + boolean r= updatePropertiesZipFile("date2", StringUtilz.toString(date2)) & updatePropertiesZipFile("date1", StringUtilz.toString(date1)); + return r; } else{ - return updatePropertiesFile("date1", toString(date1)) | updatePropertiesFile("date2", toString(date2)); + boolean r= updatePropertiesFile("date2", StringUtilz.toString(date2)) & updatePropertiesFile("date1", StringUtilz.toString(date1)); + return r; } } public Calendar toCalendar(String sdate){ - String [] dateParts = sdate.split("\\.|/"); - if (dateParts.length!=3) return null; - dateParts[0]=alignString(dateParts[0],2,"0"); - dateParts[1]=alignString(dateParts[1],2,"0"); - if (dateParts[2].length()==2){ - dateParts[2]=alignString(dateParts[2],4,"20"); - } + String [] dateParts = sdate.split("\\.|/| |:"); Calendar c = new GregorianCalendar(); - c.set(Integer.valueOf(dateParts[2]),Integer.valueOf(dateParts[1])-1,Integer.valueOf(dateParts[0])); - //c.getTime(); - + if (dateParts.length!=3 & dateParts.length!=6) return null; + dateParts[0] = alignString(dateParts[0], 2, "0"); + dateParts[1] = alignString(dateParts[1], 2, "0"); + if (dateParts[2].length() == 2) { + dateParts[2] = alignString(dateParts[2], 4, "20"); + } + c.set(Integer.valueOf(dateParts[2]), Integer.valueOf(dateParts[1]) - 1, Integer.valueOf(dateParts[0])); + if (dateParts.length==6){ + c.set(Calendar.HOUR_OF_DAY,Integer.valueOf(dateParts[3])); + c.set(Calendar.MINUTE,Integer.valueOf(dateParts[4])); + c.set(Calendar.SECOND,Integer.valueOf(dateParts[5])); + } + 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 * */ @@ -247,7 +212,7 @@ protected String alignString (String object, int quantitySigns, String sign){ private boolean updatePropertiesFile(String nameProperty, String value){ //найти в файле свойство и переписать его значение и перезагрузить - System.out.println("FileName sourceFile " + sourceFile); + Printer.printLog(getProperty("description") + ", updatePropertiesFile. FileName sourceFile " + sourceFile); Path path = Paths.get(sourceFile); try { String contentOfFile = new String(Files.readAllBytes(path)); @@ -255,56 +220,64 @@ private boolean updatePropertiesFile(String nameProperty, String value){ Files.write(path,contentOfFile.getBytes()); map=loadFromFile(path.toFile()); } catch (IOException e) { - e.printStackTrace(); + Printer.printLog(e); } return true; } - private 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) { + Printer.printLog(e); try { - zipFile=new ZipFile(zipFilePath); - if (zipFile.isEncrypted()){ - zipFile.setPassword(BaseConstants.getInstance().getZipPsw()); - } - fHeader =zipFile.getFileHeader(sourceFile); - } catch (ZipException e) { - e.printStackTrace(); + wait(10000); + } catch (InterruptedException e1) { + Printer.printLog(e1); } - 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(); - } catch (ZipException e) { - e.printStackTrace(); - } - /*replace value in StringBuilder*/ - 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 */ - 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(); - } catch (ZipException e) { - e.printStackTrace(); + ) { + isr.getEncoding(); + stringB = getFileContextFromStream(isr); + zipFile.removeFile(fHeader); + } catch (IOException e) { + Printer.printLog(e); + } catch (ZipException e) { + Printer.printLog(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); + //map.put(nameProperty,value); + } catch (IOException e) { + Printer.printLog(e); + } catch (ZipException e) { + Printer.printLog(e); } } return true; } @@ -321,15 +294,32 @@ private StringBuilder getFileContextFromStream(InputStreamReader isr) { //stringB.append(" "); } } catch (IOException e) { - e.printStackTrace(); + Printer.printLog(e); } 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; } } diff --git a/src/main/java/Utilz/StringCrypter.java b/src/main/java/Utilz/StringCrypter.java new file mode 100644 index 0000000..5292623 --- /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/05/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/main/java/Utilz/StringUtilz.java b/src/main/java/Utilz/StringUtilz.java new file mode 100644 index 0000000..cf60b6a --- /dev/null +++ b/src/main/java/Utilz/StringUtilz.java @@ -0,0 +1,32 @@ +package Utilz; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +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() result =null; + + InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(sqlProp.getBytes()), Charset.forName("UTF-8")); + + result = sqlProperties.loadFromFile(isr, filePath); + Printer.printLog("startTime = " +sqlProperties.getStartTime().getTime()); + Printer.printLog(sqlProperties.toCalendar(result.get("date2")+ " 23:59:59").getTime().toString()); + 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