From bada88b5ea89716a64bc9e04f46ce526cb7cbbf0 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Sun, 30 Oct 2016 22:21:03 +0300 Subject: [PATCH 01/15] Commiting to merge --- .../g597/sigareva/task1/TinyCalculator.java | 278 ++++++++++++++++++ .../sigareva/task2/KeyValueStorageImpl.java | 50 ++++ pom.xml | 1 + 3 files changed, 329 insertions(+) create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java new file mode 100644 index 000000000..61950e62d --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java @@ -0,0 +1,278 @@ +package ru.mipt.java2016.homework.g597.sigareva.task1; + +import ru.mipt.java2016.homework.base.task1.Calculator; +import ru.mipt.java2016.homework.base.task1.ParsingException; + +import java.util.Stack; +import java.util.Vector; + +public class TinyCalculator implements Calculator { + + public static void main(String[] args) { + String expression = " 1 + 2 + 3"; +// TinyCalculator calculator = new TinyCalculator(expression); + TinyCalculator calculator = new TinyCalculator(); + try { + System.out.println(calculator.calculate(expression)); + } catch (ParsingException e) { + System.out.println(e.toString()); + } + } + +// public TinyCalculator(final String expression) { +// try { +// this.calculate(expression); +// } catch (ParsingException e) { +// System.out.println(e.toString()); +// } +// } + + @Override + public double calculate(final String expression) throws ParsingException { + + + String numbers = "0123456789"; + String operations = "+-/*"; + + StringBuilder new_expression = new StringBuilder(expression.subSequence(0, expression.length())); + + StringBuilder new_number = new StringBuilder(); + + Stack first_stack = new Stack<>(); + Stack second_stack = new Stack<>(); + + boolean number_began = false; + boolean double_number = false; + boolean space_wrote = false; + boolean operation_has_done = false; + + for (int i = new_expression.length() - 1; i >= 0; --i) { + + } + + for (int i = 0; i < new_expression.length(); ++i) { + + boolean is_operation = false; + + for (int j = 0; j < operations.length(); ++j) { + if (new_expression.charAt(i) == operations.charAt(j)) { + is_operation = true; + break; + } + } + + boolean is_digit = false; + + for (int j = 0; j < numbers.length(); ++j) { + if (new_expression.charAt(i) == numbers.charAt(j)) { + is_digit = true; + break; + } + } + + if (new_expression.charAt(i) == '(') { + space_wrote = false; + if (number_began) { + throw new ParsingException("Cannot resolve"); + } else { + first_stack.add(new_expression.charAt(i)); + operation_has_done = false; + } + } + else { + if (new_expression.charAt(i) == ')') { + if (space_wrote) + space_wrote = false; + if (!number_began) { + throw new ParsingException("Cannot resolve"); + } + else { + operation_has_done = false; + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + double_number = false; + + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + first_stack.removeElementAt(first_stack.size() - 1); + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + } + } else { + if (is_operation && number_began) { + operation_has_done = true; + space_wrote = false; + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + double_number = false; + + if (new_expression.charAt(i) == '+') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '-') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '*') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '/') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + } else { + if (is_digit) { + if (number_began && !space_wrote) { + new_number.append(new_expression.charAt(i)); + } else { + if(!number_began) { + operation_has_done = false; + number_began = true; + new_number.append(new_expression.charAt(i)); + } + else{ + throw new ParsingException("Cannot resolve"); + } + } + } else { + if (new_expression.charAt(i) == '.' && !double_number && number_began) { + new_number.append(new_expression.charAt(i)); + double_number = true; + } else { + if (new_expression.charAt(i) == ' ') { + if (number_began) { + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + space_wrote = true; + double_number = false; + } + } else { + throw new ParsingException("Cannot resolve"); + } + } + } + } + } + } + } + + if (operation_has_done){ + throw new ParsingException("Cannot resolve"); + } + + if (new_number.length() > 0) { + second_stack.add(new_number.toString()); + } + + while (first_stack.size() > 0){ + boolean flag = false; + for (int j = 0; j < operations.length(); ++j){ + if (first_stack.lastElement() == operations.charAt(j)){ + flag = true; + second_stack.add(Character.toString(first_stack.lastElement())); + first_stack.remove(first_stack.size() - 1); + break; + } + } + if (!flag){ + throw new ParsingException("Cannot resolve"); + } + } + + for (String s : second_stack) { + System.out.print(s + " "); + } + + System.out.println(); + + Vector result = new Vector<>(); + + for (int j = 0; j < second_stack.size(); ++j){ + + boolean operation_was_done = false; + + if (second_stack.elementAt(j).equals("+")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number + second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("-")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number - second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("*")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number * second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("/")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number / second_number); + operation_was_done = true; + } + if (!operation_was_done){ + result.add(Double.parseDouble(second_stack.elementAt(j))); + } + } + + return result.lastElement(); + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java new file mode 100644 index 000000000..90b2b21c1 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -0,0 +1,50 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; + +/** + * Created by 1 on 30.10.2016. + */ +public class KeyValueStorageImpl implements KeyValueStorage { + + HashMap mapa; + + @Override + public Object read(Object key) throws IOException { + return null; + } + + @Override + public boolean exists(Object key) throws IOException { + return false; + } + + @Override + public void write(Object key, Object value) { + + } + + @Override + public void delete(Object key) { + + } + + @Override + public Iterator readKeys() { + return null; + } + + @Override + public int size() { + return 0; + } + + @Override + public void close() throws IOException { + + } +} diff --git a/pom.xml b/pom.xml index e5ab847a9..3838b641b 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ homework-g000-lavrentyev homework-g597-vasilyev homework-g597-moiseev + homework-g597-sigareva From 62db6381bc2167f96453ca07e9585b5957be8d91 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 00:47:31 +0300 Subject: [PATCH 02/15] =?UTF-8?q?=D0=AF=20=D0=BD=D0=B5=20=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D1=8E,=20=D0=B2=20=D1=87=D0=B5=D0=BC=20=D0=BC=D0=BE?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework-g597-sigareva/pom.xml | 34 ++++++ .../task2/IntegerDoubleSerialisator.java | 37 +++++++ .../sigareva/task2/KeyValueStorageImpl.java | 90 +++++++++++++-- .../sigareva/task2/ObjectSerialisator.java | 103 ++++++++++++++++++ .../task2/StringStringSerialisator.java | 39 +++++++ .../sigareva/task2/StudentSerialisator.java | 71 ++++++++++++ .../g597/sigareva/task2/TestClass.java | 43 ++++++++ 7 files changed, 407 insertions(+), 10 deletions(-) create mode 100644 homework-g597-sigareva/pom.xml create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java create mode 100644 homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java diff --git a/homework-g597-sigareva/pom.xml b/homework-g597-sigareva/pom.xml new file mode 100644 index 000000000..06a1ac6d2 --- /dev/null +++ b/homework-g597-sigareva/pom.xml @@ -0,0 +1,34 @@ + + + + mipt-java-2016 + ru.mipt.java2016 + 1.0.0 + + + 4.0.0 + + homework-g597-sigareva + + + + ru.mipt.java2016 + homework-base + 1.0.0 + + + ru.mipt.java2016 + homework-tests + 1.0.0 + test + + + ru.mipt.java2016 + homework-tests + 1.0.0 + + + + \ No newline at end of file diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java new file mode 100644 index 000000000..11836bc43 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java @@ -0,0 +1,37 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.IOException; + +/** + * Created by 1 on 30.10.2016. + */ +public class IntegerDoubleSerialisator extends ObjectSerialisator { + + IntegerDoubleSerialisator(String path_) { + super(path_); + } + + @Override + void write(Object key, Object value) { + outputStream.print(key); + outputStream.print(":"); + outputStream.print(value); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + if (input == null){ + throw new IOException("EOF"); + } + else { + int border = input.indexOf(":"); + Integer key = Integer.parseInt(input.substring(0, border)); + Double value = Double.parseDouble(input.substring(border + 1, input.length())); + return new Pair(key, value); + } + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index 90b2b21c1..b557f6b34 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -1,50 +1,120 @@ package ru.mipt.java2016.homework.g597.sigareva.task2; +import javafx.util.Pair; import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; +import java.util.zip.CheckedInputStream; /** * Created by 1 on 30.10.2016. */ public class KeyValueStorageImpl implements KeyValueStorage { + private Boolean FileOpen = true; + private File lockFile; + + KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { + + if (keyType == "Integer" && valueType == "Double"){ + Serialisator = new IntegerDoubleSerialisator(path); + mapa = new HashMap(); + } else if (keyType == "String" && valueType == "String") { + Serialisator = new StringStringSerialisator(path); + mapa = new HashMap(); + } else if (keyType == "StudentKey" && valueType == "Student") { + Serialisator = new StudentSerialisator(path); + mapa = new HashMap(); + } + if(!Serialisator.goodFile){ + System.out.println("Lenin is sad"); + } + else{ + Serialisator.CheckBeforeRead(); + while(true){ + try{ + Pair currPair = Serialisator.read(); + mapa.put(currPair.getKey(), currPair.getValue()); + } + catch (IOException e){ + if (e.getMessage() == "EOF"){ + break; + } + } + } + } + } + +ObjectSerialisator Serialisator; + HashMap mapa; @Override public Object read(Object key) throws IOException { - return null; + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + return mapa.get(key); } @Override public boolean exists(Object key) throws IOException { - return false; + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + return mapa.containsKey(key); } @Override - public void write(Object key, Object value) { - + public void write(Object key, Object value) throws IOException { + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + mapa.put(key, value); } @Override - public void delete(Object key) { - + public void delete(Object key) throws IOException { + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + mapa.remove(key); } @Override - public Iterator readKeys() { - return null; + public Iterator readKeys() throws IOException { + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + return mapa.keySet().iterator(); } @Override - public int size() { - return 0; + public int size() throws IOException { + if (!FileOpen) { + throw new IOException("Lenin is sad"); + } + return mapa.size(); } @Override public void close() throws IOException { + Serialisator.CheckBeforeWrite(); + Iterator currIter = mapa.entrySet().iterator(); + while(currIter.hasNext()){ + Map.Entry thisEntry = (Map.Entry) currIter.next(); + Serialisator.write(thisEntry.getKey(), thisEntry.getValue()); + } + Serialisator.outputStream.close(); + FileOpen = false; } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java new file mode 100644 index 000000000..e12ea5dbd --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -0,0 +1,103 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.*; + +/** + * Created by 1 on 30.10.2016. + */ +public abstract class ObjectSerialisator { + abstract void write(K key, V value); + abstract Pair read() throws IOException; + + public BufferedReader inputStream; + public PrintWriter outputStream; + String path; + String myFile; + boolean goodFile = true; + + ObjectSerialisator(String path_){ + path = path_; + StringBuilder adress = new StringBuilder(); + adress.append(path); + adress.append("\\Lenin_luchshiy"); // название хранилища + myFile = adress.toString(); + + if ((new File(myFile)).exists()) { + try{ + inputStream = new BufferedReader(new FileReader(myFile)); + String firstString = inputStream.readLine(); + if(!firstString.equals("Lenin is the best. Lenin is my love!")){ + goodFile = false; + } + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + + } else { + File f = new File(myFile); + try { + f.createNewFile(); + outputStream = new PrintWriter(new FileWriter(myFile)); + outputStream.print("Lenin is the best. Lenin is my love!"); + openOutputStream = true; + outputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + } + + boolean openInputStream = false; + boolean openOutputStream = false; + + void CheckBeforeRead(){ + if(openInputStream){ + try { + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + if(openOutputStream){ + outputStream.close(); + } + try{ + inputStream = new BufferedReader(new FileReader(myFile)); + String someString = inputStream.readLine(); + openInputStream = true; + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + + void CheckBeforeWrite(){ + if(openInputStream){ + try { + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + if(openOutputStream){ + outputStream.close(); + } + try{ + outputStream = new PrintWriter(new FileWriter(myFile)); + openOutputStream = true; + outputStream.print("Lenin is the best. Lenin is my love!\n"); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + + +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java new file mode 100644 index 000000000..7a4d56d3b --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -0,0 +1,39 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.IOException; + +/** + * Created by 1 on 31.10.2016. + */ +public class StringStringSerialisator extends ObjectSerialisator { + + StringStringSerialisator(String path_) { + super(path_); + } + + @Override + void write(String key, String value) { + outputStream.print(key); + outputStream.print(":"); + outputStream.print(value); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + System.out.println(input); + if (input == null){ + throw new IOException("EOF"); + } + else { + int border = input.indexOf(":"); + String key = input.substring(0, border); + String value = input.substring(border + 1, input.length()); + return new Pair(key, value); + } + } +} + diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java new file mode 100644 index 000000000..ce791f984 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -0,0 +1,71 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import javafx.util.Pair; +import java.io.IOException; +import java.util.Date; + +/** + * Created by 1 on 31.10.2016. + * private final String hometown; + private final Date birthDate; + private final boolean hasDormitory; + private final double averageScore; + + private final int groupId; + private final String name; + */ +class StudentSerialisator extends ObjectSerialisator { + + StudentSerialisator(String path_) { + super(path_); + } + + @Override + void write(StudentKey key, Student value) { + outputStream.print(key.getGroupId()); + outputStream.print(" "); + outputStream.print(key.getName()); + outputStream.print(":"); + outputStream.print(value.getHometown()); + outputStream.print(" "); + outputStream.print(value.getBirthDate().getTime()); + outputStream.print(" "); + outputStream.print(value.isHasDormitory()); + outputStream.print(" "); + outputStream.print(value.getAverageScore()); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + //System.out.println(input); + if (input == null) { + throw new IOException("EOF"); + } else { + StringBuilder newInput = new StringBuilder(input.subSequence(0, input.length())); + int border = newInput.indexOf(" "); + int StudentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); + newInput.delete(0, border + 1); + border = newInput.indexOf(":"); + String StudentKeyName = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + String ValueHomeTown = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Date ValueDate = new Date(Long.parseLong(newInput.substring(0, border))); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Boolean ValueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); + newInput.delete(0, border + 1); + Double ValueAverage = Double.parseDouble(newInput.toString()); + StudentKey key = new StudentKey(StudentKeyGroupId, StudentKeyName); + Student value = new Student(StudentKeyGroupId, StudentKeyName, ValueHomeTown, ValueDate, ValueHasDormitory, ValueAverage); + return new Pair(key, value); + } + } +} \ No newline at end of file diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java new file mode 100644 index 000000000..1935f8413 --- /dev/null +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -0,0 +1,43 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.io.IOException; + +/** + * Created by 1 on 31.10.2016. + */ +public class TestClass extends AbstractSingleFileStorageTest { + @Override + protected KeyValueStorage buildStringsStorage(String path) { + try { + return new KeyValueStorageImpl(path, "String", "String"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected KeyValueStorage buildNumbersStorage(String path) { + try { + return new KeyValueStorageImpl(path, "Integer", "Double"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected KeyValueStorage buildPojoStorage(String path) { + try { + return new KeyValueStorageImpl(path, "StudentKey", "Student"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } +} From 314269f0dc8edfcb82516f6beaa6ba9ac27c11df Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Sun, 30 Oct 2016 22:21:03 +0300 Subject: [PATCH 03/15] Commiting to merge --- homework-g597-sigareva/pom.xml | 34 +++ .../g597/sigareva/task1/TinyCalculator.java | 278 ++++++++++++++++++ .../task2/IntegerDoubleSerialisator.java | 37 +++ .../sigareva/task2/KeyValueStorageImpl.java | 120 ++++++++ .../sigareva/task2/ObjectSerialisator.java | 103 +++++++ .../task2/StringStringSerialisator.java | 39 +++ .../sigareva/task2/StudentSerialisator.java | 71 +++++ .../g597/sigareva/task2/TestClass.java | 43 +++ pom.xml | 1 + 9 files changed, 726 insertions(+) create mode 100644 homework-g597-sigareva/pom.xml create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java create mode 100644 homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java diff --git a/homework-g597-sigareva/pom.xml b/homework-g597-sigareva/pom.xml new file mode 100644 index 000000000..06a1ac6d2 --- /dev/null +++ b/homework-g597-sigareva/pom.xml @@ -0,0 +1,34 @@ + + + + mipt-java-2016 + ru.mipt.java2016 + 1.0.0 + + + 4.0.0 + + homework-g597-sigareva + + + + ru.mipt.java2016 + homework-base + 1.0.0 + + + ru.mipt.java2016 + homework-tests + 1.0.0 + test + + + ru.mipt.java2016 + homework-tests + 1.0.0 + + + + \ No newline at end of file diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java new file mode 100644 index 000000000..61950e62d --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java @@ -0,0 +1,278 @@ +package ru.mipt.java2016.homework.g597.sigareva.task1; + +import ru.mipt.java2016.homework.base.task1.Calculator; +import ru.mipt.java2016.homework.base.task1.ParsingException; + +import java.util.Stack; +import java.util.Vector; + +public class TinyCalculator implements Calculator { + + public static void main(String[] args) { + String expression = " 1 + 2 + 3"; +// TinyCalculator calculator = new TinyCalculator(expression); + TinyCalculator calculator = new TinyCalculator(); + try { + System.out.println(calculator.calculate(expression)); + } catch (ParsingException e) { + System.out.println(e.toString()); + } + } + +// public TinyCalculator(final String expression) { +// try { +// this.calculate(expression); +// } catch (ParsingException e) { +// System.out.println(e.toString()); +// } +// } + + @Override + public double calculate(final String expression) throws ParsingException { + + + String numbers = "0123456789"; + String operations = "+-/*"; + + StringBuilder new_expression = new StringBuilder(expression.subSequence(0, expression.length())); + + StringBuilder new_number = new StringBuilder(); + + Stack first_stack = new Stack<>(); + Stack second_stack = new Stack<>(); + + boolean number_began = false; + boolean double_number = false; + boolean space_wrote = false; + boolean operation_has_done = false; + + for (int i = new_expression.length() - 1; i >= 0; --i) { + + } + + for (int i = 0; i < new_expression.length(); ++i) { + + boolean is_operation = false; + + for (int j = 0; j < operations.length(); ++j) { + if (new_expression.charAt(i) == operations.charAt(j)) { + is_operation = true; + break; + } + } + + boolean is_digit = false; + + for (int j = 0; j < numbers.length(); ++j) { + if (new_expression.charAt(i) == numbers.charAt(j)) { + is_digit = true; + break; + } + } + + if (new_expression.charAt(i) == '(') { + space_wrote = false; + if (number_began) { + throw new ParsingException("Cannot resolve"); + } else { + first_stack.add(new_expression.charAt(i)); + operation_has_done = false; + } + } + else { + if (new_expression.charAt(i) == ')') { + if (space_wrote) + space_wrote = false; + if (!number_began) { + throw new ParsingException("Cannot resolve"); + } + else { + operation_has_done = false; + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + double_number = false; + + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + first_stack.removeElementAt(first_stack.size() - 1); + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + } + } else { + if (is_operation && number_began) { + operation_has_done = true; + space_wrote = false; + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + double_number = false; + + if (new_expression.charAt(i) == '+') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '-') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '*') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + if (new_expression.charAt(i) == '/') { + while (first_stack.size() > 0) { + if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { + break; + } else { + second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); + first_stack.removeElementAt(first_stack.size() - 1); + } + } + first_stack.add(new_expression.charAt(i)); + } + } else { + if (is_digit) { + if (number_began && !space_wrote) { + new_number.append(new_expression.charAt(i)); + } else { + if(!number_began) { + operation_has_done = false; + number_began = true; + new_number.append(new_expression.charAt(i)); + } + else{ + throw new ParsingException("Cannot resolve"); + } + } + } else { + if (new_expression.charAt(i) == '.' && !double_number && number_began) { + new_number.append(new_expression.charAt(i)); + double_number = true; + } else { + if (new_expression.charAt(i) == ' ') { + if (number_began) { + second_stack.add(new_number.toString()); + new_number.setLength(0); + number_began = false; + space_wrote = true; + double_number = false; + } + } else { + throw new ParsingException("Cannot resolve"); + } + } + } + } + } + } + } + + if (operation_has_done){ + throw new ParsingException("Cannot resolve"); + } + + if (new_number.length() > 0) { + second_stack.add(new_number.toString()); + } + + while (first_stack.size() > 0){ + boolean flag = false; + for (int j = 0; j < operations.length(); ++j){ + if (first_stack.lastElement() == operations.charAt(j)){ + flag = true; + second_stack.add(Character.toString(first_stack.lastElement())); + first_stack.remove(first_stack.size() - 1); + break; + } + } + if (!flag){ + throw new ParsingException("Cannot resolve"); + } + } + + for (String s : second_stack) { + System.out.print(s + " "); + } + + System.out.println(); + + Vector result = new Vector<>(); + + for (int j = 0; j < second_stack.size(); ++j){ + + boolean operation_was_done = false; + + if (second_stack.elementAt(j).equals("+")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number + second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("-")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number - second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("*")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number * second_number); + operation_was_done = true; + } + if (second_stack.elementAt(j).equals("/")){ + double first_number = result.elementAt(result.size() - 2); + double second_number = result.elementAt(result.size() - 1); + + result.removeElementAt(result.size() - 1); + result.removeElementAt(result.size() - 1); + + result.add(first_number / second_number); + operation_was_done = true; + } + if (!operation_was_done){ + result.add(Double.parseDouble(second_stack.elementAt(j))); + } + } + + return result.lastElement(); + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java new file mode 100644 index 000000000..11836bc43 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java @@ -0,0 +1,37 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.IOException; + +/** + * Created by 1 on 30.10.2016. + */ +public class IntegerDoubleSerialisator extends ObjectSerialisator { + + IntegerDoubleSerialisator(String path_) { + super(path_); + } + + @Override + void write(Object key, Object value) { + outputStream.print(key); + outputStream.print(":"); + outputStream.print(value); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + if (input == null){ + throw new IOException("EOF"); + } + else { + int border = input.indexOf(":"); + Integer key = Integer.parseInt(input.substring(0, border)); + Double value = Double.parseDouble(input.substring(border + 1, input.length())); + return new Pair(key, value); + } + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java new file mode 100644 index 000000000..d291b2056 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -0,0 +1,120 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.zip.CheckedInputStream; + +/** + * Created by 1 on 30.10.2016. + */ +public class KeyValueStorageImpl implements KeyValueStorage { + + private Boolean FileOpen = true; + private File lockFile; + + KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { + + if (keyType == "Integer" && valueType == "Double"){ + Serialisator = new IntegerDoubleSerialisator(path); + mapa = new HashMap(); + } else if (keyType == "String" && valueType == "String") { + Serialisator = new StringStringSerialisator(path); + mapa = new HashMap(); + } else if (keyType == "StudentKey" && valueType == "Student") { + Serialisator = new StudentSerialisator(path); + mapa = new HashMap(); + } + if(!Serialisator.goodFile){ + System.out.println("Lenin is sad"); + } + else{ + Serialisator.CheckBeforeRead(); + while(true){ + try{ + Pair currPair = Serialisator.read(); + mapa.put(currPair.getKey(), currPair.getValue()); + } + catch (IOException e){ + if (e.getMessage() == "EOF"){ + break; + } + } + } + } + } + +ObjectSerialisator Serialisator; + + HashMap mapa; + + @Override + public Object read(Object key) { + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + return mapa.get(key); + } + + @Override + public boolean exists(Object key) { + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + return mapa.containsKey(key); + } + + @Override + public void write(Object key, Object value) { + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + mapa.put(key, value); + } + + @Override + public void delete(Object key) { + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + mapa.remove(key); + } + + @Override + public Iterator readKeys() { + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + return mapa.keySet().iterator(); + } + + @Override + public int size(){ + if (!FileOpen) { + throw new IllegalStateException("Lenin is sad"); + } + return mapa.size(); + } + + @Override + public void close() throws IOException { + Serialisator.CheckBeforeWrite(); + + Iterator currIter = mapa.entrySet().iterator(); + while(currIter.hasNext()){ + Map.Entry thisEntry = (Map.Entry) currIter.next(); + Serialisator.write(thisEntry.getKey(), thisEntry.getValue()); + } + Serialisator.outputStream.close(); + FileOpen = false; + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java new file mode 100644 index 000000000..e12ea5dbd --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -0,0 +1,103 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.*; + +/** + * Created by 1 on 30.10.2016. + */ +public abstract class ObjectSerialisator { + abstract void write(K key, V value); + abstract Pair read() throws IOException; + + public BufferedReader inputStream; + public PrintWriter outputStream; + String path; + String myFile; + boolean goodFile = true; + + ObjectSerialisator(String path_){ + path = path_; + StringBuilder adress = new StringBuilder(); + adress.append(path); + adress.append("\\Lenin_luchshiy"); // название хранилища + myFile = adress.toString(); + + if ((new File(myFile)).exists()) { + try{ + inputStream = new BufferedReader(new FileReader(myFile)); + String firstString = inputStream.readLine(); + if(!firstString.equals("Lenin is the best. Lenin is my love!")){ + goodFile = false; + } + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + + } else { + File f = new File(myFile); + try { + f.createNewFile(); + outputStream = new PrintWriter(new FileWriter(myFile)); + outputStream.print("Lenin is the best. Lenin is my love!"); + openOutputStream = true; + outputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + } + + boolean openInputStream = false; + boolean openOutputStream = false; + + void CheckBeforeRead(){ + if(openInputStream){ + try { + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + if(openOutputStream){ + outputStream.close(); + } + try{ + inputStream = new BufferedReader(new FileReader(myFile)); + String someString = inputStream.readLine(); + openInputStream = true; + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + + void CheckBeforeWrite(){ + if(openInputStream){ + try { + inputStream.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + if(openOutputStream){ + outputStream.close(); + } + try{ + outputStream = new PrintWriter(new FileWriter(myFile)); + openOutputStream = true; + outputStream.print("Lenin is the best. Lenin is my love!\n"); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } + + +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java new file mode 100644 index 000000000..7a4d56d3b --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -0,0 +1,39 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import javafx.util.Pair; + +import java.io.IOException; + +/** + * Created by 1 on 31.10.2016. + */ +public class StringStringSerialisator extends ObjectSerialisator { + + StringStringSerialisator(String path_) { + super(path_); + } + + @Override + void write(String key, String value) { + outputStream.print(key); + outputStream.print(":"); + outputStream.print(value); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + System.out.println(input); + if (input == null){ + throw new IOException("EOF"); + } + else { + int border = input.indexOf(":"); + String key = input.substring(0, border); + String value = input.substring(border + 1, input.length()); + return new Pair(key, value); + } + } +} + diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java new file mode 100644 index 000000000..ce791f984 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -0,0 +1,71 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import javafx.util.Pair; +import java.io.IOException; +import java.util.Date; + +/** + * Created by 1 on 31.10.2016. + * private final String hometown; + private final Date birthDate; + private final boolean hasDormitory; + private final double averageScore; + + private final int groupId; + private final String name; + */ +class StudentSerialisator extends ObjectSerialisator { + + StudentSerialisator(String path_) { + super(path_); + } + + @Override + void write(StudentKey key, Student value) { + outputStream.print(key.getGroupId()); + outputStream.print(" "); + outputStream.print(key.getName()); + outputStream.print(":"); + outputStream.print(value.getHometown()); + outputStream.print(" "); + outputStream.print(value.getBirthDate().getTime()); + outputStream.print(" "); + outputStream.print(value.isHasDormitory()); + outputStream.print(" "); + outputStream.print(value.getAverageScore()); + outputStream.print("\n"); + } + + @Override + Pair read() throws IOException { + String input = inputStream.readLine(); + //System.out.println(input); + if (input == null) { + throw new IOException("EOF"); + } else { + StringBuilder newInput = new StringBuilder(input.subSequence(0, input.length())); + int border = newInput.indexOf(" "); + int StudentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); + newInput.delete(0, border + 1); + border = newInput.indexOf(":"); + String StudentKeyName = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + String ValueHomeTown = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Date ValueDate = new Date(Long.parseLong(newInput.substring(0, border))); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Boolean ValueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); + newInput.delete(0, border + 1); + Double ValueAverage = Double.parseDouble(newInput.toString()); + StudentKey key = new StudentKey(StudentKeyGroupId, StudentKeyName); + Student value = new Student(StudentKeyGroupId, StudentKeyName, ValueHomeTown, ValueDate, ValueHasDormitory, ValueAverage); + return new Pair(key, value); + } + } +} \ No newline at end of file diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java new file mode 100644 index 000000000..1935f8413 --- /dev/null +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -0,0 +1,43 @@ +package ru.mipt.java2016.homework.g597.sigareva.task2; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.io.IOException; + +/** + * Created by 1 on 31.10.2016. + */ +public class TestClass extends AbstractSingleFileStorageTest { + @Override + protected KeyValueStorage buildStringsStorage(String path) { + try { + return new KeyValueStorageImpl(path, "String", "String"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected KeyValueStorage buildNumbersStorage(String path) { + try { + return new KeyValueStorageImpl(path, "Integer", "Double"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected KeyValueStorage buildPojoStorage(String path) { + try { + return new KeyValueStorageImpl(path, "StudentKey", "Student"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/pom.xml b/pom.xml index 0b1bce4c9..48d7cce72 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,7 @@ homework-g597-smirnova homework-g596-grebenshchikova homework-g597-kochukov + homework-g597-sigareva workshop-materials From 50810f645e96fa1bcc453959005ad1e3c12c199d Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 02:09:05 +0300 Subject: [PATCH 04/15] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../g597/sigareva/task1/TinyCalculator.java | 278 ------------------ .../sigareva/task2/ObjectSerialisator.java | 17 +- .../task2/StringStringSerialisator.java | 4 +- 3 files changed, 9 insertions(+), 290 deletions(-) delete mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java deleted file mode 100644 index 61950e62d..000000000 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task1/TinyCalculator.java +++ /dev/null @@ -1,278 +0,0 @@ -package ru.mipt.java2016.homework.g597.sigareva.task1; - -import ru.mipt.java2016.homework.base.task1.Calculator; -import ru.mipt.java2016.homework.base.task1.ParsingException; - -import java.util.Stack; -import java.util.Vector; - -public class TinyCalculator implements Calculator { - - public static void main(String[] args) { - String expression = " 1 + 2 + 3"; -// TinyCalculator calculator = new TinyCalculator(expression); - TinyCalculator calculator = new TinyCalculator(); - try { - System.out.println(calculator.calculate(expression)); - } catch (ParsingException e) { - System.out.println(e.toString()); - } - } - -// public TinyCalculator(final String expression) { -// try { -// this.calculate(expression); -// } catch (ParsingException e) { -// System.out.println(e.toString()); -// } -// } - - @Override - public double calculate(final String expression) throws ParsingException { - - - String numbers = "0123456789"; - String operations = "+-/*"; - - StringBuilder new_expression = new StringBuilder(expression.subSequence(0, expression.length())); - - StringBuilder new_number = new StringBuilder(); - - Stack first_stack = new Stack<>(); - Stack second_stack = new Stack<>(); - - boolean number_began = false; - boolean double_number = false; - boolean space_wrote = false; - boolean operation_has_done = false; - - for (int i = new_expression.length() - 1; i >= 0; --i) { - - } - - for (int i = 0; i < new_expression.length(); ++i) { - - boolean is_operation = false; - - for (int j = 0; j < operations.length(); ++j) { - if (new_expression.charAt(i) == operations.charAt(j)) { - is_operation = true; - break; - } - } - - boolean is_digit = false; - - for (int j = 0; j < numbers.length(); ++j) { - if (new_expression.charAt(i) == numbers.charAt(j)) { - is_digit = true; - break; - } - } - - if (new_expression.charAt(i) == '(') { - space_wrote = false; - if (number_began) { - throw new ParsingException("Cannot resolve"); - } else { - first_stack.add(new_expression.charAt(i)); - operation_has_done = false; - } - } - else { - if (new_expression.charAt(i) == ')') { - if (space_wrote) - space_wrote = false; - if (!number_began) { - throw new ParsingException("Cannot resolve"); - } - else { - operation_has_done = false; - second_stack.add(new_number.toString()); - new_number.setLength(0); - number_began = false; - double_number = false; - - while (first_stack.size() > 0) { - if (first_stack.lastElement() == '(') { - first_stack.removeElementAt(first_stack.size() - 1); - break; - } else { - second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); - first_stack.removeElementAt(first_stack.size() - 1); - } - } - } - } else { - if (is_operation && number_began) { - operation_has_done = true; - space_wrote = false; - second_stack.add(new_number.toString()); - new_number.setLength(0); - number_began = false; - double_number = false; - - if (new_expression.charAt(i) == '+') { - while (first_stack.size() > 0) { - if (first_stack.lastElement() == '(') { - break; - } else { - second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); - first_stack.removeElementAt(first_stack.size() - 1); - } - } - first_stack.add(new_expression.charAt(i)); - } - if (new_expression.charAt(i) == '-') { - while (first_stack.size() > 0) { - if (first_stack.lastElement() == '(') { - break; - } else { - second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); - first_stack.removeElementAt(first_stack.size() - 1); - } - } - first_stack.add(new_expression.charAt(i)); - } - if (new_expression.charAt(i) == '*') { - while (first_stack.size() > 0) { - if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { - break; - } else { - second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); - first_stack.removeElementAt(first_stack.size() - 1); - } - } - first_stack.add(new_expression.charAt(i)); - } - if (new_expression.charAt(i) == '/') { - while (first_stack.size() > 0) { - if (first_stack.lastElement() == '(' || first_stack.lastElement() == '+' || first_stack.lastElement() == '-') { - break; - } else { - second_stack.add(Character.toString(first_stack.elementAt(first_stack.size() - 1))); - first_stack.removeElementAt(first_stack.size() - 1); - } - } - first_stack.add(new_expression.charAt(i)); - } - } else { - if (is_digit) { - if (number_began && !space_wrote) { - new_number.append(new_expression.charAt(i)); - } else { - if(!number_began) { - operation_has_done = false; - number_began = true; - new_number.append(new_expression.charAt(i)); - } - else{ - throw new ParsingException("Cannot resolve"); - } - } - } else { - if (new_expression.charAt(i) == '.' && !double_number && number_began) { - new_number.append(new_expression.charAt(i)); - double_number = true; - } else { - if (new_expression.charAt(i) == ' ') { - if (number_began) { - second_stack.add(new_number.toString()); - new_number.setLength(0); - number_began = false; - space_wrote = true; - double_number = false; - } - } else { - throw new ParsingException("Cannot resolve"); - } - } - } - } - } - } - } - - if (operation_has_done){ - throw new ParsingException("Cannot resolve"); - } - - if (new_number.length() > 0) { - second_stack.add(new_number.toString()); - } - - while (first_stack.size() > 0){ - boolean flag = false; - for (int j = 0; j < operations.length(); ++j){ - if (first_stack.lastElement() == operations.charAt(j)){ - flag = true; - second_stack.add(Character.toString(first_stack.lastElement())); - first_stack.remove(first_stack.size() - 1); - break; - } - } - if (!flag){ - throw new ParsingException("Cannot resolve"); - } - } - - for (String s : second_stack) { - System.out.print(s + " "); - } - - System.out.println(); - - Vector result = new Vector<>(); - - for (int j = 0; j < second_stack.size(); ++j){ - - boolean operation_was_done = false; - - if (second_stack.elementAt(j).equals("+")){ - double first_number = result.elementAt(result.size() - 2); - double second_number = result.elementAt(result.size() - 1); - - result.removeElementAt(result.size() - 1); - result.removeElementAt(result.size() - 1); - - result.add(first_number + second_number); - operation_was_done = true; - } - if (second_stack.elementAt(j).equals("-")){ - double first_number = result.elementAt(result.size() - 2); - double second_number = result.elementAt(result.size() - 1); - - result.removeElementAt(result.size() - 1); - result.removeElementAt(result.size() - 1); - - result.add(first_number - second_number); - operation_was_done = true; - } - if (second_stack.elementAt(j).equals("*")){ - double first_number = result.elementAt(result.size() - 2); - double second_number = result.elementAt(result.size() - 1); - - result.removeElementAt(result.size() - 1); - result.removeElementAt(result.size() - 1); - - result.add(first_number * second_number); - operation_was_done = true; - } - if (second_stack.elementAt(j).equals("/")){ - double first_number = result.elementAt(result.size() - 2); - double second_number = result.elementAt(result.size() - 1); - - result.removeElementAt(result.size() - 1); - result.removeElementAt(result.size() - 1); - - result.add(first_number / second_number); - operation_was_done = true; - } - if (!operation_was_done){ - result.add(Double.parseDouble(second_stack.elementAt(j))); - } - } - - return result.lastElement(); - } -} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index e12ea5dbd..f293ea9ea 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -4,21 +4,18 @@ import java.io.*; -/** - * Created by 1 on 30.10.2016. - */ -public abstract class ObjectSerialisator { +abstract class ObjectSerialisator { abstract void write(K key, V value); abstract Pair read() throws IOException; - public BufferedReader inputStream; - public PrintWriter outputStream; - String path; - String myFile; + BufferedReader inputStream; + PrintWriter outputStream; + private String path; + private String myFile; boolean goodFile = true; - ObjectSerialisator(String path_){ - path = path_; + ObjectSerialisator(String newPath){ + path = newPath; StringBuilder adress = new StringBuilder(); adress.append(path); adress.append("\\Lenin_luchshiy"); // название хранилища diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index 7a4d56d3b..e51707617 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -9,8 +9,8 @@ */ public class StringStringSerialisator extends ObjectSerialisator { - StringStringSerialisator(String path_) { - super(path_); + StringStringSerialisator(String newPath) { + super(newPath); } @Override From cf906941ba8be97ad795d0e6f3abfe591dd73f6d Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 02:39:15 +0300 Subject: [PATCH 05/15] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=BE=D0=B4-=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task2/IntegerDoubleSerialisator.java | 9 ++- .../sigareva/task2/KeyValueStorageImpl.java | 39 +++++-------- .../sigareva/task2/ObjectSerialisator.java | 58 +++++++++---------- .../task2/StringStringSerialisator.java | 5 +- .../sigareva/task2/StudentSerialisator.java | 21 +++---- 5 files changed, 61 insertions(+), 71 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java index 11836bc43..d15654395 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java @@ -9,8 +9,8 @@ */ public class IntegerDoubleSerialisator extends ObjectSerialisator { - IntegerDoubleSerialisator(String path_) { - super(path_); + IntegerDoubleSerialisator(String newPath) { + super(newPath); } @Override @@ -24,10 +24,9 @@ void write(Object key, Object value) { @Override Pair read() throws IOException { String input = inputStream.readLine(); - if (input == null){ + if (input == null) { throw new IOException("EOF"); - } - else { + } else { int border = input.indexOf(":"); Integer key = Integer.parseInt(input.substring(0, border)); Double value = Double.parseDouble(input.substring(border + 1, input.length())); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index d291b2056..c3581a1c4 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -5,22 +5,17 @@ import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.zip.CheckedInputStream; /** * Created by 1 on 30.10.2016. */ public class KeyValueStorageImpl implements KeyValueStorage { - private Boolean FileOpen = true; - private File lockFile; + private Boolean fileOpen = true; KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { @@ -34,18 +29,16 @@ public class KeyValueStorageImpl implements KeyValueStorage { Serialisator = new StudentSerialisator(path); mapa = new HashMap(); } - if(!Serialisator.goodFile){ + if(!Serialisator.isGoodFile()) { System.out.println("Lenin is sad"); - } - else{ + } else { Serialisator.CheckBeforeRead(); - while(true){ - try{ + while (true) { + try { Pair currPair = Serialisator.read(); mapa.put(currPair.getKey(), currPair.getValue()); - } - catch (IOException e){ - if (e.getMessage() == "EOF"){ + } catch (IOException e) { + if (e.getMessage() == "EOF") { break; } } @@ -59,7 +52,7 @@ public class KeyValueStorageImpl implements KeyValueStorage { @Override public Object read(Object key) { - if (!FileOpen) { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } return mapa.get(key); @@ -67,7 +60,7 @@ public Object read(Object key) { @Override public boolean exists(Object key) { - if (!FileOpen) { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } return mapa.containsKey(key); @@ -75,7 +68,7 @@ public boolean exists(Object key) { @Override public void write(Object key, Object value) { - if (!FileOpen) { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } mapa.put(key, value); @@ -83,7 +76,7 @@ public void write(Object key, Object value) { @Override public void delete(Object key) { - if (!FileOpen) { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } mapa.remove(key); @@ -91,15 +84,15 @@ public void delete(Object key) { @Override public Iterator readKeys() { - if (!FileOpen) { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } return mapa.keySet().iterator(); } @Override - public int size(){ - if (!FileOpen) { + public int size() { + if (!fileOpen) { throw new IllegalStateException("Lenin is sad"); } return mapa.size(); @@ -110,11 +103,11 @@ public void close() throws IOException { Serialisator.CheckBeforeWrite(); Iterator currIter = mapa.entrySet().iterator(); - while(currIter.hasNext()){ + while (currIter.hasNext()) { Map.Entry thisEntry = (Map.Entry) currIter.next(); Serialisator.write(thisEntry.getKey(), thisEntry.getValue()); } Serialisator.outputStream.close(); - FileOpen = false; + fileOpen = false; } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index f293ea9ea..b335ff72e 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -5,16 +5,22 @@ import java.io.*; abstract class ObjectSerialisator { + abstract void write(K key, V value); + abstract Pair read() throws IOException; - BufferedReader inputStream; - PrintWriter outputStream; + protected BufferedReader inputStream; + protected PrintWriter outputStream; private String path; private String myFile; - boolean goodFile = true; + private boolean goodFile = true; + + public boolean isGoodFile() { + return goodFile; + } - ObjectSerialisator(String newPath){ + public ObjectSerialisator(String newPath) { path = newPath; StringBuilder adress = new StringBuilder(); adress.append(path); @@ -22,15 +28,14 @@ abstract class ObjectSerialisator { myFile = adress.toString(); if ((new File(myFile)).exists()) { - try{ + try { inputStream = new BufferedReader(new FileReader(myFile)); String firstString = inputStream.readLine(); if(!firstString.equals("Lenin is the best. Lenin is my love!")){ goodFile = false; } inputStream.close(); - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } @@ -42,59 +47,52 @@ abstract class ObjectSerialisator { outputStream.print("Lenin is the best. Lenin is my love!"); openOutputStream = true; outputStream.close(); - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } } } - boolean openInputStream = false; - boolean openOutputStream = false; + private boolean openInputStream = false; + private boolean openOutputStream = false; - void CheckBeforeRead(){ - if(openInputStream){ + public void CheckBeforeRead() { + if (openInputStream) { try { inputStream.close(); - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } } - if(openOutputStream){ + if (openOutputStream) { outputStream.close(); } - try{ + try { inputStream = new BufferedReader(new FileReader(myFile)); - String someString = inputStream.readLine(); + inputStream.readLine(); openInputStream = true; - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } } - void CheckBeforeWrite(){ - if(openInputStream){ + public void CheckBeforeWrite() { + if (openInputStream) { try { inputStream.close(); - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } } - if(openOutputStream){ + if (openOutputStream) { outputStream.close(); } - try{ + try { outputStream = new PrintWriter(new FileWriter(myFile)); openOutputStream = true; outputStream.print("Lenin is the best. Lenin is my love!\n"); - } - catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } } - - } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index e51707617..9405d7197 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -25,10 +25,9 @@ void write(String key, String value) { Pair read() throws IOException { String input = inputStream.readLine(); System.out.println(input); - if (input == null){ + if (input == null) { throw new IOException("EOF"); - } - else { + } else { int border = input.indexOf(":"); String key = input.substring(0, border); String value = input.substring(border + 1, input.length()); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java index ce791f984..c1f7779ee 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -19,8 +19,8 @@ */ class StudentSerialisator extends ObjectSerialisator { - StudentSerialisator(String path_) { - super(path_); + StudentSerialisator(String newPath) { + super(newPath); } @Override @@ -48,23 +48,24 @@ Pair read() throws IOException { } else { StringBuilder newInput = new StringBuilder(input.subSequence(0, input.length())); int border = newInput.indexOf(" "); - int StudentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); + int studentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); newInput.delete(0, border + 1); border = newInput.indexOf(":"); - String StudentKeyName = newInput.substring(0, border); + String studentKeyName = newInput.substring(0, border); newInput.delete(0, border + 1); border = newInput.indexOf(" "); - String ValueHomeTown = newInput.substring(0, border); + String valueHomeTown = newInput.substring(0, border); newInput.delete(0, border + 1); border = newInput.indexOf(" "); - Date ValueDate = new Date(Long.parseLong(newInput.substring(0, border))); + Date valueDate = new Date(Long.parseLong(newInput.substring(0, border))); newInput.delete(0, border + 1); border = newInput.indexOf(" "); - Boolean ValueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); + Boolean valueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); newInput.delete(0, border + 1); - Double ValueAverage = Double.parseDouble(newInput.toString()); - StudentKey key = new StudentKey(StudentKeyGroupId, StudentKeyName); - Student value = new Student(StudentKeyGroupId, StudentKeyName, ValueHomeTown, ValueDate, ValueHasDormitory, ValueAverage); + Double valueAverage = Double.parseDouble(newInput.toString()); + StudentKey key = new StudentKey(studentKeyGroupId, studentKeyName); + Student value = new Student(studentKeyGroupId, studentKeyName, + valueHomeTown, valueDate, valueHasDormitory, valueAverage); return new Pair(key, value); } } From 1f78d9d093875c5bf7557a856fa80f5e618aef8c Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 02:48:05 +0300 Subject: [PATCH 06/15] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D1=87=D1=83=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BA=D0=BE=D0=B4-=D1=81=D1=82=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sigareva/task2/KeyValueStorageImpl.java | 24 +++++++++---------- .../sigareva/task2/ObjectSerialisator.java | 8 +++---- .../sigareva/task2/StudentSerialisator.java | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index c3581a1c4..f73e5fc8a 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -19,23 +19,23 @@ public class KeyValueStorageImpl implements KeyValueStorage { KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { - if (keyType == "Integer" && valueType == "Double"){ - Serialisator = new IntegerDoubleSerialisator(path); + if (keyType == "Integer" && valueType == "Double") { + serialisator = new IntegerDoubleSerialisator(path); mapa = new HashMap(); } else if (keyType == "String" && valueType == "String") { - Serialisator = new StringStringSerialisator(path); + serialisator = new StringStringSerialisator(path); mapa = new HashMap(); } else if (keyType == "StudentKey" && valueType == "Student") { - Serialisator = new StudentSerialisator(path); + serialisator = new StudentSerialisator(path); mapa = new HashMap(); } - if(!Serialisator.isGoodFile()) { + if (!serialisator.isGoodFile()) { System.out.println("Lenin is sad"); } else { - Serialisator.CheckBeforeRead(); + serialisator.checkBeforeRead(); while (true) { try { - Pair currPair = Serialisator.read(); + Pair currPair = serialisator.read(); mapa.put(currPair.getKey(), currPair.getValue()); } catch (IOException e) { if (e.getMessage() == "EOF") { @@ -46,9 +46,9 @@ public class KeyValueStorageImpl implements KeyValueStorage { } } -ObjectSerialisator Serialisator; + private ObjectSerialisator serialisator; - HashMap mapa; + private HashMap mapa; @Override public Object read(Object key) { @@ -100,14 +100,14 @@ public int size() { @Override public void close() throws IOException { - Serialisator.CheckBeforeWrite(); + serialisator.checkBeforeWrite(); Iterator currIter = mapa.entrySet().iterator(); while (currIter.hasNext()) { Map.Entry thisEntry = (Map.Entry) currIter.next(); - Serialisator.write(thisEntry.getKey(), thisEntry.getValue()); + serialisator.write(thisEntry.getKey(), thisEntry.getValue()); } - Serialisator.outputStream.close(); + serialisator.outputStream.close(); fileOpen = false; } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index b335ff72e..f6a2afde2 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -20,7 +20,7 @@ public boolean isGoodFile() { return goodFile; } - public ObjectSerialisator(String newPath) { + protected ObjectSerialisator(String newPath) { path = newPath; StringBuilder adress = new StringBuilder(); adress.append(path); @@ -31,7 +31,7 @@ public ObjectSerialisator(String newPath) { try { inputStream = new BufferedReader(new FileReader(myFile)); String firstString = inputStream.readLine(); - if(!firstString.equals("Lenin is the best. Lenin is my love!")){ + if (!firstString.equals("Lenin is the best. Lenin is my love!")) { goodFile = false; } inputStream.close(); @@ -56,7 +56,7 @@ public ObjectSerialisator(String newPath) { private boolean openInputStream = false; private boolean openOutputStream = false; - public void CheckBeforeRead() { + public void checkBeforeRead() { if (openInputStream) { try { inputStream.close(); @@ -76,7 +76,7 @@ public void CheckBeforeRead() { } } - public void CheckBeforeWrite() { + public void checkBeforeWrite() { if (openInputStream) { try { inputStream.close(); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java index c1f7779ee..d66a3a67d 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -17,7 +17,7 @@ private final int groupId; private final String name; */ -class StudentSerialisator extends ObjectSerialisator { +class StudentSerialisator extends ObjectSerialisator { StudentSerialisator(String newPath) { super(newPath); From 42dd4ea3d5b1c4fc8fca5b507bc0666a68b9c724 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 03:07:58 +0300 Subject: [PATCH 07/15] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../g597/sigareva/task2/KeyValueStorageImpl.java | 2 +- .../g597/sigareva/task2/ObjectSerialisator.java | 12 ++++++------ .../sigareva/task2/StringStringSerialisator.java | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index f73e5fc8a..23d3fcfa4 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -30,7 +30,7 @@ public class KeyValueStorageImpl implements KeyValueStorage { mapa = new HashMap(); } if (!serialisator.isGoodFile()) { - System.out.println("Lenin is sad"); + throw new IllegalStateException("Lenin is sad"); } else { serialisator.checkBeforeRead(); while (true) { diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index f6a2afde2..130ee721d 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -36,7 +36,7 @@ protected ObjectSerialisator(String newPath) { } inputStream.close(); } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } else { @@ -48,7 +48,7 @@ protected ObjectSerialisator(String newPath) { openOutputStream = true; outputStream.close(); } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } } @@ -61,7 +61,7 @@ public void checkBeforeRead() { try { inputStream.close(); } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } if (openOutputStream) { @@ -72,7 +72,7 @@ public void checkBeforeRead() { inputStream.readLine(); openInputStream = true; } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } @@ -81,7 +81,7 @@ public void checkBeforeWrite() { try { inputStream.close(); } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } if (openOutputStream) { @@ -92,7 +92,7 @@ public void checkBeforeWrite() { openOutputStream = true; outputStream.print("Lenin is the best. Lenin is my love!\n"); } catch (IOException e) { - System.out.println(e.getMessage()); + throw new IllegalStateException("Something is bad\n"); } } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index 9405d7197..93deee26a 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -24,7 +24,6 @@ void write(String key, String value) { @Override Pair read() throws IOException { String input = inputStream.readLine(); - System.out.println(input); if (input == null) { throw new IOException("EOF"); } else { From fd382732886883a17bdbf419b744241e1e7b0b96 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 03:17:19 +0300 Subject: [PATCH 08/15] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20TestClass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java2016/homework/g597/sigareva/task2/TestClass.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java index 1935f8413..89fb6a968 100644 --- a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -16,8 +16,7 @@ protected KeyValueStorage buildStringsStorage(String path) { try { return new KeyValueStorageImpl(path, "String", "String"); } catch (IOException e) { - e.printStackTrace(); - return null; + throw new IllegalStateException("Somethin is wrong\n"); } } @@ -26,8 +25,7 @@ protected KeyValueStorage buildNumbersStorage(String path) { try { return new KeyValueStorageImpl(path, "Integer", "Double"); } catch (IOException e) { - e.printStackTrace(); - return null; + throw new IllegalStateException("Somethin is wrong\n"); } } @@ -36,8 +34,7 @@ protected KeyValueStorage buildPojoStorage(String path) { try { return new KeyValueStorageImpl(path, "StudentKey", "Student"); } catch (IOException e) { - e.printStackTrace(); - return null; + throw new IllegalStateException("Somethin is wrong\n"); } } } From e2bb7a25adcdb78705e15acb9fd8fd4c667e559f Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 03:45:46 +0300 Subject: [PATCH 09/15] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D1=8B=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework/g597/sigareva/task2/KeyValueStorageImpl.java | 6 +++--- .../java2016/homework/g597/sigareva/task2/TestClass.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index 23d3fcfa4..5000215be 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -19,13 +19,13 @@ public class KeyValueStorageImpl implements KeyValueStorage { KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { - if (keyType == "Integer" && valueType == "Double") { + if (keyType.equals("Integer") && valueType.equals("Double")) { serialisator = new IntegerDoubleSerialisator(path); mapa = new HashMap(); - } else if (keyType == "String" && valueType == "String") { + } else if (keyType.equals("String") && valueType.equals("String")) { serialisator = new StringStringSerialisator(path); mapa = new HashMap(); - } else if (keyType == "StudentKey" && valueType == "Student") { + } else if (keyType.equals("StudentKey") && valueType.equals("Student")) { serialisator = new StudentSerialisator(path); mapa = new HashMap(); } diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java index 89fb6a968..e2e8fff49 100644 --- a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -16,7 +16,7 @@ protected KeyValueStorage buildStringsStorage(String path) { try { return new KeyValueStorageImpl(path, "String", "String"); } catch (IOException e) { - throw new IllegalStateException("Somethin is wrong\n"); + throw new IllegalStateException("Something is wrong\n"); } } @@ -25,7 +25,7 @@ protected KeyValueStorage buildNumbersStorage(String path) { try { return new KeyValueStorageImpl(path, "Integer", "Double"); } catch (IOException e) { - throw new IllegalStateException("Somethin is wrong\n"); + throw new IllegalStateException("Something is wrong\n"); } } @@ -34,7 +34,7 @@ protected KeyValueStorage buildPojoStorage(String path) { try { return new KeyValueStorageImpl(path, "StudentKey", "Student"); } catch (IOException e) { - throw new IllegalStateException("Somethin is wrong\n"); + throw new IllegalStateException("Something is wrong\n"); } } } From 1c42a0d0028d4d08263515444e11c0a1b0670063 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Tue, 1 Nov 2016 23:12:39 +0300 Subject: [PATCH 10/15] =?UTF-8?q?=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=81=D1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task2/IntegerDoubleSerialisator.java | 30 +++---- .../sigareva/task2/KeyValueStorageImpl.java | 83 ++++++------------- .../sigareva/task2/ObjectSerialisator.java | 68 ++++++--------- .../task2/StringStringSerialisator.java | 21 ++--- .../sigareva/task2/StudentSerialisator.java | 67 ++++++--------- .../g597/sigareva/task2/TestClass.java | 18 +--- .../tests/task2/StorageTestUtils.java | 2 +- 7 files changed, 101 insertions(+), 188 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java index d15654395..a2f3ac154 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java @@ -2,35 +2,25 @@ import javafx.util.Pair; -import java.io.IOException; - -/** - * Created by 1 on 30.10.2016. - */ -public class IntegerDoubleSerialisator extends ObjectSerialisator { +public class IntegerDoubleSerialisator extends ObjectSerialisator { IntegerDoubleSerialisator(String newPath) { super(newPath); } @Override - void write(Object key, Object value) { + protected Pair convert() { + int border = lastRead.indexOf(":"); + Integer key = Integer.parseInt(lastRead.substring(0, border)); + Double value = Double.parseDouble(lastRead.substring(border + 1, lastRead.length())); + return new Pair(key, value); + } + + @Override + void write(Integer key, Double value) { outputStream.print(key); outputStream.print(":"); outputStream.print(value); outputStream.print("\n"); } - - @Override - Pair read() throws IOException { - String input = inputStream.readLine(); - if (input == null) { - throw new IOException("EOF"); - } else { - int border = input.indexOf(":"); - Integer key = Integer.parseInt(input.substring(0, border)); - Double value = Double.parseDouble(input.substring(border + 1, input.length())); - return new Pair(key, value); - } - } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index 5000215be..54034a0d9 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -2,99 +2,70 @@ import javafx.util.Pair; import ru.mipt.java2016.homework.base.task2.KeyValueStorage; -import ru.mipt.java2016.homework.tests.task2.Student; -import ru.mipt.java2016.homework.tests.task2.StudentKey; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -/** - * Created by 1 on 30.10.2016. - */ -public class KeyValueStorageImpl implements KeyValueStorage { +public class KeyValueStorageImpl implements KeyValueStorage { private Boolean fileOpen = true; + private HashMap mapa; + private ObjectSerialisator serialisator; - KeyValueStorageImpl(String path, String keyType, String valueType) throws IOException { - - if (keyType.equals("Integer") && valueType.equals("Double")) { - serialisator = new IntegerDoubleSerialisator(path); - mapa = new HashMap(); - } else if (keyType.equals("String") && valueType.equals("String")) { - serialisator = new StringStringSerialisator(path); - mapa = new HashMap(); - } else if (keyType.equals("StudentKey") && valueType.equals("Student")) { - serialisator = new StudentSerialisator(path); - mapa = new HashMap(); - } - if (!serialisator.isGoodFile()) { - throw new IllegalStateException("Lenin is sad"); - } else { - serialisator.checkBeforeRead(); - while (true) { - try { - Pair currPair = serialisator.read(); - mapa.put(currPair.getKey(), currPair.getValue()); - } catch (IOException e) { - if (e.getMessage() == "EOF") { - break; - } - } - } + KeyValueStorageImpl(ObjectSerialisator newSerializator) { + + serialisator = newSerializator; + mapa = new HashMap(); + serialisator.checkBeforeRead(); + while (serialisator.canRead()) { + Pair currPair = serialisator.convert(); + mapa.put(currPair.getKey(), currPair.getValue()); } } - private ObjectSerialisator serialisator; - private HashMap mapa; - @Override - public Object read(Object key) { + public void checkState() { if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); + throw new IllegalStateException("The storage is closed."); } + } + + @Override + public V read(K key) { + checkState(); return mapa.get(key); } @Override - public boolean exists(Object key) { - if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); - } + public boolean exists(K key) { + checkState(); return mapa.containsKey(key); } @Override - public void write(Object key, Object value) { - if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); - } + public void write(K key, V value) { + checkState(); mapa.put(key, value); } @Override - public void delete(Object key) { - if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); - } + public void delete(K key) { + checkState(); mapa.remove(key); } @Override public Iterator readKeys() { - if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); - } + checkState(); return mapa.keySet().iterator(); } @Override public int size() { - if (!fileOpen) { - throw new IllegalStateException("Lenin is sad"); - } + checkState(); return mapa.size(); } @@ -104,7 +75,7 @@ public void close() throws IOException { Iterator currIter = mapa.entrySet().iterator(); while (currIter.hasNext()) { - Map.Entry thisEntry = (Map.Entry) currIter.next(); + Map.Entry thisEntry = (Map.Entry) currIter.next(); serialisator.write(thisEntry.getKey(), thisEntry.getValue()); } serialisator.outputStream.close(); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index 130ee721d..cd4bec6d6 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -8,53 +8,41 @@ abstract class ObjectSerialisator { abstract void write(K key, V value); - abstract Pair read() throws IOException; - protected BufferedReader inputStream; protected PrintWriter outputStream; - private String path; - private String myFile; - private boolean goodFile = true; - public boolean isGoodFile() { - return goodFile; - } + private String myFilePath; + + private boolean openInputStream = false; + private boolean openOutputStream = false; protected ObjectSerialisator(String newPath) { - path = newPath; - StringBuilder adress = new StringBuilder(); - adress.append(path); - adress.append("\\Lenin_luchshiy"); // название хранилища - myFile = adress.toString(); + myFilePath = newPath + File.separator + "Lenin"; + File file = new File(myFilePath); - if ((new File(myFile)).exists()) { - try { - inputStream = new BufferedReader(new FileReader(myFile)); - String firstString = inputStream.readLine(); - if (!firstString.equals("Lenin is the best. Lenin is my love!")) { - goodFile = false; - } - inputStream.close(); - } catch (IOException e) { - throw new IllegalStateException("Something is bad\n"); - } + try { + file.createNewFile(); + } catch (IOException e) { + throw new IllegalStateException("Something is bad\n"); + } + } + protected String lastRead; + + public boolean canRead() { + try { + lastRead = inputStream.readLine(); + } catch (IOException e){ + System.out.println(e.getMessage()); + } + if(lastRead == null) { + return false; } else { - File f = new File(myFile); - try { - f.createNewFile(); - outputStream = new PrintWriter(new FileWriter(myFile)); - outputStream.print("Lenin is the best. Lenin is my love!"); - openOutputStream = true; - outputStream.close(); - } catch (IOException e) { - throw new IllegalStateException("Something is bad\n"); - } + return true; } } - private boolean openInputStream = false; - private boolean openOutputStream = false; + protected abstract Pair convert(); public void checkBeforeRead() { if (openInputStream) { @@ -68,15 +56,14 @@ public void checkBeforeRead() { outputStream.close(); } try { - inputStream = new BufferedReader(new FileReader(myFile)); - inputStream.readLine(); + inputStream = new BufferedReader(new FileReader(myFilePath)); openInputStream = true; } catch (IOException e) { throw new IllegalStateException("Something is bad\n"); } } - public void checkBeforeWrite() { + public void checkBeforeWrite() throws IOException{ if (openInputStream) { try { inputStream.close(); @@ -88,9 +75,8 @@ public void checkBeforeWrite() { outputStream.close(); } try { - outputStream = new PrintWriter(new FileWriter(myFile)); + outputStream = new PrintWriter(new FileWriter(myFilePath)); openOutputStream = true; - outputStream.print("Lenin is the best. Lenin is my love!\n"); } catch (IOException e) { throw new IllegalStateException("Something is bad\n"); } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index 93deee26a..25110f965 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -13,6 +13,14 @@ public class StringStringSerialisator extends ObjectSerialisator super(newPath); } + @Override + protected Pair convert() { + int border = lastRead.indexOf(":"); + String key = lastRead.substring(0, border); + String value = lastRead.substring(border + 1, lastRead.length()); + return new Pair(key, value); + } + @Override void write(String key, String value) { outputStream.print(key); @@ -20,18 +28,5 @@ void write(String key, String value) { outputStream.print(value); outputStream.print("\n"); } - - @Override - Pair read() throws IOException { - String input = inputStream.readLine(); - if (input == null) { - throw new IOException("EOF"); - } else { - int border = input.indexOf(":"); - String key = input.substring(0, border); - String value = input.substring(border + 1, input.length()); - return new Pair(key, value); - } - } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java index d66a3a67d..e68b575a0 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -4,25 +4,39 @@ import ru.mipt.java2016.homework.tests.task2.StudentKey; import javafx.util.Pair; -import java.io.IOException; import java.util.Date; -/** - * Created by 1 on 31.10.2016. - * private final String hometown; - private final Date birthDate; - private final boolean hasDormitory; - private final double averageScore; - - private final int groupId; - private final String name; - */ class StudentSerialisator extends ObjectSerialisator { StudentSerialisator(String newPath) { super(newPath); } + @Override + protected Pair convert() { + StringBuilder newInput = new StringBuilder(lastRead.subSequence(0, lastRead.length())); + int border = newInput.indexOf(" "); + int studentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); + newInput.delete(0, border + 1); + border = newInput.indexOf(":"); + String studentKeyName = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + String valueHomeTown = newInput.substring(0, border); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Date valueDate = new Date(Long.parseLong(newInput.substring(0, border))); + newInput.delete(0, border + 1); + border = newInput.indexOf(" "); + Boolean valueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); + newInput.delete(0, border + 1); + Double valueAverage = Double.parseDouble(newInput.toString()); + StudentKey key = new StudentKey(studentKeyGroupId, studentKeyName); + Student value = new Student(studentKeyGroupId, studentKeyName, + valueHomeTown, valueDate, valueHasDormitory, valueAverage); + return new Pair(key, value); + } + @Override void write(StudentKey key, Student value) { outputStream.print(key.getGroupId()); @@ -38,35 +52,4 @@ void write(StudentKey key, Student value) { outputStream.print(value.getAverageScore()); outputStream.print("\n"); } - - @Override - Pair read() throws IOException { - String input = inputStream.readLine(); - //System.out.println(input); - if (input == null) { - throw new IOException("EOF"); - } else { - StringBuilder newInput = new StringBuilder(input.subSequence(0, input.length())); - int border = newInput.indexOf(" "); - int studentKeyGroupId = Integer.parseInt(newInput.substring(0, border)); - newInput.delete(0, border + 1); - border = newInput.indexOf(":"); - String studentKeyName = newInput.substring(0, border); - newInput.delete(0, border + 1); - border = newInput.indexOf(" "); - String valueHomeTown = newInput.substring(0, border); - newInput.delete(0, border + 1); - border = newInput.indexOf(" "); - Date valueDate = new Date(Long.parseLong(newInput.substring(0, border))); - newInput.delete(0, border + 1); - border = newInput.indexOf(" "); - Boolean valueHasDormitory = Boolean.parseBoolean(newInput.substring(0, border)); - newInput.delete(0, border + 1); - Double valueAverage = Double.parseDouble(newInput.toString()); - StudentKey key = new StudentKey(studentKeyGroupId, studentKeyName); - Student value = new Student(studentKeyGroupId, studentKeyName, - valueHomeTown, valueDate, valueHasDormitory, valueAverage); - return new Pair(key, value); - } - } } \ No newline at end of file diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java index e2e8fff49..b194e3762 100644 --- a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -13,28 +13,16 @@ public class TestClass extends AbstractSingleFileStorageTest { @Override protected KeyValueStorage buildStringsStorage(String path) { - try { - return new KeyValueStorageImpl(path, "String", "String"); - } catch (IOException e) { - throw new IllegalStateException("Something is wrong\n"); - } + return new KeyValueStorageImpl(new StringStringSerialisator(path)); } @Override protected KeyValueStorage buildNumbersStorage(String path) { - try { - return new KeyValueStorageImpl(path, "Integer", "Double"); - } catch (IOException e) { - throw new IllegalStateException("Something is wrong\n"); - } + return new KeyValueStorageImpl(new IntegerDoubleSerialisator(path)); } @Override protected KeyValueStorage buildPojoStorage(String path) { - try { - return new KeyValueStorageImpl(path, "StudentKey", "Student"); - } catch (IOException e) { - throw new IllegalStateException("Something is wrong\n"); - } + return new KeyValueStorageImpl(new StudentSerialisator(path)); } } diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java index acd6598a4..aded8ab96 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java @@ -36,7 +36,7 @@ public static void doInTempDirectory(Callback callback) { } catch (RuntimeException e) { throw e; } catch (Exception e) { - throw new IllegalStateException("Unexpected Exception", e); + throw new IllegalStateException("Unexpected Exception"); } } From 01f4df322f74d4b13589c7fae67c683d4e28f67f Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Wed, 2 Nov 2016 02:20:46 +0300 Subject: [PATCH 11/15] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=D1=81=D1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework-g597-sigareva/pom.xml | 6 ------ .../homework/g597/sigareva/task2/KeyValueStorageImpl.java | 6 +++++- .../homework/g597/sigareva/task2/ObjectSerialisator.java | 2 +- .../homework/g597/sigareva/task2/StudentSerialisator.java | 0 pom.xml | 3 +-- 5 files changed, 7 insertions(+), 10 deletions(-) rename homework-g597-sigareva/src/{main => test}/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java (100%) diff --git a/homework-g597-sigareva/pom.xml b/homework-g597-sigareva/pom.xml index 06a1ac6d2..93c4063c9 100644 --- a/homework-g597-sigareva/pom.xml +++ b/homework-g597-sigareva/pom.xml @@ -18,12 +18,6 @@ homework-base 1.0.0 - - ru.mipt.java2016 - homework-tests - 1.0.0 - test - ru.mipt.java2016 homework-tests diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index 54034a0d9..65478724d 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -18,7 +18,11 @@ public class KeyValueStorageImpl implements KeyValueStorage { serialisator = newSerializator; mapa = new HashMap(); - serialisator.checkBeforeRead(); + try { + serialisator.checkBeforeRead(); + } catch (IOException e){ + System.out.println(e.getMessage()); + } while (serialisator.canRead()) { Pair currPair = serialisator.convert(); mapa.put(currPair.getKey(), currPair.getValue()); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index cd4bec6d6..779949b44 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -44,7 +44,7 @@ public boolean canRead() { protected abstract Pair convert(); - public void checkBeforeRead() { + public void checkBeforeRead() throws IOException { if (openInputStream) { try { inputStream.close(); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java similarity index 100% rename from homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java rename to homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java diff --git a/pom.xml b/pom.xml index 4ea61ba41..d726b5d58 100644 --- a/pom.xml +++ b/pom.xml @@ -267,5 +267,4 @@ http://repo1.maven.org/maven2/ - - \ No newline at end of file + From 0798b0d8567772d520527c3dcb0badc853f734af Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Wed, 2 Nov 2016 04:19:55 +0300 Subject: [PATCH 12/15] VSE OCHEN PLOHO --- homework-g597-sigareva/pom.xml | 1 + .../task2/IntegerDoubleSerialisator.java | 4 +-- .../sigareva/task2/KeyValueStorageImpl.java | 32 +++++++++---------- .../sigareva/task2/ObjectSerialisator.java | 4 +-- .../task2/StringStringSerialisator.java | 4 +-- .../sigareva/task2/StudentSerialisator.java | 4 +-- .../g597/sigareva/task2/TestClass.java | 24 ++++++++++++-- .../task2/AbstractSingleFileStorageTest.java | 5 +-- .../tests/task2/StorageTestUtils.java | 2 +- pom.xml | 1 + 10 files changed, 50 insertions(+), 31 deletions(-) diff --git a/homework-g597-sigareva/pom.xml b/homework-g597-sigareva/pom.xml index 93c4063c9..0817be603 100644 --- a/homework-g597-sigareva/pom.xml +++ b/homework-g597-sigareva/pom.xml @@ -22,6 +22,7 @@ ru.mipt.java2016 homework-tests 1.0.0 + test diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java index a2f3ac154..75d156209 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/IntegerDoubleSerialisator.java @@ -2,9 +2,9 @@ import javafx.util.Pair; -public class IntegerDoubleSerialisator extends ObjectSerialisator { +class IntegerDoubleSerializer extends ObjectSerializer { - IntegerDoubleSerialisator(String newPath) { + IntegerDoubleSerializer(String newPath) { super(newPath); } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index 65478724d..b81e43797 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -11,32 +11,31 @@ public class KeyValueStorageImpl implements KeyValueStorage { private Boolean fileOpen = true; - private HashMap mapa; - private ObjectSerialisator serialisator; + private Map mapa; + private ObjectSerializer serializer; - KeyValueStorageImpl(ObjectSerialisator newSerializator) { + KeyValueStorageImpl(ObjectSerializer newSerializer) throws IOException { - serialisator = newSerializator; + serializer = newSerializer; mapa = new HashMap(); try { - serialisator.checkBeforeRead(); - } catch (IOException e){ + serializer.checkBeforeRead(); + } catch (IOException e) { System.out.println(e.getMessage()); } - while (serialisator.canRead()) { - Pair currPair = serialisator.convert(); + while (serializer.canRead()) { + Pair currPair = serializer.convert(); mapa.put(currPair.getKey(), currPair.getValue()); } } - - public void checkState() { if (!fileOpen) { throw new IllegalStateException("The storage is closed."); } } + @Override public V read(K key) { checkState(); @@ -62,7 +61,7 @@ public void delete(K key) { } @Override - public Iterator readKeys() { + public Iterator readKeys() { checkState(); return mapa.keySet().iterator(); } @@ -75,14 +74,13 @@ public int size() { @Override public void close() throws IOException { - serialisator.checkBeforeWrite(); + serializer.checkBeforeWrite(); - Iterator currIter = mapa.entrySet().iterator(); - while (currIter.hasNext()) { - Map.Entry thisEntry = (Map.Entry) currIter.next(); - serialisator.write(thisEntry.getKey(), thisEntry.getValue()); + for (Object o : mapa.entrySet()) { + Map.Entry thisEntry = (Map.Entry) o; + serializer.write(thisEntry.getKey(), thisEntry.getValue()); } - serialisator.outputStream.close(); + serializer.outputStream.close(); fileOpen = false; } } diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index 779949b44..53bc922dc 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -4,7 +4,7 @@ import java.io.*; -abstract class ObjectSerialisator { +abstract class ObjectSerializer { abstract void write(K key, V value); @@ -16,7 +16,7 @@ abstract class ObjectSerialisator { private boolean openInputStream = false; private boolean openOutputStream = false; - protected ObjectSerialisator(String newPath) { + protected ObjectSerializer(String newPath) { myFilePath = newPath + File.separator + "Lenin"; File file = new File(myFilePath); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index 25110f965..4c6afccc1 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -7,9 +7,9 @@ /** * Created by 1 on 31.10.2016. */ -public class StringStringSerialisator extends ObjectSerialisator { + class StringStringSerializer extends ObjectSerializer { - StringStringSerialisator(String newPath) { + StringStringSerializer(String newPath) { super(newPath); } diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java index e68b575a0..1e7d8cf1b 100644 --- a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/StudentSerialisator.java @@ -6,9 +6,9 @@ import javafx.util.Pair; import java.util.Date; -class StudentSerialisator extends ObjectSerialisator { +class StudentSerializer extends ObjectSerializer { - StudentSerialisator(String newPath) { + StudentSerializer(String newPath) { super(newPath); } diff --git a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java index b194e3762..f20112446 100644 --- a/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java +++ b/homework-g597-sigareva/src/test/java/ru/mipt/java2016/homework/g597/sigareva/task2/TestClass.java @@ -13,16 +13,34 @@ public class TestClass extends AbstractSingleFileStorageTest { @Override protected KeyValueStorage buildStringsStorage(String path) { - return new KeyValueStorageImpl(new StringStringSerialisator(path)); + try { + return new KeyValueStorageImpl(new StringStringSerializer(path)); + } + catch(IOException e){ + System.out.println(e.getMessage()); + return null; + } } @Override protected KeyValueStorage buildNumbersStorage(String path) { - return new KeyValueStorageImpl(new IntegerDoubleSerialisator(path)); + try { + return new KeyValueStorageImpl(new IntegerDoubleSerializer(path)); + } + catch(IOException e){ + System.out.println(e.getMessage()); + return null; + } } @Override protected KeyValueStorage buildPojoStorage(String path) { - return new KeyValueStorageImpl(new StudentSerialisator(path)); + try { + return new KeyValueStorageImpl(new StudentSerializer(path)); + } + catch(IOException e){ + System.out.println(e.getMessage()); + return null; + } } } diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java index 68d8b15d0..4d8f5d311 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java @@ -6,6 +6,7 @@ import ru.mipt.java2016.homework.tests.task2.StorageTestUtils.*; import java.io.File; +import java.io.IOException; import java.util.Arrays; import java.util.ConcurrentModificationException; import java.util.Iterator; @@ -23,9 +24,9 @@ */ public abstract class AbstractSingleFileStorageTest { - protected abstract KeyValueStorage buildStringsStorage(String path); + protected abstract KeyValueStorage buildStringsStorage(String path) throws IOException; - protected abstract KeyValueStorage buildNumbersStorage(String path); + protected abstract KeyValueStorage buildNumbersStorage(String path) throws IOException; protected abstract KeyValueStorage buildPojoStorage(String path); diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java index aded8ab96..acd6598a4 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/StorageTestUtils.java @@ -36,7 +36,7 @@ public static void doInTempDirectory(Callback callback) { } catch (RuntimeException e) { throw e; } catch (Exception e) { - throw new IllegalStateException("Unexpected Exception"); + throw new IllegalStateException("Unexpected Exception", e); } } diff --git a/pom.xml b/pom.xml index d726b5d58..48d7cce72 100644 --- a/pom.xml +++ b/pom.xml @@ -267,4 +267,5 @@ http://repo1.maven.org/maven2/ + From a17f2c64d7bdb4a23f0efbece74bbf65c442696a Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Wed, 2 Nov 2016 04:52:56 +0300 Subject: [PATCH 13/15] sleep --- .../g597/sigareva/task2/KeyValueStorageImpl.java | 13 ++++--------- .../tests/task2/AbstractSingleFileStorageTest.java | 5 ++--- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index b81e43797..ab95d723d 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -11,18 +11,13 @@ public class KeyValueStorageImpl implements KeyValueStorage { private Boolean fileOpen = true; - private Map mapa; + private Map mapa = new HashMap<>(); private ObjectSerializer serializer; KeyValueStorageImpl(ObjectSerializer newSerializer) throws IOException { serializer = newSerializer; - mapa = new HashMap(); - try { - serializer.checkBeforeRead(); - } catch (IOException e) { - System.out.println(e.getMessage()); - } + serializer.checkBeforeRead(); while (serializer.canRead()) { Pair currPair = serializer.convert(); mapa.put(currPair.getKey(), currPair.getValue()); @@ -76,8 +71,8 @@ public int size() { public void close() throws IOException { serializer.checkBeforeWrite(); - for (Object o : mapa.entrySet()) { - Map.Entry thisEntry = (Map.Entry) o; + for (Map.Entry o : mapa.entrySet()) { + Map.Entry thisEntry = o; serializer.write(thisEntry.getKey(), thisEntry.getValue()); } serializer.outputStream.close(); diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java index 4d8f5d311..68d8b15d0 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task2/AbstractSingleFileStorageTest.java @@ -6,7 +6,6 @@ import ru.mipt.java2016.homework.tests.task2.StorageTestUtils.*; import java.io.File; -import java.io.IOException; import java.util.Arrays; import java.util.ConcurrentModificationException; import java.util.Iterator; @@ -24,9 +23,9 @@ */ public abstract class AbstractSingleFileStorageTest { - protected abstract KeyValueStorage buildStringsStorage(String path) throws IOException; + protected abstract KeyValueStorage buildStringsStorage(String path); - protected abstract KeyValueStorage buildNumbersStorage(String path) throws IOException; + protected abstract KeyValueStorage buildNumbersStorage(String path); protected abstract KeyValueStorage buildPojoStorage(String path); From c060edc758ea39591497298def80ef39b7c6de2e Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Wed, 2 Nov 2016 05:13:57 +0300 Subject: [PATCH 14/15] the last commit I hope --- .../g597/sigareva/task2/KeyValueStorageImpl.java | 6 ++---- .../g597/sigareva/task2/ObjectSerialisator.java | 10 +++------- .../g597/sigareva/task2/StringStringSerialisator.java | 7 +------ 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java index ab95d723d..0a46409ed 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/KeyValueStorageImpl.java @@ -14,8 +14,7 @@ public class KeyValueStorageImpl implements KeyValueStorage { private Map mapa = new HashMap<>(); private ObjectSerializer serializer; - KeyValueStorageImpl(ObjectSerializer newSerializer) throws IOException { - + KeyValueStorageImpl(ObjectSerializer newSerializer) throws IOException { serializer = newSerializer; serializer.checkBeforeRead(); while (serializer.canRead()) { @@ -72,8 +71,7 @@ public void close() throws IOException { serializer.checkBeforeWrite(); for (Map.Entry o : mapa.entrySet()) { - Map.Entry thisEntry = o; - serializer.write(thisEntry.getKey(), thisEntry.getValue()); + serializer.write(o.getKey(), o.getValue()); } serializer.outputStream.close(); fileOpen = false; diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java index 53bc922dc..072356bba 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/ObjectSerialisator.java @@ -32,14 +32,10 @@ protected ObjectSerializer(String newPath) { public boolean canRead() { try { lastRead = inputStream.readLine(); - } catch (IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } - if(lastRead == null) { - return false; - } else { - return true; - } + return lastRead != null; } protected abstract Pair convert(); @@ -63,7 +59,7 @@ public void checkBeforeRead() throws IOException { } } - public void checkBeforeWrite() throws IOException{ + public void checkBeforeWrite() throws IOException { if (openInputStream) { try { inputStream.close(); diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java index 4c6afccc1..b7bca26f9 100644 --- a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task2/StringStringSerialisator.java @@ -2,12 +2,7 @@ import javafx.util.Pair; -import java.io.IOException; - -/** - * Created by 1 on 31.10.2016. - */ - class StringStringSerializer extends ObjectSerializer { +class StringStringSerializer extends ObjectSerializer { StringStringSerializer(String newPath) { super(newPath); From f26508bd085ee589be09f087b384231a4561e451 Mon Sep 17 00:00:00 2001 From: Mirinda2516 Date: Wed, 21 Dec 2016 03:11:53 +0300 Subject: [PATCH 15/15] first try --- homework-g597-sigareva/pom.xml | 30 +++ .../g597/sigareva/task4/BillingDao.java | 93 ++++++++ .../task4/BillingDatabaseConfiguration.java | 26 +++ .../g597/sigareva/task4/BillingUser.java | 69 ++++++ .../sigareva/task4/CalculatorController.java | 75 ++++++ .../g597/sigareva/task4/MyApplication.java | 41 ++++ .../g597/sigareva/task4/MyCalculator.java | 215 ++++++++++++++++++ .../task4/SecurityServiceConfiguration.java | 55 +++++ 8 files changed, 604 insertions(+) create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDao.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDatabaseConfiguration.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingUser.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/CalculatorController.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyApplication.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyCalculator.java create mode 100644 homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/SecurityServiceConfiguration.java diff --git a/homework-g597-sigareva/pom.xml b/homework-g597-sigareva/pom.xml index 0817be603..77f6a1904 100644 --- a/homework-g597-sigareva/pom.xml +++ b/homework-g597-sigareva/pom.xml @@ -12,12 +12,42 @@ homework-g597-sigareva + + + 1.4.2.RELEASE + + ru.mipt.java2016 homework-base 1.0.0 + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-jdbc + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-security + ${spring.boot.version} + + + com.zaxxer + HikariCP + 2.5.1 + + + com.h2database + h2 + 1.4.193 + ru.mipt.java2016 homework-tests diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDao.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDao.java new file mode 100644 index 000000000..95d454dac --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDao.java @@ -0,0 +1,93 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; + +@Repository +public class BillingDao { + private static final Logger LOG = LoggerFactory.getLogger(BillingDao.class); + + @Autowired + private DataSource dataSource; + + private JdbcTemplate jdbcTemplate; + + @PostConstruct + public void postConstruct() { + jdbcTemplate = new JdbcTemplate(dataSource, false); + initSchema(); + } + + public void initSchema() { + LOG.trace("Initializing schema"); + jdbcTemplate.execute("CREATE SCHEMA IF NOT EXISTS billing"); + jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS billing.users " + + "(username VARCHAR PRIMARY KEY, password VARCHAR, enabled BOOLEAN)"); + jdbcTemplate.execute("DELETE FROM billing.users WHERE username = 'username'"); + jdbcTemplate.update("INSERT INTO billing.users VALUES ('username', 'password', TRUE)"); + } + + public BillingUser loadUser(String username) throws EmptyResultDataAccessException { + LOG.trace("Querying for user " + username); + return jdbcTemplate.queryForObject( + "SELECT username, password, enabled FROM billing.users WHERE username = ?", + new Object[]{username}, + new RowMapper() { + @Override + public BillingUser mapRow(ResultSet rs, int rowNum) throws SQLException { + return new BillingUser( + rs.getString("username"), + rs.getString("password"), + rs.getBoolean("enabled") + ); + } + } + ); + } + + public Double getVariable(String username, String variableName) throws EmptyResultDataAccessException { + LOG.trace("Querying for user " + username); + return jdbcTemplate.queryForObject( + "SELECT username, variableName, value FROM billing.usersVariables WHERE username = '" + username + "' " + + "AND variableName = '" + variableName + "'", + new Object[]{}, + new RowMapper() { + @Override + public Double mapRow(ResultSet rs, int rowNum) throws SQLException { + return new Double( + rs.getString("value") + ); + } + } + ); + } + + public void registerNewUser(String user, String password) { + jdbcTemplate.update("INSERT INTO billing.users VALUES ('" + user + "', '" + password + "', TRUE)"); + } + + public void addValue(String user, String variableName, String value) { + System.out.println(user); + System.out.println(variableName); + jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS billing.usersVariables " + + "(username VARCHAR, variableName VARCHAR PRIMARY KEY, value FLOAT)"); + jdbcTemplate.execute("DELETE FROM billing.usersVariables WHERE variableName = '" + variableName + "' " + + "AND username = '" + user + "'"); + jdbcTemplate.update("INSERT INTO billing.usersVariables VALUES ('" + user + "', '" + variableName + "', '" + value + "')"); + } + + public void deleteVariable(String user, String variableName) { + jdbcTemplate.execute("DELETE FROM billing.usersVariables WHERE variableName = '" + variableName + "' " + + "AND username = '" + user + "'"); + } +} \ No newline at end of file diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDatabaseConfiguration.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDatabaseConfiguration.java new file mode 100644 index 000000000..ba1ff210e --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingDatabaseConfiguration.java @@ -0,0 +1,26 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +@Configuration +public class BillingDatabaseConfiguration { + @Bean + public DataSource billingDataSource( + @Value("${ru.mipt.java2016.homework.g597.sigareva.task4.jdbcUrl}") String jdbcUrl, + @Value("${ru.mipt.java2016.homework.g597.sigareva.task4.username:}") String username, + @Value("${ru.mipt.java2016.homework.g597.sigareva.task4.password:}") String password + ) { + HikariConfig config = new HikariConfig(); + config.setDriverClassName(org.h2.Driver.class.getName()); + config.setJdbcUrl(jdbcUrl); + config.setUsername(username); + config.setPassword(password); + return new HikariDataSource(config); + } +} \ No newline at end of file diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingUser.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingUser.java new file mode 100644 index 000000000..4ee119f56 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/BillingUser.java @@ -0,0 +1,69 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +public class BillingUser { + private final String username; + private final String password; + private final boolean enabled; + + public BillingUser(String username, String password, boolean enabled) { + if (username == null) { + throw new IllegalArgumentException("Null username is not allowed"); + } + if (password == null) { + throw new IllegalArgumentException("Null password is not allowed"); + } + this.username = username; + this.password = password; + this.enabled = enabled; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public boolean isEnabled() { + return enabled; + } + + @Override + public String toString() { + return "BillingUser{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + ", enabled=" + enabled + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + BillingUser that = (BillingUser) o; + + if (enabled != that.enabled) { + return false; + } + if (!username.equals(that.username)) { + return false; + } + return password.equals(that.password); + + } + + @Override + public int hashCode() { + int result = username.hashCode(); + result = 31 * result + password.hashCode(); + result = 31 * result + (enabled ? 1 : 0); + return result; + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/CalculatorController.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/CalculatorController.java new file mode 100644 index 000000000..4ae2aea17 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/CalculatorController.java @@ -0,0 +1,75 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; +import ru.mipt.java2016.homework.base.task1.Calculator; +import ru.mipt.java2016.homework.base.task1.ParsingException; + +import java.io.IOException; +import java.util.Vector; + +@RestController +public class CalculatorController { + private static final Logger LOG = LoggerFactory.getLogger(CalculatorController.class); + @Autowired + private MyCalculator calculator; + + @Autowired + private BillingDao billingDao; + + @RequestMapping(path = "/ping", method = RequestMethod.GET, produces = "text/plain") + public String echo() { + return "OK\n"; + } + + @RequestMapping(path = "/", method = RequestMethod.GET, produces = "text/html") + public String main(@RequestParam(required = false) String name) { + if (name == null) { + name = "world"; + } + return "" + + "FediqApp" + + "

Hello, " + name + "!

" + + ""; + } + + @RequestMapping(path = "/eval", method = RequestMethod.POST, consumes = "text/plain", produces = "text/plain") + public String eval(Authentication userName, @RequestBody String expression) throws ParsingException { // + AUTH + LOG.debug("Evaluation request: [" + expression + "]"); + double result = calculator.calculate(expression, userName.getName()); // username + LOG.trace("Result: " + result); + return Double.toString(result) + "\n"; + } + + @RequestMapping(path = "/registration", method = RequestMethod.POST, consumes = "text/plain", produces = "text/plain") + public void registration(@RequestParam(value = "arguments") Vector arguments) throws IOException { + try { + if (arguments.size() != 2) { + throw new IOException("Mistake"); + } else { + billingDao.registerNewUser(arguments.firstElement(), arguments.lastElement()); + } + } catch (IOException e) { + throw new IllegalStateException("Can't understand"); + } + } + + @RequestMapping(path = "/variable/{variableName}", method = RequestMethod.PUT, consumes = "text/plain", produces = "text/plain") + public void addingVariable(Authentication userName, @PathVariable String variableName, @RequestBody String value) throws IOException { + billingDao.addValue(userName.getName(), variableName, value); + } + + @RequestMapping(path = "/variable/{variableName}", method = RequestMethod.DELETE, consumes = "text/plain", produces = "text/plain") + public void deleteVariable(Authentication userName, @PathVariable String variableName) throws IOException { + billingDao.deleteVariable(userName.getName(), variableName); + } + + @RequestMapping(path = "/variable/{variableName}", method = RequestMethod.GET/*, consumes = "text/plain", produces = "text/plain"*/) + public String getVariable(Authentication userName, @PathVariable String variableName) throws IOException { + System.out.println("ALIVE"); + return billingDao.getVariable(userName.getName(), variableName).toString(); + } +} \ No newline at end of file diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyApplication.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyApplication.java new file mode 100644 index 000000000..fe7550d6d --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyApplication.java @@ -0,0 +1,41 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + + import org.springframework.beans.factory.annotation.Value; + import org.springframework.boot.Banner; + import org.springframework.boot.SpringApplication; + import org.springframework.boot.autoconfigure.EnableAutoConfiguration; + import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; + import org.springframework.context.annotation.Bean; + import org.springframework.context.annotation.ComponentScan; + import org.springframework.context.annotation.Configuration; + +/** + * curl http://localhost:9001/eval \ + * -X POST \ + * -H "Content-Type: text/plain" \ + * -H "Authorization: Basic $(echo -n "username:password" | base64)" \ + * --data-raw "44*3+2" + */ + +@EnableAutoConfiguration +@Configuration +@ComponentScan(basePackageClasses = MyApplication.class) +public class MyApplication { + + @Bean + public MyCalculator calculator() { + return new MyCalculator(); + } + + @Bean + public EmbeddedServletContainerCustomizer customizer( + @Value("${ru.mipt.java2016.homework.g597.sigareva.task4.httpPort:9001}") int port) { + return container -> container.setPort(port); + } + + public static void main(String[] args) { + SpringApplication application = new SpringApplication(MyApplication.class); + application.setBannerMode(Banner.Mode.OFF); + application.run(args); + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyCalculator.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyCalculator.java new file mode 100644 index 000000000..243e752c1 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/MyCalculator.java @@ -0,0 +1,215 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; + +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; +import java.util.Vector; + +public class MyCalculator { + Map Variables = new HashMap<>(); + + static final String operations = "()+-/*_,"; + static final String expression = "2 * (3 - 7)"; + + static Stack operationsStack; + static Stack resultStack; + + @Autowired + private BillingDao billingDao; + + StringBuilder newExpression = new StringBuilder(expression); + + public boolean checkSymbols(StringBuilder newExpression) { + boolean rightSymbolFlag = false; + + for (int i = 0; i < newExpression.length(); ++i) { + rightSymbolFlag = false; + + if (Character.isDigit(newExpression.charAt(i))) { + rightSymbolFlag = true; + } + + for (char j = 'a'; j <= 'z'; ++j) { + if (newExpression.charAt(i) == j) { + rightSymbolFlag = true; + } + } + + for (int j = 0; j < operations.length(); ++j) { + if (operations.charAt(j) == newExpression.charAt(i)) { + rightSymbolFlag = true; + } + } + + if (!rightSymbolFlag) { + break; + } + } + return rightSymbolFlag; + } + + + public double calculate(String expression, String username) { // username + String newExpression = new String(); + + newExpression = expression.replaceAll(" ", ""); + if (newExpression.charAt(0) == '('){ + return calculate(expression.substring(1, expression.length() - 1), username); + } + StringBuilder resultExpression = new StringBuilder(); + if (newExpression.charAt(0) == '-') { + resultExpression.append("0"); + } + resultExpression.append(newExpression.charAt(0)); + + for (int i = 1; i < newExpression.length(); ++i) { + if (newExpression.charAt(i - 1) == '(' && newExpression.charAt(i) == '-') { + resultExpression.append("0"); + } + resultExpression.append(newExpression.charAt(i)); + } + + StringBuilder name = new StringBuilder(); + StringBuilder newResult = new StringBuilder(); + + for (int i = 0; i < resultExpression.length(); ++i){ + boolean operatorFlag = false; + for (int j = 0; j < operations.length(); ++j) { + if (resultExpression.charAt(i) == operations.charAt(j)) { + operatorFlag = true; + } + } + if(operatorFlag) { + if (name.length() > 0) { + try { + Double value = billingDao.getVariable(username, name.toString()); + newResult.append(value.toString()); + } catch (EmptyResultDataAccessException e) { + newResult.append(name); + } + name = new StringBuilder(); + } + newResult.append(resultExpression.charAt(i)); + } else { + name.append(resultExpression.charAt(i)); + } + } + + if (name.length() > 0) { + try { + Double value = billingDao.getVariable(username, name.toString()); + newResult.append(value.toString()); + } catch (EmptyResultDataAccessException e) { + newResult.append(name); + } + name = new StringBuilder(); + } + + resultExpression = newResult; + System.out.println(resultExpression); + + Integer balance = 0; + for (int i = 0; i < resultExpression.length(); ++i) { + if (resultExpression.charAt(i) == '(') { + ++balance; + } + if (newExpression.charAt(i) == ')') { + --balance; + } + if (resultExpression.charAt(i) == '+' && balance == 0) { + String firstPartOfExpression = resultExpression.substring(0, i); + String secondPartOfString = resultExpression.substring(i + 1, resultExpression.length()); + return calculate(firstPartOfExpression, username) + calculate(secondPartOfString, username); + } + if (resultExpression.charAt(i) == '-' && balance == 0) { + String firstPartOfExpression = resultExpression.substring(0, i); + String secondPartOfString = resultExpression.substring(i + 1, resultExpression.length()); + return calculate(firstPartOfExpression, username) - calculate(secondPartOfString, username); + } + } + balance = 0; + for (int i = 0; i < resultExpression.length(); ++i) { + if (resultExpression.charAt(i) == '(') { + ++balance; + } + if (newExpression.charAt(i) == ')') { + --balance; + } + if (resultExpression.charAt(i) == '*' && balance == 0) { + String firstPartOfExpression = resultExpression.substring(0, i); + String secondPartOfString = resultExpression.substring(i + 1, resultExpression.length()); + return calculate(firstPartOfExpression, username) * calculate(secondPartOfString, username); + } + if (resultExpression.charAt(i) == '/' && balance == 0) { + String firstPartOfExpression = resultExpression.substring(0, i); + String secondPartOfString = resultExpression.substring(i + 1, resultExpression.length()); + return calculate(firstPartOfExpression, username) / calculate(secondPartOfString, username); + } + } + /*if (resultExpression.charAt(0) == '(') { + return calculate(resultExpression.substring(1, resultExpression.length() - 1)); + } else {*/ + if (Character.isDigit((resultExpression.charAt(0)))) { + return Double.parseDouble(resultExpression.toString()); + } else { + String functionName = resultExpression.substring(0, resultExpression.indexOf("(")); + String arguments = resultExpression.substring(resultExpression.indexOf("(") + 1, resultExpression.length() - 1); + Vector functionArguments = new Vector<>(); + Integer argumentBalance = 0; + Integer start = 0; + for (int i = 0; i < arguments.length(); ++i) { + if (arguments.charAt(i) == '(') { + ++argumentBalance; + } + if (arguments.charAt(i) == ')') { + --argumentBalance; + } + if (arguments.charAt(i) == ',' && argumentBalance == 0) { + functionArguments.add(calculate(arguments.substring(start, i), username)); + start = i + 1; + } + } + functionArguments.add(calculate(arguments.substring(start, arguments.length()), username)); + if (functionName.equals("sin")) { + return Math.sin(functionArguments.lastElement()); + } + if (functionName.equals("cos")) { + return Math.cos(functionArguments.lastElement()); + } + if (functionName.equals("tg")) { + return Math.tan(functionArguments.lastElement()); + } + if (functionName.equals("sqrt")) { + return Math.sqrt(functionArguments.lastElement()); + } + if (functionName.equals("pow")) { + return Math.pow(functionArguments.firstElement(), functionArguments.lastElement()); + } + if (functionName.equals("abs")) { + return Math.abs(functionArguments.lastElement()); + } + if (functionName.equals("sign")) { + return Math.signum(functionArguments.lastElement()); + } + if (functionName.equals("log")) { + return Math.log(functionArguments.firstElement()) / Math.log(functionArguments.lastElement()); + } + if (functionName.equals("log2")) { + return Math.log(functionArguments.lastElement()) / Math.log(2); + } + if (functionName.equals("rnd")) { + return Math.random(); + } + if (functionName.equals("max")) { + return Math.max(functionArguments.firstElement(), functionArguments.lastElement()); + } + if (functionName.equals("min")) { + return Math.min(functionArguments.firstElement(), functionArguments.lastElement()); + } + return 0; + } + } +} diff --git a/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/SecurityServiceConfiguration.java b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/SecurityServiceConfiguration.java new file mode 100644 index 000000000..d51ddd873 --- /dev/null +++ b/homework-g597-sigareva/src/main/java/ru/mipt/java2016/homework/g597/sigareva/task4/SecurityServiceConfiguration.java @@ -0,0 +1,55 @@ +package ru.mipt.java2016.homework.g597.sigareva.task4; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import java.util.Collections; + +@Configuration +@EnableWebSecurity +public class SecurityServiceConfiguration extends WebSecurityConfigurerAdapter { + private static final Logger LOG = LoggerFactory.getLogger(SecurityServiceConfiguration.class); + + @Autowired + private BillingDao billingDao; + + @Override + protected void configure(HttpSecurity http) throws Exception { + LOG.info("Configuring security"); + http + .httpBasic().realmName("Calculator").and() + .formLogin().disable() + .logout().disable() + .csrf().disable() + .authorizeRequests() + .antMatchers("/eval/**").authenticated() + .anyRequest().permitAll(); + } + + @Autowired + public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception { + LOG.info("Registering global user details service"); + auth.userDetailsService(username -> { + try { + BillingUser user = billingDao.loadUser(username); + return new User( + user.getUsername(), + user.getPassword(), + Collections.singletonList(() -> "AUTH") + ); + } catch (EmptyResultDataAccessException e) { + LOG.warn("No such user: " + username); + throw new UsernameNotFoundException(username); + } + }); + } +} \ No newline at end of file