From 05b892db2b170a903e85ccf29d27533a6ef0ceb6 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 28 Nov 2015 17:39:02 +0300 Subject: [PATCH 01/27] Twitter --- .../mipt/diht/studens/InteractiveParse.java | 46 ++++++++++ .../ru/mipt/diht/studens/PackageParse.java | 47 ++++++++++ .../java/ru/mipt/diht/studens/PrintTweet.java | 91 +++++++++++++++++++ .../java/ru/mipt/diht/studens/RunTwitter.java | 31 +++++++ .../ru/mipt/diht/studens/TwitterProvider.java | 49 ++++++++++ .../mipt/diht/studens/commands/Commands.java | 68 ++++++++++++++ .../diht/studens/commands/ExitCommand.java | 16 ++++ .../diht/studens/commands/HelpCommand.java | 42 +++++++++ .../diht/studens/commands/HideCommand.java | 24 +++++ .../diht/studens/commands/LimitCommand.java | 41 +++++++++ .../diht/studens/commands/PlaseCommand.java | 26 ++++++ .../diht/studens/commands/QueryCommand.java | 38 ++++++++ .../diht/studens/commands/StreamCommand.java | 42 +++++++++ .../studens/exception/HandlerException.java | 12 +++ 14 files changed, 573 insertions(+) create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java new file mode 100644 index 0000000..abd0ef1 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java @@ -0,0 +1,46 @@ +package ru.mipt.diht.studens; + +import ru.mipt.diht.studens.commands.Commands; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Twitter; + +import java.util.NoSuchElementException; +import java.util.Scanner; + +public class InteractiveParse { + public static void parse(TwitterProvider twitterPr) { + Scanner in = new Scanner(System.in); + try { + while (true) { + System.out.print("$ "); + String s; + s = in.nextLine(); + s = s.trim(); + String[] current = s.split("\\s+"); + for (int i = 0; i < current.length; ++i) { + current[i].trim(); + } + try { + Commands command = Commands.fromString(current); + command.execute(twitterPr); + } catch (NoSuchElementException e) { + System.out.println("\033[31m" + e.getMessage() + "\033[0m"); + } + } + } catch (IllegalMonitorStateException e) { + if (e.getMessage().equals("Exit")) { + in.close(); + System.out.println("Goodbye"); + System.exit(0); + } + else + HandlerException.handler(e); + } catch (NoSuchElementException e) { + HandlerException.handler(e); + } catch (Exception e) { + in.close(); + HandlerException.handler(e); + } + in.close(); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java new file mode 100644 index 0000000..23f84ff --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java @@ -0,0 +1,47 @@ +package ru.mipt.diht.studens; + + +import ru.mipt.diht.studens.commands.Commands; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Twitter; + +import java.util.ArrayList; +import java.util.NoSuchElementException; + +public class PackageParse { + public static void parse(TwitterProvider twitterPr, String[] args) { + try { + ArrayList current = new ArrayList<>(); + for (int i = 0; i < args.length; ++i) { + current.clear(); + while (i < args.length) { + if (!(args[i].contains(";"))) { + current.add(args[i]); + i++; + } else { + current.add(args[i].substring(0, args[i].indexOf(";"))); + break; + } + } + if (current.size() == 0) { + return; + } + String[] com = new String[current.size()]; + com = current.toArray(com); + try { + Commands command = Commands.fromString(com); + command.execute(twitterPr); + } catch (NoSuchElementException e) { + System.out.println("\033[31m" + e.toString() + "\033[0m"); + } + } + } catch (IllegalMonitorStateException e) { + System.out.println("Goodbye"); + System.exit(0); + } catch (IllegalArgumentException e) { + HandlerException.handler("Wrong arguments", e); + } catch (Exception e) { + HandlerException.handler( e); + } + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java new file mode 100644 index 0000000..3c463eb --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java @@ -0,0 +1,91 @@ +package ru.mipt.diht.studens; + +import twitter4j.Status; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +import static java.lang.Math.abs; + +public class PrintTweet { + + static final int LENGTH = 170; + static final int MIN = 1; + static final int HOUR = 2; + static final int DAY = 3; + static final int RETW = 0; + + static final int FORM_1 = 0; + static final int FORM_2 = 1; + static final int FORM_3 = 2; + + + static final String[][] wordPlural = { + {"ретвит", "ретвита", "ретвитов" }, + {"минута", "минуты", "минут" }, + {"час", "часа", "часов" }, + {"день", "дня", "дней"} + }; + + public static int pluralForm(long n) + { + n = abs(n) % 100; + long n1 = n % 10; + if (n > 10 && n < 20) return FORM_3; + if (n1 > 1 && n1 < 5) return FORM_2; + if (n1 == 1) return FORM_1; + return FORM_3; + } + + public static String tweetDate(Date givenDate) { + + StringBuilder result = new StringBuilder().append("[ "); + + LocalDateTime givenTime = LocalDateTime.ofInstant(givenDate.toInstant(), ZoneId.systemDefault()); + LocalDateTime nowTime = LocalDateTime.now(); + Duration goneTime = Duration.between(givenTime, nowTime); + + if (goneTime.toMinutes() < 2) { + result.append("Только что"); + } else if (goneTime.toHours() <= 0) { + result.append(goneTime.toMinutes()).append(" ").append(wordPlural[MIN][pluralForm(goneTime.toMinutes())]).append(" назад"); + } else if (goneTime.toDays() <= 0) { + result.append(goneTime.toHours()).append(" ").append(wordPlural[HOUR][pluralForm(goneTime.toHours())]).append(" назад"); + } else if ( goneTime.toDays() == 1) { + result.append("Вчера"); + } else { + result.append(goneTime.toDays()).append(" ").append(wordPlural[DAY][pluralForm(goneTime.toDays())]).append(" назад"); + } + return result.append(" ] ").toString(); + } + + public static String print(Status tweet, boolean stream) { + StringBuilder result = new StringBuilder(); + + if (!stream) { + result.append(tweetDate(tweet.getCreatedAt())); + } + + result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) + .append( "\033[0m").append(": "); + + if (tweet.isRetweet() ) { + result.append("ретвитнул @").append("\033[34m").append(tweet.getRetweetedStatus().getUser().getScreenName()) + .append( "\033[0m ").append(tweet.getRetweetedStatus().getText()); + } else { + result.append(tweet.getText()); + } + if (!tweet.isRetweet() && tweet.getRetweetCount() != 0) { + result.append(" (").append(tweet.getRetweetCount()).append(" ").append(wordPlural[RETW][pluralForm(tweet.getRetweetCount())]).append(")"); + } + + result.append("\n"); + for (int i = 0; i < LENGTH; i++) { + result.append("-"); + } + + return result.toString(); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java new file mode 100644 index 0000000..8b3e0d0 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.studens; + +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.Twitter; +import twitter4j.TwitterException; +import twitter4j.TwitterFactory; +import twitter4j.util.TimeSpanConverter; + +import java.awt.*; +import java.sql.Time; +import java.text.StringCharacterIterator; +import java.util.Date; +import java.util.List; + +public class RunTwitter { + public static void main(String[] args) throws TwitterException { + + try { + Twitter twitter = new TwitterFactory().getInstance(); + TwitterProvider twitterPr = new TwitterProvider(twitter); + if (args.length == 0) { + InteractiveParse.parse(twitterPr); + } else { + PackageParse.parse(twitterPr, args); + } + } catch (IllegalArgumentException e) { + HandlerException.handler(e); + } + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java new file mode 100644 index 0000000..d59eaff --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java @@ -0,0 +1,49 @@ +package ru.mipt.diht.studens; + + +import twitter4j.Twitter; + +public class TwitterProvider { + private Twitter twitter; + private boolean hideRetweets; + private String plase; + private int limit; + + public TwitterProvider(Twitter twitter) { + + this.twitter = twitter; + hideRetweets = false; + limit = 0; + plase = " "; + } + + public void changeParameterRetweets(boolean parameter) { + hideRetweets = parameter; + } + + public void changeParameterPlase(String parameter) { + plase = parameter; + } + + public void changeParameterLimit(int parameter) { + limit = parameter; + } + + public Twitter twitter() { + return twitter; + } + + public boolean isHideRetweets() { + return hideRetweets; + } + + public String getPlase() { + return plase; + } + + public int getLimit() { + return limit; + } + + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java new file mode 100644 index 0000000..28b6218 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java @@ -0,0 +1,68 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +import java.util.HashMap; +import java.util.NoSuchElementException; + +public abstract class Commands { + private static final HashMap COMMANDS; + + /* + * [--query|-q ] + * [--place|-p ] + * [--stream|-s] + * [--hideRetweets] + * [--limit|-l ] + * [--help|-h] + */ + + static { + COMMANDS = new HashMap<>(); + COMMANDS.put("--query", new QueryCommand()); + COMMANDS.put("-q", new QueryCommand()); + COMMANDS.put("--place", new PlaseCommand()); + COMMANDS.put("-p", new PlaseCommand()); + COMMANDS.put("--stream", new StreamCommand()); + COMMANDS.put("-s", new StreamCommand()); + COMMANDS.put("-hideRetweets", new HideCommand()); + COMMANDS.put("--limit", new LimitCommand()); + COMMANDS.put("-l", new LimitCommand()); + COMMANDS.put("--help", new HelpCommand()); + COMMANDS.put("-h", new HelpCommand()); + COMMANDS.put("-e", new ExitCommand()); + COMMANDS.put("-exit", new ExitCommand()); + } + + public static Commands fromString(String[] s) throws Exception { + if (s[0].equals("")) { + throw new NoSuchElementException(""); + } + + if (COMMANDS.containsKey(s[0])) { + Commands command = COMMANDS.get(s[0]); + if (s.length - 1 != command.numberOfArguments()) { + /* if ( (s.length - 1 == command.numberOfArguments() + 1) && + !(s[command.numberOfArguments() + 1].equals("hRts")) ) { + throw new NoSuchElementException("Wrong the second argument." + + "Expected null or hRts(for stream, query and limit)."); + } + if ( (s.length - 1 != command.numberOfArguments() + 1) )*/ + throw new NoSuchElementException("Unexpected number of arguments: " + + command.numberOfArguments() + " required"); + } + if ( (s.equals("-hideRetweets")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { + throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); + } + command.putArguments(s); + return command; + } else { + throw new NoSuchElementException(s[0] + " is unknown command"); + } + } + + public abstract void execute(TwitterProvider twitter); + protected void putArguments(String[] args) { + } + protected abstract int numberOfArguments(); +} \ No newline at end of file diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java new file mode 100644 index 0000000..ba7fd03 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java @@ -0,0 +1,16 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +public class ExitCommand extends Commands { + + @Override + public void execute(TwitterProvider twitter) { + throw new IllegalMonitorStateException("Exit"); + } + + @Override + protected int numberOfArguments() { + return 0; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java new file mode 100644 index 0000000..d038b3b --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java @@ -0,0 +1,42 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +public class HelpCommand extends Commands { + @Override + public void execute(TwitterProvider twitter) { + System.out.println( "\033[1;35m" + "Параметры\n" + + "\033[36m" + "stream " + "\033[0m" + + "- равномерно и непрерывно с задержкой в 1 секунду печатает твиты на экран. [--stream|-s]\n" + + + "\033[36m" + "limit " + "\033[0m" + + "- n твитов. [--limit|-l ]\n" + + "\033[36m" + "noLimit " + "\033[0m" + + "- отменить limit режим. [--limit|-l 0]\n" + + + "\033[36m" + "query " + "\033[0m" + + " - поиск по заданному запросу. [--query|-q )]\n" + + + "\033[36m" + "place " + "\033[0m" + + "- поиск по заданному региону. [--place|-p ]\n" + + "\033[36m" + "allPlace " + "\033[0m" + + "- отменить place режим. [--place|-p 0]\n" + + + "\033[36m" + "hideRetweets " + "\033[0m" + + "- филтр ретвитов. [--hideRetweets +]\n" + + "\033[36m" + "Retweets " + "\033[0m" + + "- отменить hideRetweets режим. [--hideRetweets -]\n" + + + "\033[36m" + "help " + "\033[0m" + + "- печатает справку. [--help|-h]\n" + + + "\033[36m" + "exit " + "\033[0m" + + "- выход. [--exit|-e]\n"); + + } + + @Override + protected int numberOfArguments() { + return 0; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java new file mode 100644 index 0000000..3041796 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java @@ -0,0 +1,24 @@ +package ru.mipt.diht.studens.commands; + + +import ru.mipt.diht.studens.TwitterProvider; + +public class HideCommand extends Commands { + String parameter; + @Override + public void execute(TwitterProvider twitterPr) { + if (parameter.equals("+")) twitterPr.changeParameterRetweets(true); + else twitterPr.changeParameterRetweets(false); + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + parameter = args[1]; + } + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java new file mode 100644 index 0000000..55622f2 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java @@ -0,0 +1,41 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.TwitterException; + +import java.util.List; + +public class LimitCommand extends Commands { + private int number; + + @Override + public void execute(TwitterProvider twitterPr) { + + twitterPr.changeParameterLimit(number); + List statusList = null; + try { + statusList = twitterPr.twitter().getHomeTimeline(); + + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status: statusList) { + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + System.out.println(new PrintTweet().print(status, false)); + } + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + number = Integer.parseInt(args[1]); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java new file mode 100644 index 0000000..93c7528 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java @@ -0,0 +1,26 @@ +package ru.mipt.diht.studens.commands; + + +import ru.mipt.diht.studens.TwitterProvider; + +public class PlaseCommand extends Commands { + + String searchPlace; + + @Override + public void execute(TwitterProvider twitterPr) { + + twitterPr.changeParameterPlase(searchPlace); + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + searchPlace = args[1]; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java new file mode 100644 index 0000000..bf89395 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java @@ -0,0 +1,38 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.*; + +public class QueryCommand extends Commands { + + private String searchString; + + @Override + public void execute(TwitterProvider twitterPr) { + + Query query = new Query(searchString); + QueryResult result = null; + try { + result = twitterPr.twitter().search(query); + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status : result.getTweets()) { + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + System.out.println(new PrintTweet().print(status, false)); + } + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + searchString = args[1]; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java new file mode 100644 index 0000000..25a6c10 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java @@ -0,0 +1,42 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.TwitterException; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static java.lang.Thread.sleep; + +public class StreamCommand extends Commands { + + @Override + public void execute(TwitterProvider twitterPr) { + + List statusList = null; + try { + statusList = twitterPr.twitter().getHomeTimeline(); + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status: statusList) { + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + System.out.println(new PrintTweet().print(status, false)); + + try { + sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + @Override + protected int numberOfArguments() { + return 0; + } + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java new file mode 100644 index 0000000..8a193bd --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java @@ -0,0 +1,12 @@ +package ru.mipt.diht.studens.exception; + +public class HandlerException { + public static void handler(String message, Throwable cause) { + System.err.println(message + ". " + cause.getMessage()); + System.exit(1); + } + public static void handler(Throwable cause) { + System.err.println(cause.getMessage()); + System.exit(1); + } +} From b81f4d8ef842be9b8b0f487657521866dde82907 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 28 Nov 2015 18:18:59 +0300 Subject: [PATCH 02/27] Twitter --- .../src/main/java/ru/mipt/diht/studens/RunTwitter.java | 2 ++ .../main/java/ru/mipt/diht/studens/TwitterProvider.java | 9 --------- .../java/ru/mipt/diht/studens/commands/Commands.java | 5 +++-- .../java/ru/mipt/diht/studens/commands/HelpCommand.java | 6 ++---- .../java/ru/mipt/diht/studens/commands/LimitCommand.java | 6 ++++-- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java index 8b3e0d0..484d0a2 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java @@ -16,6 +16,8 @@ public class RunTwitter { public static void main(String[] args) throws TwitterException { + + try { Twitter twitter = new TwitterFactory().getInstance(); TwitterProvider twitterPr = new TwitterProvider(twitter); diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java index d59eaff..c5ed0dc 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java @@ -7,13 +7,11 @@ public class TwitterProvider { private Twitter twitter; private boolean hideRetweets; private String plase; - private int limit; public TwitterProvider(Twitter twitter) { this.twitter = twitter; hideRetweets = false; - limit = 0; plase = " "; } @@ -25,9 +23,6 @@ public void changeParameterPlase(String parameter) { plase = parameter; } - public void changeParameterLimit(int parameter) { - limit = parameter; - } public Twitter twitter() { return twitter; @@ -41,9 +36,5 @@ public String getPlase() { return plase; } - public int getLimit() { - return limit; - } - } diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java index 28b6218..f956811 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java @@ -25,7 +25,8 @@ public abstract class Commands { COMMANDS.put("-p", new PlaseCommand()); COMMANDS.put("--stream", new StreamCommand()); COMMANDS.put("-s", new StreamCommand()); - COMMANDS.put("-hideRetweets", new HideCommand()); + COMMANDS.put("--hideRetweets", new HideCommand()); + COMMANDS.put("-hRtws", new HideCommand()); COMMANDS.put("--limit", new LimitCommand()); COMMANDS.put("-l", new LimitCommand()); COMMANDS.put("--help", new HelpCommand()); @@ -51,7 +52,7 @@ public static Commands fromString(String[] s) throws Exception { throw new NoSuchElementException("Unexpected number of arguments: " + command.numberOfArguments() + " required"); } - if ( (s.equals("-hideRetweets")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { + if ( (s.equals("--hideRetweets") || s.equals("-hRtws")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); } command.putArguments(s); diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java index d038b3b..1cf284c 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java @@ -11,8 +11,6 @@ public void execute(TwitterProvider twitter) { "\033[36m" + "limit " + "\033[0m" + "- n твитов. [--limit|-l ]\n" + - "\033[36m" + "noLimit " + "\033[0m" + - "- отменить limit режим. [--limit|-l 0]\n" + "\033[36m" + "query " + "\033[0m" + " - поиск по заданному запросу. [--query|-q )]\n" + @@ -23,9 +21,9 @@ public void execute(TwitterProvider twitter) { "- отменить place режим. [--place|-p 0]\n" + "\033[36m" + "hideRetweets " + "\033[0m" + - "- филтр ретвитов. [--hideRetweets +]\n" + + "- филтр ретвитов. [--hideRetweets|-hRtws +]\n" + "\033[36m" + "Retweets " + "\033[0m" + - "- отменить hideRetweets режим. [--hideRetweets -]\n" + + "- отменить hideRetweets режим. [--hideRetweets|-hRtws -]\n" + "\033[36m" + "help " + "\033[0m" + "- печатает справку. [--help|-h]\n" + diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java index 55622f2..63211e2 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java @@ -14,7 +14,7 @@ public class LimitCommand extends Commands { @Override public void execute(TwitterProvider twitterPr) { - twitterPr.changeParameterLimit(number); + List statusList = null; try { statusList = twitterPr.twitter().getHomeTimeline(); @@ -23,8 +23,10 @@ public void execute(TwitterProvider twitterPr) { HandlerException.handler(e); } for (Status status: statusList) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) System.out.println(new PrintTweet().print(status, false)); + number-=1; + if (number == 0) break; } } From 8a3149eb36690084843d500780f07516a66950cf Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 30 Nov 2015 19:06:01 +0300 Subject: [PATCH 03/27] Revert "Twitter" This reverts commit b81f4d8ef842be9b8b0f487657521866dde82907. --- .../src/main/java/ru/mipt/diht/studens/RunTwitter.java | 2 -- .../main/java/ru/mipt/diht/studens/TwitterProvider.java | 9 +++++++++ .../java/ru/mipt/diht/studens/commands/Commands.java | 5 ++--- .../java/ru/mipt/diht/studens/commands/HelpCommand.java | 6 ++++-- .../java/ru/mipt/diht/studens/commands/LimitCommand.java | 6 ++---- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java index 484d0a2..8b3e0d0 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java @@ -16,8 +16,6 @@ public class RunTwitter { public static void main(String[] args) throws TwitterException { - - try { Twitter twitter = new TwitterFactory().getInstance(); TwitterProvider twitterPr = new TwitterProvider(twitter); diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java index c5ed0dc..d59eaff 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java @@ -7,11 +7,13 @@ public class TwitterProvider { private Twitter twitter; private boolean hideRetweets; private String plase; + private int limit; public TwitterProvider(Twitter twitter) { this.twitter = twitter; hideRetweets = false; + limit = 0; plase = " "; } @@ -23,6 +25,9 @@ public void changeParameterPlase(String parameter) { plase = parameter; } + public void changeParameterLimit(int parameter) { + limit = parameter; + } public Twitter twitter() { return twitter; @@ -36,5 +41,9 @@ public String getPlase() { return plase; } + public int getLimit() { + return limit; + } + } diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java index f956811..28b6218 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java @@ -25,8 +25,7 @@ public abstract class Commands { COMMANDS.put("-p", new PlaseCommand()); COMMANDS.put("--stream", new StreamCommand()); COMMANDS.put("-s", new StreamCommand()); - COMMANDS.put("--hideRetweets", new HideCommand()); - COMMANDS.put("-hRtws", new HideCommand()); + COMMANDS.put("-hideRetweets", new HideCommand()); COMMANDS.put("--limit", new LimitCommand()); COMMANDS.put("-l", new LimitCommand()); COMMANDS.put("--help", new HelpCommand()); @@ -52,7 +51,7 @@ public static Commands fromString(String[] s) throws Exception { throw new NoSuchElementException("Unexpected number of arguments: " + command.numberOfArguments() + " required"); } - if ( (s.equals("--hideRetweets") || s.equals("-hRtws")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { + if ( (s.equals("-hideRetweets")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); } command.putArguments(s); diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java index 1cf284c..d038b3b 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java @@ -11,6 +11,8 @@ public void execute(TwitterProvider twitter) { "\033[36m" + "limit " + "\033[0m" + "- n твитов. [--limit|-l ]\n" + + "\033[36m" + "noLimit " + "\033[0m" + + "- отменить limit режим. [--limit|-l 0]\n" + "\033[36m" + "query " + "\033[0m" + " - поиск по заданному запросу. [--query|-q )]\n" + @@ -21,9 +23,9 @@ public void execute(TwitterProvider twitter) { "- отменить place режим. [--place|-p 0]\n" + "\033[36m" + "hideRetweets " + "\033[0m" + - "- филтр ретвитов. [--hideRetweets|-hRtws +]\n" + + "- филтр ретвитов. [--hideRetweets +]\n" + "\033[36m" + "Retweets " + "\033[0m" + - "- отменить hideRetweets режим. [--hideRetweets|-hRtws -]\n" + + "- отменить hideRetweets режим. [--hideRetweets -]\n" + "\033[36m" + "help " + "\033[0m" + "- печатает справку. [--help|-h]\n" + diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java index 63211e2..55622f2 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java @@ -14,7 +14,7 @@ public class LimitCommand extends Commands { @Override public void execute(TwitterProvider twitterPr) { - + twitterPr.changeParameterLimit(number); List statusList = null; try { statusList = twitterPr.twitter().getHomeTimeline(); @@ -23,10 +23,8 @@ public void execute(TwitterProvider twitterPr) { HandlerException.handler(e); } for (Status status: statusList) { - if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) System.out.println(new PrintTweet().print(status, false)); - number-=1; - if (number == 0) break; } } From 9d216fedfd5eb08383efaaa673de2b0928bedd77 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 30 Nov 2015 19:06:11 +0300 Subject: [PATCH 04/27] Revert "Twitter" This reverts commit 05b892db2b170a903e85ccf29d27533a6ef0ceb6. --- .../mipt/diht/studens/InteractiveParse.java | 46 ---------- .../ru/mipt/diht/studens/PackageParse.java | 47 ---------- .../java/ru/mipt/diht/studens/PrintTweet.java | 91 ------------------- .../java/ru/mipt/diht/studens/RunTwitter.java | 31 ------- .../ru/mipt/diht/studens/TwitterProvider.java | 49 ---------- .../mipt/diht/studens/commands/Commands.java | 68 -------------- .../diht/studens/commands/ExitCommand.java | 16 ---- .../diht/studens/commands/HelpCommand.java | 42 --------- .../diht/studens/commands/HideCommand.java | 24 ----- .../diht/studens/commands/LimitCommand.java | 41 --------- .../diht/studens/commands/PlaseCommand.java | 26 ------ .../diht/studens/commands/QueryCommand.java | 38 -------- .../diht/studens/commands/StreamCommand.java | 42 --------- .../studens/exception/HandlerException.java | 12 --- 14 files changed, 573 deletions(-) delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java deleted file mode 100644 index abd0ef1..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java +++ /dev/null @@ -1,46 +0,0 @@ -package ru.mipt.diht.studens; - -import ru.mipt.diht.studens.commands.Commands; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Twitter; - -import java.util.NoSuchElementException; -import java.util.Scanner; - -public class InteractiveParse { - public static void parse(TwitterProvider twitterPr) { - Scanner in = new Scanner(System.in); - try { - while (true) { - System.out.print("$ "); - String s; - s = in.nextLine(); - s = s.trim(); - String[] current = s.split("\\s+"); - for (int i = 0; i < current.length; ++i) { - current[i].trim(); - } - try { - Commands command = Commands.fromString(current); - command.execute(twitterPr); - } catch (NoSuchElementException e) { - System.out.println("\033[31m" + e.getMessage() + "\033[0m"); - } - } - } catch (IllegalMonitorStateException e) { - if (e.getMessage().equals("Exit")) { - in.close(); - System.out.println("Goodbye"); - System.exit(0); - } - else - HandlerException.handler(e); - } catch (NoSuchElementException e) { - HandlerException.handler(e); - } catch (Exception e) { - in.close(); - HandlerException.handler(e); - } - in.close(); - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java deleted file mode 100644 index 23f84ff..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.mipt.diht.studens; - - -import ru.mipt.diht.studens.commands.Commands; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Twitter; - -import java.util.ArrayList; -import java.util.NoSuchElementException; - -public class PackageParse { - public static void parse(TwitterProvider twitterPr, String[] args) { - try { - ArrayList current = new ArrayList<>(); - for (int i = 0; i < args.length; ++i) { - current.clear(); - while (i < args.length) { - if (!(args[i].contains(";"))) { - current.add(args[i]); - i++; - } else { - current.add(args[i].substring(0, args[i].indexOf(";"))); - break; - } - } - if (current.size() == 0) { - return; - } - String[] com = new String[current.size()]; - com = current.toArray(com); - try { - Commands command = Commands.fromString(com); - command.execute(twitterPr); - } catch (NoSuchElementException e) { - System.out.println("\033[31m" + e.toString() + "\033[0m"); - } - } - } catch (IllegalMonitorStateException e) { - System.out.println("Goodbye"); - System.exit(0); - } catch (IllegalArgumentException e) { - HandlerException.handler("Wrong arguments", e); - } catch (Exception e) { - HandlerException.handler( e); - } - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java deleted file mode 100644 index 3c463eb..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java +++ /dev/null @@ -1,91 +0,0 @@ -package ru.mipt.diht.studens; - -import twitter4j.Status; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; - -import static java.lang.Math.abs; - -public class PrintTweet { - - static final int LENGTH = 170; - static final int MIN = 1; - static final int HOUR = 2; - static final int DAY = 3; - static final int RETW = 0; - - static final int FORM_1 = 0; - static final int FORM_2 = 1; - static final int FORM_3 = 2; - - - static final String[][] wordPlural = { - {"ретвит", "ретвита", "ретвитов" }, - {"минута", "минуты", "минут" }, - {"час", "часа", "часов" }, - {"день", "дня", "дней"} - }; - - public static int pluralForm(long n) - { - n = abs(n) % 100; - long n1 = n % 10; - if (n > 10 && n < 20) return FORM_3; - if (n1 > 1 && n1 < 5) return FORM_2; - if (n1 == 1) return FORM_1; - return FORM_3; - } - - public static String tweetDate(Date givenDate) { - - StringBuilder result = new StringBuilder().append("[ "); - - LocalDateTime givenTime = LocalDateTime.ofInstant(givenDate.toInstant(), ZoneId.systemDefault()); - LocalDateTime nowTime = LocalDateTime.now(); - Duration goneTime = Duration.between(givenTime, nowTime); - - if (goneTime.toMinutes() < 2) { - result.append("Только что"); - } else if (goneTime.toHours() <= 0) { - result.append(goneTime.toMinutes()).append(" ").append(wordPlural[MIN][pluralForm(goneTime.toMinutes())]).append(" назад"); - } else if (goneTime.toDays() <= 0) { - result.append(goneTime.toHours()).append(" ").append(wordPlural[HOUR][pluralForm(goneTime.toHours())]).append(" назад"); - } else if ( goneTime.toDays() == 1) { - result.append("Вчера"); - } else { - result.append(goneTime.toDays()).append(" ").append(wordPlural[DAY][pluralForm(goneTime.toDays())]).append(" назад"); - } - return result.append(" ] ").toString(); - } - - public static String print(Status tweet, boolean stream) { - StringBuilder result = new StringBuilder(); - - if (!stream) { - result.append(tweetDate(tweet.getCreatedAt())); - } - - result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) - .append( "\033[0m").append(": "); - - if (tweet.isRetweet() ) { - result.append("ретвитнул @").append("\033[34m").append(tweet.getRetweetedStatus().getUser().getScreenName()) - .append( "\033[0m ").append(tweet.getRetweetedStatus().getText()); - } else { - result.append(tweet.getText()); - } - if (!tweet.isRetweet() && tweet.getRetweetCount() != 0) { - result.append(" (").append(tweet.getRetweetCount()).append(" ").append(wordPlural[RETW][pluralForm(tweet.getRetweetCount())]).append(")"); - } - - result.append("\n"); - for (int i = 0; i < LENGTH; i++) { - result.append("-"); - } - - return result.toString(); - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java deleted file mode 100644 index 8b3e0d0..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.mipt.diht.studens; - -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Status; -import twitter4j.Twitter; -import twitter4j.TwitterException; -import twitter4j.TwitterFactory; -import twitter4j.util.TimeSpanConverter; - -import java.awt.*; -import java.sql.Time; -import java.text.StringCharacterIterator; -import java.util.Date; -import java.util.List; - -public class RunTwitter { - public static void main(String[] args) throws TwitterException { - - try { - Twitter twitter = new TwitterFactory().getInstance(); - TwitterProvider twitterPr = new TwitterProvider(twitter); - if (args.length == 0) { - InteractiveParse.parse(twitterPr); - } else { - PackageParse.parse(twitterPr, args); - } - } catch (IllegalArgumentException e) { - HandlerException.handler(e); - } - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java deleted file mode 100644 index d59eaff..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -package ru.mipt.diht.studens; - - -import twitter4j.Twitter; - -public class TwitterProvider { - private Twitter twitter; - private boolean hideRetweets; - private String plase; - private int limit; - - public TwitterProvider(Twitter twitter) { - - this.twitter = twitter; - hideRetweets = false; - limit = 0; - plase = " "; - } - - public void changeParameterRetweets(boolean parameter) { - hideRetweets = parameter; - } - - public void changeParameterPlase(String parameter) { - plase = parameter; - } - - public void changeParameterLimit(int parameter) { - limit = parameter; - } - - public Twitter twitter() { - return twitter; - } - - public boolean isHideRetweets() { - return hideRetweets; - } - - public String getPlase() { - return plase; - } - - public int getLimit() { - return limit; - } - - -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java deleted file mode 100644 index 28b6218..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java +++ /dev/null @@ -1,68 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.TwitterProvider; - -import java.util.HashMap; -import java.util.NoSuchElementException; - -public abstract class Commands { - private static final HashMap COMMANDS; - - /* - * [--query|-q ] - * [--place|-p ] - * [--stream|-s] - * [--hideRetweets] - * [--limit|-l ] - * [--help|-h] - */ - - static { - COMMANDS = new HashMap<>(); - COMMANDS.put("--query", new QueryCommand()); - COMMANDS.put("-q", new QueryCommand()); - COMMANDS.put("--place", new PlaseCommand()); - COMMANDS.put("-p", new PlaseCommand()); - COMMANDS.put("--stream", new StreamCommand()); - COMMANDS.put("-s", new StreamCommand()); - COMMANDS.put("-hideRetweets", new HideCommand()); - COMMANDS.put("--limit", new LimitCommand()); - COMMANDS.put("-l", new LimitCommand()); - COMMANDS.put("--help", new HelpCommand()); - COMMANDS.put("-h", new HelpCommand()); - COMMANDS.put("-e", new ExitCommand()); - COMMANDS.put("-exit", new ExitCommand()); - } - - public static Commands fromString(String[] s) throws Exception { - if (s[0].equals("")) { - throw new NoSuchElementException(""); - } - - if (COMMANDS.containsKey(s[0])) { - Commands command = COMMANDS.get(s[0]); - if (s.length - 1 != command.numberOfArguments()) { - /* if ( (s.length - 1 == command.numberOfArguments() + 1) && - !(s[command.numberOfArguments() + 1].equals("hRts")) ) { - throw new NoSuchElementException("Wrong the second argument." + - "Expected null or hRts(for stream, query and limit)."); - } - if ( (s.length - 1 != command.numberOfArguments() + 1) )*/ - throw new NoSuchElementException("Unexpected number of arguments: " - + command.numberOfArguments() + " required"); - } - if ( (s.equals("-hideRetweets")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { - throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); - } - command.putArguments(s); - return command; - } else { - throw new NoSuchElementException(s[0] + " is unknown command"); - } - } - - public abstract void execute(TwitterProvider twitter); - protected void putArguments(String[] args) { - } - protected abstract int numberOfArguments(); -} \ No newline at end of file diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java deleted file mode 100644 index ba7fd03..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.TwitterProvider; - -public class ExitCommand extends Commands { - - @Override - public void execute(TwitterProvider twitter) { - throw new IllegalMonitorStateException("Exit"); - } - - @Override - protected int numberOfArguments() { - return 0; - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java deleted file mode 100644 index d038b3b..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.TwitterProvider; - -public class HelpCommand extends Commands { - @Override - public void execute(TwitterProvider twitter) { - System.out.println( "\033[1;35m" + "Параметры\n" + - "\033[36m" + "stream " + "\033[0m" + - "- равномерно и непрерывно с задержкой в 1 секунду печатает твиты на экран. [--stream|-s]\n" + - - "\033[36m" + "limit " + "\033[0m" + - "- n твитов. [--limit|-l ]\n" + - "\033[36m" + "noLimit " + "\033[0m" + - "- отменить limit режим. [--limit|-l 0]\n" + - - "\033[36m" + "query " + "\033[0m" + - " - поиск по заданному запросу. [--query|-q )]\n" + - - "\033[36m" + "place " + "\033[0m" + - "- поиск по заданному региону. [--place|-p ]\n" + - "\033[36m" + "allPlace " + "\033[0m" + - "- отменить place режим. [--place|-p 0]\n" + - - "\033[36m" + "hideRetweets " + "\033[0m" + - "- филтр ретвитов. [--hideRetweets +]\n" + - "\033[36m" + "Retweets " + "\033[0m" + - "- отменить hideRetweets режим. [--hideRetweets -]\n" + - - "\033[36m" + "help " + "\033[0m" + - "- печатает справку. [--help|-h]\n" + - - "\033[36m" + "exit " + "\033[0m" + - "- выход. [--exit|-e]\n"); - - } - - @Override - protected int numberOfArguments() { - return 0; - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java deleted file mode 100644 index 3041796..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.mipt.diht.studens.commands; - - -import ru.mipt.diht.studens.TwitterProvider; - -public class HideCommand extends Commands { - String parameter; - @Override - public void execute(TwitterProvider twitterPr) { - if (parameter.equals("+")) twitterPr.changeParameterRetweets(true); - else twitterPr.changeParameterRetweets(false); - } - - @Override - protected int numberOfArguments() { - return 1; - } - - @Override - protected void putArguments(String[] args) { - parameter = args[1]; - } - -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java deleted file mode 100644 index 55622f2..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Status; -import twitter4j.TwitterException; - -import java.util.List; - -public class LimitCommand extends Commands { - private int number; - - @Override - public void execute(TwitterProvider twitterPr) { - - twitterPr.changeParameterLimit(number); - List statusList = null; - try { - statusList = twitterPr.twitter().getHomeTimeline(); - - } catch (TwitterException e) { - HandlerException.handler(e); - } - for (Status status: statusList) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) - System.out.println(new PrintTweet().print(status, false)); - } - - } - - @Override - protected int numberOfArguments() { - return 1; - } - - @Override - protected void putArguments(String[] args) { - number = Integer.parseInt(args[1]); - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java deleted file mode 100644 index 93c7528..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.mipt.diht.studens.commands; - - -import ru.mipt.diht.studens.TwitterProvider; - -public class PlaseCommand extends Commands { - - String searchPlace; - - @Override - public void execute(TwitterProvider twitterPr) { - - twitterPr.changeParameterPlase(searchPlace); - - } - - @Override - protected int numberOfArguments() { - return 1; - } - - @Override - protected void putArguments(String[] args) { - searchPlace = args[1]; - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java deleted file mode 100644 index bf89395..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.*; - -public class QueryCommand extends Commands { - - private String searchString; - - @Override - public void execute(TwitterProvider twitterPr) { - - Query query = new Query(searchString); - QueryResult result = null; - try { - result = twitterPr.twitter().search(query); - } catch (TwitterException e) { - HandlerException.handler(e); - } - for (Status status : result.getTweets()) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) - System.out.println(new PrintTweet().print(status, false)); - } - - } - - @Override - protected int numberOfArguments() { - return 1; - } - - @Override - protected void putArguments(String[] args) { - searchString = args[1]; - } -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java deleted file mode 100644 index 25a6c10..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.mipt.diht.studens.commands; - -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Status; -import twitter4j.TwitterException; - -import java.util.List; -import java.util.concurrent.TimeUnit; - -import static java.lang.Thread.sleep; - -public class StreamCommand extends Commands { - - @Override - public void execute(TwitterProvider twitterPr) { - - List statusList = null; - try { - statusList = twitterPr.twitter().getHomeTimeline(); - } catch (TwitterException e) { - HandlerException.handler(e); - } - for (Status status: statusList) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) - System.out.println(new PrintTweet().print(status, false)); - - try { - sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - - @Override - protected int numberOfArguments() { - return 0; - } - -} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java deleted file mode 100644 index 8a193bd..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.mipt.diht.studens.exception; - -public class HandlerException { - public static void handler(String message, Throwable cause) { - System.err.println(message + ". " + cause.getMessage()); - System.exit(1); - } - public static void handler(Throwable cause) { - System.err.println(cause.getMessage()); - System.exit(1); - } -} From a3bfcdea607929ad8007db6f79565674cda3529a Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 30 Nov 2015 19:09:46 +0300 Subject: [PATCH 05/27] Twitter --- .../mipt/diht/studens/InteractiveParse.java | 46 ++++++++++ .../ru/mipt/diht/studens/PackageParse.java | 47 ++++++++++ .../java/ru/mipt/diht/studens/PrintTweet.java | 91 +++++++++++++++++++ .../java/ru/mipt/diht/studens/RunTwitter.java | 33 +++++++ .../ru/mipt/diht/studens/TwitterProvider.java | 40 ++++++++ .../mipt/diht/studens/commands/Commands.java | 69 ++++++++++++++ .../diht/studens/commands/ExitCommand.java | 16 ++++ .../diht/studens/commands/HelpCommand.java | 40 ++++++++ .../diht/studens/commands/HideCommand.java | 24 +++++ .../diht/studens/commands/LimitCommand.java | 43 +++++++++ .../diht/studens/commands/PlaseCommand.java | 26 ++++++ .../diht/studens/commands/QueryCommand.java | 38 ++++++++ .../diht/studens/commands/StreamCommand.java | 42 +++++++++ .../studens/exception/HandlerException.java | 12 +++ 14 files changed, 567 insertions(+) create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java create mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java new file mode 100644 index 0000000..abd0ef1 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java @@ -0,0 +1,46 @@ +package ru.mipt.diht.studens; + +import ru.mipt.diht.studens.commands.Commands; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Twitter; + +import java.util.NoSuchElementException; +import java.util.Scanner; + +public class InteractiveParse { + public static void parse(TwitterProvider twitterPr) { + Scanner in = new Scanner(System.in); + try { + while (true) { + System.out.print("$ "); + String s; + s = in.nextLine(); + s = s.trim(); + String[] current = s.split("\\s+"); + for (int i = 0; i < current.length; ++i) { + current[i].trim(); + } + try { + Commands command = Commands.fromString(current); + command.execute(twitterPr); + } catch (NoSuchElementException e) { + System.out.println("\033[31m" + e.getMessage() + "\033[0m"); + } + } + } catch (IllegalMonitorStateException e) { + if (e.getMessage().equals("Exit")) { + in.close(); + System.out.println("Goodbye"); + System.exit(0); + } + else + HandlerException.handler(e); + } catch (NoSuchElementException e) { + HandlerException.handler(e); + } catch (Exception e) { + in.close(); + HandlerException.handler(e); + } + in.close(); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java new file mode 100644 index 0000000..23f84ff --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java @@ -0,0 +1,47 @@ +package ru.mipt.diht.studens; + + +import ru.mipt.diht.studens.commands.Commands; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Twitter; + +import java.util.ArrayList; +import java.util.NoSuchElementException; + +public class PackageParse { + public static void parse(TwitterProvider twitterPr, String[] args) { + try { + ArrayList current = new ArrayList<>(); + for (int i = 0; i < args.length; ++i) { + current.clear(); + while (i < args.length) { + if (!(args[i].contains(";"))) { + current.add(args[i]); + i++; + } else { + current.add(args[i].substring(0, args[i].indexOf(";"))); + break; + } + } + if (current.size() == 0) { + return; + } + String[] com = new String[current.size()]; + com = current.toArray(com); + try { + Commands command = Commands.fromString(com); + command.execute(twitterPr); + } catch (NoSuchElementException e) { + System.out.println("\033[31m" + e.toString() + "\033[0m"); + } + } + } catch (IllegalMonitorStateException e) { + System.out.println("Goodbye"); + System.exit(0); + } catch (IllegalArgumentException e) { + HandlerException.handler("Wrong arguments", e); + } catch (Exception e) { + HandlerException.handler( e); + } + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java new file mode 100644 index 0000000..3c463eb --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java @@ -0,0 +1,91 @@ +package ru.mipt.diht.studens; + +import twitter4j.Status; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +import static java.lang.Math.abs; + +public class PrintTweet { + + static final int LENGTH = 170; + static final int MIN = 1; + static final int HOUR = 2; + static final int DAY = 3; + static final int RETW = 0; + + static final int FORM_1 = 0; + static final int FORM_2 = 1; + static final int FORM_3 = 2; + + + static final String[][] wordPlural = { + {"ретвит", "ретвита", "ретвитов" }, + {"минута", "минуты", "минут" }, + {"час", "часа", "часов" }, + {"день", "дня", "дней"} + }; + + public static int pluralForm(long n) + { + n = abs(n) % 100; + long n1 = n % 10; + if (n > 10 && n < 20) return FORM_3; + if (n1 > 1 && n1 < 5) return FORM_2; + if (n1 == 1) return FORM_1; + return FORM_3; + } + + public static String tweetDate(Date givenDate) { + + StringBuilder result = new StringBuilder().append("[ "); + + LocalDateTime givenTime = LocalDateTime.ofInstant(givenDate.toInstant(), ZoneId.systemDefault()); + LocalDateTime nowTime = LocalDateTime.now(); + Duration goneTime = Duration.between(givenTime, nowTime); + + if (goneTime.toMinutes() < 2) { + result.append("Только что"); + } else if (goneTime.toHours() <= 0) { + result.append(goneTime.toMinutes()).append(" ").append(wordPlural[MIN][pluralForm(goneTime.toMinutes())]).append(" назад"); + } else if (goneTime.toDays() <= 0) { + result.append(goneTime.toHours()).append(" ").append(wordPlural[HOUR][pluralForm(goneTime.toHours())]).append(" назад"); + } else if ( goneTime.toDays() == 1) { + result.append("Вчера"); + } else { + result.append(goneTime.toDays()).append(" ").append(wordPlural[DAY][pluralForm(goneTime.toDays())]).append(" назад"); + } + return result.append(" ] ").toString(); + } + + public static String print(Status tweet, boolean stream) { + StringBuilder result = new StringBuilder(); + + if (!stream) { + result.append(tweetDate(tweet.getCreatedAt())); + } + + result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) + .append( "\033[0m").append(": "); + + if (tweet.isRetweet() ) { + result.append("ретвитнул @").append("\033[34m").append(tweet.getRetweetedStatus().getUser().getScreenName()) + .append( "\033[0m ").append(tweet.getRetweetedStatus().getText()); + } else { + result.append(tweet.getText()); + } + if (!tweet.isRetweet() && tweet.getRetweetCount() != 0) { + result.append(" (").append(tweet.getRetweetCount()).append(" ").append(wordPlural[RETW][pluralForm(tweet.getRetweetCount())]).append(")"); + } + + result.append("\n"); + for (int i = 0; i < LENGTH; i++) { + result.append("-"); + } + + return result.toString(); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java new file mode 100644 index 0000000..484d0a2 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java @@ -0,0 +1,33 @@ +package ru.mipt.diht.studens; + +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.Twitter; +import twitter4j.TwitterException; +import twitter4j.TwitterFactory; +import twitter4j.util.TimeSpanConverter; + +import java.awt.*; +import java.sql.Time; +import java.text.StringCharacterIterator; +import java.util.Date; +import java.util.List; + +public class RunTwitter { + public static void main(String[] args) throws TwitterException { + + + + try { + Twitter twitter = new TwitterFactory().getInstance(); + TwitterProvider twitterPr = new TwitterProvider(twitter); + if (args.length == 0) { + InteractiveParse.parse(twitterPr); + } else { + PackageParse.parse(twitterPr, args); + } + } catch (IllegalArgumentException e) { + HandlerException.handler(e); + } + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java new file mode 100644 index 0000000..c5ed0dc --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java @@ -0,0 +1,40 @@ +package ru.mipt.diht.studens; + + +import twitter4j.Twitter; + +public class TwitterProvider { + private Twitter twitter; + private boolean hideRetweets; + private String plase; + + public TwitterProvider(Twitter twitter) { + + this.twitter = twitter; + hideRetweets = false; + plase = " "; + } + + public void changeParameterRetweets(boolean parameter) { + hideRetweets = parameter; + } + + public void changeParameterPlase(String parameter) { + plase = parameter; + } + + + public Twitter twitter() { + return twitter; + } + + public boolean isHideRetweets() { + return hideRetweets; + } + + public String getPlase() { + return plase; + } + + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java new file mode 100644 index 0000000..f956811 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java @@ -0,0 +1,69 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +import java.util.HashMap; +import java.util.NoSuchElementException; + +public abstract class Commands { + private static final HashMap COMMANDS; + + /* + * [--query|-q ] + * [--place|-p ] + * [--stream|-s] + * [--hideRetweets] + * [--limit|-l ] + * [--help|-h] + */ + + static { + COMMANDS = new HashMap<>(); + COMMANDS.put("--query", new QueryCommand()); + COMMANDS.put("-q", new QueryCommand()); + COMMANDS.put("--place", new PlaseCommand()); + COMMANDS.put("-p", new PlaseCommand()); + COMMANDS.put("--stream", new StreamCommand()); + COMMANDS.put("-s", new StreamCommand()); + COMMANDS.put("--hideRetweets", new HideCommand()); + COMMANDS.put("-hRtws", new HideCommand()); + COMMANDS.put("--limit", new LimitCommand()); + COMMANDS.put("-l", new LimitCommand()); + COMMANDS.put("--help", new HelpCommand()); + COMMANDS.put("-h", new HelpCommand()); + COMMANDS.put("-e", new ExitCommand()); + COMMANDS.put("-exit", new ExitCommand()); + } + + public static Commands fromString(String[] s) throws Exception { + if (s[0].equals("")) { + throw new NoSuchElementException(""); + } + + if (COMMANDS.containsKey(s[0])) { + Commands command = COMMANDS.get(s[0]); + if (s.length - 1 != command.numberOfArguments()) { + /* if ( (s.length - 1 == command.numberOfArguments() + 1) && + !(s[command.numberOfArguments() + 1].equals("hRts")) ) { + throw new NoSuchElementException("Wrong the second argument." + + "Expected null or hRts(for stream, query and limit)."); + } + if ( (s.length - 1 != command.numberOfArguments() + 1) )*/ + throw new NoSuchElementException("Unexpected number of arguments: " + + command.numberOfArguments() + " required"); + } + if ( (s.equals("--hideRetweets") || s.equals("-hRtws")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { + throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); + } + command.putArguments(s); + return command; + } else { + throw new NoSuchElementException(s[0] + " is unknown command"); + } + } + + public abstract void execute(TwitterProvider twitter); + protected void putArguments(String[] args) { + } + protected abstract int numberOfArguments(); +} \ No newline at end of file diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java new file mode 100644 index 0000000..ba7fd03 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java @@ -0,0 +1,16 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +public class ExitCommand extends Commands { + + @Override + public void execute(TwitterProvider twitter) { + throw new IllegalMonitorStateException("Exit"); + } + + @Override + protected int numberOfArguments() { + return 0; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java new file mode 100644 index 0000000..1cf284c --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java @@ -0,0 +1,40 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.TwitterProvider; + +public class HelpCommand extends Commands { + @Override + public void execute(TwitterProvider twitter) { + System.out.println( "\033[1;35m" + "Параметры\n" + + "\033[36m" + "stream " + "\033[0m" + + "- равномерно и непрерывно с задержкой в 1 секунду печатает твиты на экран. [--stream|-s]\n" + + + "\033[36m" + "limit " + "\033[0m" + + "- n твитов. [--limit|-l ]\n" + + + "\033[36m" + "query " + "\033[0m" + + " - поиск по заданному запросу. [--query|-q )]\n" + + + "\033[36m" + "place " + "\033[0m" + + "- поиск по заданному региону. [--place|-p ]\n" + + "\033[36m" + "allPlace " + "\033[0m" + + "- отменить place режим. [--place|-p 0]\n" + + + "\033[36m" + "hideRetweets " + "\033[0m" + + "- филтр ретвитов. [--hideRetweets|-hRtws +]\n" + + "\033[36m" + "Retweets " + "\033[0m" + + "- отменить hideRetweets режим. [--hideRetweets|-hRtws -]\n" + + + "\033[36m" + "help " + "\033[0m" + + "- печатает справку. [--help|-h]\n" + + + "\033[36m" + "exit " + "\033[0m" + + "- выход. [--exit|-e]\n"); + + } + + @Override + protected int numberOfArguments() { + return 0; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java new file mode 100644 index 0000000..3041796 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java @@ -0,0 +1,24 @@ +package ru.mipt.diht.studens.commands; + + +import ru.mipt.diht.studens.TwitterProvider; + +public class HideCommand extends Commands { + String parameter; + @Override + public void execute(TwitterProvider twitterPr) { + if (parameter.equals("+")) twitterPr.changeParameterRetweets(true); + else twitterPr.changeParameterRetweets(false); + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + parameter = args[1]; + } + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java new file mode 100644 index 0000000..63211e2 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java @@ -0,0 +1,43 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.TwitterException; + +import java.util.List; + +public class LimitCommand extends Commands { + private int number; + + @Override + public void execute(TwitterProvider twitterPr) { + + + List statusList = null; + try { + statusList = twitterPr.twitter().getHomeTimeline(); + + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status: statusList) { + if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) + System.out.println(new PrintTweet().print(status, false)); + number-=1; + if (number == 0) break; + } + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + number = Integer.parseInt(args[1]); + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java new file mode 100644 index 0000000..93c7528 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java @@ -0,0 +1,26 @@ +package ru.mipt.diht.studens.commands; + + +import ru.mipt.diht.studens.TwitterProvider; + +public class PlaseCommand extends Commands { + + String searchPlace; + + @Override + public void execute(TwitterProvider twitterPr) { + + twitterPr.changeParameterPlase(searchPlace); + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + searchPlace = args[1]; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java new file mode 100644 index 0000000..bf89395 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java @@ -0,0 +1,38 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.*; + +public class QueryCommand extends Commands { + + private String searchString; + + @Override + public void execute(TwitterProvider twitterPr) { + + Query query = new Query(searchString); + QueryResult result = null; + try { + result = twitterPr.twitter().search(query); + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status : result.getTweets()) { + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + System.out.println(new PrintTweet().print(status, false)); + } + + } + + @Override + protected int numberOfArguments() { + return 1; + } + + @Override + protected void putArguments(String[] args) { + searchString = args[1]; + } +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java new file mode 100644 index 0000000..25a6c10 --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java @@ -0,0 +1,42 @@ +package ru.mipt.diht.studens.commands; + +import ru.mipt.diht.studens.PrintTweet; +import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.studens.exception.HandlerException; +import twitter4j.Status; +import twitter4j.TwitterException; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static java.lang.Thread.sleep; + +public class StreamCommand extends Commands { + + @Override + public void execute(TwitterProvider twitterPr) { + + List statusList = null; + try { + statusList = twitterPr.twitter().getHomeTimeline(); + } catch (TwitterException e) { + HandlerException.handler(e); + } + for (Status status: statusList) { + if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + System.out.println(new PrintTweet().print(status, false)); + + try { + sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + @Override + protected int numberOfArguments() { + return 0; + } + +} diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java new file mode 100644 index 0000000..8a193bd --- /dev/null +++ b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java @@ -0,0 +1,12 @@ +package ru.mipt.diht.studens.exception; + +public class HandlerException { + public static void handler(String message, Throwable cause) { + System.err.println(message + ". " + cause.getMessage()); + System.exit(1); + } + public static void handler(Throwable cause) { + System.err.println(cause.getMessage()); + System.exit(1); + } +} From 22e173d84b7f818b27b5e9e6f6c932fc6099adf7 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 17:51:19 +0300 Subject: [PATCH 06/27] fixed --- .../studens/exception/HandlerException.java | 12 -- projects/elinrin/pom.xml | 124 ++++++++++++++++++ .../students/elinrin}/InteractiveParse.java | 11 +- .../diht/students/elinrin}/PackageParse.java | 15 ++- .../diht/students/elinrin}/PrintTweet.java | 56 ++++---- .../diht/students/elinrin}/RunTwitter.java | 14 +- .../students/elinrin}/TwitterProvider.java | 12 +- .../students/elinrin}/commands/Commands.java | 8 +- .../elinrin}/commands/ExitCommand.java | 4 +- .../elinrin}/commands/HelpCommand.java | 4 +- .../elinrin}/commands/HideCommand.java | 4 +- .../elinrin}/commands/LimitCommand.java | 8 +- .../elinrin/commands/PlaceCommand.java} | 6 +- .../elinrin}/commands/QueryCommand.java | 8 +- .../elinrin}/commands/StreamCommand.java | 9 +- .../elinrin/exception/HandlerException.java | 25 ++++ 16 files changed, 231 insertions(+), 89 deletions(-) delete mode 100644 projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java create mode 100644 projects/elinrin/pom.xml rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/InteractiveParse.java (82%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/PackageParse.java (81%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/PrintTweet.java (55%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/RunTwitter.java (61%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/TwitterProvider.java (76%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/Commands.java (92%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/ExitCommand.java (71%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/HelpCommand.java (93%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/HideCommand.java (81%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/LimitCommand.java (80%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java => elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java} (69%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/QueryCommand.java (78%) rename projects/{elina_denisova/src/main/java/ru/mipt/diht/studens => elinrin/src/main/java/ru/mipt/diht/students/elinrin}/commands/StreamCommand.java (80%) create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java b/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java deleted file mode 100644 index 8a193bd..0000000 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/exception/HandlerException.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.mipt.diht.studens.exception; - -public class HandlerException { - public static void handler(String message, Throwable cause) { - System.err.println(message + ". " + cause.getMessage()); - System.exit(1); - } - public static void handler(Throwable cause) { - System.err.println(cause.getMessage()); - System.exit(1); - } -} diff --git a/projects/elinrin/pom.xml b/projects/elinrin/pom.xml new file mode 100644 index 0000000..7d8aad6 --- /dev/null +++ b/projects/elinrin/pom.xml @@ -0,0 +1,124 @@ + + + + 4.0.0 + + ru.mipt.diht.students + ElinRin + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + + + ElinRin + http://maven.apache.org + + UTF-8 + + + + + org.twitter4j + twitter4j-core + [4.0,) + + + + org.twitter4j + twitter4j-stream + [4.0,) + + + + com.beust + jcommander + 1.48 + + + + junit + junit + 4.12 + test + + + + org.mockito + mockito-core + 1.10.8 + test + + + objenesis + org.objenesis + + + + + + org.powermock + powermock-module-junit4 + 1.6.1 + test + true + + + junit + junit + + + + + + org.powermock + powermock-api-mockito + 1.6.1 + test + true + + + mockito-all + org.mockito + + + + + + + commons-io + commons-io + 2.4 + test + + + + com.beust + jcommander + 1.48 + + + + com.beust + jcommander + 1.48 + + + + com.beust + jcommander + 1.48 + + + + diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java similarity index 82% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java index abd0ef1..f173b46 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/InteractiveParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java @@ -1,13 +1,14 @@ -package ru.mipt.diht.studens; +package ru.mipt.diht.students.elinrin; -import ru.mipt.diht.studens.commands.Commands; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Twitter; +import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.commands.Commands; import java.util.NoSuchElementException; import java.util.Scanner; public class InteractiveParse { + static final String USER_MOD = "user"; + public static void parse(TwitterProvider twitterPr) { Scanner in = new Scanner(System.in); try { @@ -24,7 +25,7 @@ public static void parse(TwitterProvider twitterPr) { Commands command = Commands.fromString(current); command.execute(twitterPr); } catch (NoSuchElementException e) { - System.out.println("\033[31m" + e.getMessage() + "\033[0m"); + HandlerException.handler(e, USER_MOD); } } } catch (IllegalMonitorStateException e) { diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java similarity index 81% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java index 23f84ff..f8a3c7d 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PackageParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java @@ -1,15 +1,18 @@ -package ru.mipt.diht.studens; +package ru.mipt.diht.students.elinrin; -import ru.mipt.diht.studens.commands.Commands; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Twitter; +import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.commands.Commands; import java.util.ArrayList; import java.util.NoSuchElementException; public class PackageParse { + static final String USER_MOD = "user"; + public static void parse(TwitterProvider twitterPr, String[] args) { + + try { ArrayList current = new ArrayList<>(); for (int i = 0; i < args.length; ++i) { @@ -23,7 +26,7 @@ public static void parse(TwitterProvider twitterPr, String[] args) { break; } } - if (current.size() == 0) { + if (current.isEmpty()) { return; } String[] com = new String[current.size()]; @@ -32,7 +35,7 @@ public static void parse(TwitterProvider twitterPr, String[] args) { Commands command = Commands.fromString(com); command.execute(twitterPr); } catch (NoSuchElementException e) { - System.out.println("\033[31m" + e.toString() + "\033[0m"); + HandlerException.handler(e, USER_MOD); } } } catch (IllegalMonitorStateException e) { diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java similarity index 55% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java index 3c463eb..06ccc2e 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/PrintTweet.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java @@ -1,4 +1,4 @@ -package ru.mipt.diht.studens; +package ru.mipt.diht.students.elinrin; import twitter4j.Status; @@ -12,14 +12,14 @@ public class PrintTweet { static final int LENGTH = 170; - static final int MIN = 1; - static final int HOUR = 2; - static final int DAY = 3; - static final int RETW = 0; + static final int MIN_MOD = 1; + static final int HOUR_MOD = 2; + static final int DAY_MOD = 3; + static final int RETWEET_MOD = 0; - static final int FORM_1 = 0; - static final int FORM_2 = 1; - static final int FORM_3 = 2; + static final int NOUN_FORM_1 = 0; + static final int NOUN_FORM_2 = 1; + static final int NOUN_FORM_3 = 2; static final String[][] wordPlural = { @@ -29,14 +29,13 @@ public class PrintTweet { {"день", "дня", "дней"} }; - public static int pluralForm(long n) + public static int pluralForm(long numeral) { - n = abs(n) % 100; - long n1 = n % 10; - if (n > 10 && n < 20) return FORM_3; - if (n1 > 1 && n1 < 5) return FORM_2; - if (n1 == 1) return FORM_1; - return FORM_3; + numeral = abs(numeral) % 100; + if (numeral > 10 && numeral < 20) return NOUN_FORM_3; + if ((numeral % 10) > 1 && (numeral % 10) < 5) return NOUN_FORM_2; + if ((numeral % 10) == 1) return NOUN_FORM_1; + return NOUN_FORM_3; } public static String tweetDate(Date givenDate) { @@ -50,13 +49,16 @@ public static String tweetDate(Date givenDate) { if (goneTime.toMinutes() < 2) { result.append("Только что"); } else if (goneTime.toHours() <= 0) { - result.append(goneTime.toMinutes()).append(" ").append(wordPlural[MIN][pluralForm(goneTime.toMinutes())]).append(" назад"); + result.append(goneTime.toMinutes()).append(" ") + .append(wordPlural[MIN_MOD][pluralForm(goneTime.toMinutes())]).append(" назад"); } else if (goneTime.toDays() <= 0) { - result.append(goneTime.toHours()).append(" ").append(wordPlural[HOUR][pluralForm(goneTime.toHours())]).append(" назад"); + result.append(goneTime.toHours()).append(" ") + .append(wordPlural[HOUR_MOD][pluralForm(goneTime.toHours())]).append(" назад"); } else if ( goneTime.toDays() == 1) { result.append("Вчера"); } else { - result.append(goneTime.toDays()).append(" ").append(wordPlural[DAY][pluralForm(goneTime.toDays())]).append(" назад"); + result.append(goneTime.toDays()).append(" ") + .append(wordPlural[DAY_MOD][pluralForm(goneTime.toDays())]).append(" назад"); } return result.append(" ] ").toString(); } @@ -68,17 +70,17 @@ public static String print(Status tweet, boolean stream) { result.append(tweetDate(tweet.getCreatedAt())); } - result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) - .append( "\033[0m").append(": "); + result.append(printUserName(tweet)); if (tweet.isRetweet() ) { - result.append("ретвитнул @").append("\033[34m").append(tweet.getRetweetedStatus().getUser().getScreenName()) - .append( "\033[0m ").append(tweet.getRetweetedStatus().getText()); + result.append("ретвитнул ").append(printUserName(tweet.getRetweetedStatus())) + .append(tweet.getRetweetedStatus().getText()); } else { result.append(tweet.getText()); } if (!tweet.isRetweet() && tweet.getRetweetCount() != 0) { - result.append(" (").append(tweet.getRetweetCount()).append(" ").append(wordPlural[RETW][pluralForm(tweet.getRetweetCount())]).append(")"); + result.append(" (").append(tweet.getRetweetCount()).append(" ") + .append(wordPlural[RETWEET_MOD][pluralForm(tweet.getRetweetCount())]).append(")"); } result.append("\n"); @@ -88,4 +90,12 @@ public static String print(Status tweet, boolean stream) { return result.toString(); } + + public static String printUserName(Status tweet) { + StringBuilder result = new StringBuilder(); + result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) + .append( "\033[0m").append(": "); + return result.toString(); + } + } diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java similarity index 61% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java index 484d0a2..e78ee83 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/RunTwitter.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java @@ -1,20 +1,12 @@ -package ru.mipt.diht.studens; +package ru.mipt.diht.students.elinrin; -import ru.mipt.diht.studens.exception.HandlerException; -import twitter4j.Status; +import ru.mipt.diht.students.elinrin.exception.HandlerException; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; -import twitter4j.util.TimeSpanConverter; - -import java.awt.*; -import java.sql.Time; -import java.text.StringCharacterIterator; -import java.util.Date; -import java.util.List; public class RunTwitter { - public static void main(String[] args) throws TwitterException { + public static void main(String[] args) { diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java similarity index 76% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java index c5ed0dc..b89502b 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/TwitterProvider.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java @@ -1,4 +1,4 @@ -package ru.mipt.diht.studens; +package ru.mipt.diht.students.elinrin; import twitter4j.Twitter; @@ -6,13 +6,13 @@ public class TwitterProvider { private Twitter twitter; private boolean hideRetweets; - private String plase; + private String place; public TwitterProvider(Twitter twitter) { this.twitter = twitter; hideRetweets = false; - plase = " "; + place = " "; } public void changeParameterRetweets(boolean parameter) { @@ -20,7 +20,7 @@ public void changeParameterRetweets(boolean parameter) { } public void changeParameterPlase(String parameter) { - plase = parameter; + place = parameter; } @@ -32,8 +32,8 @@ public boolean isHideRetweets() { return hideRetweets; } - public String getPlase() { - return plase; + public String getPlace() { + return place; } diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java similarity index 92% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java index f956811..b511fea 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.students.elinrin.TwitterProvider; import java.util.HashMap; import java.util.NoSuchElementException; @@ -21,8 +21,8 @@ public abstract class Commands { COMMANDS = new HashMap<>(); COMMANDS.put("--query", new QueryCommand()); COMMANDS.put("-q", new QueryCommand()); - COMMANDS.put("--place", new PlaseCommand()); - COMMANDS.put("-p", new PlaseCommand()); + COMMANDS.put("--place", new PlaceCommand()); + COMMANDS.put("-p", new PlaceCommand()); COMMANDS.put("--stream", new StreamCommand()); COMMANDS.put("-s", new StreamCommand()); COMMANDS.put("--hideRetweets", new HideCommand()); diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java similarity index 71% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java index ba7fd03..b8fa667 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/ExitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.students.elinrin.TwitterProvider; public class ExitCommand extends Commands { diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java similarity index 93% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java index 1cf284c..fafb65c 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HelpCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.students.elinrin.TwitterProvider; public class HelpCommand extends Commands { @Override diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java similarity index 81% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java index 3041796..6dbfe99 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/HideCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java @@ -1,7 +1,7 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.students.elinrin.TwitterProvider; public class HideCommand extends Commands { String parameter; diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java similarity index 80% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java index 63211e2..553610a 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; +import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.PrintTweet; import twitter4j.Status; import twitter4j.TwitterException; diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java similarity index 69% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java index 93c7528..23620c5 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/PlaseCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java @@ -1,9 +1,9 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.TwitterProvider; +import ru.mipt.diht.students.elinrin.TwitterProvider; -public class PlaseCommand extends Commands { +public class PlaceCommand extends Commands { String searchPlace; diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java similarity index 78% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java index bf89395..c8727da 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/QueryCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; +import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.PrintTweet; import twitter4j.*; public class QueryCommand extends Commands { diff --git a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java similarity index 80% rename from projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java index 25a6c10..9698f1b 100644 --- a/projects/elina_denisova/src/main/java/ru/mipt/diht/studens/commands/StreamCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java @@ -1,13 +1,12 @@ -package ru.mipt.diht.studens.commands; +package ru.mipt.diht.students.elinrin.commands; -import ru.mipt.diht.studens.PrintTweet; -import ru.mipt.diht.studens.TwitterProvider; -import ru.mipt.diht.studens.exception.HandlerException; +import ru.mipt.diht.students.elinrin.PrintTweet; +import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.exception.HandlerException; import twitter4j.Status; import twitter4j.TwitterException; import java.util.List; -import java.util.concurrent.TimeUnit; import static java.lang.Thread.sleep; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java new file mode 100644 index 0000000..800b198 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java @@ -0,0 +1,25 @@ +package ru.mipt.diht.students.elinrin.exception; + +public class HandlerException { + static final String USER_MOD = "user"; + + public static void handler(String message, Throwable cause) { + System.err.println(message + ". " + cause.getMessage()); + System.exit(1); + } + public static void handler(Throwable cause) { + System.err.println(cause.getMessage()); + System.exit(1); + } + + public static void handler(Throwable cause, String mod) { + if (mod.equals(USER_MOD)) { + System.err.println(cause.getMessage()); + } + else + { + System.err.println(cause.getMessage()); + System.exit(1); + } + } +} From 4081317d632007726de3c201ad78a721fbddbeb8 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 18:07:48 +0300 Subject: [PATCH 07/27] fixed --- .../ru/mipt/diht/students/elinrin/PrintTweet.java | 12 +++++++----- projects/pom.xml | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java index 06ccc2e..b27ff25 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java @@ -29,12 +29,14 @@ public class PrintTweet { {"день", "дня", "дней"} }; - public static int pluralForm(long numeral) - { + public static int pluralForm(long numeral) { numeral = abs(numeral) % 100; - if (numeral > 10 && numeral < 20) return NOUN_FORM_3; - if ((numeral % 10) > 1 && (numeral % 10) < 5) return NOUN_FORM_2; - if ((numeral % 10) == 1) return NOUN_FORM_1; + if (numeral > 10 && numeral < 20) + return NOUN_FORM_3; + if ((numeral % 10) > 1 && (numeral % 10) < 5) + return NOUN_FORM_2; + if ((numeral % 10) == 1) + return NOUN_FORM_1; return NOUN_FORM_3; } diff --git a/projects/pom.xml b/projects/pom.xml index 5d14966..a7a8bc2 100644 --- a/projects/pom.xml +++ b/projects/pom.xml @@ -30,6 +30,7 @@ dkhurtin ale3otik Pitovsky + elinrin From c31224762e0f63b63cda440019ea9171ea6a1dcf Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 18:21:06 +0300 Subject: [PATCH 08/27] fixed --- .../{ => twitterstream}/InteractiveParse.java | 14 +++++++------- .../elinrin/{ => twitterstream}/PackageParse.java | 6 +++--- .../elinrin/{ => twitterstream}/PrintTweet.java | 9 ++++++--- .../elinrin/{ => twitterstream}/RunTwitter.java | 5 ++--- .../{ => twitterstream}/TwitterProvider.java | 2 +- .../{ => twitterstream}/commands/Commands.java | 4 ++-- .../{ => twitterstream}/commands/ExitCommand.java | 4 ++-- .../{ => twitterstream}/commands/HelpCommand.java | 4 ++-- .../{ => twitterstream}/commands/HideCommand.java | 4 ++-- .../{ => twitterstream}/commands/LimitCommand.java | 8 ++++---- .../{ => twitterstream}/commands/PlaceCommand.java | 4 ++-- .../{ => twitterstream}/commands/QueryCommand.java | 8 ++++---- .../commands/StreamCommand.java | 8 ++++---- .../exception/HandlerException.java | 2 +- 14 files changed, 42 insertions(+), 40 deletions(-) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/InteractiveParse.java (76%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/PackageParse.java (88%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/PrintTweet.java (92%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/RunTwitter.java (80%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/TwitterProvider.java (92%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/Commands.java (95%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/ExitCommand.java (66%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/HelpCommand.java (92%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/HideCommand.java (77%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/LimitCommand.java (76%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/PlaceCommand.java (74%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/QueryCommand.java (74%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/commands/StreamCommand.java (76%) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/{ => twitterstream}/exception/HandlerException.java (91%) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java similarity index 76% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java index f173b46..8b58fed 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/InteractiveParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java @@ -1,7 +1,7 @@ -package ru.mipt.diht.students.elinrin; +package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.exception.HandlerException; -import ru.mipt.diht.students.elinrin.commands.Commands; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.commands.Commands; import java.util.NoSuchElementException; import java.util.Scanner; @@ -14,10 +14,10 @@ public static void parse(TwitterProvider twitterPr) { try { while (true) { System.out.print("$ "); - String s; - s = in.nextLine(); - s = s.trim(); - String[] current = s.split("\\s+"); + String arguments; + arguments = in.nextLine(); + arguments = arguments.trim(); + String[] current = arguments.split("\\s+"); for (int i = 0; i < current.length; ++i) { current[i].trim(); } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java similarity index 88% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java index f8a3c7d..8fede2b 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PackageParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.students.elinrin; +package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.exception.HandlerException; -import ru.mipt.diht.students.elinrin.commands.Commands; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.commands.Commands; import java.util.ArrayList; import java.util.NoSuchElementException; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java similarity index 92% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java index b27ff25..ea7bfeb 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/PrintTweet.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java @@ -1,4 +1,4 @@ -package ru.mipt.diht.students.elinrin; +package ru.mipt.diht.students.elinrin.twitterstream; import twitter4j.Status; @@ -21,6 +21,9 @@ public class PrintTweet { static final int NOUN_FORM_2 = 1; static final int NOUN_FORM_3 = 2; + static final String BLUE = "\033[34m"; + static final String BLACK = "\033[0m"; + static final String[][] wordPlural = { {"ретвит", "ретвита", "ретвитов" }, @@ -95,8 +98,8 @@ public static String print(Status tweet, boolean stream) { public static String printUserName(Status tweet) { StringBuilder result = new StringBuilder(); - result.append("@").append("\033[34m").append(tweet.getUser().getScreenName()) - .append( "\033[0m").append(": "); + result.append("@").append(BLUE).append(tweet.getUser().getScreenName()) + .append(BLACK).append(": "); return result.toString(); } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java similarity index 80% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java index e78ee83..63caaea 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/RunTwitter.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java @@ -1,8 +1,7 @@ -package ru.mipt.diht.students.elinrin; +package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; import twitter4j.Twitter; -import twitter4j.TwitterException; import twitter4j.TwitterFactory; public class RunTwitter { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java similarity index 92% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java index b89502b..653ca37 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/TwitterProvider.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java @@ -1,4 +1,4 @@ -package ru.mipt.diht.students.elinrin; +package ru.mipt.diht.students.elinrin.twitterstream; import twitter4j.Twitter; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java similarity index 95% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java index b511fea..7a91742 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; import java.util.HashMap; import java.util.NoSuchElementException; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java similarity index 66% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java index b8fa667..2c3228a 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/ExitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class ExitCommand extends Commands { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java similarity index 92% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java index fafb65c..14ef7fc 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HelpCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java @@ -1,6 +1,6 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class HelpCommand extends Commands { @Override diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java similarity index 77% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java index 6dbfe99..c085ae0 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/HideCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java @@ -1,7 +1,7 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class HideCommand extends Commands { String parameter; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java similarity index 76% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java index 553610a..664de36 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; -import ru.mipt.diht.students.elinrin.exception.HandlerException; -import ru.mipt.diht.students.elinrin.PrintTweet; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; import twitter4j.Status; import twitter4j.TwitterException; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java similarity index 74% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java index 23620c5..1b116de 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/PlaceCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java @@ -1,7 +1,7 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class PlaceCommand extends Commands { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java similarity index 74% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java index c8727da..a35e2fc 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/QueryCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.TwitterProvider; -import ru.mipt.diht.students.elinrin.exception.HandlerException; -import ru.mipt.diht.students.elinrin.PrintTweet; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; import twitter4j.*; public class QueryCommand extends Commands { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java similarity index 76% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java index 9698f1b..d4c6c6c 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/commands/StreamCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java @@ -1,8 +1,8 @@ -package ru.mipt.diht.students.elinrin.commands; +package ru.mipt.diht.students.elinrin.twitterstream.commands; -import ru.mipt.diht.students.elinrin.PrintTweet; -import ru.mipt.diht.students.elinrin.TwitterProvider; -import ru.mipt.diht.students.elinrin.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; +import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; import twitter4j.Status; import twitter4j.TwitterException; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java similarity index 91% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java index 800b198..5be0958 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/exception/HandlerException.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java @@ -1,4 +1,4 @@ -package ru.mipt.diht.students.elinrin.exception; +package ru.mipt.diht.students.elinrin.twitterstream.exception; public class HandlerException { static final String USER_MOD = "user"; From 2dc60f3952dc6d536802fa9f4eeb01df8f28397e Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 18:47:05 +0300 Subject: [PATCH 09/27] fixed --- projects/elinrin/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/elinrin/pom.xml b/projects/elinrin/pom.xml index 7d8aad6..8fa945e 100644 --- a/projects/elinrin/pom.xml +++ b/projects/elinrin/pom.xml @@ -5,6 +5,12 @@ 4.0.0 + + ru.mipt.diht.students + parent + 1.0-SNAPSHOT + + ru.mipt.diht.students ElinRin 1.0-SNAPSHOT From 968c3f6ed6fbd876833d8cc17dd0a5095fa3209f Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 20:13:07 +0300 Subject: [PATCH 10/27] fixed checkstyle --- .../twitterstream/InteractiveParse.java | 8 ++-- .../elinrin/twitterstream/PackageParse.java | 2 +- .../elinrin/twitterstream/PrintTweet.java | 39 +++++++++------ .../twitterstream/commands/Commands.java | 9 +--- .../twitterstream/commands/HelpCommand.java | 47 +++++++++---------- .../twitterstream/commands/HideCommand.java | 7 ++- .../twitterstream/commands/LimitCommand.java | 9 ++-- .../twitterstream/commands/QueryCommand.java | 4 +- .../twitterstream/commands/StreamCommand.java | 6 ++- .../exception/HandlerException.java | 4 +- 10 files changed, 73 insertions(+), 62 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java index 8b58fed..f9a257f 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java @@ -18,8 +18,8 @@ public static void parse(TwitterProvider twitterPr) { arguments = in.nextLine(); arguments = arguments.trim(); String[] current = arguments.split("\\s+"); - for (int i = 0; i < current.length; ++i) { - current[i].trim(); + for (String aCurrent : current) { + aCurrent.trim(); } try { Commands command = Commands.fromString(current); @@ -33,9 +33,9 @@ public static void parse(TwitterProvider twitterPr) { in.close(); System.out.println("Goodbye"); System.exit(0); - } - else + } else { HandlerException.handler(e); + } } catch (NoSuchElementException e) { HandlerException.handler(e); } catch (Exception e) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java index 8fede2b..aa905eb 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java @@ -44,7 +44,7 @@ public static void parse(TwitterProvider twitterPr, String[] args) { } catch (IllegalArgumentException e) { HandlerException.handler("Wrong arguments", e); } catch (Exception e) { - HandlerException.handler( e); + HandlerException.handler(e); } } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java index ea7bfeb..71c5e96 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java @@ -21,11 +21,18 @@ public class PrintTweet { static final int NOUN_FORM_2 = 1; static final int NOUN_FORM_3 = 2; + static final int ONE = 1; + static final int FIVE = 5; + static final int TEN = 10; + static final int TWENTY = 20; + static final int HUNDRED = 100; + + static final String BLUE = "\033[34m"; static final String BLACK = "\033[0m"; - static final String[][] wordPlural = { + static final String[][] NOUN_FORM = { {"ретвит", "ретвита", "ретвитов" }, {"минута", "минуты", "минут" }, {"час", "часа", "часов" }, @@ -33,13 +40,16 @@ public class PrintTweet { }; public static int pluralForm(long numeral) { - numeral = abs(numeral) % 100; - if (numeral > 10 && numeral < 20) + numeral = abs(numeral) % HUNDRED; + if (numeral > TEN && numeral < TWENTY) { return NOUN_FORM_3; - if ((numeral % 10) > 1 && (numeral % 10) < 5) + } + if ((numeral % TEN) > ONE && (numeral % TEN) < FIVE) { return NOUN_FORM_2; - if ((numeral % 10) == 1) + } + if ((numeral % TEN) == ONE) { return NOUN_FORM_1; + } return NOUN_FORM_3; } @@ -55,15 +65,15 @@ public static String tweetDate(Date givenDate) { result.append("Только что"); } else if (goneTime.toHours() <= 0) { result.append(goneTime.toMinutes()).append(" ") - .append(wordPlural[MIN_MOD][pluralForm(goneTime.toMinutes())]).append(" назад"); + .append(NOUN_FORM[MIN_MOD][pluralForm(goneTime.toMinutes())]).append(" назад"); } else if (goneTime.toDays() <= 0) { result.append(goneTime.toHours()).append(" ") - .append(wordPlural[HOUR_MOD][pluralForm(goneTime.toHours())]).append(" назад"); - } else if ( goneTime.toDays() == 1) { + .append(NOUN_FORM[HOUR_MOD][pluralForm(goneTime.toHours())]).append(" назад"); + } else if (goneTime.toDays() == 1) { result.append("Вчера"); } else { result.append(goneTime.toDays()).append(" ") - .append(wordPlural[DAY_MOD][pluralForm(goneTime.toDays())]).append(" назад"); + .append(NOUN_FORM[DAY_MOD][pluralForm(goneTime.toDays())]).append(" назад"); } return result.append(" ] ").toString(); } @@ -77,7 +87,7 @@ public static String print(Status tweet, boolean stream) { result.append(printUserName(tweet)); - if (tweet.isRetweet() ) { + if (tweet.isRetweet()) { result.append("ретвитнул ").append(printUserName(tweet.getRetweetedStatus())) .append(tweet.getRetweetedStatus().getText()); } else { @@ -85,7 +95,7 @@ public static String print(Status tweet, boolean stream) { } if (!tweet.isRetweet() && tweet.getRetweetCount() != 0) { result.append(" (").append(tweet.getRetweetCount()).append(" ") - .append(wordPlural[RETWEET_MOD][pluralForm(tweet.getRetweetCount())]).append(")"); + .append(NOUN_FORM[RETWEET_MOD][pluralForm(tweet.getRetweetCount())]).append(")"); } result.append("\n"); @@ -97,10 +107,9 @@ public static String print(Status tweet, boolean stream) { } public static String printUserName(Status tweet) { - StringBuilder result = new StringBuilder(); - result.append("@").append(BLUE).append(tweet.getUser().getScreenName()) - .append(BLACK).append(": "); - return result.toString(); + String result = "@" + BLUE + tweet.getUser().getScreenName() + + BLACK + ": "; + return result; } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java index 7a91742..13a0fb1 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java @@ -43,16 +43,11 @@ public static Commands fromString(String[] s) throws Exception { if (COMMANDS.containsKey(s[0])) { Commands command = COMMANDS.get(s[0]); if (s.length - 1 != command.numberOfArguments()) { - /* if ( (s.length - 1 == command.numberOfArguments() + 1) && - !(s[command.numberOfArguments() + 1].equals("hRts")) ) { - throw new NoSuchElementException("Wrong the second argument." + - "Expected null or hRts(for stream, query and limit)."); - } - if ( (s.length - 1 != command.numberOfArguments() + 1) )*/ throw new NoSuchElementException("Unexpected number of arguments: " + command.numberOfArguments() + " required"); } - if ( (s.equals("--hideRetweets") || s.equals("-hRtws")) && !( (s[1].equals("+")) || (s[1].equals("-"))) ) { + if ((s.equals("--hideRetweets") || s.equals("-hRtws")) + && !((s[1].equals("+")) || (s[1].equals("-")))) { throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); } command.putArguments(s); diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java index 14ef7fc..f99bf1b 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java @@ -3,33 +3,32 @@ import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class HelpCommand extends Commands { + static final String LIGHT_BLUE = "\033[36m"; + static final String PURPLE = "\033[35m"; + static final String BLACK = "\033[0m"; + @Override public void execute(TwitterProvider twitter) { - System.out.println( "\033[1;35m" + "Параметры\n" + - "\033[36m" + "stream " + "\033[0m" + - "- равномерно и непрерывно с задержкой в 1 секунду печатает твиты на экран. [--stream|-s]\n" + - - "\033[36m" + "limit " + "\033[0m" + - "- n твитов. [--limit|-l ]\n" + - - "\033[36m" + "query " + "\033[0m" + - " - поиск по заданному запросу. [--query|-q )]\n" + - - "\033[36m" + "place " + "\033[0m" + - "- поиск по заданному региону. [--place|-p ]\n" + - "\033[36m" + "allPlace " + "\033[0m" + - "- отменить place режим. [--place|-p 0]\n" + - - "\033[36m" + "hideRetweets " + "\033[0m" + - "- филтр ретвитов. [--hideRetweets|-hRtws +]\n" + - "\033[36m" + "Retweets " + "\033[0m" + - "- отменить hideRetweets режим. [--hideRetweets|-hRtws -]\n" + - - "\033[36m" + "help " + "\033[0m" + - "- печатает справку. [--help|-h]\n" + - "\033[36m" + "exit " + "\033[0m" + - "- выход. [--exit|-e]\n"); + System.out.println(PURPLE + "Параметры\n" + + LIGHT_BLUE + "stream " + BLACK + + "- равномерно и непрерывно с задержкой в 1 секунду печатает твиты на экран. [--stream|-s]\n" + + LIGHT_BLUE + "limit " + BLACK + + "- n твитов. [--limit|-l ]\n" + + LIGHT_BLUE + "query " + BLACK + + " - поиск по заданному запросу. [--query|-q )]\n" + + LIGHT_BLUE + "place " + BLACK + + "- поиск по заданному региону. [--place|-p ]\n" + + LIGHT_BLUE + "allPlace " + BLACK + + "- отменить place режим. [--place|-p 0]\n" + + LIGHT_BLUE + "hideRetweets " + BLACK + + "- филтр ретвитов. [--hideRetweets|-hRtws +]\n" + + LIGHT_BLUE + "Retweets " + BLACK + + "- отменить hideRetweets режим. [--hideRetweets|-hRtws -]\n" + + LIGHT_BLUE + "help " + BLACK + + "- печатает справку. [--help|-h]\n" + + LIGHT_BLUE + "exit " + BLACK + + "- выход. [--exit|-e]\n"); } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java index c085ae0..c4e018c 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java @@ -7,8 +7,11 @@ public class HideCommand extends Commands { String parameter; @Override public void execute(TwitterProvider twitterPr) { - if (parameter.equals("+")) twitterPr.changeParameterRetweets(true); - else twitterPr.changeParameterRetweets(false); + if (parameter.equals("+")) { + twitterPr.changeParameterRetweets(true); + } else { + twitterPr.changeParameterRetweets(false); + } } @Override diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java index 664de36..32aceac 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java @@ -23,10 +23,13 @@ public void execute(TwitterProvider twitterPr) { HandlerException.handler(e); } for (Status status: statusList) { - if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) + if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { System.out.println(new PrintTweet().print(status, false)); - number-=1; - if (number == 0) break; + } + number -= 1; + if (number == 0) { + break; + } } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java index a35e2fc..4eabb2c 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java @@ -20,8 +20,10 @@ public void execute(TwitterProvider twitterPr) { HandlerException.handler(e); } for (Status status : result.getTweets()) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { System.out.println(new PrintTweet().print(status, false)); + + } } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java index d4c6c6c..1801da1 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java @@ -12,6 +12,7 @@ public class StreamCommand extends Commands { + static final int SLEEP_TIME = 1000; @Override public void execute(TwitterProvider twitterPr) { @@ -22,11 +23,12 @@ public void execute(TwitterProvider twitterPr) { HandlerException.handler(e); } for (Status status: statusList) { - if ( (!twitterPr.isHideRetweets()) || !(status.isRetweet()) ) + if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { System.out.println(new PrintTweet().print(status, false)); + } try { - sleep(1000); + sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java index 5be0958..d79dfa9 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java @@ -15,9 +15,7 @@ public static void handler(Throwable cause) { public static void handler(Throwable cause, String mod) { if (mod.equals(USER_MOD)) { System.err.println(cause.getMessage()); - } - else - { + } else { System.err.println(cause.getMessage()); System.exit(1); } From b3d3db89db4c7376a435d6455fa999f8c83880fb Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 20:31:53 +0300 Subject: [PATCH 11/27] fixed checkstyle --- .../elinrin/twitterstream/InteractiveParse.java | 2 +- .../students/elinrin/twitterstream/PackageParse.java | 2 +- .../students/elinrin/twitterstream/PrintTweet.java | 10 +++++----- .../students/elinrin/twitterstream/RunTwitter.java | 2 +- .../elinrin/twitterstream/TwitterProvider.java | 12 ++++++------ .../elinrin/twitterstream/commands/Commands.java | 4 ++-- .../elinrin/twitterstream/commands/ExitCommand.java | 4 ++-- .../elinrin/twitterstream/commands/HelpCommand.java | 4 ++-- .../elinrin/twitterstream/commands/HideCommand.java | 8 ++++---- .../elinrin/twitterstream/commands/LimitCommand.java | 6 +++--- .../elinrin/twitterstream/commands/PlaceCommand.java | 8 ++++---- .../elinrin/twitterstream/commands/QueryCommand.java | 6 +++--- .../twitterstream/exception/HandlerException.java | 6 +++--- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java index f9a257f..4f86caa 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java @@ -9,7 +9,7 @@ public class InteractiveParse { static final String USER_MOD = "user"; - public static void parse(TwitterProvider twitterPr) { + public static void parse(final TwitterProvider twitterPr) { Scanner in = new Scanner(System.in); try { while (true) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java index aa905eb..13c7654 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java @@ -10,7 +10,7 @@ public class PackageParse { static final String USER_MOD = "user"; - public static void parse(TwitterProvider twitterPr, String[] args) { + public static void parse(final TwitterProvider twitterPr, final String[] args) { try { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java index 71c5e96..3139321 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java @@ -39,8 +39,8 @@ public class PrintTweet { {"день", "дня", "дней"} }; - public static int pluralForm(long numeral) { - numeral = abs(numeral) % HUNDRED; + public static int pluralForm(final long num) { + long numeral = abs(num) % HUNDRED; if (numeral > TEN && numeral < TWENTY) { return NOUN_FORM_3; } @@ -53,7 +53,7 @@ public static int pluralForm(long numeral) { return NOUN_FORM_3; } - public static String tweetDate(Date givenDate) { + public static String tweetDate(final Date givenDate) { StringBuilder result = new StringBuilder().append("[ "); @@ -78,7 +78,7 @@ public static String tweetDate(Date givenDate) { return result.append(" ] ").toString(); } - public static String print(Status tweet, boolean stream) { + public static String print(final Status tweet, final boolean stream) { StringBuilder result = new StringBuilder(); if (!stream) { @@ -106,7 +106,7 @@ public static String print(Status tweet, boolean stream) { return result.toString(); } - public static String printUserName(Status tweet) { + public static String printUserName(final Status tweet) { String result = "@" + BLUE + tweet.getUser().getScreenName() + BLACK + ": "; return result; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java index 63caaea..6ee2888 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java @@ -5,7 +5,7 @@ import twitter4j.TwitterFactory; public class RunTwitter { - public static void main(String[] args) { + public static void main(final String[] args) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java index 653ca37..bd2ea2d 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java @@ -8,31 +8,31 @@ public class TwitterProvider { private boolean hideRetweets; private String place; - public TwitterProvider(Twitter twitter) { + public TwitterProvider(final Twitter twitter) { this.twitter = twitter; hideRetweets = false; place = " "; } - public void changeParameterRetweets(boolean parameter) { + public final void changeParameterRetweets(final boolean parameter) { hideRetweets = parameter; } - public void changeParameterPlase(String parameter) { + public final void changeParameterPlase(final String parameter) { place = parameter; } - public Twitter twitter() { + public final Twitter twitter() { return twitter; } - public boolean isHideRetweets() { + public final boolean isHideRetweets() { return hideRetweets; } - public String getPlace() { + public final String getPlace() { return place; } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java index 13a0fb1..e2ed638 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java @@ -35,7 +35,7 @@ public abstract class Commands { COMMANDS.put("-exit", new ExitCommand()); } - public static Commands fromString(String[] s) throws Exception { + public static Commands fromString(final String[] s) throws Exception { if (s[0].equals("")) { throw new NoSuchElementException(""); } @@ -58,7 +58,7 @@ public static Commands fromString(String[] s) throws Exception { } public abstract void execute(TwitterProvider twitter); - protected void putArguments(String[] args) { + protected void putArguments(final String[] args) { } protected abstract int numberOfArguments(); } \ No newline at end of file diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java index 2c3228a..c2d029e 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java @@ -5,12 +5,12 @@ public class ExitCommand extends Commands { @Override - public void execute(TwitterProvider twitter) { + public final void execute(final TwitterProvider twitter) { throw new IllegalMonitorStateException("Exit"); } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 0; } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java index f99bf1b..3b39442 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java @@ -8,7 +8,7 @@ public class HelpCommand extends Commands { static final String BLACK = "\033[0m"; @Override - public void execute(TwitterProvider twitter) { + public final void execute(final TwitterProvider twitter) { System.out.println(PURPLE + "Параметры\n" + LIGHT_BLUE + "stream " + BLACK @@ -33,7 +33,7 @@ public void execute(TwitterProvider twitter) { } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 0; } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java index c4e018c..5fe6304 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java @@ -4,9 +4,9 @@ import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; public class HideCommand extends Commands { - String parameter; + private String parameter; @Override - public void execute(TwitterProvider twitterPr) { + public final void execute(final TwitterProvider twitterPr) { if (parameter.equals("+")) { twitterPr.changeParameterRetweets(true); } else { @@ -15,12 +15,12 @@ public void execute(TwitterProvider twitterPr) { } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 1; } @Override - protected void putArguments(String[] args) { + protected final void putArguments(final String[] args) { parameter = args[1]; } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java index 32aceac..b978fa2 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java @@ -12,7 +12,7 @@ public class LimitCommand extends Commands { private int number; @Override - public void execute(TwitterProvider twitterPr) { + public void execute(final TwitterProvider twitterPr) { List statusList = null; @@ -35,12 +35,12 @@ public void execute(TwitterProvider twitterPr) { } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 1; } @Override - protected void putArguments(String[] args) { + protected final void putArguments(final String[] args) { number = Integer.parseInt(args[1]); } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java index 1b116de..1bf62b2 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java @@ -5,22 +5,22 @@ public class PlaceCommand extends Commands { - String searchPlace; + private String searchPlace; @Override - public void execute(TwitterProvider twitterPr) { + public final void execute(final TwitterProvider twitterPr) { twitterPr.changeParameterPlase(searchPlace); } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 1; } @Override - protected void putArguments(String[] args) { + protected final void putArguments(final String[] args) { searchPlace = args[1]; } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java index 4eabb2c..5118626 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java @@ -10,7 +10,7 @@ public class QueryCommand extends Commands { private String searchString; @Override - public void execute(TwitterProvider twitterPr) { + public final void execute(final TwitterProvider twitterPr) { Query query = new Query(searchString); QueryResult result = null; @@ -29,12 +29,12 @@ public void execute(TwitterProvider twitterPr) { } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 1; } @Override - protected void putArguments(String[] args) { + protected final void putArguments(final String[] args) { searchString = args[1]; } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java index d79dfa9..5b99b7a 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java @@ -3,16 +3,16 @@ public class HandlerException { static final String USER_MOD = "user"; - public static void handler(String message, Throwable cause) { + public static void handler(final String message, final Throwable cause) { System.err.println(message + ". " + cause.getMessage()); System.exit(1); } - public static void handler(Throwable cause) { + public static void handler(final Throwable cause) { System.err.println(cause.getMessage()); System.exit(1); } - public static void handler(Throwable cause, String mod) { + public static void handler(final Throwable cause, final String mod) { if (mod.equals(USER_MOD)) { System.err.println(cause.getMessage()); } else { From 6078896c03a1f34e188954b700720c2a3450172f Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 20:45:20 +0300 Subject: [PATCH 12/27] fixed checkstyle --- .../twitterstream/TwitterProvider.java | 4 ++-- .../twitterstream/commands/Commands.java | 19 ++++++------------- .../twitterstream/commands/LimitCommand.java | 2 +- .../twitterstream/commands/StreamCommand.java | 4 ++-- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java index bd2ea2d..1572be6 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java @@ -8,9 +8,9 @@ public class TwitterProvider { private boolean hideRetweets; private String place; - public TwitterProvider(final Twitter twitter) { + public TwitterProvider(final Twitter twitterUser) { - this.twitter = twitter; + twitter = twitterUser; hideRetweets = false; place = " "; } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java index e2ed638..57a9b17 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java @@ -1,5 +1,6 @@ package ru.mipt.diht.students.elinrin.twitterstream.commands; + import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; import java.util.HashMap; @@ -7,16 +8,6 @@ public abstract class Commands { private static final HashMap COMMANDS; - - /* - * [--query|-q ] - * [--place|-p ] - * [--stream|-s] - * [--hideRetweets] - * [--limit|-l ] - * [--help|-h] - */ - static { COMMANDS = new HashMap<>(); COMMANDS.put("--query", new QueryCommand()); @@ -43,8 +34,8 @@ public static Commands fromString(final String[] s) throws Exception { if (COMMANDS.containsKey(s[0])) { Commands command = COMMANDS.get(s[0]); if (s.length - 1 != command.numberOfArguments()) { - throw new NoSuchElementException("Unexpected number of arguments: " - + command.numberOfArguments() + " required"); + throw new NoSuchElementException("Unexpected number of arguments: " + + command.numberOfArguments() + " required"); } if ((s.equals("--hideRetweets") || s.equals("-hRtws")) && !((s[1].equals("+")) || (s[1].equals("-")))) { @@ -58,7 +49,9 @@ public static Commands fromString(final String[] s) throws Exception { } public abstract void execute(TwitterProvider twitter); + protected void putArguments(final String[] args) { } + protected abstract int numberOfArguments(); -} \ No newline at end of file +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java index b978fa2..2697df5 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java @@ -12,7 +12,7 @@ public class LimitCommand extends Commands { private int number; @Override - public void execute(final TwitterProvider twitterPr) { + public final void execute(final TwitterProvider twitterPr) { List statusList = null; diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java index 1801da1..f776bbd 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java @@ -14,7 +14,7 @@ public class StreamCommand extends Commands { static final int SLEEP_TIME = 1000; @Override - public void execute(TwitterProvider twitterPr) { + public final void execute(final TwitterProvider twitterPr) { List statusList = null; try { @@ -36,7 +36,7 @@ public void execute(TwitterProvider twitterPr) { } @Override - protected int numberOfArguments() { + protected final int numberOfArguments() { return 0; } From 3e6edec5128500998759b9957700b45f75f79bab Mon Sep 17 00:00:00 2001 From: ElinRin Date: Mon, 14 Dec 2015 23:51:24 +0300 Subject: [PATCH 13/27] fixed --- .../twitterstream/InteractiveParse.java | 14 +++++++------- .../elinrin/twitterstream/PackageParse.java | 8 ++++---- .../elinrin/twitterstream/RunTwitter.java | 4 ++-- .../twitterstream/commands/Commands.java | 19 ++++++++----------- .../twitterstream/commands/HideCommand.java | 5 +++++ .../twitterstream/commands/LimitCommand.java | 4 ++-- .../twitterstream/commands/QueryCommand.java | 9 ++++++--- .../twitterstream/commands/StreamCommand.java | 4 ++-- ...Exception.java => HandlerOfException.java} | 2 +- 9 files changed, 37 insertions(+), 32 deletions(-) rename projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/{HandlerException.java => HandlerOfException.java} (95%) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java index 4f86caa..bb3238a 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java @@ -1,6 +1,6 @@ package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import ru.mipt.diht.students.elinrin.twitterstream.commands.Commands; import java.util.NoSuchElementException; @@ -18,14 +18,14 @@ public static void parse(final TwitterProvider twitterPr) { arguments = in.nextLine(); arguments = arguments.trim(); String[] current = arguments.split("\\s+"); - for (String aCurrent : current) { - aCurrent.trim(); + for (String argument : current) { + argument.trim(); } try { Commands command = Commands.fromString(current); command.execute(twitterPr); } catch (NoSuchElementException e) { - HandlerException.handler(e, USER_MOD); + HandlerOfException.handler(e, USER_MOD); } } } catch (IllegalMonitorStateException e) { @@ -34,13 +34,13 @@ public static void parse(final TwitterProvider twitterPr) { System.out.println("Goodbye"); System.exit(0); } else { - HandlerException.handler(e); + HandlerOfException.handler(e); } } catch (NoSuchElementException e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } catch (Exception e) { in.close(); - HandlerException.handler(e); + HandlerOfException.handler(e); } in.close(); } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java index 13c7654..a4c0bf1 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java @@ -1,7 +1,7 @@ package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import ru.mipt.diht.students.elinrin.twitterstream.commands.Commands; import java.util.ArrayList; @@ -35,16 +35,16 @@ public static void parse(final TwitterProvider twitterPr, final String[] args) { Commands command = Commands.fromString(com); command.execute(twitterPr); } catch (NoSuchElementException e) { - HandlerException.handler(e, USER_MOD); + HandlerOfException.handler(e, USER_MOD); } } } catch (IllegalMonitorStateException e) { System.out.println("Goodbye"); System.exit(0); } catch (IllegalArgumentException e) { - HandlerException.handler("Wrong arguments", e); + HandlerOfException.handler("Wrong arguments", e); } catch (Exception e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java index 6ee2888..6e9dc03 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java @@ -1,6 +1,6 @@ package ru.mipt.diht.students.elinrin.twitterstream; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import twitter4j.Twitter; import twitter4j.TwitterFactory; @@ -18,7 +18,7 @@ public static void main(final String[] args) { PackageParse.parse(twitterPr, args); } } catch (IllegalArgumentException e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java index 57a9b17..2b598e6 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java @@ -26,25 +26,22 @@ public abstract class Commands { COMMANDS.put("-exit", new ExitCommand()); } - public static Commands fromString(final String[] s) throws Exception { - if (s[0].equals("")) { + public static Commands fromString(final String[] arguments) { + if (arguments[0].equals("")) { throw new NoSuchElementException(""); } - if (COMMANDS.containsKey(s[0])) { - Commands command = COMMANDS.get(s[0]); - if (s.length - 1 != command.numberOfArguments()) { + if (COMMANDS.containsKey(arguments[0])) { + Commands command = COMMANDS.get(arguments[0]); + if (arguments.length - 1 != command.numberOfArguments()) { throw new NoSuchElementException("Unexpected number of arguments: " + command.numberOfArguments() + " required"); } - if ((s.equals("--hideRetweets") || s.equals("-hRtws")) - && !((s[1].equals("+")) || (s[1].equals("-")))) { - throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); - } - command.putArguments(s); + + command.putArguments(arguments); return command; } else { - throw new NoSuchElementException(s[0] + " is unknown command"); + throw new NoSuchElementException(arguments[0] + " is unknown command"); } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java index 5fe6304..c86a1c6 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java @@ -3,6 +3,8 @@ import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; +import java.util.NoSuchElementException; + public class HideCommand extends Commands { private String parameter; @Override @@ -21,6 +23,9 @@ protected final int numberOfArguments() { @Override protected final void putArguments(final String[] args) { + if (!((args[1].equals("+")) || (args[1].equals("-")))) { + throw new NoSuchElementException("Wrong second arguments. Expected + or -. "); + } parameter = args[1]; } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java index 2697df5..1aea04b 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java @@ -1,7 +1,7 @@ package ru.mipt.diht.students.elinrin.twitterstream.commands; import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; import twitter4j.Status; import twitter4j.TwitterException; @@ -20,7 +20,7 @@ public final void execute(final TwitterProvider twitterPr) { statusList = twitterPr.twitter().getHomeTimeline(); } catch (TwitterException e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } for (Status status: statusList) { if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java index 5118626..99f7c86 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java @@ -1,9 +1,12 @@ package ru.mipt.diht.students.elinrin.twitterstream.commands; import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; -import twitter4j.*; +import twitter4j.Query; +import twitter4j.QueryResult; +import twitter4j.Status; +import twitter4j.TwitterException; public class QueryCommand extends Commands { @@ -17,7 +20,7 @@ public final void execute(final TwitterProvider twitterPr) { try { result = twitterPr.twitter().search(query); } catch (TwitterException e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } for (Status status : result.getTweets()) { if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java index f776bbd..9e77163 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java @@ -2,7 +2,7 @@ import ru.mipt.diht.students.elinrin.twitterstream.PrintTweet; import ru.mipt.diht.students.elinrin.twitterstream.TwitterProvider; -import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerException; +import ru.mipt.diht.students.elinrin.twitterstream.exception.HandlerOfException; import twitter4j.Status; import twitter4j.TwitterException; @@ -20,7 +20,7 @@ public final void execute(final TwitterProvider twitterPr) { try { statusList = twitterPr.twitter().getHomeTimeline(); } catch (TwitterException e) { - HandlerException.handler(e); + HandlerOfException.handler(e); } for (Status status: statusList) { if ((!twitterPr.isHideRetweets()) || !(status.isRetweet())) { diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java similarity index 95% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java index 5b99b7a..a057f1a 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerException.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java @@ -1,6 +1,6 @@ package ru.mipt.diht.students.elinrin.twitterstream.exception; -public class HandlerException { +public class HandlerOfException { static final String USER_MOD = "user"; public static void handler(final String message, final Throwable cause) { From 4a6618f686d9d3211d95f284d0dcdcfffc58e718 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Wed, 16 Dec 2015 15:13:44 +0300 Subject: [PATCH 14/27] Threads --- .../elinrin/threads/BlockingQueue.java | 89 +++++++++++++++++++ .../students/elinrin/threads/Counter.java | 49 ++++++++++ .../diht/students/elinrin/threads/Parse.java | 61 +++++++++++++ .../students/elinrin/threads/Rollcall.java | 78 ++++++++++++++++ .../threads/exception/HandlerOfException.java | 23 +++++ .../threads/exception/UserException.java | 9 ++ .../students/elinrin/threads/AppTest.java | 38 ++++++++ 7 files changed, 347 insertions(+) create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/threads/AppTest.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java new file mode 100644 index 0000000..2d9b413 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java @@ -0,0 +1,89 @@ +package ru.mipt.diht.students.elinrin.threads; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class BlockingQueue { + private int maxQueueSize; + private Queue queue; + private Lock queueLock = new ReentrantLock(); + private Lock offerLock = new ReentrantLock(); + private Lock takeLock = new ReentrantLock(); + private Object pushWait = new Object(); + private Object popWait = new Object(); + + public final void offer(final List list) { + offerLock.lock(); + try { + Integer last = 0; + while (last != list.size()) { + synchronized (popWait) { + while (queue.size() == maxQueueSize) { + try { + popWait.wait(); + } catch (InterruptedException e) { + System.err.println(e.getMessage()); + System.exit(1); + } + } + try { + queueLock.lock(); + while (last < Integer.min(last + maxQueueSize - queue.size(), list.size())) { + queue.add(list.get(last)); + last++; + } + } finally { + queueLock.unlock(); + } + } + } + } finally { + synchronized (pushWait) { + pushWait.notifyAll(); + } + offerLock.unlock(); + } + } + + public final List take(final int n) { + takeLock.lock(); + try { + List elements = new ArrayList<>(); + while (elements.size() != n) { + synchronized (pushWait) { + while (queue.size() == 0) { + try { + pushWait.wait(); + } catch (InterruptedException e) { + System.err.println(e.getMessage()); + System.exit(1); + } + } + try { + queueLock.lock(); + while (queue.size() > 0 && elements.size() != n) { + elements.add(queue.poll()); + } + } finally { + queueLock.unlock(); + } + } + } + return elements; + } finally { + synchronized (popWait) { + popWait.notifyAll(); + } + takeLock.unlock(); + } + } + + public BlockingQueue(final int maxSize) { + maxQueueSize = maxSize; + queue = new ArrayDeque<>(); + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java new file mode 100644 index 0000000..8ae7c85 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java @@ -0,0 +1,49 @@ +package ru.mipt.diht.students.elinrin.threads; + +import ru.mipt.diht.students.elinrin.threads.exception.HandlerOfException; + + +public class Counter { + + private static volatile int printId; + + public static void main(final String[] args) { + int number; + number = Parse.parse(args); + + for (int id = 0; id < number; id++) { + CounterThread thread = new CounterThread(id, (id + 1) % number); + thread.start(); + } + } + + + private static Object working = new Object(); + + private static class CounterThread extends Thread { + private int threadId, nextThreadId; + + CounterThread(final int id1, final int id2) { + threadId = id1; + nextThreadId = id2; + } + + @Override + public void run() { + while (true) { + synchronized (working) { + while (threadId != printId) { + try { + working.wait(); + } catch (InterruptedException e) { + HandlerOfException.handler(e); + } + } + System.out.println("Thread-" + (threadId + 1)); + printId = nextThreadId; + working.notifyAll(); + } + } + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java new file mode 100644 index 0000000..6ecfb93 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java @@ -0,0 +1,61 @@ +package ru.mipt.diht.students.elinrin.threads; + + +import ru.mipt.diht.students.elinrin.threads.exception.HandlerOfException; +import ru.mipt.diht.students.elinrin.threads.exception.UserException; + +import java.util.Scanner; + +import static java.lang.Thread.sleep; + +public class Parse { + + static final String USER_MOD = "user"; + static final int SLEEP_TIME = 500; + + private static int checkArgument(final String arguments) throws UserException { + int number; + try { + number = Integer.valueOf(arguments); + if (number <= 0) { + throw new UserException("Expected positive number"); + } else { + return number; + } + } catch (NumberFormatException e) { + throw new UserException("Expected integer number"); + } + } + + public static int parse(final String[] args) { + int number = 0; + if (args.length != 1) { + try (Scanner in = new Scanner(System.in)) { + while (true) { + System.out.print("$ Counter "); + String arguments = in.nextLine().trim(); + try { + number = checkArgument(arguments); + break; + } catch (UserException e) { + HandlerOfException.handler(e, USER_MOD); + try { + sleep(SLEEP_TIME); + } catch (InterruptedException e1) { + HandlerOfException.handler(e1); + } + } + } + } + } else { + try { + number = checkArgument(args[0]); + } catch (UserException e) { + HandlerOfException.handler(e); + } + } + return number; + } + + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java new file mode 100644 index 0000000..9260787 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java @@ -0,0 +1,78 @@ +package ru.mipt.diht.students.elinrin.threads; + +import ru.mipt.diht.students.elinrin.threads.exception.HandlerOfException; + +import java.util.Random; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +public class Rollcall { + static final int NUMBER_EVENTS = 10; + + private static volatile boolean allSaidYes = false; + private static CyclicBarrier allReady, allAnswered; + + public static void main(final String[] args) { + int number; + number = Parse.parse(args); + + allReady = new CyclicBarrier(number + 1); + allAnswered = new CyclicBarrier(number + 1); + + for (int i = 0; i < number; i++) { + RollcallThread thread = new RollcallThread(); + thread.start(); + } + + while (!allSaidYes) { + System.out.println("Are you ready?"); + allSaidYes = true; + try { + allReady.await(); + } catch (InterruptedException | BrokenBarrierException e) { + HandlerOfException.handler(e); + } + allReady.reset(); + try { + allAnswered.await(); + } catch (InterruptedException | BrokenBarrierException e) { + HandlerOfException.handler(e); + } + allAnswered.reset(); + + if (allSaidYes) { + System.exit(0); + } + } + } + + private static class RollcallThread extends Thread { + private Boolean answer; + private Random rand = new Random(); + + @Override + public void run() { + while (true) { + try { + allReady.await(); + } catch (InterruptedException | BrokenBarrierException e) { + HandlerOfException.handler(e); + } + answer = rand.nextInt(NUMBER_EVENTS) != 0; + if (answer) { + System.out.println("Yes"); + } else { + System.out.println("No"); + } + if (!answer) { + allSaidYes = false; + } + try { + allAnswered.await(); + } catch (InterruptedException | BrokenBarrierException e) { + HandlerOfException.handler(e); + } + } + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java new file mode 100644 index 0000000..4967b09 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java @@ -0,0 +1,23 @@ +package ru.mipt.diht.students.elinrin.threads.exception; + +public class HandlerOfException { + static final String USER_MOD = "user"; + + public static void handler(final String message, final Throwable cause) { + System.err.println(message + ". " + cause.getMessage()); + System.exit(1); + } + public static void handler(final Throwable cause) { + System.err.println(cause.getMessage()); + System.exit(1); + } + + public static void handler(final Throwable cause, final String mod) { + if (mod.equals(USER_MOD)) { + System.err.println(cause.getMessage()); + } else { + System.err.println(cause.getMessage()); + System.exit(1); + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java new file mode 100644 index 0000000..da07f59 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java @@ -0,0 +1,9 @@ +package ru.mipt.diht.students.elinrin.threads.exception; + +public class UserException extends Exception { + + public UserException(final String message) { + super(message); + } +} + diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/threads/AppTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/threads/AppTest.java new file mode 100644 index 0000000..931b809 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/threads/AppTest.java @@ -0,0 +1,38 @@ +package ru.mipt.diht.students.elinrin.threads; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} From d432b8a41190de87ec617ad4e3ec63cbfd86a2bd Mon Sep 17 00:00:00 2001 From: ElinRin Date: Fri, 18 Dec 2015 13:57:25 +0300 Subject: [PATCH 15/27] MiniORM --- .../elinrin/miniorm/ClassConverter.java | 38 +++ .../elinrin/miniorm/DatabaseService.java | 255 ++++++++++++++++++ .../diht/students/elinrin/miniorm/User.java | 78 ++++++ .../elinrin/miniorm/annotations/Column.java | 13 + .../miniorm/annotations/PrimaryKey.java | 11 + .../elinrin/miniorm/annotations/Table.java | 12 + .../miniorm/exception/HandlerOfException.java | 23 ++ .../elinrin/src/main/resourses/db.properties | 3 + .../students/elinrin/miniorm/AppTest.java | 38 +++ 9 files changed, 471 insertions(+) create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java create mode 100644 projects/elinrin/src/main/resourses/db.properties create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/miniorm/AppTest.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java new file mode 100644 index 0000000..52b0777 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java @@ -0,0 +1,38 @@ +package ru.mipt.diht.students.elinrin.miniorm; + +import java.sql.Time; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + + +public class +ClassConverter { + private static Map classes; + static { + classes = new HashMap<>(); + classes.put(Integer.class, "INTEGER"); + classes.put(Boolean.class, "BOOLEAN"); + classes.put(Byte.class, "TINYINT"); + classes.put(Short.class, "SMALLINT"); + classes.put(Long.class, "BIGINT"); + classes.put(Double.class, "DOUBLE"); + classes.put(Float.class, "FLOAT"); + classes.put(Time.class, "TIME"); + classes.put(Date.class, "DATE"); + classes.put(Timestamp.class, "TIMESTAMP"); + classes.put(Character.class, "CHAR"); + classes.put(String.class, "CLOB"); + classes.put(UUID.class, "UUID"); + } + + public static String convert(final Class currClass) { + if (classes.containsKey(currClass)) { + return classes.get(currClass); + } + return "OTHER"; + } + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java new file mode 100644 index 0000000..6151400 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java @@ -0,0 +1,255 @@ +package ru.mipt.diht.students.elinrin.miniorm; +import com.google.common.base.CaseFormat; +import ru.mipt.diht.students.elinrin.miniorm.annotations.Column; +import ru.mipt.diht.students.elinrin.miniorm.annotations.PrimaryKey; +import ru.mipt.diht.students.elinrin.miniorm.annotations.Table; +import ru.mipt.diht.students.elinrin.miniorm.exception.HandlerOfException; + +import javax.management.OperationsException; +import java.lang.reflect.Field; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +/* + +T queryById(K) - возвращает запись по первичному ключу +T queryForAll() - возвращает все записи из таблицы +void insert(T) - добавляет запись +void update(T) - редактирует запись по первичному ключу +void delete(T) - удаляет запись по первичному ключу +void createTable() - создаёт таблицу по метаданным класса T. См. аннотации ниже. +void dropTable() - удаляет таблицу, соответствующую T. Класс нужно покрыть модульными тестами. +*/ +public class DatabaseService { + //Классы JDSC + private Connection connection = null; + private Statement statement = null; + private ResultSet resultSet = null; + private Field primaryKey = null; + private List columns = null; + private Field[] fields; + private String[] namesOfColumns; + private Class tableClass = null; + private String tableName = ""; + private int primaryKeyFieldNumber = -1; + + private boolean hasTableYet = false; + + + /*protected void finalize ( ) throws SQLException { + resultSet.close(); + statement.close(); + connection.close(); + }*/ + + // DatabaseService(Class) - коструктор, принимает тип объекта, с которым хотим работать + DatabaseService(final Class elementClass) throws ClassNotFoundException, + SQLException, InstantiationException, IllegalAccessException { + + Class.forName("org.h2.Driver").newInstance(); + //путь к файлу с БД, соединение с драйверами БД + connection = DriverManager.getConnection("jdbc:h2:~/test", "test", "test"); + statement = connection.createStatement(); + + columns = new ArrayList<>(); + tableClass = elementClass; + Table table = tableClass.getAnnotation(Table.class); + if (table == null) { + throw new IllegalArgumentException("Class should be annotated with Table"); + } + tableName = table.name(); + if (tableName.equals("")) { + tableName = "MY_TABLE"; + } + int i = 0; + for (Field elem : tableClass.getDeclaredFields()) { + if (elem.getAnnotation(Column.class) != null) { + columns.add(elem); + } + if (elem.getAnnotation(PrimaryKey.class) != null) { + if (elem.getAnnotation(Column.class) == null) { + throw new IllegalArgumentException("Not all fields are columns"); + } + if (primaryKey != null) { + throw new IllegalArgumentException("Not one primary Key"); + } + primaryKey = elem; + primaryKeyFieldNumber = i; + } + ++i; + } + + resultSet = connection.getMetaData().getTables(null, null, + CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, tableName), null); + resultSet.next(); + } + public final T queryById(final K id) throws OperationsException, + SQLException, IllegalAccessException, InstantiationException { + if (!hasTableYet) { + throw new OperationsException("Для данного запроа необходимо создать таблицу"); + } + if (primaryKey == null) { + throw new OperationsException("Должен суущестовать первичный ключ"); + } + /*if (!id.getClass().isInstance(primaryKey.getType())){ + throw new IllegalArgumentException("Ключ должен иметь тот же тип, что и первичные ключи таблицы"); + }*/ + StringBuilder newRequest = new StringBuilder(); + newRequest.append("SELECT * FROM ").append(tableName).append(" WHERE ") + .append(columns.get(primaryKeyFieldNumber).getAnnotation(Column.class) + .name()).append(" = ").append(id.toString()); + resultSet = statement.executeQuery(newRequest.toString()); + List list = new ArrayList<>(); + while (resultSet.next()) { + T item = tableClass.newInstance(); + for (Field field: columns) { + if (field.getType().equals(Integer.class)) { + field.set(item, resultSet.getInt(field.getAnnotation(Column.class).name())); + } + if (field.getType().equals(String.class)) { + field.set(item, resultSet.getString(field.getAnnotation(Column.class).name())); + } + } + list.add(item); + } + if (list.size() == 0) { + return null; + } + if (list.size() > 1) { + throw new OperationsException("Ошибка получения результата"); + } + return list.get(0); + } + + final List queryForAll() throws OperationsException, SQLException, IllegalAccessException, + InstantiationException { + + if (!hasTableYet) { + throw new OperationsException("Для данного запроа необходимо создать таблицу"); + } + if (primaryKey == null) { + throw new OperationsException("Должен суущестовать первичный ключ"); + } + StringBuilder newRequest = new StringBuilder(); + newRequest.append("SELECT * FROM ").append(tableName); + resultSet = statement.executeQuery(newRequest.toString()); + List list = new ArrayList<>(); + while (resultSet.next()) { + T item = tableClass.newInstance(); + for (Field field: columns) { + if (field.getType().equals(Integer.class)) { + field.set(item, resultSet.getInt(field.getAnnotation(Column.class).name())); + } + if (field.getType().equals(String.class)) { + field.set(item, resultSet.getString(field.getAnnotation(Column.class).name())); + } + } + list.add(item); + } + return list; + } + + final void insert(final T key) throws SQLException { + StringBuilder newRequest = new StringBuilder(); + newRequest.append("INSERT INTO ").append(tableName).append(" VALUES("); + boolean first = true; + for (Field field:columns) { + if (!first) { + newRequest.append(", "); + } else { + first = false; + } + newRequest.append("?"); + } + newRequest.append(")"); + //System.out.println(newRequest); + PreparedStatement preparedStatement = connection.prepareStatement(newRequest.toString()); + + for (int i = 0; i < columns.size(); i++) { + try { + preparedStatement.setObject(i + 1, columns.get(i).get(key)); + } catch (IllegalAccessException e) { + HandlerOfException.handler(e); + } + } + //System.out.println(preparedStatement.toString()); + preparedStatement.execute(); + + } + + final void update(final T key) throws SQLException { + StringBuilder newRequest = new StringBuilder().append("UPDATE ").append(tableName).append(" SET "); + for (int i = 0; i < columns.size(); ++i) { + if (i != 0) { + newRequest.append(", "); + } + newRequest.append(columns.get(i).getAnnotation(Column.class).name()).append(" = ?"); + } + + newRequest.append(" WHERE ").append(columns.get(primaryKeyFieldNumber).getAnnotation(Column.class).name()) + .append(" = ?"); + PreparedStatement prepareStatement = connection.prepareStatement(newRequest.toString()); + for (int i = 0; i < columns.size(); i++) { + try { + prepareStatement.setObject(1, columns.get(i).get(key)); + prepareStatement.setObject(2, columns.get(primaryKeyFieldNumber).get(key)); + } catch (IllegalAccessException e) { + HandlerOfException.handler(e); + } + prepareStatement.execute(); + } + + + + } + + + final void delete(final T key) throws SQLException { + StringBuilder newRequest = new StringBuilder(); + newRequest.append("DELETE FROM ").append(tableName).append(columns.get(primaryKeyFieldNumber) + .getAnnotation(Column.class).name()).append(" = ").append("?"); + PreparedStatement preparedStatement = connection.prepareStatement(newRequest.toString()); + try { + preparedStatement.setObject(1, columns.get(primaryKeyFieldNumber).get(key)); + preparedStatement.execute(); + } catch (IllegalAccessException e) { + HandlerOfException.handler(e); + } + } + + final void createTable() throws OperationsException, SQLException { + if (hasTableYet) { + throw new OperationsException("Невозможно повторно создать таблицу"); + } + hasTableYet = true; + StringBuilder newRequest = new StringBuilder(); + newRequest.append("CREATE TABLE IF NOT EXISTS ").append(tableName).append(" ("); + int i = 0; + for (Field field : columns) { + //System.out.println(field.getType().toString()); + if (i != 0) { + newRequest.append(", "); + } + newRequest.append(field.getAnnotation(Column.class).name()).append(" "); + newRequest.append(ClassConverter.convert(columns.get(i).getType())).append(" "); + if (field.isAnnotationPresent(PrimaryKey.class)) { + newRequest.append("PRIMARY KEY"); + primaryKeyFieldNumber = i; + } + i++; + } + newRequest.append(") "); + //System.out.println(newRequest); + statement.execute(newRequest.toString()); + } + + final void dropTable() { + try { + statement.execute("DROP TABLE IF EXISTS " + tableName); + hasTableYet = false; + } catch (SQLException e) { + HandlerOfException.handler(e); + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java new file mode 100644 index 0000000..b722e3f --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java @@ -0,0 +1,78 @@ +package ru.mipt.diht.students.elinrin.miniorm; + +import ru.mipt.diht.students.elinrin.miniorm.annotations.Column; +import ru.mipt.diht.students.elinrin.miniorm.annotations.PrimaryKey; +import ru.mipt.diht.students.elinrin.miniorm.annotations.Table; +import ru.mipt.diht.students.elinrin.miniorm.exception.HandlerOfException; + +import javax.management.OperationsException; +import java.sql.SQLException; +import java.util.List; +import java.util.Objects; + + +public class User { + @Table(name = "TESTTABLE") + static class Tab { + @PrimaryKey + @Column(name = "ID") + Integer a; + + @Column(name = "STRING") + String s; + + @Override + public boolean equals(Object obj) { + if (obj instanceof Tab) { + return ((Objects.equals(this.a, ((Tab) obj).a)) && (Objects.equals(this.s, ((Tab) obj).s))); + } + return false; + } + + Tab(Object a, Object s) { + this.a = (Integer) a; + this.s = (String) s; + } + + Tab() { + this.a = 0; + this.s = ""; + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder().append("Id = ").append(a).append(", String = ").append(s); + return result.toString(); + } + } + + public static void main(String[] argv) { + DatabaseService bd = null; + try { + bd = new DatabaseService(Tab.class); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | SQLException e) { + HandlerOfException.handler(e); + } + + try { + bd.createTable(); + bd.insert(new Tab(1, "one")); + List all = bd.queryForAll(); + all.forEach(System.out::println); + + bd.insert(new Tab(2, "two")); + bd.insert(new Tab(3, "three")); + bd.insert(new Tab(4, "four")); + + Tab elem = bd.queryById(3); + System.out.println(elem); + + all = bd.queryForAll(); + all.forEach(System.out::println); + } catch (IllegalAccessException | InstantiationException | OperationsException | SQLException e) { + HandlerOfException.handler(e); + } finally { + bd.dropTable(); + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java new file mode 100644 index 0000000..cbb2322 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java @@ -0,0 +1,13 @@ +package ru.mipt.diht.students.elinrin.miniorm.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(value = ElementType.FIELD) +@Retention(value = RetentionPolicy.RUNTIME) +public @interface Column { + String name() default ""; +} + diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java new file mode 100644 index 0000000..6234828 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java @@ -0,0 +1,11 @@ +package ru.mipt.diht.students.elinrin.miniorm.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(value = ElementType.FIELD) +@Retention(value = RetentionPolicy.RUNTIME) +public @interface PrimaryKey { +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java new file mode 100644 index 0000000..bc3a545 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java @@ -0,0 +1,12 @@ +package ru.mipt.diht.students.elinrin.miniorm.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(value = ElementType.TYPE) +@Retention(value = RetentionPolicy.RUNTIME) +public @interface Table { + String name() default ""; +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java new file mode 100644 index 0000000..57f24a1 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java @@ -0,0 +1,23 @@ +package ru.mipt.diht.students.elinrin.miniorm.exception; + +public class HandlerOfException { + static final String USER_MOD = "user"; + + public static void handler(final String message, final Throwable cause) { + System.err.println(message + ". " + cause.getMessage()); + System.exit(1); + } + public static void handler(final Throwable cause) { + System.err.println(cause.getMessage()); + System.exit(1); + } + + public static void handler(final Throwable cause, final String mod) { + if (mod.equals(USER_MOD)) { + System.err.println(cause.getMessage()); + } else { + System.err.println(cause.getMessage()); + System.exit(1); + } + } +} diff --git a/projects/elinrin/src/main/resourses/db.properties b/projects/elinrin/src/main/resourses/db.properties new file mode 100644 index 0000000..8a47781 --- /dev/null +++ b/projects/elinrin/src/main/resourses/db.properties @@ -0,0 +1,3 @@ +connection_name=jdbc:h2:~/test +username=test +password=test \ No newline at end of file diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/miniorm/AppTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/miniorm/AppTest.java new file mode 100644 index 0000000..3593c8d --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/miniorm/AppTest.java @@ -0,0 +1,38 @@ +package ru.mipt.diht.students.elinrin.miniorm; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} From d1249ef1dc7f7126c1b9132cd714080c5983a905 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Fri, 18 Dec 2015 17:59:25 +0300 Subject: [PATCH 16/27] /**/ --- .../java/ru/mipt/diht/students/elinrin/miniorm/User.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java index b722e3f..8101341 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java @@ -1,5 +1,6 @@ package ru.mipt.diht.students.elinrin.miniorm; +/* import ru.mipt.diht.students.elinrin.miniorm.annotations.Column; import ru.mipt.diht.students.elinrin.miniorm.annotations.PrimaryKey; import ru.mipt.diht.students.elinrin.miniorm.annotations.Table; @@ -9,10 +10,11 @@ import java.sql.SQLException; import java.util.List; import java.util.Objects; +*/ public class User { - @Table(name = "TESTTABLE") + /*@Table(name = "TESTTABLE") static class Tab { @PrimaryKey @Column(name = "ID") @@ -74,5 +76,5 @@ public static void main(String[] argv) { } finally { bd.dropTable(); } - } + }*/ } From c99be29e4fcc786013c3447188912838f051e620 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Fri, 18 Dec 2015 18:11:17 +0300 Subject: [PATCH 17/27] pom fixed --- projects/elinrin/pom.xml | 243 ++++++++++++++++++--------------------- 1 file changed, 114 insertions(+), 129 deletions(-) diff --git a/projects/elinrin/pom.xml b/projects/elinrin/pom.xml index 8fa945e..da941db 100644 --- a/projects/elinrin/pom.xml +++ b/projects/elinrin/pom.xml @@ -1,130 +1,115 @@ - - - - 4.0.0 - - - ru.mipt.diht.students - parent - 1.0-SNAPSHOT - - - ru.mipt.diht.students - ElinRin - 1.0-SNAPSHOT - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - - - - - ElinRin - http://maven.apache.org - - UTF-8 - - - - - org.twitter4j - twitter4j-core - [4.0,) - - - - org.twitter4j - twitter4j-stream - [4.0,) - - - - com.beust - jcommander - 1.48 - - - - junit - junit - 4.12 - test - - - - org.mockito - mockito-core - 1.10.8 - test - - - objenesis - org.objenesis - - - - - - org.powermock - powermock-module-junit4 - 1.6.1 - test - true - - - junit - junit - - - - - - org.powermock - powermock-api-mockito - 1.6.1 - test - true - - - mockito-all - org.mockito - - - - - - - commons-io - commons-io - 2.4 - test - - - - com.beust - jcommander - 1.48 - - - - com.beust - jcommander - 1.48 - - - - com.beust - jcommander - 1.48 - - - + + 4.0.0 + + ru.mipt.diht.students + elinrin + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + jar + + elinrin + http://maven.apache.org + + + UTF-8 + + + + + + com.h2database + h2 + 1.4.190 + + + + junit + junit + 3.8.1 + test + + + + com.beust + jcommander + 1.48 + + + + org.twitter4j + twitter4j-stream + 4.0.4 + + + + org.json + json + 20141113 + + + + com.google.guava + guava + 17.0 + + + + junit + junit + 4.11 + test + + + + org.mockito + mockito-all + 1.9.5 + + + + org.powermock + powermock-module-junit4 + 1.6.1 + test + true + + + junit + junit + + + + + + org.powermock + powermock-api-mockito + 1.6.1 + test + true + + + mockito-all + org.mockito + + + + + com.tngtech.java + junit-dataprovider + 1.10.1 + + + From 6ea4efc47a9acc87242812eb8417c299d343aa45 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 01:40:30 +0300 Subject: [PATCH 18/27] collectionquery --- .../elinrin/collectionquery/Aggregates.java | 27 ++ .../collectionquery/CollectionQuery.java | 249 +++++++++++++++ .../elinrin/collectionquery/Conditions.java | 14 + .../collectionquery/OrderByConditions.java | 16 + .../elinrin/collectionquery/Sources.java | 13 + .../aggregatesImpl/Aggregator.java | 9 + .../collectionquery/aggregatesImpl/Avg.java | 26 ++ .../collectionquery/aggregatesImpl/Count.java | 29 ++ .../collectionquery/aggregatesImpl/Max.java | 31 ++ .../collectionquery/aggregatesImpl/Min.java | 31 ++ .../collectionquery/impl/FromStmt.java | 92 ++++++ .../collectionquery/impl/SelectStmt.java | 284 ++++++++++++++++++ .../elinrin/collectionquery/impl/Tuple.java | 30 ++ .../collectionquery/impl/UnionStmt.java | 122 ++++++++ .../elinrin/src/main/resources/yandexAnswer | 1 + projects/elinrin/src/main/resources/yandexkey | 1 + .../collectionquery/AggregatesTest.java | 72 +++++ .../collectionquery/ConditionsTest.java | 36 +++ .../OrderByConditionsTest.java | 40 +++ .../elinrin/collectionquery/SourcesTest.java | 33 ++ .../collectionquery/impl/FromStmtTest.java | 95 ++++++ .../collectionquery/impl/SelectStmtTest.java | 195 ++++++++++++ 22 files changed, 1446 insertions(+) create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java create mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java create mode 100644 projects/elinrin/src/main/resources/yandexAnswer create mode 100644 projects/elinrin/src/main/resources/yandexkey create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java new file mode 100644 index 0000000..c590518 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java @@ -0,0 +1,27 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Avg; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Count; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Max; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Min; + +import java.util.function.Function; + +public class Aggregates { + public static Function max(final Function expression) { + return new Max<>(expression); + } + + public static > Function min(final Function expression) { + return new Min<>(expression); + } + + public static Function count(final Function expression) { + return new Count<>(expression); + } + + public static Function avg(final Function expression) { + return new Avg<>(expression); + } + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java new file mode 100644 index 0000000..2e9b133 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java @@ -0,0 +1,249 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.impl.Tuple; + +import java.lang.reflect.InvocationTargetException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.avg; +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.count; +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; +import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.asc; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.desc; +import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; +import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; + +public class CollectionQuery { + static final int TWENTY = 20; + static final int HUNDRED = 100; + /** + * Make this code work! + * + * @param args + */ + public static void main(final String[] args) throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + Iterable statistics = + from(list( + student("ivanov", LocalDate.parse("1986-08-06"), "496"), + student("ivanov", LocalDate.parse("1986-08-06"), "496"))) + .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age)) + .where(rlike(Student::getName, ".*ov").and(s -> s.age() > TWENTY)) + .groupBy(Student::getName) + .having(s -> s.getCount() > 0) + .orderBy(asc(Statistics::getGroup), desc(count(Statistics::getGroup))) + .limit(HUNDRED) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"))) + .selectDistinct(Statistics.class, s -> "all", + count(Student::getDateOfBith), avg(Student::age)) + .groupBy(Student::getGroup) + .execute(); + statistics.forEach(System.out::print); + + /*List ex = new ArrayList<>(); + ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + ex.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + ex.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "495")); + ex.sort(asc(Student::getGroup)); + System.out.println(ex);*/ + + /*Iterable statistics = + from(list( + student("ivanov", LocalDate.parse("1986-08-06"), "494"), + student("zvereva", LocalDate.parse("1986-08-06"), "494"), + student("zuev", LocalDate.parse("1976-08-06"), "494"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("sidorov", LocalDate.parse("1986-08-06"), "495"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("garkavyy", LocalDate.parse("1986-08-06"), "495"), + student("ivanov", LocalDate.parse("1989-08-06"), "494"))) + .select(Student.class, Student::getName, Student::getGroup) + .union() + .from(list(student("ivanov", LocalDate.parse("1986-08-06"), "494"), + student("zvereva", LocalDate.parse("1986-08-06"), "494"), + student("ivanov", LocalDate.parse("1986-08-06"), "494"))) + .select(Student.class, Student::getName, Student::getGroup) + .execute();*/ + //Tuple a = new Tuple("1", "2"); + //System.out.println(a.getFirst().getClass()); + //System.out.println(a.getClass()); + + Iterable> mentorsByStudent = + from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("497", "mr.solovev"))) + .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup())) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .where(s -> Objects.equals(s.getFirst().getName(), "sidorov")) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("496", "mr.ilanov"))) + .on(s -> s.getGroup(), f -> f.getGroup()) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .execute(); + mentorsByStudent.forEach(System.out::print); + } + + public static class Student { + private final String name; + + private final LocalDate dateOfBith; + + private final String group; + + public final String getName() { + return name; + } + + /*public Student(String group) { + this.name = null; + this.dateOfBith = null; + this.group = group; + }*/ + + public Student(final String name, final LocalDate dateOfBith, final String group) { + this.name = name; + this.dateOfBith = dateOfBith; + this.group = group; + } + + public Student(final String name, final String group) { + this.name = name; + this.dateOfBith = null; + this.group = group; + } + + public final LocalDate getDateOfBith() { + return dateOfBith; + } + + public final String getGroup() { + return group; + } + + public final Double age() { + return (double) ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now()); + } + + public static Student student(final String name, final LocalDate dateOfBith, final String group) { + return new Student(name, dateOfBith, group); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (name != null) { + result.append(", name=").append(name); + } + if (dateOfBith != null) { + result.append(", age=").append(dateOfBith); + } + result.append("}\n"); + return result.toString(); + } + } + + public static class Group { + private final String group; + private final String mentor; + + public Group(final String group, final String mentor) { + this.group = group; + this.mentor = mentor; + } + + public final String getGroup() { + return group; + } + + public final String getMentor() { + return mentor; + } + + public static Group group(final String ggroup, final String mmentor) { + return new Group(ggroup, mmentor); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (mentor != null) { + result.append(", name=").append(mentor); + } + result.append("}\n"); + return result.toString(); + } + } + + + public static class Statistics { + + private final String group; + private final Integer count; + private final Double age; + + public final String getGroup() { + return group; + } + + public final Integer getCount() { + return count; + } + + public final Double getAge() { + return age; + } + + public Statistics(final String group, final Integer count) { + this.group = group; + this.count = count; + this.age = null; + } + + public Statistics(final String group, final Integer count, final Double age) { + this.group = group; + this.count = count; + this.age = age; + } + + public Statistics(final String group) { + this.group = group; + this.count = null; + this.age = null; + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Statistics{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (count != null) { + result.append(", count=").append(count); + } + if (age != null) { + result.append(", age=").append(age); + } + result.append("}\n"); + return result.toString(); + } + } + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java new file mode 100644 index 0000000..53b0b54 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java @@ -0,0 +1,14 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.function.Function; +import java.util.function.Predicate; + +public class Conditions { + public static Predicate rlike(final Function expression, final String regexp) { + return element -> expression.apply(element).matches(regexp); + } + + public static Predicate like(final Function expression, final String pattern) { + throw new UnsupportedOperationException(); + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java new file mode 100644 index 0000000..0b61963 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java @@ -0,0 +1,16 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.Comparator; +import java.util.function.Function; + +public final class OrderByConditions { + + public static > Comparator asc(final Function expression) { + return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2)); + } + + public static > Comparator desc(final Function expression) { + return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1)); + } + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java new file mode 100644 index 0000000..6b77b5e --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java @@ -0,0 +1,13 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Sources { + + @SafeVarargs + public static List list(final T... items) { + return Arrays.asList(items); + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java new file mode 100644 index 0000000..c5fc669 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java @@ -0,0 +1,9 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + + +public interface Aggregator extends Function { + C apply(List elements); +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java new file mode 100644 index 0000000..1ecd903 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java @@ -0,0 +1,26 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Avg implements Aggregator { + + private Function function; + public Avg(final Function expression) { + this.function = expression; + } + + @Override + public final Double apply(final List elements) { + Double result = 0.0; + for (T element : elements) { + result += (Double) function.apply(element); + } + return result / elements.size(); + } + + @Override + public final Double apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java new file mode 100644 index 0000000..785c70b --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java @@ -0,0 +1,29 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Function; + +public class Count implements Aggregator { + + private Function function; + public Count(final Function expression) { + this.function = expression; + } + + @Override + public final Integer apply(final List elements) { + Set distincted = new HashSet<>(); + for (T element : elements) { + if (!distincted.contains(function.apply(element))) { + distincted.add(function.apply(element)); + } + } + return distincted.size(); + } + @Override + public final Integer apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java new file mode 100644 index 0000000..4d594f7 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Max> implements Aggregator { + + private Function function; + public Max(final Function expression) { + this.function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) < 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java new file mode 100644 index 0000000..655fbbf --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Min> implements Aggregator { + + private Function function; + public Min(final Function expression) { + this.function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) > 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java new file mode 100644 index 0000000..fae6f13 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java @@ -0,0 +1,92 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FromStmt { + private List elements = new ArrayList<>(); + + public final List getElements() { + return elements; + } + + public FromStmt(final Iterable iterable) { + for (T curr : iterable) { + elements.add(curr); + } + } + + public static FromStmt from(final Iterable iterable) { + return new FromStmt<>(iterable); + } + + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(elements, returnClass, false, functions); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, + final Function... functions) { + return new SelectStmt<>(elements, returnClass, true, functions); + } + + public final SelectStmt> select(final Function first, + final Function second) { + return new SelectStmt<>(elements, false, first, second); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(elements, iterable); + } + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List firstElements, final Iterable secondElements) { + this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); + for (J curr : secondElements) { + this.secondElements.add(curr); + } + } + + public final FromStmt> on(final BiPredicate condition) { + for (S first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + return new FromStmt<>(elements); + } + + public final > FromStmt> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (S first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromStmt<>(elements); + } + } +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java new file mode 100644 index 0000000..98af9cc --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java @@ -0,0 +1,284 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import javafx.util.Pair; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; + +public class SelectStmt { + + public final boolean isDistinct() { + return isDistinct; + } + + public final Function[] getFunctions() { + return functions; + } + + public final Class getReturnClass() { + return returnClass; + } + + public final int getNumberOfObjects() { + return numberOfObjects; + } + + public final boolean isUnion() { + return isUnion; + } + + public final List getElements() { + return elements; + } + + private boolean isDistinct; + private Class returnClass; + private Function[] functions; + private List elements; + + private List pastElements; + + private Predicate whereCondition; + private Comparator[] comparators; + private Predicate havingCondition; + private int numberOfObjects; + private Function[] groupByConditions; + + private CQLComparator cqlComparator; + private boolean isUnion; + private boolean isJoin; + + @SafeVarargs + public SelectStmt(final List elements, final Class returnClass, final boolean isDistinct, + final Function... functions) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = returnClass; + this.isDistinct = isDistinct; + this.functions = functions; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = false; + } + + public SelectStmt(final List elements, final boolean isDistinct, final Function first, + final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + this.isDistinct = isDistinct; + this.functions = new Function[]{first, second}; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = true; + } + + @SafeVarargs + public SelectStmt(final List pastElements, final List elements, final Class returnClass, + final boolean isDistinct, final Function... functions) { + this.elements = new ArrayList<>(); + for (T element : elements) { + this.elements.add(element); + } + this.returnClass = returnClass; + this.isDistinct = isDistinct; + this.functions = functions; + this.numberOfObjects = -1; + this.isUnion = true; + this.pastElements = pastElements; + } + + public SelectStmt(final List pastElements, final List elements, final boolean isDistinct, + final Function first, final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + this.isDistinct = isDistinct; + this.functions = new Function[]{first, second}; + this.numberOfObjects = -1; + this.isUnion = true; + this.isJoin = true; + this.pastElements = pastElements; + } + + public final SelectStmt where(final Predicate predicate) { + this.whereCondition = predicate; + return this; + } + + @SafeVarargs + public final SelectStmt groupBy(final Function... expressions) { + this.groupByConditions = expressions; + return this; + } + + @SafeVarargs + public final SelectStmt orderBy(final Comparator... comparators) { + this.comparators = comparators; + this.cqlComparator = new CQLComparator(comparators); + return this; + } + + public final SelectStmt having(final Predicate condition) { + this.havingCondition = condition; + return this; + } + + public final SelectStmt limit(final int amount) { + this.numberOfObjects = amount; + return this; + } + + public final Iterable execute() throws NoSuchMethodException, IllegalAccessException, + InvocationTargetException, InstantiationException { + List result = new ArrayList<>(); + Object[] arguments = new Object[functions.length]; + Class[] returnClasses = new Class[functions.length]; + if (whereCondition != null) { + List filtered = new ArrayList<>(); + elements.stream().filter(whereCondition::test).forEach(filtered::add); + elements = filtered; + } + if (groupByConditions != null) { + Map mapped = new HashMap<>(); + String[] results = new String[groupByConditions.length]; + List> grouped = new ArrayList<>(); + elements.stream().forEach( + element -> { + for (int i = 0; i < groupByConditions.length; i++) { + results[i] = (String) groupByConditions[i].apply(element); + } + if (!mapped.containsKey(Objects.hash(results))) { + mapped.put(Objects.hash(results), mapped.size()); + } + grouped.add(new Pair(element, mapped.get(Objects.hash(results)))); + } + ); + List> groupedElements = new ArrayList<>(); + for (int i = 0; i < mapped.size(); i++) { + groupedElements.add(new ArrayList()); + } + + for (Pair element : grouped) { + groupedElements.get(element.getValue()).add(element.getKey()); + } + for (List group : groupedElements) { + for (int i = 0; i < functions.length; i++) { + if (functions[i] instanceof Aggregator) { + arguments[i] = ((Aggregator) functions[i]).apply(group); + } else { + arguments[i] = functions[i].apply(group.get(0)); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } else { + for (T element : this.elements) { + for (int i = 0; i < functions.length; i++) { + arguments[i] = functions[i].apply(element); + if (functions[i] instanceof Aggregator) { + List currArg = new ArrayList<>(); + currArg.add(element); + arguments[i] = ((Aggregator) functions[i]).apply(currArg); + } else { + arguments[i] = functions[i].apply(element); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } + if (havingCondition != null) { + List filtered = new ArrayList<>(); + result.stream().filter(havingCondition::test).forEach(filtered::add); + result = filtered; + } + if (isDistinct) { + Set hashes = new HashSet<>(); + List flags = new ArrayList<>(); + for (R element : result) { + if (!hashes.contains(element.toString().hashCode())) { + flags.add(1); + hashes.add(element.toString().hashCode()); + } else { + flags.add(0); + } + } + List distincted = new ArrayList<>(); + for (int i = 0; i < result.size(); i++) { + if (flags.get(i) == 1) { + distincted.add(result.get(i)); + } + } + result = distincted; + } + if (comparators != null) { + result.sort(cqlComparator); + } + if (numberOfObjects != -1) { + while (result.size() > numberOfObjects) { + result.remove(result.size() - 1); + } + } + if (isUnion) { + pastElements.addAll(result); + result = pastElements; + } + //System.out.println("Hello!"); + return result; + } + + public final UnionStmt union() throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + List result = (List) this.execute(); + if (isJoin) { + return new UnionStmt<>(result, true); + } else { + return new UnionStmt<>(result); + } + } + + public class CQLComparator implements Comparator { + private Comparator[] comparators; + @SafeVarargs + public CQLComparator(final Comparator... comparators) { + this.comparators = comparators; + } + + @Override + public final int compare(final K first, final K second) { + for (Comparator comparator : comparators) { + if (comparator.compare(first, second) != 0) { + return comparator.compare(first, second); + } + } + return 0; + } + } + +} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java new file mode 100644 index 0000000..7022cfd --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java @@ -0,0 +1,30 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + + +public class Tuple { + + private final F first; + private final S second; + + public Tuple(final F first, final S second) { + this.first = first; + this.second = second; + } + + public final F getFirst() { + return first; + } + + public final S getSecond() { + return second; + } + + @Override + public final String toString() { + return "Tuple{" + + "first=" + first + + ", second=" + second + + "}\n"; + } +} + diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java new file mode 100644 index 0000000..65813f0 --- /dev/null +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java @@ -0,0 +1,122 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class UnionStmt { + + private List pastElements = new ArrayList<>(); + + private boolean isTuple; + + public UnionStmt(final Iterable iterable) { + for (R curr : iterable) { + pastElements.add(curr); + } + this.isTuple = false; + } + + public UnionStmt(final Iterable iterable, final boolean isTuple) { + for (R curr : iterable) { + pastElements.add(curr); + } + this.isTuple = true; + } + + public final FromClause from(final Iterable elements) { + if (isTuple) { + return new FromClause<>(pastElements, elements); + } else { + return new FromClause<>(pastElements, /*(Iterable)*/ elements); + } + } + + + public class FromClause { + private List pastElements = new ArrayList<>(); + + private List elements = new ArrayList<>(); + + public FromClause(final Iterable pastElements, final Iterable elements) { + for (Q curr : pastElements) { + this.pastElements.add(curr); + } + for (S curr : elements) { + this.elements.add(curr); + } + } + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, false, functions); + } + + public final SelectStmt> select(final Function first, final Function second) { + return new SelectStmt<>((List>) pastElements, elements, false, first, second); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, true, functions); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(pastElements, elements, iterable); + } + } + + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List pastElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List pastElements, final List firstElements, final Iterable secondElements) { + this.pastElements.addAll(pastElements.stream().collect(Collectors.toList())); + this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); + for (J curr : secondElements) { + this.secondElements.add(curr); + } + //secondElements.forEach(System.out::print); + } + + public final FromClause, W> on(final BiPredicate condition) { + for (F first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + //System.out.println(secondElements.get(0)); + //System.out.println(elements.get(0)); + return new FromClause<>(pastElements, elements); + } + + public final > FromClause, W> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (F first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromClause<>(pastElements, elements); + } + } +} diff --git a/projects/elinrin/src/main/resources/yandexAnswer b/projects/elinrin/src/main/resources/yandexAnswer new file mode 100644 index 0000000..2544611 --- /dev/null +++ b/projects/elinrin/src/main/resources/yandexAnswer @@ -0,0 +1 @@ +{"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Москва","found":"54","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"locality","text":"Россия, Москва","precision":"other","AddressDetails":{"Country":{"AddressLine":"Москва","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Центральный федеральный округ","SubAdministrativeArea":{"SubAdministrativeAreaName":"Москва","Locality":{"LocalityName":"Москва"}}}}}}},"description":"Россия","name":"Москва","boundedBy":{"Envelope":{"lowerCorner":"37.32624 55.491126","upperCorner":"37.967682 55.957565"}},"Point":{"pos":"37.620393 55.753960"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"hydro","text":"Россия, река Москва","precision":"other","AddressDetails":{"Country":{"AddressLine":"река Москва","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Центральный федеральный округ","Locality":{"Premise":{"PremiseName":"река Москва"}}}}}}},"description":"Россия","name":"река Москва","boundedBy":{"Envelope":{"lowerCorner":"35.27093 55.073809","upperCorner":"38.847968 55.83022"}},"Point":{"pos":"37.049280 55.709449"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"hydro","text":"Узбекистан, Канал Москва","precision":"other","AddressDetails":{"Country":{"AddressLine":"Канал Москва","CountryNameCode":"UZ","CountryName":"Узбекистан","Locality":{"Premise":{"PremiseName":"Канал Москва"}}}}}},"description":"Узбекистан","name":"Канал Москва","boundedBy":{"Envelope":{"lowerCorner":"66.359835 39.121034","upperCorner":"66.552838 39.588246"}},"Point":{"pos":"66.385751 39.335933"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, Саратовская область, Романовский район, село Усть-Щербедино, улица Москва","precision":"street","AddressDetails":{"Country":{"AddressLine":"Саратовская область, Романовский район, село Усть-Щербедино, улица Москва","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Саратовская область","SubAdministrativeArea":{"SubAdministrativeAreaName":"Романовский район","Locality":{"LocalityName":"село Усть-Щербедино","Thoroughfare":{"ThoroughfareName":"улица Москва"}}}}}}}},"description":"село Усть-Щербедино, Романовский район, Саратовская область, Россия","name":"улица Москва","boundedBy":{"Envelope":{"lowerCorner":"42.870552 51.849693","upperCorner":"42.871019 51.86548"}},"Point":{"pos":"42.870830 51.857587"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, М-11","precision":"street","AddressDetails":{"Country":{"AddressLine":"М-11","CountryNameCode":"RU","CountryName":"Россия","Thoroughfare":{"ThoroughfareName":"М-11"}}}}},"description":"Россия","name":"М-11","boundedBy":{"Envelope":{"lowerCorner":"30.327744 55.886902","upperCorner":"37.486535 59.809473"}},"Point":{"pos":"33.945933 57.922779"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, М-10 Россия","precision":"street","AddressDetails":{"Country":{"AddressLine":"М-10 Россия","CountryNameCode":"RU","CountryName":"Россия","Thoroughfare":{"ThoroughfareName":"М-10 Россия"}}}}},"description":"Россия","name":"М-10 Россия","boundedBy":{"Envelope":{"lowerCorner":"30.371348 55.881662","upperCorner":"37.445069 59.816197"}},"Point":{"pos":"33.882530 57.793519"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, М-4 Дон","precision":"street","AddressDetails":{"Country":{"AddressLine":"М-4 Дон","CountryNameCode":"RU","CountryName":"Россия","Thoroughfare":{"ThoroughfareName":"М-4 Дон"}}}}},"description":"Россия","name":"М-4 Дон","boundedBy":{"Envelope":{"lowerCorner":"37.682485 44.353395","upperCorner":"40.638095 55.576391"}},"Point":{"pos":"40.138820 50.367517"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, М-9 Балтия","precision":"street","AddressDetails":{"Country":{"AddressLine":"М-9 Балтия","CountryNameCode":"RU","CountryName":"Россия","Thoroughfare":{"ThoroughfareName":"М-9 Балтия"}}}}},"description":"Россия","name":"М-9 Балтия","boundedBy":{"Envelope":{"lowerCorner":"28.193796 55.774431","upperCorner":"37.37271 56.381779"}},"Point":{"pos":"32.810076 56.266207"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, Новосибирская область, Краснозерский район, село Лобино, улица Москва","precision":"street","AddressDetails":{"Country":{"AddressLine":"Новосибирская область, Краснозерский район, село Лобино, улица Москва","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Новосибирская область","SubAdministrativeArea":{"SubAdministrativeAreaName":"Краснозерский район","Locality":{"LocalityName":"село Лобино","Thoroughfare":{"ThoroughfareName":"улица Москва"}}}}}}}},"description":"село Лобино, Краснозерский район, Новосибирская область, Россия","name":"улица Москва","boundedBy":{"Envelope":{"lowerCorner":"79.025397 53.853407","upperCorner":"79.032072 53.863057"}},"Point":{"pos":"79.028694 53.858203"}}},{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"street","text":"Россия, Тамбовская область, Тамбовский район, село Куксово, улица Москва","precision":"street","AddressDetails":{"Country":{"AddressLine":"Тамбовская область, Тамбовский район, село Куксово, улица Москва","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Тамбовская область","SubAdministrativeArea":{"SubAdministrativeAreaName":"Тамбовский район","Locality":{"LocalityName":"село Куксово","Thoroughfare":{"ThoroughfareName":"улица Москва"}}}}}}}},"description":"село Куксово, Тамбовский район, Тамбовская область, Россия","name":"улица Москва","boundedBy":{"Envelope":{"lowerCorner":"41.48588 52.856247","upperCorner":"41.499831 52.860401"}},"Point":{"pos":"41.492635 52.857726"}}}]}}} diff --git a/projects/elinrin/src/main/resources/yandexkey b/projects/elinrin/src/main/resources/yandexkey new file mode 100644 index 0000000..3eff4f3 --- /dev/null +++ b/projects/elinrin/src/main/resources/yandexkey @@ -0,0 +1 @@ +AEpbCFYBAAAASOuPOQIBg8DHj8Ntfn_0Mwo5S6UjS7my7xYAAAAAAAAAAABMWqQjMsyiftYfJdRc_-QaNBUXUw== diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java new file mode 100644 index 0000000..e519cea --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java @@ -0,0 +1,72 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +@SuppressWarnings("unchecked") +@RunWith(MockitoJUnitRunner.class) +public class AggregatesTest extends TestCase { + + List exampleList, emptyExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + } + + @Test + public void testMax() throws Exception { + assertEquals(((Aggregator) Aggregates.max(functionGroup)).apply(exampleList), "495"); + assertEquals(((Aggregator) Aggregates.max(functionName)).apply(exampleList), "sidorov"); + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(exampleList), 19.0); + + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(student), null); + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(emptyExampleList), null); + } + + @Test + public void testMin() throws Exception { + assertEquals(((Aggregator) Aggregates.min(functionGroup)).apply(exampleList), "494"); + assertEquals(((Aggregator) Aggregates.min(functionName)).apply(exampleList), "ivanov"); + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(exampleList), 18.0); + + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(student), null); + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(emptyExampleList), null); + } + + @Test + public void testCount() throws Exception { + assertEquals(((Aggregator) Aggregates.count(functionGroup)).apply(exampleList), 2); + assertEquals(((Aggregator) Aggregates.count(functionName)).apply(exampleList), 3); + assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(exampleList), 2); + + assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(student), null); + } + + @Test + public void testAvg() throws Exception { + assertEquals((Double)((Aggregator) Aggregates.avg(functionAge)).apply(exampleList), 18.666, 0.1); + + assertEquals(((Aggregator) Aggregates.avg(functionAge)).apply(student), null); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java new file mode 100644 index 0000000..b165234 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java @@ -0,0 +1,36 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; +import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; + +@RunWith(MockitoJUnitRunner.class) +public class ConditionsTest extends TestCase { + Function function = CollectionQuery.Student::getName; + + @Test + public void testRlike() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("mogilev", LocalDate.parse("1986-08-06"), "495")); + + assertEquals(rlike(function, ".*ov").test(exampleList.get(0)), false); + assertEquals(rlike(function, ".*ov").test(exampleList.get(1)), false); + assertEquals(rlike(function, ".*ov").test(exampleList.get(2)), true); + } + + @Test(expected = UnsupportedOperationException.class) + public void testLike() throws Exception { + Conditions.like(function, "aaa"); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java new file mode 100644 index 0000000..19b43e5 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java @@ -0,0 +1,40 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; + +@RunWith(MockitoJUnitRunner.class) +public class OrderByConditionsTest extends TestCase { + Function function = CollectionQuery.Student::getName; + + @Test + public void testAsc() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "497")); + exampleList.add(student("vasilev", LocalDate.parse("1986-08-06"), "496")); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(2)) < 0); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(1), exampleList.get(0)) > 0); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); + } + + @Test + public void testDesc() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(2)) > 0); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(1), exampleList.get(0)) < 0); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java new file mode 100644 index 0000000..af5822e --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java @@ -0,0 +1,33 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; + +@RunWith(MockitoJUnitRunner.class) +public class SourcesTest extends TestCase { + + @Test + public void testList() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + + List resultList = Sources.list( + student("ivanov", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("sidorov", LocalDate.parse("1986-08-06"), "495")); + assertEquals(exampleList.size(), resultList.size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i).toString(), resultList.get(i).toString()); + } + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java new file mode 100644 index 0000000..16c73d1 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java @@ -0,0 +1,95 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +@SuppressWarnings("unchecked") +@RunWith(MockitoJUnitRunner.class) +public class FromStmtTest extends TestCase { + + List exampleList, emptyExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + } + + @Test + public void testFrom() throws Exception { + FromStmt fromStmt = FromStmt.from(exampleList); + assertEquals(fromStmt.getElements().size(), exampleList.size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(fromStmt.getElements().get(i), exampleList.get(i)); + } + } + + @Test + public void testSelect() throws Exception { + SelectStmt select = FromStmt.from(exampleList) + .select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + assertEquals(select.getNumberOfObjects(), -1); + assertEquals(select.getReturnClass(), CollectionQuery.Student.class); + assertEquals(select.isDistinct(), false); + assertEquals(select.isUnion(), false); + Function[] functions = new Function[2]; + functions[0] = CollectionQuery.Student::getName; + functions[1] = CollectionQuery.Student::getGroup; + assertEquals(select.getFunctions().length, functions.length); + for (int i = 0; i < functions.length; i++) { + for (CollectionQuery.Student element : exampleList) { + assertEquals(functions[i].apply(element), + select.getFunctions()[i].apply(element)); + } + } + assertEquals(exampleList.size(), select.getElements().size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i), select.getElements().get(i)); + } + } + + @Test + public void testSelectDistinct() throws Exception { + SelectStmt select = FromStmt.from(exampleList) + .selectDistinct(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + assertEquals(select.getNumberOfObjects(), -1); + assertEquals(select.getReturnClass(), CollectionQuery.Student.class); + assertEquals(select.isDistinct(), true); + assertEquals(select.isUnion(), false); + Function[] functions = new Function[2]; + functions[0] = CollectionQuery.Student::getName; + functions[1] = CollectionQuery.Student::getGroup; + assertEquals(select.getFunctions().length, functions.length); + for (int i = 0; i < functions.length; i++) { + for (CollectionQuery.Student element : exampleList) { + assertEquals(functions[i].apply(element), + select.getFunctions()[i].apply(element)); + } + } + assertEquals(exampleList.size(), select.getElements().size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i), select.getElements().get(i)); + } + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java new file mode 100644 index 0000000..85fd304 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java @@ -0,0 +1,195 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.Aggregates; +import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; +import ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.function.Function; + +@RunWith(MockitoJUnitRunner.class) +public class SelectStmtTest extends TestCase { + + List exampleList, emptyExampleList, distinctExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + SelectStmt select, distinctSelect; + SelectStmt groupSelect; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + distinctExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + select = FromStmt.from(exampleList).select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + distinctSelect = FromStmt.from(distinctExampleList).selectDistinct(CollectionQuery.Student.class, + CollectionQuery.Student::getName, CollectionQuery.Student::getGroup); + groupSelect = FromStmt.from(exampleList).select(CollectionQuery.Statistics.class, + CollectionQuery.Student::getGroup, Aggregates.count(CollectionQuery.Student::getName)); + } + + @Test + public void testWhere() throws Exception { + List result = (List) select + .where(s -> Objects.equals(s.getGroup(), "494")) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testGroupBy() throws Exception { + List result = (List) groupSelect + .groupBy(CollectionQuery.Student::getGroup) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Statistics("495", 3)); + resultList.add(new CollectionQuery.Statistics("494", 1)); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testOrderBy() throws Exception { + List result = (List) select + .orderBy(OrderByConditions.desc(CollectionQuery.Student::getGroup)) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testHaving() throws Exception { + List result = (List) groupSelect + .groupBy(CollectionQuery.Student::getGroup) + .having(s -> Objects.equals(s.getGroup(), "494")) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Statistics("494", 1)); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testLimit() throws Exception { + List result = (List) select + .limit(2) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + + result = (List) select + .limit(5) + .execute(); + resultList.clear(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testExecute() throws Exception { + List result = (List) select.execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + + List resultWithAggr = (List) groupSelect.execute(); + List resultListWithAggr = new ArrayList<>(); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("494", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + assertEquals(resultWithAggr.size(), resultListWithAggr.size()); + for (int i = 0; i < resultWithAggr.size(); i++) { + assertEquals(resultListWithAggr.get(i).toString(), resultWithAggr.get(i).toString()); + } + } + + @Test + public void testUnion() throws Exception { + List result = (List) select.union(). + from(exampleList). + select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup). + execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testIsDistinct() throws Exception { + List result = (List) distinctSelect.execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } +} From 407ccc72f1aee7418c1f6c1d74faa463df350112 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 01:54:09 +0300 Subject: [PATCH 19/27] ... --- projects/elinrin/pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/elinrin/pom.xml b/projects/elinrin/pom.xml index da941db..2a0e80e 100644 --- a/projects/elinrin/pom.xml +++ b/projects/elinrin/pom.xml @@ -1,6 +1,11 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + ru.mipt.diht.students + parent + 1.0-SNAPSHOT + ru.mipt.diht.students elinrin From 25e7f9fe60f7893dd07b6675ababe06eb4b1ab56 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 02:09:49 +0300 Subject: [PATCH 20/27] ... --- .../ru/mipt/diht/students/elinrin/collectionquery/Sources.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java index 6b77b5e..e5bd621 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java @@ -1,6 +1,6 @@ package ru.mipt.diht.students.elinrin.collectionquery; -import java.util.ArrayList; + import java.util.Arrays; import java.util.List; From f4cd21010d135ddf6d27da8896ceb544a06e3ff3 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 03:11:44 +0300 Subject: [PATCH 21/27] this!? --- .../elinrin/collectionquery/Aggregates.java | 27 ++ .../collectionquery/CollectionQuery.java | 249 +++++++++++++++ .../elinrin/collectionquery/Conditions.java | 14 + .../collectionquery/OrderByConditions.java | 16 + .../elinrin/collectionquery/Sources.java | 12 + .../aggregatesImpl/Aggregator.java | 9 + .../collectionquery/aggregatesImpl/Avg.java | 26 ++ .../collectionquery/aggregatesImpl/Count.java | 29 ++ .../collectionquery/aggregatesImpl/Max.java | 31 ++ .../collectionquery/aggregatesImpl/Min.java | 31 ++ .../collectionquery/impl/FromStmt.java | 92 ++++++ .../collectionquery/impl/SelectStmt.java | 284 ++++++++++++++++++ .../elinrin/collectionquery/impl/Tuple.java | 30 ++ .../collectionquery/impl/UnionStmt.java | 123 ++++++++ 14 files changed, 973 insertions(+) create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java new file mode 100644 index 0000000..c590518 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java @@ -0,0 +1,27 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Avg; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Count; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Max; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Min; + +import java.util.function.Function; + +public class Aggregates { + public static Function max(final Function expression) { + return new Max<>(expression); + } + + public static > Function min(final Function expression) { + return new Min<>(expression); + } + + public static Function count(final Function expression) { + return new Count<>(expression); + } + + public static Function avg(final Function expression) { + return new Avg<>(expression); + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java new file mode 100644 index 0000000..e1f2edb --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java @@ -0,0 +1,249 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.impl.Tuple; + +import java.lang.reflect.InvocationTargetException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.avg; +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.count; +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; +import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.asc; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.desc; +import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; +import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; + +public class CollectionQuery { + static final int TWENTY = 20; + static final int HUNDRED = 100; + /** + * Make this code work! + * + * @param args + */ + public static void main(final String[] args) throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + Iterable statistics = + from(list( + student("ivanov", LocalDate.parse("1986-08-06"), "496"), + student("ivanov", LocalDate.parse("1986-08-06"), "496"))) + .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age)) + .where(rlike(Student::getName, ".*ov").and(s -> s.age() > TWENTY)) + .groupBy(Student::getName) + .having(s -> s.getCount() > 0) + .orderBy(asc(Statistics::getGroup), desc(count(Statistics::getGroup))) + .limit(HUNDRED) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"))) + .selectDistinct(Statistics.class, s -> "all", + count(Student::getDateOfBith), avg(Student::age)) + .groupBy(Student::getGroup) + .execute(); + statistics.forEach(System.out::print); + + /*List ex = new ArrayList<>(); + ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + ex.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + ex.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "495")); + ex.sort(asc(Student::getGroup)); + System.out.println(ex);*/ + + /*Iterable statistics = + from(list( + student("ivanov", LocalDate.parse("1986-08-06"), "494"), + student("zvereva", LocalDate.parse("1986-08-06"), "494"), + student("zuev", LocalDate.parse("1976-08-06"), "494"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("sidorov", LocalDate.parse("1986-08-06"), "495"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("garkavyy", LocalDate.parse("1986-08-06"), "495"), + student("ivanov", LocalDate.parse("1989-08-06"), "494"))) + .select(Student.class, Student::getName, Student::getGroup) + .union() + .from(list(student("ivanov", LocalDate.parse("1986-08-06"), "494"), + student("zvereva", LocalDate.parse("1986-08-06"), "494"), + student("ivanov", LocalDate.parse("1986-08-06"), "494"))) + .select(Student.class, Student::getName, Student::getGroup) + .execute();*/ + //Tuple a = new Tuple("1", "2"); + //System.out.println(a.getFirst().getClass()); + //System.out.println(a.getClass()); + + Iterable> mentorsByStudent = + from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("497", "mr.solovev"))) + .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup())) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .where(s -> Objects.equals(s.getFirst().getName(), "sidorov")) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("496", "mr.ilanov"))) + .on(s -> s.getGroup(), f -> f.getGroup()) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .execute(); + mentorsByStudent.forEach(System.out::print); + } + + public static class Student { + private final String name; + + private final LocalDate dateOfBith; + + private final String group; + + public final String getName() { + return name; + } + + /*public Student(String group) { + this.name = null; + this.dateOfBith = null; + this.group = group; + }*/ + + public Student(final String gottenName, final LocalDate gottenDateOfBith, final String gottenGroup) { + name = gottenName; + dateOfBith = gottenDateOfBith; + group = gottenGroup; + } + + public Student(final String gottenName, final String gottenGroup) { + name = gottenName; + dateOfBith = null; + group = gottenGroup; + } + + public final LocalDate getDateOfBith() { + return dateOfBith; + } + + public final String getGroup() { + return group; + } + + public final Double age() { + return (double) ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now()); + } + + public static Student student(final String name, final LocalDate dateOfBith, final String group) { + return new Student(name, dateOfBith, group); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (name != null) { + result.append(", name=").append(name); + } + if (dateOfBith != null) { + result.append(", age=").append(dateOfBith); + } + result.append("}\n"); + return result.toString(); + } + } + + public static class Group { + private final String group; + private final String mentor; + + public Group(final String gottenGroup, final String gottenMentor) { + group = gottenGroup; + mentor = gottenMentor; + } + + public final String getGroup() { + return group; + } + + public final String getMentor() { + return mentor; + } + + public static Group group(final String ggroup, final String mmentor) { + return new Group(ggroup, mmentor); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (mentor != null) { + result.append(", name=").append(mentor); + } + result.append("}\n"); + return result.toString(); + } + } + + + public static class Statistics { + + private final String group; + private final Integer count; + private final Double age; + + public final String getGroup() { + return group; + } + + public final Integer getCount() { + return count; + } + + public final Double getAge() { + return age; + } + + public Statistics(final String gottenGroup, final Integer gottenCount) { + group = gottenGroup; + count = gottenCount; + age = null; + } + + public Statistics(final String gottenGroup, final Integer gottenCount, final Double gottenAge) { + group = gottenGroup; + count = gottenCount; + age = gottenAge; + } + + public Statistics(final String gottenGroup) { + group = gottenGroup; + count = null; + age = null; + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Statistics{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (count != null) { + result.append(", count=").append(count); + } + if (age != null) { + result.append(", age=").append(age); + } + result.append("}\n"); + return result.toString(); + } + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java new file mode 100644 index 0000000..53b0b54 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java @@ -0,0 +1,14 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.function.Function; +import java.util.function.Predicate; + +public class Conditions { + public static Predicate rlike(final Function expression, final String regexp) { + return element -> expression.apply(element).matches(regexp); + } + + public static Predicate like(final Function expression, final String pattern) { + throw new UnsupportedOperationException(); + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java new file mode 100644 index 0000000..0b61963 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java @@ -0,0 +1,16 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.Comparator; +import java.util.function.Function; + +public final class OrderByConditions { + + public static > Comparator asc(final Function expression) { + return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2)); + } + + public static > Comparator desc(final Function expression) { + return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1)); + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java new file mode 100644 index 0000000..9f740d9 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java @@ -0,0 +1,12 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.Arrays; +import java.util.List; + +public class Sources { + + @SafeVarargs + public static List list(final T... items) { + return Arrays.asList(items); + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java new file mode 100644 index 0000000..c5fc669 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java @@ -0,0 +1,9 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + + +public interface Aggregator extends Function { + C apply(List elements); +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java new file mode 100644 index 0000000..d5d63ca --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java @@ -0,0 +1,26 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Avg implements Aggregator { + + private Function function; + public Avg(final Function expression) { + function = expression; + } + + @Override + public final Double apply(final List elements) { + Double result = 0.0; + for (T element : elements) { + result += (Double) function.apply(element); + } + return result / elements.size(); + } + + @Override + public final Double apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java new file mode 100644 index 0000000..1053414 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java @@ -0,0 +1,29 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Function; + +public class Count implements Aggregator { + + private Function function; + public Count(final Function expression) { + function = expression; + } + + @Override + public final Integer apply(final List elements) { + Set distincted = new HashSet<>(); + for (T element : elements) { + if (!distincted.contains(function.apply(element))) { + distincted.add(function.apply(element)); + } + } + return distincted.size(); + } + @Override + public final Integer apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java new file mode 100644 index 0000000..0f40bb5 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Max> implements Aggregator { + + private Function function; + public Max(final Function expression) { + function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) < 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java new file mode 100644 index 0000000..fa95a98 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Min> implements Aggregator { + + private Function function; + public Min(final Function expression) { + function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) > 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java new file mode 100644 index 0000000..fae6f13 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java @@ -0,0 +1,92 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FromStmt { + private List elements = new ArrayList<>(); + + public final List getElements() { + return elements; + } + + public FromStmt(final Iterable iterable) { + for (T curr : iterable) { + elements.add(curr); + } + } + + public static FromStmt from(final Iterable iterable) { + return new FromStmt<>(iterable); + } + + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(elements, returnClass, false, functions); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, + final Function... functions) { + return new SelectStmt<>(elements, returnClass, true, functions); + } + + public final SelectStmt> select(final Function first, + final Function second) { + return new SelectStmt<>(elements, false, first, second); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(elements, iterable); + } + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List firstElements, final Iterable secondElements) { + this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); + for (J curr : secondElements) { + this.secondElements.add(curr); + } + } + + public final FromStmt> on(final BiPredicate condition) { + for (S first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + return new FromStmt<>(elements); + } + + public final > FromStmt> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (S first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromStmt<>(elements); + } + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java new file mode 100644 index 0000000..a8245a4 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java @@ -0,0 +1,284 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import javafx.util.Pair; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; + +public class SelectStmt { + + public final boolean isDistinct() { + return isDistinct; + } + + public final Function[] getFunctions() { + return functions; + } + + public final Class getReturnClass() { + return returnClass; + } + + public final int getNumberOfObjects() { + return numberOfObjects; + } + + public final boolean isUnion() { + return isUnion; + } + + public final List getElements() { + return elements; + } + + private boolean isDistinct; + private Class returnClass; + private Function[] functions; + private List elements; + + private List pastElements; + + private Predicate whereCondition; + private Comparator[] comparators; + private Predicate havingCondition; + private int numberOfObjects; + private Function[] groupByConditions; + + private CQLComparator cqlComparator; + private boolean isUnion; + private boolean isJoin; + + @SafeVarargs + public SelectStmt(final List gottenElements, final Class gottenReturnClass, final boolean isDistinct, + final Function... functions) { + this.elements = new ArrayList<>(); + for (T element : gottenElements) { + //System.out.println(element.toString()); + elements.add(element); + } + returnClass = gottenReturnClass; + this.isDistinct = isDistinct; + this.functions = functions; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = false; + } + + public SelectStmt(final List elements, final boolean isDistinct, final Function first, + final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + this.isDistinct = isDistinct; + this.functions = new Function[]{first, second}; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = true; + } + + @SafeVarargs + public SelectStmt(final List gottenPastElements, final List gottenElements, final Class gottenReturnClass, + final boolean gottenIsDistinct, final Function... gottenFunctions) { + elements = new ArrayList<>(); + for (T element : gottenElements) { + elements.add(element); + } + returnClass = gottenReturnClass; + isDistinct = gottenIsDistinct; + functions = gottenFunctions; + numberOfObjects = -1; + isUnion = true; + pastElements = gottenPastElements; + } + + public SelectStmt(final List gottenPastElements, final List elements, final boolean gottenIsDistinct, + final Function first, final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + isDistinct = gottenIsDistinct; + functions = new Function[]{first, second}; + numberOfObjects = -1; + isUnion = true; + isJoin = true; + pastElements = gottenPastElements; + } + + public final SelectStmt where(final Predicate predicate) { + whereCondition = predicate; + return this; + } + + @SafeVarargs + public final SelectStmt groupBy(final Function... expressions) { + groupByConditions = expressions; + return this; + } + + @SafeVarargs + public final SelectStmt orderBy(final Comparator... gottenComparators) { + comparators = gottenComparators; + cqlComparator = new CQLComparator(comparators); + return this; + } + + public final SelectStmt having(final Predicate condition) { + havingCondition = condition; + return this; + } + + public final SelectStmt limit(final int amount) { + numberOfObjects = amount; + return this; + } + + public final Iterable execute() throws NoSuchMethodException, IllegalAccessException, + InvocationTargetException, InstantiationException { + List result = new ArrayList<>(); + Object[] arguments = new Object[functions.length]; + Class[] returnClasses = new Class[functions.length]; + if (whereCondition != null) { + List filtered = new ArrayList<>(); + elements.stream().filter(whereCondition::test).forEach(filtered::add); + elements = filtered; + } + if (groupByConditions != null) { + Map mapped = new HashMap<>(); + String[] results = new String[groupByConditions.length]; + List> grouped = new ArrayList<>(); + elements.stream().forEach( + element -> { + for (int i = 0; i < groupByConditions.length; i++) { + results[i] = (String) groupByConditions[i].apply(element); + } + if (!mapped.containsKey(Objects.hash(results))) { + mapped.put(Objects.hash(results), mapped.size()); + } + grouped.add(new Pair(element, mapped.get(Objects.hash(results)))); + } + ); + List> groupedElements = new ArrayList<>(); + for (int i = 0; i < mapped.size(); i++) { + groupedElements.add(new ArrayList()); + } + + for (Pair element : grouped) { + groupedElements.get(element.getValue()).add(element.getKey()); + } + for (List group : groupedElements) { + for (int i = 0; i < functions.length; i++) { + if (functions[i] instanceof Aggregator) { + arguments[i] = ((Aggregator) functions[i]).apply(group); + } else { + arguments[i] = functions[i].apply(group.get(0)); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } else { + for (T element : this.elements) { + for (int i = 0; i < functions.length; i++) { + arguments[i] = functions[i].apply(element); + if (functions[i] instanceof Aggregator) { + List currArg = new ArrayList<>(); + currArg.add(element); + arguments[i] = ((Aggregator) functions[i]).apply(currArg); + } else { + arguments[i] = functions[i].apply(element); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } + if (havingCondition != null) { + List filtered = new ArrayList<>(); + result.stream().filter(havingCondition::test).forEach(filtered::add); + result = filtered; + } + if (isDistinct) { + Set hashes = new HashSet<>(); + List flags = new ArrayList<>(); + for (R element : result) { + if (!hashes.contains(element.toString().hashCode())) { + flags.add(1); + hashes.add(element.toString().hashCode()); + } else { + flags.add(0); + } + } + List distincted = new ArrayList<>(); + for (int i = 0; i < result.size(); i++) { + if (flags.get(i) == 1) { + distincted.add(result.get(i)); + } + } + result = distincted; + } + if (comparators != null) { + result.sort(cqlComparator); + } + if (numberOfObjects != -1) { + while (result.size() > numberOfObjects) { + result.remove(result.size() - 1); + } + } + if (isUnion) { + pastElements.addAll(result); + result = pastElements; + } + //System.out.println("Hello!"); + return result; + } + + public final UnionStmt union() throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + List result = (List) this.execute(); + if (isJoin) { + return new UnionStmt<>(result, true); + } else { + return new UnionStmt<>(result); + } + } + + public class CQLComparator implements Comparator { + private Comparator[] comparators; + @SafeVarargs + public CQLComparator(final Comparator... comparators) { + this.comparators = comparators; + } + + @Override + public final int compare(final K first, final K second) { + for (Comparator comparator : comparators) { + if (comparator.compare(first, second) != 0) { + return comparator.compare(first, second); + } + } + return 0; + } + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java new file mode 100644 index 0000000..56e9c08 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java @@ -0,0 +1,30 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + + +public class Tuple { + + private final F first; + private final S second; + + public Tuple(final F first1, final S second2) { + first = first1; + second = second2; + } + + public final F getFirst() { + return first; + } + + public final S getSecond() { + return second; + } + + @Override + public final String toString() { + return "Tuple{" + + "first=" + first + + ", second=" + second + + "}\n"; + } +} + diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java new file mode 100644 index 0000000..1af1548 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java @@ -0,0 +1,123 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class UnionStmt { + + private List pastElements = new ArrayList<>(); + + private boolean isTuple; + + public UnionStmt(final Iterable iterable) { + for (R curr : iterable) { + pastElements.add(curr); + } + isTuple = false; + } + + public UnionStmt(final Iterable iterable, final boolean gottenIsTuple) { + for (R curr : iterable) { + pastElements.add(curr); + } + isTuple = true; + } + + public final FromClause from(final Iterable elements) { + if (isTuple) { + return new FromClause<>(pastElements, elements); + } else { + return new FromClause<>(pastElements, /*(Iterable)*/ elements); + } + } + + + public class FromClause { + private List pastElements = new ArrayList<>(); + + private List elements = new ArrayList<>(); + + public FromClause(final Iterable gottenPastElements, final Iterable gottenElements) { + for (Q curr : gottenPastElements) { + pastElements.add(curr); + } + for (S curr : gottenElements) { + elements.add(curr); + } + } + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, false, functions); + } + + public final SelectStmt> select(final Function first, final Function second) { + return new SelectStmt<>((List>) pastElements, elements, false, first, second); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, true, functions); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(pastElements, elements, iterable); + } + } + + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List pastElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List gottenPastElements, final List gottenFirstElements, + final Iterable gottenSecondElements) { + pastElements.addAll(gottenPastElements.stream().collect(Collectors.toList())); + firstElements.addAll(gottenFirstElements.stream().collect(Collectors.toList())); + for (J curr : gottenSecondElements) { + secondElements.add(curr); + } + //secondElements.forEach(System.out::print); + } + + public final FromClause, W> on(final BiPredicate condition) { + for (F first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + //System.out.println(secondElements.get(0)); + //System.out.println(elements.get(0)); + return new FromClause<>(pastElements, elements); + } + + public final > FromClause, W> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (F first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromClause<>(pastElements, elements); + } + } +} From 18d73aa8261a5fd985c3e5826244cf607e27913d Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 03:28:26 +0300 Subject: [PATCH 22/27] What!? --- .../diht/students/elinrin/collectionquery/CollectionQuery.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java index e1f2edb..a4625f5 100644 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java @@ -17,6 +17,8 @@ import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; +/*nnn*/ + public class CollectionQuery { static final int TWENTY = 20; static final int HUNDRED = 100; From 1729b723653e16fc50bef351cdc09107b6a7a7dd Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 03:41:50 +0300 Subject: [PATCH 23/27] arrrrr --- .../collectionquery/CollectionQuery.java | 34 --- .../collectionquery/impl/UnionStmt.java | 2 +- .../elinrin/miniorm/ClassConverter.java | 0 .../elinrin/miniorm/DatabaseService.java | 0 .../diht/students/elinrin/miniorm/User.java | 0 .../elinrin/miniorm/annotations/Column.java | 0 .../miniorm/annotations/PrimaryKey.java | 0 .../elinrin/miniorm/annotations/Table.java | 0 .../miniorm/exception/HandlerOfException.java | 0 .../elinrin/threads/BlockingQueue.java | 0 .../students/elinrin/threads/Counter.java | 0 .../diht/students/elinrin/threads/Parse.java | 0 .../students/elinrin/threads/Rollcall.java | 0 .../threads/exception/HandlerOfException.java | 0 .../threads/exception/UserException.java | 0 .../twitterstream/InteractiveParse.java | 0 .../elinrin/twitterstream/PackageParse.java | 0 .../elinrin/twitterstream/PrintTweet.java | 0 .../elinrin/twitterstream/RunTwitter.java | 0 .../twitterstream/TwitterProvider.java | 0 .../twitterstream/commands/Commands.java | 0 .../twitterstream/commands/ExitCommand.java | 0 .../twitterstream/commands/HelpCommand.java | 0 .../twitterstream/commands/HideCommand.java | 0 .../twitterstream/commands/LimitCommand.java | 0 .../twitterstream/commands/PlaceCommand.java | 0 .../twitterstream/commands/QueryCommand.java | 0 .../twitterstream/commands/StreamCommand.java | 0 .../exception/HandlerOfException.java | 0 .../elinrin/collectionquery/Aggregates.java | 27 -- .../collectionquery/CollectionQuery.java | 249 --------------- .../elinrin/collectionquery/Conditions.java | 14 - .../collectionquery/OrderByConditions.java | 16 - .../elinrin/collectionquery/Sources.java | 13 - .../aggregatesImpl/Aggregator.java | 9 - .../collectionquery/aggregatesImpl/Avg.java | 26 -- .../collectionquery/aggregatesImpl/Count.java | 29 -- .../collectionquery/aggregatesImpl/Max.java | 31 -- .../collectionquery/aggregatesImpl/Min.java | 31 -- .../collectionquery/impl/FromStmt.java | 92 ------ .../collectionquery/impl/SelectStmt.java | 284 ------------------ .../elinrin/collectionquery/impl/Tuple.java | 30 -- .../collectionquery/impl/UnionStmt.java | 122 -------- .../collectionquery/ConditionsTest.java | 6 +- 44 files changed, 4 insertions(+), 1011 deletions(-) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/User.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/Counter.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/Parse.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java (100%) rename projects/elinrin/src/{main => }/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java (100%) delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java delete mode 100644 projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java index a4625f5..6c7d32d 100644 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java @@ -47,34 +47,6 @@ public static void main(final String[] args) throws InvocationTargetException, N .execute(); statistics.forEach(System.out::print); - /*List ex = new ArrayList<>(); - ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); - ex.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); - ex.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); - ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "495")); - ex.sort(asc(Student::getGroup)); - System.out.println(ex);*/ - - /*Iterable statistics = - from(list( - student("ivanov", LocalDate.parse("1986-08-06"), "494"), - student("zvereva", LocalDate.parse("1986-08-06"), "494"), - student("zuev", LocalDate.parse("1976-08-06"), "494"), - student("petrov", LocalDate.parse("1986-08-06"), "495"), - student("sidorov", LocalDate.parse("1986-08-06"), "495"), - student("petrov", LocalDate.parse("1986-08-06"), "495"), - student("garkavyy", LocalDate.parse("1986-08-06"), "495"), - student("ivanov", LocalDate.parse("1989-08-06"), "494"))) - .select(Student.class, Student::getName, Student::getGroup) - .union() - .from(list(student("ivanov", LocalDate.parse("1986-08-06"), "494"), - student("zvereva", LocalDate.parse("1986-08-06"), "494"), - student("ivanov", LocalDate.parse("1986-08-06"), "494"))) - .select(Student.class, Student::getName, Student::getGroup) - .execute();*/ - //Tuple a = new Tuple("1", "2"); - //System.out.println(a.getFirst().getClass()); - //System.out.println(a.getClass()); Iterable> mentorsByStudent = from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), @@ -108,12 +80,6 @@ public final String getName() { return name; } - /*public Student(String group) { - this.name = null; - this.dateOfBith = null; - this.group = group; - }*/ - public Student(final String gottenName, final LocalDate gottenDateOfBith, final String gottenGroup) { name = gottenName; dateOfBith = gottenDateOfBith; diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java index 1af1548..018f185 100644 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java @@ -31,7 +31,7 @@ public final FromClause from(final Iterable elements) { if (isTuple) { return new FromClause<>(pastElements, elements); } else { - return new FromClause<>(pastElements, /*(Iterable)*/ elements); + return new FromClause<>(pastElements, elements); } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/User.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/User.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Counter.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Counter.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Parse.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Parse.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java rename to projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java deleted file mode 100644 index c590518..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Avg; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Count; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Max; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Min; - -import java.util.function.Function; - -public class Aggregates { - public static Function max(final Function expression) { - return new Max<>(expression); - } - - public static > Function min(final Function expression) { - return new Min<>(expression); - } - - public static Function count(final Function expression) { - return new Count<>(expression); - } - - public static Function avg(final Function expression) { - return new Avg<>(expression); - } - -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java deleted file mode 100644 index 2e9b133..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java +++ /dev/null @@ -1,249 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import ru.mipt.diht.students.elinrin.collectionquery.impl.Tuple; - -import java.lang.reflect.InvocationTargetException; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Objects; - -import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.avg; -import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.count; -import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; -import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; -import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.asc; -import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.desc; -import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; -import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; - -public class CollectionQuery { - static final int TWENTY = 20; - static final int HUNDRED = 100; - /** - * Make this code work! - * - * @param args - */ - public static void main(final String[] args) throws InvocationTargetException, NoSuchMethodException, - InstantiationException, IllegalAccessException { - Iterable statistics = - from(list( - student("ivanov", LocalDate.parse("1986-08-06"), "496"), - student("ivanov", LocalDate.parse("1986-08-06"), "496"))) - .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age)) - .where(rlike(Student::getName, ".*ov").and(s -> s.age() > TWENTY)) - .groupBy(Student::getName) - .having(s -> s.getCount() > 0) - .orderBy(asc(Statistics::getGroup), desc(count(Statistics::getGroup))) - .limit(HUNDRED) - .union() - .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"))) - .selectDistinct(Statistics.class, s -> "all", - count(Student::getDateOfBith), avg(Student::age)) - .groupBy(Student::getGroup) - .execute(); - statistics.forEach(System.out::print); - - /*List ex = new ArrayList<>(); - ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); - ex.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); - ex.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); - ex.add(student("ivanov", LocalDate.parse("1986-08-06"), "495")); - ex.sort(asc(Student::getGroup)); - System.out.println(ex);*/ - - /*Iterable statistics = - from(list( - student("ivanov", LocalDate.parse("1986-08-06"), "494"), - student("zvereva", LocalDate.parse("1986-08-06"), "494"), - student("zuev", LocalDate.parse("1976-08-06"), "494"), - student("petrov", LocalDate.parse("1986-08-06"), "495"), - student("sidorov", LocalDate.parse("1986-08-06"), "495"), - student("petrov", LocalDate.parse("1986-08-06"), "495"), - student("garkavyy", LocalDate.parse("1986-08-06"), "495"), - student("ivanov", LocalDate.parse("1989-08-06"), "494"))) - .select(Student.class, Student::getName, Student::getGroup) - .union() - .from(list(student("ivanov", LocalDate.parse("1986-08-06"), "494"), - student("zvereva", LocalDate.parse("1986-08-06"), "494"), - student("ivanov", LocalDate.parse("1986-08-06"), "494"))) - .select(Student.class, Student::getName, Student::getGroup) - .execute();*/ - //Tuple a = new Tuple("1", "2"); - //System.out.println(a.getFirst().getClass()); - //System.out.println(a.getClass()); - - Iterable> mentorsByStudent = - from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), - student("sidorov", LocalDate.parse("1986-08-06"), "497"), - student("vasilev", LocalDate.parse("1986-08-06"), "496"), - student("petrov", LocalDate.parse("1986-08-06"), "497"))) - .join(list(Group.group("497", "mr.solovev"))) - .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup())) - .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) - .where(s -> Objects.equals(s.getFirst().getName(), "sidorov")) - .union() - .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), - student("sidorov", LocalDate.parse("1986-08-06"), "497"), - student("vasilev", LocalDate.parse("1986-08-06"), "496"), - student("petrov", LocalDate.parse("1986-08-06"), "497"))) - .join(list(Group.group("496", "mr.ilanov"))) - .on(s -> s.getGroup(), f -> f.getGroup()) - .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) - .execute(); - mentorsByStudent.forEach(System.out::print); - } - - public static class Student { - private final String name; - - private final LocalDate dateOfBith; - - private final String group; - - public final String getName() { - return name; - } - - /*public Student(String group) { - this.name = null; - this.dateOfBith = null; - this.group = group; - }*/ - - public Student(final String name, final LocalDate dateOfBith, final String group) { - this.name = name; - this.dateOfBith = dateOfBith; - this.group = group; - } - - public Student(final String name, final String group) { - this.name = name; - this.dateOfBith = null; - this.group = group; - } - - public final LocalDate getDateOfBith() { - return dateOfBith; - } - - public final String getGroup() { - return group; - } - - public final Double age() { - return (double) ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now()); - } - - public static Student student(final String name, final LocalDate dateOfBith, final String group) { - return new Student(name, dateOfBith, group); - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Student{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (name != null) { - result.append(", name=").append(name); - } - if (dateOfBith != null) { - result.append(", age=").append(dateOfBith); - } - result.append("}\n"); - return result.toString(); - } - } - - public static class Group { - private final String group; - private final String mentor; - - public Group(final String group, final String mentor) { - this.group = group; - this.mentor = mentor; - } - - public final String getGroup() { - return group; - } - - public final String getMentor() { - return mentor; - } - - public static Group group(final String ggroup, final String mmentor) { - return new Group(ggroup, mmentor); - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Student{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (mentor != null) { - result.append(", name=").append(mentor); - } - result.append("}\n"); - return result.toString(); - } - } - - - public static class Statistics { - - private final String group; - private final Integer count; - private final Double age; - - public final String getGroup() { - return group; - } - - public final Integer getCount() { - return count; - } - - public final Double getAge() { - return age; - } - - public Statistics(final String group, final Integer count) { - this.group = group; - this.count = count; - this.age = null; - } - - public Statistics(final String group, final Integer count, final Double age) { - this.group = group; - this.count = count; - this.age = age; - } - - public Statistics(final String group) { - this.group = group; - this.count = null; - this.age = null; - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Statistics{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (count != null) { - result.append(", count=").append(count); - } - if (age != null) { - result.append(", age=").append(age); - } - result.append("}\n"); - return result.toString(); - } - } - -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java deleted file mode 100644 index 53b0b54..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import java.util.function.Function; -import java.util.function.Predicate; - -public class Conditions { - public static Predicate rlike(final Function expression, final String regexp) { - return element -> expression.apply(element).matches(regexp); - } - - public static Predicate like(final Function expression, final String pattern) { - throw new UnsupportedOperationException(); - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java deleted file mode 100644 index 0b61963..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import java.util.Comparator; -import java.util.function.Function; - -public final class OrderByConditions { - - public static > Comparator asc(final Function expression) { - return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2)); - } - - public static > Comparator desc(final Function expression) { - return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1)); - } - -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java deleted file mode 100644 index e5bd621..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - - -import java.util.Arrays; -import java.util.List; - -public class Sources { - - @SafeVarargs - public static List list(final T... items) { - return Arrays.asList(items); - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java deleted file mode 100644 index c5fc669..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - - -public interface Aggregator extends Function { - C apply(List elements); -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java deleted file mode 100644 index 1ecd903..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Avg implements Aggregator { - - private Function function; - public Avg(final Function expression) { - this.function = expression; - } - - @Override - public final Double apply(final List elements) { - Double result = 0.0; - for (T element : elements) { - result += (Double) function.apply(element); - } - return result / elements.size(); - } - - @Override - public final Double apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java deleted file mode 100644 index 785c70b..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Function; - -public class Count implements Aggregator { - - private Function function; - public Count(final Function expression) { - this.function = expression; - } - - @Override - public final Integer apply(final List elements) { - Set distincted = new HashSet<>(); - for (T element : elements) { - if (!distincted.contains(function.apply(element))) { - distincted.add(function.apply(element)); - } - } - return distincted.size(); - } - @Override - public final Integer apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java deleted file mode 100644 index 4d594f7..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Max> implements Aggregator { - - private Function function; - public Max(final Function expression) { - this.function = expression; - } - - @Override - public final R apply(final List elements) { - if (elements.isEmpty()) { - return null; - } - T result = elements.get(0); - for (T element : elements) { - if (function.apply(result).compareTo(function.apply(element)) < 0) { - result = element; - } - } - return function.apply(result); - } - - @Override - public final R apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java deleted file mode 100644 index 655fbbf..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Min> implements Aggregator { - - private Function function; - public Min(final Function expression) { - this.function = expression; - } - - @Override - public final R apply(final List elements) { - if (elements.isEmpty()) { - return null; - } - T result = elements.get(0); - for (T element : elements) { - if (function.apply(result).compareTo(function.apply(element)) > 0) { - result = element; - } - } - return function.apply(result); - } - - @Override - public final R apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java deleted file mode 100644 index fae6f13..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java +++ /dev/null @@ -1,92 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class FromStmt { - private List elements = new ArrayList<>(); - - public final List getElements() { - return elements; - } - - public FromStmt(final Iterable iterable) { - for (T curr : iterable) { - elements.add(curr); - } - } - - public static FromStmt from(final Iterable iterable) { - return new FromStmt<>(iterable); - } - - @SafeVarargs - public final SelectStmt select(final Class returnClass, final Function... functions) { - return new SelectStmt<>(elements, returnClass, false, functions); - } - - @SafeVarargs - public final SelectStmt selectDistinct(final Class returnClass, - final Function... functions) { - return new SelectStmt<>(elements, returnClass, true, functions); - } - - public final SelectStmt> select(final Function first, - final Function second) { - return new SelectStmt<>(elements, false, first, second); - } - - public final JoinClause join(final Iterable iterable) { - return new JoinClause<>(elements, iterable); - } - - public class JoinClause { - - private List firstElements = new ArrayList<>(); - private List secondElements = new ArrayList<>(); - private List> elements = new ArrayList<>(); - - public JoinClause(final List firstElements, final Iterable secondElements) { - this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); - for (J curr : secondElements) { - this.secondElements.add(curr); - } - } - - public final FromStmt> on(final BiPredicate condition) { - for (S first : firstElements) { - for (J second : secondElements) { - if (condition.test(first, second)) { - elements.add(new Tuple<>(first, second)); - } - } - } - return new FromStmt<>(elements); - } - - public final > FromStmt> on( - final Function leftKey, - final Function rightKey) { - HashMap> map = new HashMap<>(); - for (J element : secondElements) { - K key = rightKey.apply(element); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<>()); - } - map.get(key).add(element); - } - for (S first : firstElements) { - K key = leftKey.apply(first); - if (map.containsKey(key)) { - List second = map.get(key); - second.forEach(s -> elements.add(new Tuple<>(first, s))); - } - } - return new FromStmt<>(elements); - } - } -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java deleted file mode 100644 index 98af9cc..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java +++ /dev/null @@ -1,284 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import javafx.util.Pair; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; - -import java.lang.reflect.InvocationTargetException; -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; - -public class SelectStmt { - - public final boolean isDistinct() { - return isDistinct; - } - - public final Function[] getFunctions() { - return functions; - } - - public final Class getReturnClass() { - return returnClass; - } - - public final int getNumberOfObjects() { - return numberOfObjects; - } - - public final boolean isUnion() { - return isUnion; - } - - public final List getElements() { - return elements; - } - - private boolean isDistinct; - private Class returnClass; - private Function[] functions; - private List elements; - - private List pastElements; - - private Predicate whereCondition; - private Comparator[] comparators; - private Predicate havingCondition; - private int numberOfObjects; - private Function[] groupByConditions; - - private CQLComparator cqlComparator; - private boolean isUnion; - private boolean isJoin; - - @SafeVarargs - public SelectStmt(final List elements, final Class returnClass, final boolean isDistinct, - final Function... functions) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); - } - this.returnClass = returnClass; - this.isDistinct = isDistinct; - this.functions = functions; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = false; - } - - public SelectStmt(final List elements, final boolean isDistinct, final Function first, - final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); - } - this.returnClass = elements.get(0).getClass(); - this.isDistinct = isDistinct; - this.functions = new Function[]{first, second}; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = true; - } - - @SafeVarargs - public SelectStmt(final List pastElements, final List elements, final Class returnClass, - final boolean isDistinct, final Function... functions) { - this.elements = new ArrayList<>(); - for (T element : elements) { - this.elements.add(element); - } - this.returnClass = returnClass; - this.isDistinct = isDistinct; - this.functions = functions; - this.numberOfObjects = -1; - this.isUnion = true; - this.pastElements = pastElements; - } - - public SelectStmt(final List pastElements, final List elements, final boolean isDistinct, - final Function first, final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); - } - this.returnClass = elements.get(0).getClass(); - this.isDistinct = isDistinct; - this.functions = new Function[]{first, second}; - this.numberOfObjects = -1; - this.isUnion = true; - this.isJoin = true; - this.pastElements = pastElements; - } - - public final SelectStmt where(final Predicate predicate) { - this.whereCondition = predicate; - return this; - } - - @SafeVarargs - public final SelectStmt groupBy(final Function... expressions) { - this.groupByConditions = expressions; - return this; - } - - @SafeVarargs - public final SelectStmt orderBy(final Comparator... comparators) { - this.comparators = comparators; - this.cqlComparator = new CQLComparator(comparators); - return this; - } - - public final SelectStmt having(final Predicate condition) { - this.havingCondition = condition; - return this; - } - - public final SelectStmt limit(final int amount) { - this.numberOfObjects = amount; - return this; - } - - public final Iterable execute() throws NoSuchMethodException, IllegalAccessException, - InvocationTargetException, InstantiationException { - List result = new ArrayList<>(); - Object[] arguments = new Object[functions.length]; - Class[] returnClasses = new Class[functions.length]; - if (whereCondition != null) { - List filtered = new ArrayList<>(); - elements.stream().filter(whereCondition::test).forEach(filtered::add); - elements = filtered; - } - if (groupByConditions != null) { - Map mapped = new HashMap<>(); - String[] results = new String[groupByConditions.length]; - List> grouped = new ArrayList<>(); - elements.stream().forEach( - element -> { - for (int i = 0; i < groupByConditions.length; i++) { - results[i] = (String) groupByConditions[i].apply(element); - } - if (!mapped.containsKey(Objects.hash(results))) { - mapped.put(Objects.hash(results), mapped.size()); - } - grouped.add(new Pair(element, mapped.get(Objects.hash(results)))); - } - ); - List> groupedElements = new ArrayList<>(); - for (int i = 0; i < mapped.size(); i++) { - groupedElements.add(new ArrayList()); - } - - for (Pair element : grouped) { - groupedElements.get(element.getValue()).add(element.getKey()); - } - for (List group : groupedElements) { - for (int i = 0; i < functions.length; i++) { - if (functions[i] instanceof Aggregator) { - arguments[i] = ((Aggregator) functions[i]).apply(group); - } else { - arguments[i] = functions[i].apply(group.get(0)); - } - returnClasses[i] = arguments[i].getClass(); - } - if (isJoin) { - Tuple newElement = new Tuple(arguments[0], arguments[1]); - result.add((R) newElement); - } else { - R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); - result.add(newElement); - } - } - } else { - for (T element : this.elements) { - for (int i = 0; i < functions.length; i++) { - arguments[i] = functions[i].apply(element); - if (functions[i] instanceof Aggregator) { - List currArg = new ArrayList<>(); - currArg.add(element); - arguments[i] = ((Aggregator) functions[i]).apply(currArg); - } else { - arguments[i] = functions[i].apply(element); - } - returnClasses[i] = arguments[i].getClass(); - } - if (isJoin) { - Tuple newElement = new Tuple(arguments[0], arguments[1]); - result.add((R) newElement); - } else { - R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); - result.add(newElement); - } - } - } - if (havingCondition != null) { - List filtered = new ArrayList<>(); - result.stream().filter(havingCondition::test).forEach(filtered::add); - result = filtered; - } - if (isDistinct) { - Set hashes = new HashSet<>(); - List flags = new ArrayList<>(); - for (R element : result) { - if (!hashes.contains(element.toString().hashCode())) { - flags.add(1); - hashes.add(element.toString().hashCode()); - } else { - flags.add(0); - } - } - List distincted = new ArrayList<>(); - for (int i = 0; i < result.size(); i++) { - if (flags.get(i) == 1) { - distincted.add(result.get(i)); - } - } - result = distincted; - } - if (comparators != null) { - result.sort(cqlComparator); - } - if (numberOfObjects != -1) { - while (result.size() > numberOfObjects) { - result.remove(result.size() - 1); - } - } - if (isUnion) { - pastElements.addAll(result); - result = pastElements; - } - //System.out.println("Hello!"); - return result; - } - - public final UnionStmt union() throws InvocationTargetException, NoSuchMethodException, - InstantiationException, IllegalAccessException { - List result = (List) this.execute(); - if (isJoin) { - return new UnionStmt<>(result, true); - } else { - return new UnionStmt<>(result); - } - } - - public class CQLComparator implements Comparator { - private Comparator[] comparators; - @SafeVarargs - public CQLComparator(final Comparator... comparators) { - this.comparators = comparators; - } - - @Override - public final int compare(final K first, final K second) { - for (Comparator comparator : comparators) { - if (comparator.compare(first, second) != 0) { - return comparator.compare(first, second); - } - } - return 0; - } - } - -} diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java deleted file mode 100644 index 7022cfd..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - - -public class Tuple { - - private final F first; - private final S second; - - public Tuple(final F first, final S second) { - this.first = first; - this.second = second; - } - - public final F getFirst() { - return first; - } - - public final S getSecond() { - return second; - } - - @Override - public final String toString() { - return "Tuple{" - + "first=" + first - + ", second=" + second - + "}\n"; - } -} - diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java deleted file mode 100644 index 65813f0..0000000 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java +++ /dev/null @@ -1,122 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class UnionStmt { - - private List pastElements = new ArrayList<>(); - - private boolean isTuple; - - public UnionStmt(final Iterable iterable) { - for (R curr : iterable) { - pastElements.add(curr); - } - this.isTuple = false; - } - - public UnionStmt(final Iterable iterable, final boolean isTuple) { - for (R curr : iterable) { - pastElements.add(curr); - } - this.isTuple = true; - } - - public final FromClause from(final Iterable elements) { - if (isTuple) { - return new FromClause<>(pastElements, elements); - } else { - return new FromClause<>(pastElements, /*(Iterable)*/ elements); - } - } - - - public class FromClause { - private List pastElements = new ArrayList<>(); - - private List elements = new ArrayList<>(); - - public FromClause(final Iterable pastElements, final Iterable elements) { - for (Q curr : pastElements) { - this.pastElements.add(curr); - } - for (S curr : elements) { - this.elements.add(curr); - } - } - @SafeVarargs - public final SelectStmt select(final Class returnClass, final Function... functions) { - return new SelectStmt<>(pastElements, elements, returnClass, false, functions); - } - - public final SelectStmt> select(final Function first, final Function second) { - return new SelectStmt<>((List>) pastElements, elements, false, first, second); - } - - @SafeVarargs - public final SelectStmt selectDistinct(final Class returnClass, final Function... functions) { - return new SelectStmt<>(pastElements, elements, returnClass, true, functions); - } - - public final JoinClause join(final Iterable iterable) { - return new JoinClause<>(pastElements, elements, iterable); - } - } - - - public class JoinClause { - - private List firstElements = new ArrayList<>(); - private List secondElements = new ArrayList<>(); - private List pastElements = new ArrayList<>(); - private List> elements = new ArrayList<>(); - - public JoinClause(final List pastElements, final List firstElements, final Iterable secondElements) { - this.pastElements.addAll(pastElements.stream().collect(Collectors.toList())); - this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); - for (J curr : secondElements) { - this.secondElements.add(curr); - } - //secondElements.forEach(System.out::print); - } - - public final FromClause, W> on(final BiPredicate condition) { - for (F first : firstElements) { - for (J second : secondElements) { - if (condition.test(first, second)) { - elements.add(new Tuple<>(first, second)); - } - } - } - //System.out.println(secondElements.get(0)); - //System.out.println(elements.get(0)); - return new FromClause<>(pastElements, elements); - } - - public final > FromClause, W> on( - final Function leftKey, - final Function rightKey) { - HashMap> map = new HashMap<>(); - for (J element : secondElements) { - K key = rightKey.apply(element); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<>()); - } - map.get(key).add(element); - } - for (F first : firstElements) { - K key = leftKey.apply(first); - if (map.containsKey(key)) { - List second = map.get(key); - second.forEach(s -> elements.add(new Tuple<>(first, s))); - } - } - return new FromClause<>(pastElements, elements); - } - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java index b165234..acd4bce 100644 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java @@ -24,9 +24,9 @@ public void testRlike() throws Exception { exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); exampleList.add(student("mogilev", LocalDate.parse("1986-08-06"), "495")); - assertEquals(rlike(function, ".*ov").test(exampleList.get(0)), false); - assertEquals(rlike(function, ".*ov").test(exampleList.get(1)), false); - assertEquals(rlike(function, ".*ov").test(exampleList.get(2)), true); + assertEquals(rlike(function, ".*ev").test(exampleList.get(0)), false); + assertEquals(rlike(function, ".*ev").test(exampleList.get(1)), false); + assertEquals(rlike(function, ".*ev").test(exampleList.get(2)), true); } @Test(expected = UnsupportedOperationException.class) From 031574e2081e989c3ba6e1c9e132c333e237eb0b Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 03:50:46 +0300 Subject: [PATCH 24/27] -_- --- .../elinrin/collectionquery/Aggregates.java | 27 -- .../collectionquery/CollectionQuery.java | 217 ------------- .../elinrin/collectionquery/Conditions.java | 14 - .../collectionquery/OrderByConditions.java | 16 - .../elinrin/collectionquery/Sources.java | 12 - .../aggregatesImpl/Aggregator.java | 9 - .../collectionquery/aggregatesImpl/Avg.java | 26 -- .../collectionquery/aggregatesImpl/Count.java | 29 -- .../collectionquery/aggregatesImpl/Max.java | 31 -- .../collectionquery/aggregatesImpl/Min.java | 31 -- .../collectionquery/impl/FromStmt.java | 92 ------ .../collectionquery/impl/SelectStmt.java | 284 ------------------ .../elinrin/collectionquery/impl/Tuple.java | 30 -- .../collectionquery/impl/UnionStmt.java | 123 -------- .../collectionquery/AggregatesTest.java | 72 ----- .../collectionquery/ConditionsTest.java | 36 --- .../OrderByConditionsTest.java | 40 --- .../elinrin/collectionquery/SourcesTest.java | 33 -- .../collectionquery/impl/FromStmtTest.java | 95 ------ .../collectionquery/impl/SelectStmtTest.java | 195 ------------ 20 files changed, 1412 deletions(-) delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java delete mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java delete mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java deleted file mode 100644 index c590518..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Avg; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Count; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Max; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Min; - -import java.util.function.Function; - -public class Aggregates { - public static Function max(final Function expression) { - return new Max<>(expression); - } - - public static > Function min(final Function expression) { - return new Min<>(expression); - } - - public static Function count(final Function expression) { - return new Count<>(expression); - } - - public static Function avg(final Function expression) { - return new Avg<>(expression); - } - -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java deleted file mode 100644 index 6c7d32d..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java +++ /dev/null @@ -1,217 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import ru.mipt.diht.students.elinrin.collectionquery.impl.Tuple; - -import java.lang.reflect.InvocationTargetException; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Objects; - -import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.avg; -import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.count; -import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; -import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; -import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.asc; -import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.desc; -import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; -import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; - -/*nnn*/ - -public class CollectionQuery { - static final int TWENTY = 20; - static final int HUNDRED = 100; - /** - * Make this code work! - * - * @param args - */ - public static void main(final String[] args) throws InvocationTargetException, NoSuchMethodException, - InstantiationException, IllegalAccessException { - Iterable statistics = - from(list( - student("ivanov", LocalDate.parse("1986-08-06"), "496"), - student("ivanov", LocalDate.parse("1986-08-06"), "496"))) - .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age)) - .where(rlike(Student::getName, ".*ov").and(s -> s.age() > TWENTY)) - .groupBy(Student::getName) - .having(s -> s.getCount() > 0) - .orderBy(asc(Statistics::getGroup), desc(count(Statistics::getGroup))) - .limit(HUNDRED) - .union() - .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"))) - .selectDistinct(Statistics.class, s -> "all", - count(Student::getDateOfBith), avg(Student::age)) - .groupBy(Student::getGroup) - .execute(); - statistics.forEach(System.out::print); - - - Iterable> mentorsByStudent = - from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), - student("sidorov", LocalDate.parse("1986-08-06"), "497"), - student("vasilev", LocalDate.parse("1986-08-06"), "496"), - student("petrov", LocalDate.parse("1986-08-06"), "497"))) - .join(list(Group.group("497", "mr.solovev"))) - .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup())) - .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) - .where(s -> Objects.equals(s.getFirst().getName(), "sidorov")) - .union() - .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), - student("sidorov", LocalDate.parse("1986-08-06"), "497"), - student("vasilev", LocalDate.parse("1986-08-06"), "496"), - student("petrov", LocalDate.parse("1986-08-06"), "497"))) - .join(list(Group.group("496", "mr.ilanov"))) - .on(s -> s.getGroup(), f -> f.getGroup()) - .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) - .execute(); - mentorsByStudent.forEach(System.out::print); - } - - public static class Student { - private final String name; - - private final LocalDate dateOfBith; - - private final String group; - - public final String getName() { - return name; - } - - public Student(final String gottenName, final LocalDate gottenDateOfBith, final String gottenGroup) { - name = gottenName; - dateOfBith = gottenDateOfBith; - group = gottenGroup; - } - - public Student(final String gottenName, final String gottenGroup) { - name = gottenName; - dateOfBith = null; - group = gottenGroup; - } - - public final LocalDate getDateOfBith() { - return dateOfBith; - } - - public final String getGroup() { - return group; - } - - public final Double age() { - return (double) ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now()); - } - - public static Student student(final String name, final LocalDate dateOfBith, final String group) { - return new Student(name, dateOfBith, group); - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Student{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (name != null) { - result.append(", name=").append(name); - } - if (dateOfBith != null) { - result.append(", age=").append(dateOfBith); - } - result.append("}\n"); - return result.toString(); - } - } - - public static class Group { - private final String group; - private final String mentor; - - public Group(final String gottenGroup, final String gottenMentor) { - group = gottenGroup; - mentor = gottenMentor; - } - - public final String getGroup() { - return group; - } - - public final String getMentor() { - return mentor; - } - - public static Group group(final String ggroup, final String mmentor) { - return new Group(ggroup, mmentor); - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Student{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (mentor != null) { - result.append(", name=").append(mentor); - } - result.append("}\n"); - return result.toString(); - } - } - - - public static class Statistics { - - private final String group; - private final Integer count; - private final Double age; - - public final String getGroup() { - return group; - } - - public final Integer getCount() { - return count; - } - - public final Double getAge() { - return age; - } - - public Statistics(final String gottenGroup, final Integer gottenCount) { - group = gottenGroup; - count = gottenCount; - age = null; - } - - public Statistics(final String gottenGroup, final Integer gottenCount, final Double gottenAge) { - group = gottenGroup; - count = gottenCount; - age = gottenAge; - } - - public Statistics(final String gottenGroup) { - group = gottenGroup; - count = null; - age = null; - } - - @Override - public final String toString() { - StringBuilder result = new StringBuilder().append("Statistics{"); - if (group != null) { - result.append("group='").append(group).append('\''); - } - if (count != null) { - result.append(", count=").append(count); - } - if (age != null) { - result.append(", age=").append(age); - } - result.append("}\n"); - return result.toString(); - } - } - -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java deleted file mode 100644 index 53b0b54..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import java.util.function.Function; -import java.util.function.Predicate; - -public class Conditions { - public static Predicate rlike(final Function expression, final String regexp) { - return element -> expression.apply(element).matches(regexp); - } - - public static Predicate like(final Function expression, final String pattern) { - throw new UnsupportedOperationException(); - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java deleted file mode 100644 index 0b61963..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import java.util.Comparator; -import java.util.function.Function; - -public final class OrderByConditions { - - public static > Comparator asc(final Function expression) { - return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2)); - } - - public static > Comparator desc(final Function expression) { - return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1)); - } - -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java deleted file mode 100644 index 9f740d9..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import java.util.Arrays; -import java.util.List; - -public class Sources { - - @SafeVarargs - public static List list(final T... items) { - return Arrays.asList(items); - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java deleted file mode 100644 index c5fc669..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - - -public interface Aggregator extends Function { - C apply(List elements); -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java deleted file mode 100644 index d5d63ca..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Avg implements Aggregator { - - private Function function; - public Avg(final Function expression) { - function = expression; - } - - @Override - public final Double apply(final List elements) { - Double result = 0.0; - for (T element : elements) { - result += (Double) function.apply(element); - } - return result / elements.size(); - } - - @Override - public final Double apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java deleted file mode 100644 index 1053414..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Function; - -public class Count implements Aggregator { - - private Function function; - public Count(final Function expression) { - function = expression; - } - - @Override - public final Integer apply(final List elements) { - Set distincted = new HashSet<>(); - for (T element : elements) { - if (!distincted.contains(function.apply(element))) { - distincted.add(function.apply(element)); - } - } - return distincted.size(); - } - @Override - public final Integer apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java deleted file mode 100644 index 0f40bb5..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Max> implements Aggregator { - - private Function function; - public Max(final Function expression) { - function = expression; - } - - @Override - public final R apply(final List elements) { - if (elements.isEmpty()) { - return null; - } - T result = elements.get(0); - for (T element : elements) { - if (function.apply(result).compareTo(function.apply(element)) < 0) { - result = element; - } - } - return function.apply(result); - } - - @Override - public final R apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java deleted file mode 100644 index fa95a98..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; - -import java.util.List; -import java.util.function.Function; - -public class Min> implements Aggregator { - - private Function function; - public Min(final Function expression) { - function = expression; - } - - @Override - public final R apply(final List elements) { - if (elements.isEmpty()) { - return null; - } - T result = elements.get(0); - for (T element : elements) { - if (function.apply(result).compareTo(function.apply(element)) > 0) { - result = element; - } - } - return function.apply(result); - } - - @Override - public final R apply(final T t) { - return null; - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java deleted file mode 100644 index fae6f13..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java +++ /dev/null @@ -1,92 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class FromStmt { - private List elements = new ArrayList<>(); - - public final List getElements() { - return elements; - } - - public FromStmt(final Iterable iterable) { - for (T curr : iterable) { - elements.add(curr); - } - } - - public static FromStmt from(final Iterable iterable) { - return new FromStmt<>(iterable); - } - - @SafeVarargs - public final SelectStmt select(final Class returnClass, final Function... functions) { - return new SelectStmt<>(elements, returnClass, false, functions); - } - - @SafeVarargs - public final SelectStmt selectDistinct(final Class returnClass, - final Function... functions) { - return new SelectStmt<>(elements, returnClass, true, functions); - } - - public final SelectStmt> select(final Function first, - final Function second) { - return new SelectStmt<>(elements, false, first, second); - } - - public final JoinClause join(final Iterable iterable) { - return new JoinClause<>(elements, iterable); - } - - public class JoinClause { - - private List firstElements = new ArrayList<>(); - private List secondElements = new ArrayList<>(); - private List> elements = new ArrayList<>(); - - public JoinClause(final List firstElements, final Iterable secondElements) { - this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); - for (J curr : secondElements) { - this.secondElements.add(curr); - } - } - - public final FromStmt> on(final BiPredicate condition) { - for (S first : firstElements) { - for (J second : secondElements) { - if (condition.test(first, second)) { - elements.add(new Tuple<>(first, second)); - } - } - } - return new FromStmt<>(elements); - } - - public final > FromStmt> on( - final Function leftKey, - final Function rightKey) { - HashMap> map = new HashMap<>(); - for (J element : secondElements) { - K key = rightKey.apply(element); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<>()); - } - map.get(key).add(element); - } - for (S first : firstElements) { - K key = leftKey.apply(first); - if (map.containsKey(key)) { - List second = map.get(key); - second.forEach(s -> elements.add(new Tuple<>(first, s))); - } - } - return new FromStmt<>(elements); - } - } -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java deleted file mode 100644 index a8245a4..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java +++ /dev/null @@ -1,284 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import javafx.util.Pair; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; - -import java.lang.reflect.InvocationTargetException; -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; - -public class SelectStmt { - - public final boolean isDistinct() { - return isDistinct; - } - - public final Function[] getFunctions() { - return functions; - } - - public final Class getReturnClass() { - return returnClass; - } - - public final int getNumberOfObjects() { - return numberOfObjects; - } - - public final boolean isUnion() { - return isUnion; - } - - public final List getElements() { - return elements; - } - - private boolean isDistinct; - private Class returnClass; - private Function[] functions; - private List elements; - - private List pastElements; - - private Predicate whereCondition; - private Comparator[] comparators; - private Predicate havingCondition; - private int numberOfObjects; - private Function[] groupByConditions; - - private CQLComparator cqlComparator; - private boolean isUnion; - private boolean isJoin; - - @SafeVarargs - public SelectStmt(final List gottenElements, final Class gottenReturnClass, final boolean isDistinct, - final Function... functions) { - this.elements = new ArrayList<>(); - for (T element : gottenElements) { - //System.out.println(element.toString()); - elements.add(element); - } - returnClass = gottenReturnClass; - this.isDistinct = isDistinct; - this.functions = functions; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = false; - } - - public SelectStmt(final List elements, final boolean isDistinct, final Function first, - final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); - } - this.returnClass = elements.get(0).getClass(); - this.isDistinct = isDistinct; - this.functions = new Function[]{first, second}; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = true; - } - - @SafeVarargs - public SelectStmt(final List gottenPastElements, final List gottenElements, final Class gottenReturnClass, - final boolean gottenIsDistinct, final Function... gottenFunctions) { - elements = new ArrayList<>(); - for (T element : gottenElements) { - elements.add(element); - } - returnClass = gottenReturnClass; - isDistinct = gottenIsDistinct; - functions = gottenFunctions; - numberOfObjects = -1; - isUnion = true; - pastElements = gottenPastElements; - } - - public SelectStmt(final List gottenPastElements, final List elements, final boolean gottenIsDistinct, - final Function first, final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); - } - this.returnClass = elements.get(0).getClass(); - isDistinct = gottenIsDistinct; - functions = new Function[]{first, second}; - numberOfObjects = -1; - isUnion = true; - isJoin = true; - pastElements = gottenPastElements; - } - - public final SelectStmt where(final Predicate predicate) { - whereCondition = predicate; - return this; - } - - @SafeVarargs - public final SelectStmt groupBy(final Function... expressions) { - groupByConditions = expressions; - return this; - } - - @SafeVarargs - public final SelectStmt orderBy(final Comparator... gottenComparators) { - comparators = gottenComparators; - cqlComparator = new CQLComparator(comparators); - return this; - } - - public final SelectStmt having(final Predicate condition) { - havingCondition = condition; - return this; - } - - public final SelectStmt limit(final int amount) { - numberOfObjects = amount; - return this; - } - - public final Iterable execute() throws NoSuchMethodException, IllegalAccessException, - InvocationTargetException, InstantiationException { - List result = new ArrayList<>(); - Object[] arguments = new Object[functions.length]; - Class[] returnClasses = new Class[functions.length]; - if (whereCondition != null) { - List filtered = new ArrayList<>(); - elements.stream().filter(whereCondition::test).forEach(filtered::add); - elements = filtered; - } - if (groupByConditions != null) { - Map mapped = new HashMap<>(); - String[] results = new String[groupByConditions.length]; - List> grouped = new ArrayList<>(); - elements.stream().forEach( - element -> { - for (int i = 0; i < groupByConditions.length; i++) { - results[i] = (String) groupByConditions[i].apply(element); - } - if (!mapped.containsKey(Objects.hash(results))) { - mapped.put(Objects.hash(results), mapped.size()); - } - grouped.add(new Pair(element, mapped.get(Objects.hash(results)))); - } - ); - List> groupedElements = new ArrayList<>(); - for (int i = 0; i < mapped.size(); i++) { - groupedElements.add(new ArrayList()); - } - - for (Pair element : grouped) { - groupedElements.get(element.getValue()).add(element.getKey()); - } - for (List group : groupedElements) { - for (int i = 0; i < functions.length; i++) { - if (functions[i] instanceof Aggregator) { - arguments[i] = ((Aggregator) functions[i]).apply(group); - } else { - arguments[i] = functions[i].apply(group.get(0)); - } - returnClasses[i] = arguments[i].getClass(); - } - if (isJoin) { - Tuple newElement = new Tuple(arguments[0], arguments[1]); - result.add((R) newElement); - } else { - R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); - result.add(newElement); - } - } - } else { - for (T element : this.elements) { - for (int i = 0; i < functions.length; i++) { - arguments[i] = functions[i].apply(element); - if (functions[i] instanceof Aggregator) { - List currArg = new ArrayList<>(); - currArg.add(element); - arguments[i] = ((Aggregator) functions[i]).apply(currArg); - } else { - arguments[i] = functions[i].apply(element); - } - returnClasses[i] = arguments[i].getClass(); - } - if (isJoin) { - Tuple newElement = new Tuple(arguments[0], arguments[1]); - result.add((R) newElement); - } else { - R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); - result.add(newElement); - } - } - } - if (havingCondition != null) { - List filtered = new ArrayList<>(); - result.stream().filter(havingCondition::test).forEach(filtered::add); - result = filtered; - } - if (isDistinct) { - Set hashes = new HashSet<>(); - List flags = new ArrayList<>(); - for (R element : result) { - if (!hashes.contains(element.toString().hashCode())) { - flags.add(1); - hashes.add(element.toString().hashCode()); - } else { - flags.add(0); - } - } - List distincted = new ArrayList<>(); - for (int i = 0; i < result.size(); i++) { - if (flags.get(i) == 1) { - distincted.add(result.get(i)); - } - } - result = distincted; - } - if (comparators != null) { - result.sort(cqlComparator); - } - if (numberOfObjects != -1) { - while (result.size() > numberOfObjects) { - result.remove(result.size() - 1); - } - } - if (isUnion) { - pastElements.addAll(result); - result = pastElements; - } - //System.out.println("Hello!"); - return result; - } - - public final UnionStmt union() throws InvocationTargetException, NoSuchMethodException, - InstantiationException, IllegalAccessException { - List result = (List) this.execute(); - if (isJoin) { - return new UnionStmt<>(result, true); - } else { - return new UnionStmt<>(result); - } - } - - public class CQLComparator implements Comparator { - private Comparator[] comparators; - @SafeVarargs - public CQLComparator(final Comparator... comparators) { - this.comparators = comparators; - } - - @Override - public final int compare(final K first, final K second) { - for (Comparator comparator : comparators) { - if (comparator.compare(first, second) != 0) { - return comparator.compare(first, second); - } - } - return 0; - } - } - -} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java deleted file mode 100644 index 56e9c08..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - - -public class Tuple { - - private final F first; - private final S second; - - public Tuple(final F first1, final S second2) { - first = first1; - second = second2; - } - - public final F getFirst() { - return first; - } - - public final S getSecond() { - return second; - } - - @Override - public final String toString() { - return "Tuple{" - + "first=" + first - + ", second=" + second - + "}\n"; - } -} - diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java deleted file mode 100644 index 018f185..0000000 --- a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java +++ /dev/null @@ -1,123 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class UnionStmt { - - private List pastElements = new ArrayList<>(); - - private boolean isTuple; - - public UnionStmt(final Iterable iterable) { - for (R curr : iterable) { - pastElements.add(curr); - } - isTuple = false; - } - - public UnionStmt(final Iterable iterable, final boolean gottenIsTuple) { - for (R curr : iterable) { - pastElements.add(curr); - } - isTuple = true; - } - - public final FromClause from(final Iterable elements) { - if (isTuple) { - return new FromClause<>(pastElements, elements); - } else { - return new FromClause<>(pastElements, elements); - } - } - - - public class FromClause { - private List pastElements = new ArrayList<>(); - - private List elements = new ArrayList<>(); - - public FromClause(final Iterable gottenPastElements, final Iterable gottenElements) { - for (Q curr : gottenPastElements) { - pastElements.add(curr); - } - for (S curr : gottenElements) { - elements.add(curr); - } - } - @SafeVarargs - public final SelectStmt select(final Class returnClass, final Function... functions) { - return new SelectStmt<>(pastElements, elements, returnClass, false, functions); - } - - public final SelectStmt> select(final Function first, final Function second) { - return new SelectStmt<>((List>) pastElements, elements, false, first, second); - } - - @SafeVarargs - public final SelectStmt selectDistinct(final Class returnClass, final Function... functions) { - return new SelectStmt<>(pastElements, elements, returnClass, true, functions); - } - - public final JoinClause join(final Iterable iterable) { - return new JoinClause<>(pastElements, elements, iterable); - } - } - - - public class JoinClause { - - private List firstElements = new ArrayList<>(); - private List secondElements = new ArrayList<>(); - private List pastElements = new ArrayList<>(); - private List> elements = new ArrayList<>(); - - public JoinClause(final List gottenPastElements, final List gottenFirstElements, - final Iterable gottenSecondElements) { - pastElements.addAll(gottenPastElements.stream().collect(Collectors.toList())); - firstElements.addAll(gottenFirstElements.stream().collect(Collectors.toList())); - for (J curr : gottenSecondElements) { - secondElements.add(curr); - } - //secondElements.forEach(System.out::print); - } - - public final FromClause, W> on(final BiPredicate condition) { - for (F first : firstElements) { - for (J second : secondElements) { - if (condition.test(first, second)) { - elements.add(new Tuple<>(first, second)); - } - } - } - //System.out.println(secondElements.get(0)); - //System.out.println(elements.get(0)); - return new FromClause<>(pastElements, elements); - } - - public final > FromClause, W> on( - final Function leftKey, - final Function rightKey) { - HashMap> map = new HashMap<>(); - for (J element : secondElements) { - K key = rightKey.apply(element); - if (!map.containsKey(key)) { - map.put(key, new ArrayList<>()); - } - map.get(key).add(element); - } - for (F first : firstElements) { - K key = leftKey.apply(first); - if (map.containsKey(key)) { - List second = map.get(key); - second.forEach(s -> elements.add(new Tuple<>(first, s))); - } - } - return new FromClause<>(pastElements, elements); - } - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java deleted file mode 100644 index e519cea..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import junit.framework.TestCase; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; -import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -@SuppressWarnings("unchecked") -@RunWith(MockitoJUnitRunner.class) -public class AggregatesTest extends TestCase { - - List exampleList, emptyExampleList; - Function functionAge; - Function functionName, functionGroup; - CollectionQuery.Student student; - - @Before - public void setUp() throws Exception { - exampleList = new ArrayList<>(); - emptyExampleList = new ArrayList<>(); - exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); - exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); - exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); - functionAge = CollectionQuery.Student::age; - functionName = CollectionQuery.Student::getName; - functionGroup = CollectionQuery.Student::getGroup; - student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); - } - - @Test - public void testMax() throws Exception { - assertEquals(((Aggregator) Aggregates.max(functionGroup)).apply(exampleList), "495"); - assertEquals(((Aggregator) Aggregates.max(functionName)).apply(exampleList), "sidorov"); - assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(exampleList), 19.0); - - assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(student), null); - assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(emptyExampleList), null); - } - - @Test - public void testMin() throws Exception { - assertEquals(((Aggregator) Aggregates.min(functionGroup)).apply(exampleList), "494"); - assertEquals(((Aggregator) Aggregates.min(functionName)).apply(exampleList), "ivanov"); - assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(exampleList), 18.0); - - assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(student), null); - assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(emptyExampleList), null); - } - - @Test - public void testCount() throws Exception { - assertEquals(((Aggregator) Aggregates.count(functionGroup)).apply(exampleList), 2); - assertEquals(((Aggregator) Aggregates.count(functionName)).apply(exampleList), 3); - assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(exampleList), 2); - - assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(student), null); - } - - @Test - public void testAvg() throws Exception { - assertEquals((Double)((Aggregator) Aggregates.avg(functionAge)).apply(exampleList), 18.666, 0.1); - - assertEquals(((Aggregator) Aggregates.avg(functionAge)).apply(student), null); - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java deleted file mode 100644 index acd4bce..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import junit.framework.TestCase; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; -import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; - -@RunWith(MockitoJUnitRunner.class) -public class ConditionsTest extends TestCase { - Function function = CollectionQuery.Student::getName; - - @Test - public void testRlike() throws Exception { - List exampleList = new ArrayList<>(); - exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); - exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); - exampleList.add(student("mogilev", LocalDate.parse("1986-08-06"), "495")); - - assertEquals(rlike(function, ".*ev").test(exampleList.get(0)), false); - assertEquals(rlike(function, ".*ev").test(exampleList.get(1)), false); - assertEquals(rlike(function, ".*ev").test(exampleList.get(2)), true); - } - - @Test(expected = UnsupportedOperationException.class) - public void testLike() throws Exception { - Conditions.like(function, "aaa"); - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java deleted file mode 100644 index 19b43e5..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import junit.framework.TestCase; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; - -@RunWith(MockitoJUnitRunner.class) -public class OrderByConditionsTest extends TestCase { - Function function = CollectionQuery.Student::getName; - - @Test - public void testAsc() throws Exception { - List exampleList = new ArrayList<>(); - exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); - exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "497")); - exampleList.add(student("vasilev", LocalDate.parse("1986-08-06"), "496")); - assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(2)) < 0); - assertTrue(OrderByConditions.asc(function).compare(exampleList.get(1), exampleList.get(0)) > 0); - assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); - } - - @Test - public void testDesc() throws Exception { - List exampleList = new ArrayList<>(); - exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); - exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); - exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); - assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(2)) > 0); - assertTrue(OrderByConditions.desc(function).compare(exampleList.get(1), exampleList.get(0)) < 0); - assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java deleted file mode 100644 index af5822e..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery; - -import junit.framework.TestCase; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; - -@RunWith(MockitoJUnitRunner.class) -public class SourcesTest extends TestCase { - - @Test - public void testList() throws Exception { - List exampleList = new ArrayList<>(); - exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); - exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); - exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); - - List resultList = Sources.list( - student("ivanov", LocalDate.parse("1986-08-06"), "496"), - student("petrov", LocalDate.parse("1986-08-06"), "495"), - student("sidorov", LocalDate.parse("1986-08-06"), "495")); - assertEquals(exampleList.size(), resultList.size()); - for (int i = 0; i < exampleList.size(); i++) { - assertEquals(exampleList.get(i).toString(), resultList.get(i).toString()); - } - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java deleted file mode 100644 index 16c73d1..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import junit.framework.TestCase; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; -import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -@SuppressWarnings("unchecked") -@RunWith(MockitoJUnitRunner.class) -public class FromStmtTest extends TestCase { - - List exampleList, emptyExampleList; - Function functionAge; - Function functionName, functionGroup; - CollectionQuery.Student student; - - @Before - public void setUp() throws Exception { - exampleList = new ArrayList<>(); - emptyExampleList = new ArrayList<>(); - exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); - exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); - exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); - functionAge = CollectionQuery.Student::age; - functionName = CollectionQuery.Student::getName; - functionGroup = CollectionQuery.Student::getGroup; - student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); - } - - @Test - public void testFrom() throws Exception { - FromStmt fromStmt = FromStmt.from(exampleList); - assertEquals(fromStmt.getElements().size(), exampleList.size()); - for (int i = 0; i < exampleList.size(); i++) { - assertEquals(fromStmt.getElements().get(i), exampleList.get(i)); - } - } - - @Test - public void testSelect() throws Exception { - SelectStmt select = FromStmt.from(exampleList) - .select(CollectionQuery.Student.class, CollectionQuery.Student::getName, - CollectionQuery.Student::getGroup); - assertEquals(select.getNumberOfObjects(), -1); - assertEquals(select.getReturnClass(), CollectionQuery.Student.class); - assertEquals(select.isDistinct(), false); - assertEquals(select.isUnion(), false); - Function[] functions = new Function[2]; - functions[0] = CollectionQuery.Student::getName; - functions[1] = CollectionQuery.Student::getGroup; - assertEquals(select.getFunctions().length, functions.length); - for (int i = 0; i < functions.length; i++) { - for (CollectionQuery.Student element : exampleList) { - assertEquals(functions[i].apply(element), - select.getFunctions()[i].apply(element)); - } - } - assertEquals(exampleList.size(), select.getElements().size()); - for (int i = 0; i < exampleList.size(); i++) { - assertEquals(exampleList.get(i), select.getElements().get(i)); - } - } - - @Test - public void testSelectDistinct() throws Exception { - SelectStmt select = FromStmt.from(exampleList) - .selectDistinct(CollectionQuery.Student.class, CollectionQuery.Student::getName, - CollectionQuery.Student::getGroup); - assertEquals(select.getNumberOfObjects(), -1); - assertEquals(select.getReturnClass(), CollectionQuery.Student.class); - assertEquals(select.isDistinct(), true); - assertEquals(select.isUnion(), false); - Function[] functions = new Function[2]; - functions[0] = CollectionQuery.Student::getName; - functions[1] = CollectionQuery.Student::getGroup; - assertEquals(select.getFunctions().length, functions.length); - for (int i = 0; i < functions.length; i++) { - for (CollectionQuery.Student element : exampleList) { - assertEquals(functions[i].apply(element), - select.getFunctions()[i].apply(element)); - } - } - assertEquals(exampleList.size(), select.getElements().size()); - for (int i = 0; i < exampleList.size(); i++) { - assertEquals(exampleList.get(i), select.getElements().get(i)); - } - } -} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java deleted file mode 100644 index 85fd304..0000000 --- a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java +++ /dev/null @@ -1,195 +0,0 @@ -package ru.mipt.diht.students.elinrin.collectionquery.impl; - -import junit.framework.TestCase; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; -import ru.mipt.diht.students.elinrin.collectionquery.Aggregates; -import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; -import ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.function.Function; - -@RunWith(MockitoJUnitRunner.class) -public class SelectStmtTest extends TestCase { - - List exampleList, emptyExampleList, distinctExampleList; - Function functionAge; - Function functionName, functionGroup; - CollectionQuery.Student student; - SelectStmt select, distinctSelect; - SelectStmt groupSelect; - - @Before - public void setUp() throws Exception { - exampleList = new ArrayList<>(); - emptyExampleList = new ArrayList<>(); - distinctExampleList = new ArrayList<>(); - exampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); - exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); - exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); - exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); - distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); - distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); - distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); - distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); - functionAge = CollectionQuery.Student::age; - functionName = CollectionQuery.Student::getName; - functionGroup = CollectionQuery.Student::getGroup; - student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); - select = FromStmt.from(exampleList).select(CollectionQuery.Student.class, CollectionQuery.Student::getName, - CollectionQuery.Student::getGroup); - distinctSelect = FromStmt.from(distinctExampleList).selectDistinct(CollectionQuery.Student.class, - CollectionQuery.Student::getName, CollectionQuery.Student::getGroup); - groupSelect = FromStmt.from(exampleList).select(CollectionQuery.Statistics.class, - CollectionQuery.Student::getGroup, Aggregates.count(CollectionQuery.Student::getName)); - } - - @Test - public void testWhere() throws Exception { - List result = (List) select - .where(s -> Objects.equals(s.getGroup(), "494")) - .execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testGroupBy() throws Exception { - List result = (List) groupSelect - .groupBy(CollectionQuery.Student::getGroup) - .execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Statistics("495", 3)); - resultList.add(new CollectionQuery.Statistics("494", 1)); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testOrderBy() throws Exception { - List result = (List) select - .orderBy(OrderByConditions.desc(CollectionQuery.Student::getGroup)) - .execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("petrov", "495")); - resultList.add(new CollectionQuery.Student("sidorov", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testHaving() throws Exception { - List result = (List) groupSelect - .groupBy(CollectionQuery.Student::getGroup) - .having(s -> Objects.equals(s.getGroup(), "494")) - .execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Statistics("494", 1)); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testLimit() throws Exception { - List result = (List) select - .limit(2) - .execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - - result = (List) select - .limit(5) - .execute(); - resultList.clear(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - resultList.add(new CollectionQuery.Student("petrov", "495")); - resultList.add(new CollectionQuery.Student("sidorov", "495")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testExecute() throws Exception { - List result = (List) select.execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - resultList.add(new CollectionQuery.Student("petrov", "495")); - resultList.add(new CollectionQuery.Student("sidorov", "495")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - - List resultWithAggr = (List) groupSelect.execute(); - List resultListWithAggr = new ArrayList<>(); - resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); - resultListWithAggr.add(new CollectionQuery.Statistics("494", 1)); - resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); - resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); - assertEquals(resultWithAggr.size(), resultListWithAggr.size()); - for (int i = 0; i < resultWithAggr.size(); i++) { - assertEquals(resultListWithAggr.get(i).toString(), resultWithAggr.get(i).toString()); - } - } - - @Test - public void testUnion() throws Exception { - List result = (List) select.union(). - from(exampleList). - select(CollectionQuery.Student.class, CollectionQuery.Student::getName, - CollectionQuery.Student::getGroup). - execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - resultList.add(new CollectionQuery.Student("petrov", "495")); - resultList.add(new CollectionQuery.Student("sidorov", "495")); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - resultList.add(new CollectionQuery.Student("petrov", "495")); - resultList.add(new CollectionQuery.Student("sidorov", "495")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } - - @Test - public void testIsDistinct() throws Exception { - List result = (List) distinctSelect.execute(); - List resultList = new ArrayList<>(); - resultList.add(new CollectionQuery.Student("garkaviy", "495")); - resultList.add(new CollectionQuery.Student("ivanov", "494")); - assertEquals(resultList.size(), result.size()); - for (int i = 0; i < resultList.size(); i++) { - assertEquals(resultList.get(i).toString(), result.get(i).toString()); - } - } -} From da04a7279bd4a4b3cacbc529a572ebb061f1c662 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 03:51:20 +0300 Subject: [PATCH 25/27] !!! --- .../elinrin/collectionquery/Aggregates.java | 27 ++ .../collectionquery/CollectionQuery.java | 217 +++++++++++++ .../elinrin/collectionquery/Conditions.java | 14 + .../collectionquery/OrderByConditions.java | 16 + .../elinrin/collectionquery/Sources.java | 12 + .../aggregatesImpl/Aggregator.java | 9 + .../collectionquery/aggregatesImpl/Avg.java | 26 ++ .../collectionquery/aggregatesImpl/Count.java | 29 ++ .../collectionquery/aggregatesImpl/Max.java | 31 ++ .../collectionquery/aggregatesImpl/Min.java | 31 ++ .../collectionquery/impl/FromStmt.java | 92 ++++++ .../collectionquery/impl/SelectStmt.java | 284 ++++++++++++++++++ .../elinrin/collectionquery/impl/Tuple.java | 30 ++ .../collectionquery/impl/UnionStmt.java | 123 ++++++++ .../collectionquery/AggregatesTest.java | 72 +++++ .../collectionquery/ConditionsTest.java | 36 +++ .../OrderByConditionsTest.java | 40 +++ .../elinrin/collectionquery/SourcesTest.java | 33 ++ .../collectionquery/impl/FromStmtTest.java | 95 ++++++ .../collectionquery/impl/SelectStmtTest.java | 195 ++++++++++++ 20 files changed, 1412 insertions(+) create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java create mode 100644 projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java create mode 100644 projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java new file mode 100644 index 0000000..c590518 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java @@ -0,0 +1,27 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Avg; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Count; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Max; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Min; + +import java.util.function.Function; + +public class Aggregates { + public static Function max(final Function expression) { + return new Max<>(expression); + } + + public static > Function min(final Function expression) { + return new Min<>(expression); + } + + public static Function count(final Function expression) { + return new Count<>(expression); + } + + public static Function avg(final Function expression) { + return new Avg<>(expression); + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java new file mode 100644 index 0000000..6c7d32d --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java @@ -0,0 +1,217 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import ru.mipt.diht.students.elinrin.collectionquery.impl.Tuple; + +import java.lang.reflect.InvocationTargetException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.avg; +import static ru.mipt.diht.students.elinrin.collectionquery.Aggregates.count; +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; +import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.asc; +import static ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions.desc; +import static ru.mipt.diht.students.elinrin.collectionquery.Sources.list; +import static ru.mipt.diht.students.elinrin.collectionquery.impl.FromStmt.from; + +/*nnn*/ + +public class CollectionQuery { + static final int TWENTY = 20; + static final int HUNDRED = 100; + /** + * Make this code work! + * + * @param args + */ + public static void main(final String[] args) throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + Iterable statistics = + from(list( + student("ivanov", LocalDate.parse("1986-08-06"), "496"), + student("ivanov", LocalDate.parse("1986-08-06"), "496"))) + .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age)) + .where(rlike(Student::getName, ".*ov").and(s -> s.age() > TWENTY)) + .groupBy(Student::getName) + .having(s -> s.getCount() > 0) + .orderBy(asc(Statistics::getGroup), desc(count(Statistics::getGroup))) + .limit(HUNDRED) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"))) + .selectDistinct(Statistics.class, s -> "all", + count(Student::getDateOfBith), avg(Student::age)) + .groupBy(Student::getGroup) + .execute(); + statistics.forEach(System.out::print); + + + Iterable> mentorsByStudent = + from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("497", "mr.solovev"))) + .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup())) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .where(s -> Objects.equals(s.getFirst().getName(), "sidorov")) + .union() + .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "496"), + student("sidorov", LocalDate.parse("1986-08-06"), "497"), + student("vasilev", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "497"))) + .join(list(Group.group("496", "mr.ilanov"))) + .on(s -> s.getGroup(), f -> f.getGroup()) + .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor()) + .execute(); + mentorsByStudent.forEach(System.out::print); + } + + public static class Student { + private final String name; + + private final LocalDate dateOfBith; + + private final String group; + + public final String getName() { + return name; + } + + public Student(final String gottenName, final LocalDate gottenDateOfBith, final String gottenGroup) { + name = gottenName; + dateOfBith = gottenDateOfBith; + group = gottenGroup; + } + + public Student(final String gottenName, final String gottenGroup) { + name = gottenName; + dateOfBith = null; + group = gottenGroup; + } + + public final LocalDate getDateOfBith() { + return dateOfBith; + } + + public final String getGroup() { + return group; + } + + public final Double age() { + return (double) ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now()); + } + + public static Student student(final String name, final LocalDate dateOfBith, final String group) { + return new Student(name, dateOfBith, group); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (name != null) { + result.append(", name=").append(name); + } + if (dateOfBith != null) { + result.append(", age=").append(dateOfBith); + } + result.append("}\n"); + return result.toString(); + } + } + + public static class Group { + private final String group; + private final String mentor; + + public Group(final String gottenGroup, final String gottenMentor) { + group = gottenGroup; + mentor = gottenMentor; + } + + public final String getGroup() { + return group; + } + + public final String getMentor() { + return mentor; + } + + public static Group group(final String ggroup, final String mmentor) { + return new Group(ggroup, mmentor); + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Student{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (mentor != null) { + result.append(", name=").append(mentor); + } + result.append("}\n"); + return result.toString(); + } + } + + + public static class Statistics { + + private final String group; + private final Integer count; + private final Double age; + + public final String getGroup() { + return group; + } + + public final Integer getCount() { + return count; + } + + public final Double getAge() { + return age; + } + + public Statistics(final String gottenGroup, final Integer gottenCount) { + group = gottenGroup; + count = gottenCount; + age = null; + } + + public Statistics(final String gottenGroup, final Integer gottenCount, final Double gottenAge) { + group = gottenGroup; + count = gottenCount; + age = gottenAge; + } + + public Statistics(final String gottenGroup) { + group = gottenGroup; + count = null; + age = null; + } + + @Override + public final String toString() { + StringBuilder result = new StringBuilder().append("Statistics{"); + if (group != null) { + result.append("group='").append(group).append('\''); + } + if (count != null) { + result.append(", count=").append(count); + } + if (age != null) { + result.append(", age=").append(age); + } + result.append("}\n"); + return result.toString(); + } + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java new file mode 100644 index 0000000..53b0b54 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java @@ -0,0 +1,14 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.function.Function; +import java.util.function.Predicate; + +public class Conditions { + public static Predicate rlike(final Function expression, final String regexp) { + return element -> expression.apply(element).matches(regexp); + } + + public static Predicate like(final Function expression, final String pattern) { + throw new UnsupportedOperationException(); + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java new file mode 100644 index 0000000..0b61963 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java @@ -0,0 +1,16 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.Comparator; +import java.util.function.Function; + +public final class OrderByConditions { + + public static > Comparator asc(final Function expression) { + return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2)); + } + + public static > Comparator desc(final Function expression) { + return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1)); + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java new file mode 100644 index 0000000..9f740d9 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java @@ -0,0 +1,12 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import java.util.Arrays; +import java.util.List; + +public class Sources { + + @SafeVarargs + public static List list(final T... items) { + return Arrays.asList(items); + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java new file mode 100644 index 0000000..c5fc669 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java @@ -0,0 +1,9 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + + +public interface Aggregator extends Function { + C apply(List elements); +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java new file mode 100644 index 0000000..d5d63ca --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java @@ -0,0 +1,26 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Avg implements Aggregator { + + private Function function; + public Avg(final Function expression) { + function = expression; + } + + @Override + public final Double apply(final List elements) { + Double result = 0.0; + for (T element : elements) { + result += (Double) function.apply(element); + } + return result / elements.size(); + } + + @Override + public final Double apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java new file mode 100644 index 0000000..1053414 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java @@ -0,0 +1,29 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Function; + +public class Count implements Aggregator { + + private Function function; + public Count(final Function expression) { + function = expression; + } + + @Override + public final Integer apply(final List elements) { + Set distincted = new HashSet<>(); + for (T element : elements) { + if (!distincted.contains(function.apply(element))) { + distincted.add(function.apply(element)); + } + } + return distincted.size(); + } + @Override + public final Integer apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java new file mode 100644 index 0000000..0f40bb5 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Max> implements Aggregator { + + private Function function; + public Max(final Function expression) { + function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) < 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java new file mode 100644 index 0000000..fa95a98 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java @@ -0,0 +1,31 @@ +package ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl; + +import java.util.List; +import java.util.function.Function; + +public class Min> implements Aggregator { + + private Function function; + public Min(final Function expression) { + function = expression; + } + + @Override + public final R apply(final List elements) { + if (elements.isEmpty()) { + return null; + } + T result = elements.get(0); + for (T element : elements) { + if (function.apply(result).compareTo(function.apply(element)) > 0) { + result = element; + } + } + return function.apply(result); + } + + @Override + public final R apply(final T t) { + return null; + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java new file mode 100644 index 0000000..fae6f13 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java @@ -0,0 +1,92 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FromStmt { + private List elements = new ArrayList<>(); + + public final List getElements() { + return elements; + } + + public FromStmt(final Iterable iterable) { + for (T curr : iterable) { + elements.add(curr); + } + } + + public static FromStmt from(final Iterable iterable) { + return new FromStmt<>(iterable); + } + + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(elements, returnClass, false, functions); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, + final Function... functions) { + return new SelectStmt<>(elements, returnClass, true, functions); + } + + public final SelectStmt> select(final Function first, + final Function second) { + return new SelectStmt<>(elements, false, first, second); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(elements, iterable); + } + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List firstElements, final Iterable secondElements) { + this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); + for (J curr : secondElements) { + this.secondElements.add(curr); + } + } + + public final FromStmt> on(final BiPredicate condition) { + for (S first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + return new FromStmt<>(elements); + } + + public final > FromStmt> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (S first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromStmt<>(elements); + } + } +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java new file mode 100644 index 0000000..a8245a4 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java @@ -0,0 +1,284 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import javafx.util.Pair; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; + +public class SelectStmt { + + public final boolean isDistinct() { + return isDistinct; + } + + public final Function[] getFunctions() { + return functions; + } + + public final Class getReturnClass() { + return returnClass; + } + + public final int getNumberOfObjects() { + return numberOfObjects; + } + + public final boolean isUnion() { + return isUnion; + } + + public final List getElements() { + return elements; + } + + private boolean isDistinct; + private Class returnClass; + private Function[] functions; + private List elements; + + private List pastElements; + + private Predicate whereCondition; + private Comparator[] comparators; + private Predicate havingCondition; + private int numberOfObjects; + private Function[] groupByConditions; + + private CQLComparator cqlComparator; + private boolean isUnion; + private boolean isJoin; + + @SafeVarargs + public SelectStmt(final List gottenElements, final Class gottenReturnClass, final boolean isDistinct, + final Function... functions) { + this.elements = new ArrayList<>(); + for (T element : gottenElements) { + //System.out.println(element.toString()); + elements.add(element); + } + returnClass = gottenReturnClass; + this.isDistinct = isDistinct; + this.functions = functions; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = false; + } + + public SelectStmt(final List elements, final boolean isDistinct, final Function first, + final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + this.isDistinct = isDistinct; + this.functions = new Function[]{first, second}; + this.numberOfObjects = -1; + this.isUnion = false; + this.isJoin = true; + } + + @SafeVarargs + public SelectStmt(final List gottenPastElements, final List gottenElements, final Class gottenReturnClass, + final boolean gottenIsDistinct, final Function... gottenFunctions) { + elements = new ArrayList<>(); + for (T element : gottenElements) { + elements.add(element); + } + returnClass = gottenReturnClass; + isDistinct = gottenIsDistinct; + functions = gottenFunctions; + numberOfObjects = -1; + isUnion = true; + pastElements = gottenPastElements; + } + + public SelectStmt(final List gottenPastElements, final List elements, final boolean gottenIsDistinct, + final Function first, final Function second) { + this.elements = new ArrayList<>(); + for (T element : elements) { + //System.out.println(element.toString()); + this.elements.add(element); + } + this.returnClass = elements.get(0).getClass(); + isDistinct = gottenIsDistinct; + functions = new Function[]{first, second}; + numberOfObjects = -1; + isUnion = true; + isJoin = true; + pastElements = gottenPastElements; + } + + public final SelectStmt where(final Predicate predicate) { + whereCondition = predicate; + return this; + } + + @SafeVarargs + public final SelectStmt groupBy(final Function... expressions) { + groupByConditions = expressions; + return this; + } + + @SafeVarargs + public final SelectStmt orderBy(final Comparator... gottenComparators) { + comparators = gottenComparators; + cqlComparator = new CQLComparator(comparators); + return this; + } + + public final SelectStmt having(final Predicate condition) { + havingCondition = condition; + return this; + } + + public final SelectStmt limit(final int amount) { + numberOfObjects = amount; + return this; + } + + public final Iterable execute() throws NoSuchMethodException, IllegalAccessException, + InvocationTargetException, InstantiationException { + List result = new ArrayList<>(); + Object[] arguments = new Object[functions.length]; + Class[] returnClasses = new Class[functions.length]; + if (whereCondition != null) { + List filtered = new ArrayList<>(); + elements.stream().filter(whereCondition::test).forEach(filtered::add); + elements = filtered; + } + if (groupByConditions != null) { + Map mapped = new HashMap<>(); + String[] results = new String[groupByConditions.length]; + List> grouped = new ArrayList<>(); + elements.stream().forEach( + element -> { + for (int i = 0; i < groupByConditions.length; i++) { + results[i] = (String) groupByConditions[i].apply(element); + } + if (!mapped.containsKey(Objects.hash(results))) { + mapped.put(Objects.hash(results), mapped.size()); + } + grouped.add(new Pair(element, mapped.get(Objects.hash(results)))); + } + ); + List> groupedElements = new ArrayList<>(); + for (int i = 0; i < mapped.size(); i++) { + groupedElements.add(new ArrayList()); + } + + for (Pair element : grouped) { + groupedElements.get(element.getValue()).add(element.getKey()); + } + for (List group : groupedElements) { + for (int i = 0; i < functions.length; i++) { + if (functions[i] instanceof Aggregator) { + arguments[i] = ((Aggregator) functions[i]).apply(group); + } else { + arguments[i] = functions[i].apply(group.get(0)); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } else { + for (T element : this.elements) { + for (int i = 0; i < functions.length; i++) { + arguments[i] = functions[i].apply(element); + if (functions[i] instanceof Aggregator) { + List currArg = new ArrayList<>(); + currArg.add(element); + arguments[i] = ((Aggregator) functions[i]).apply(currArg); + } else { + arguments[i] = functions[i].apply(element); + } + returnClasses[i] = arguments[i].getClass(); + } + if (isJoin) { + Tuple newElement = new Tuple(arguments[0], arguments[1]); + result.add((R) newElement); + } else { + R newElement = (R) returnClass.getConstructor(returnClasses).newInstance(arguments); + result.add(newElement); + } + } + } + if (havingCondition != null) { + List filtered = new ArrayList<>(); + result.stream().filter(havingCondition::test).forEach(filtered::add); + result = filtered; + } + if (isDistinct) { + Set hashes = new HashSet<>(); + List flags = new ArrayList<>(); + for (R element : result) { + if (!hashes.contains(element.toString().hashCode())) { + flags.add(1); + hashes.add(element.toString().hashCode()); + } else { + flags.add(0); + } + } + List distincted = new ArrayList<>(); + for (int i = 0; i < result.size(); i++) { + if (flags.get(i) == 1) { + distincted.add(result.get(i)); + } + } + result = distincted; + } + if (comparators != null) { + result.sort(cqlComparator); + } + if (numberOfObjects != -1) { + while (result.size() > numberOfObjects) { + result.remove(result.size() - 1); + } + } + if (isUnion) { + pastElements.addAll(result); + result = pastElements; + } + //System.out.println("Hello!"); + return result; + } + + public final UnionStmt union() throws InvocationTargetException, NoSuchMethodException, + InstantiationException, IllegalAccessException { + List result = (List) this.execute(); + if (isJoin) { + return new UnionStmt<>(result, true); + } else { + return new UnionStmt<>(result); + } + } + + public class CQLComparator implements Comparator { + private Comparator[] comparators; + @SafeVarargs + public CQLComparator(final Comparator... comparators) { + this.comparators = comparators; + } + + @Override + public final int compare(final K first, final K second) { + for (Comparator comparator : comparators) { + if (comparator.compare(first, second) != 0) { + return comparator.compare(first, second); + } + } + return 0; + } + } + +} diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java new file mode 100644 index 0000000..56e9c08 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java @@ -0,0 +1,30 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + + +public class Tuple { + + private final F first; + private final S second; + + public Tuple(final F first1, final S second2) { + first = first1; + second = second2; + } + + public final F getFirst() { + return first; + } + + public final S getSecond() { + return second; + } + + @Override + public final String toString() { + return "Tuple{" + + "first=" + first + + ", second=" + second + + "}\n"; + } +} + diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java new file mode 100644 index 0000000..018f185 --- /dev/null +++ b/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java @@ -0,0 +1,123 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class UnionStmt { + + private List pastElements = new ArrayList<>(); + + private boolean isTuple; + + public UnionStmt(final Iterable iterable) { + for (R curr : iterable) { + pastElements.add(curr); + } + isTuple = false; + } + + public UnionStmt(final Iterable iterable, final boolean gottenIsTuple) { + for (R curr : iterable) { + pastElements.add(curr); + } + isTuple = true; + } + + public final FromClause from(final Iterable elements) { + if (isTuple) { + return new FromClause<>(pastElements, elements); + } else { + return new FromClause<>(pastElements, elements); + } + } + + + public class FromClause { + private List pastElements = new ArrayList<>(); + + private List elements = new ArrayList<>(); + + public FromClause(final Iterable gottenPastElements, final Iterable gottenElements) { + for (Q curr : gottenPastElements) { + pastElements.add(curr); + } + for (S curr : gottenElements) { + elements.add(curr); + } + } + @SafeVarargs + public final SelectStmt select(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, false, functions); + } + + public final SelectStmt> select(final Function first, final Function second) { + return new SelectStmt<>((List>) pastElements, elements, false, first, second); + } + + @SafeVarargs + public final SelectStmt selectDistinct(final Class returnClass, final Function... functions) { + return new SelectStmt<>(pastElements, elements, returnClass, true, functions); + } + + public final JoinClause join(final Iterable iterable) { + return new JoinClause<>(pastElements, elements, iterable); + } + } + + + public class JoinClause { + + private List firstElements = new ArrayList<>(); + private List secondElements = new ArrayList<>(); + private List pastElements = new ArrayList<>(); + private List> elements = new ArrayList<>(); + + public JoinClause(final List gottenPastElements, final List gottenFirstElements, + final Iterable gottenSecondElements) { + pastElements.addAll(gottenPastElements.stream().collect(Collectors.toList())); + firstElements.addAll(gottenFirstElements.stream().collect(Collectors.toList())); + for (J curr : gottenSecondElements) { + secondElements.add(curr); + } + //secondElements.forEach(System.out::print); + } + + public final FromClause, W> on(final BiPredicate condition) { + for (F first : firstElements) { + for (J second : secondElements) { + if (condition.test(first, second)) { + elements.add(new Tuple<>(first, second)); + } + } + } + //System.out.println(secondElements.get(0)); + //System.out.println(elements.get(0)); + return new FromClause<>(pastElements, elements); + } + + public final > FromClause, W> on( + final Function leftKey, + final Function rightKey) { + HashMap> map = new HashMap<>(); + for (J element : secondElements) { + K key = rightKey.apply(element); + if (!map.containsKey(key)) { + map.put(key, new ArrayList<>()); + } + map.get(key).add(element); + } + for (F first : firstElements) { + K key = leftKey.apply(first); + if (map.containsKey(key)) { + List second = map.get(key); + second.forEach(s -> elements.add(new Tuple<>(first, s))); + } + } + return new FromClause<>(pastElements, elements); + } + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java new file mode 100644 index 0000000..e519cea --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/AggregatesTest.java @@ -0,0 +1,72 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.aggregatesImpl.Aggregator; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +@SuppressWarnings("unchecked") +@RunWith(MockitoJUnitRunner.class) +public class AggregatesTest extends TestCase { + + List exampleList, emptyExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + } + + @Test + public void testMax() throws Exception { + assertEquals(((Aggregator) Aggregates.max(functionGroup)).apply(exampleList), "495"); + assertEquals(((Aggregator) Aggregates.max(functionName)).apply(exampleList), "sidorov"); + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(exampleList), 19.0); + + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(student), null); + assertEquals(((Aggregator) Aggregates.max(functionAge)).apply(emptyExampleList), null); + } + + @Test + public void testMin() throws Exception { + assertEquals(((Aggregator) Aggregates.min(functionGroup)).apply(exampleList), "494"); + assertEquals(((Aggregator) Aggregates.min(functionName)).apply(exampleList), "ivanov"); + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(exampleList), 18.0); + + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(student), null); + assertEquals(((Aggregator) Aggregates.min(functionAge)).apply(emptyExampleList), null); + } + + @Test + public void testCount() throws Exception { + assertEquals(((Aggregator) Aggregates.count(functionGroup)).apply(exampleList), 2); + assertEquals(((Aggregator) Aggregates.count(functionName)).apply(exampleList), 3); + assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(exampleList), 2); + + assertEquals(((Aggregator) Aggregates.count(functionAge)).apply(student), null); + } + + @Test + public void testAvg() throws Exception { + assertEquals((Double)((Aggregator) Aggregates.avg(functionAge)).apply(exampleList), 18.666, 0.1); + + assertEquals(((Aggregator) Aggregates.avg(functionAge)).apply(student), null); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java new file mode 100644 index 0000000..acd4bce --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/ConditionsTest.java @@ -0,0 +1,36 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; +import static ru.mipt.diht.students.elinrin.collectionquery.Conditions.rlike; + +@RunWith(MockitoJUnitRunner.class) +public class ConditionsTest extends TestCase { + Function function = CollectionQuery.Student::getName; + + @Test + public void testRlike() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("mogilev", LocalDate.parse("1986-08-06"), "495")); + + assertEquals(rlike(function, ".*ev").test(exampleList.get(0)), false); + assertEquals(rlike(function, ".*ev").test(exampleList.get(1)), false); + assertEquals(rlike(function, ".*ev").test(exampleList.get(2)), true); + } + + @Test(expected = UnsupportedOperationException.class) + public void testLike() throws Exception { + Conditions.like(function, "aaa"); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java new file mode 100644 index 0000000..19b43e5 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditionsTest.java @@ -0,0 +1,40 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; + +@RunWith(MockitoJUnitRunner.class) +public class OrderByConditionsTest extends TestCase { + Function function = CollectionQuery.Student::getName; + + @Test + public void testAsc() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "497")); + exampleList.add(student("vasilev", LocalDate.parse("1986-08-06"), "496")); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(2)) < 0); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(1), exampleList.get(0)) > 0); + assertTrue(OrderByConditions.asc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); + } + + @Test + public void testDesc() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "494")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(2)) > 0); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(1), exampleList.get(0)) < 0); + assertTrue(OrderByConditions.desc(function).compare(exampleList.get(0), exampleList.get(0)) == 0); + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java new file mode 100644 index 0000000..af5822e --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/SourcesTest.java @@ -0,0 +1,33 @@ +package ru.mipt.diht.students.elinrin.collectionquery; + +import junit.framework.TestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery.Student.student; + +@RunWith(MockitoJUnitRunner.class) +public class SourcesTest extends TestCase { + + @Test + public void testList() throws Exception { + List exampleList = new ArrayList<>(); + exampleList.add(student("ivanov", LocalDate.parse("1986-08-06"), "496")); + exampleList.add(student("petrov", LocalDate.parse("1986-08-06"), "495")); + exampleList.add(student("sidorov", LocalDate.parse("1986-08-06"), "495")); + + List resultList = Sources.list( + student("ivanov", LocalDate.parse("1986-08-06"), "496"), + student("petrov", LocalDate.parse("1986-08-06"), "495"), + student("sidorov", LocalDate.parse("1986-08-06"), "495")); + assertEquals(exampleList.size(), resultList.size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i).toString(), resultList.get(i).toString()); + } + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java new file mode 100644 index 0000000..16c73d1 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmtTest.java @@ -0,0 +1,95 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +@SuppressWarnings("unchecked") +@RunWith(MockitoJUnitRunner.class) +public class FromStmtTest extends TestCase { + + List exampleList, emptyExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + } + + @Test + public void testFrom() throws Exception { + FromStmt fromStmt = FromStmt.from(exampleList); + assertEquals(fromStmt.getElements().size(), exampleList.size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(fromStmt.getElements().get(i), exampleList.get(i)); + } + } + + @Test + public void testSelect() throws Exception { + SelectStmt select = FromStmt.from(exampleList) + .select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + assertEquals(select.getNumberOfObjects(), -1); + assertEquals(select.getReturnClass(), CollectionQuery.Student.class); + assertEquals(select.isDistinct(), false); + assertEquals(select.isUnion(), false); + Function[] functions = new Function[2]; + functions[0] = CollectionQuery.Student::getName; + functions[1] = CollectionQuery.Student::getGroup; + assertEquals(select.getFunctions().length, functions.length); + for (int i = 0; i < functions.length; i++) { + for (CollectionQuery.Student element : exampleList) { + assertEquals(functions[i].apply(element), + select.getFunctions()[i].apply(element)); + } + } + assertEquals(exampleList.size(), select.getElements().size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i), select.getElements().get(i)); + } + } + + @Test + public void testSelectDistinct() throws Exception { + SelectStmt select = FromStmt.from(exampleList) + .selectDistinct(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + assertEquals(select.getNumberOfObjects(), -1); + assertEquals(select.getReturnClass(), CollectionQuery.Student.class); + assertEquals(select.isDistinct(), true); + assertEquals(select.isUnion(), false); + Function[] functions = new Function[2]; + functions[0] = CollectionQuery.Student::getName; + functions[1] = CollectionQuery.Student::getGroup; + assertEquals(select.getFunctions().length, functions.length); + for (int i = 0; i < functions.length; i++) { + for (CollectionQuery.Student element : exampleList) { + assertEquals(functions[i].apply(element), + select.getFunctions()[i].apply(element)); + } + } + assertEquals(exampleList.size(), select.getElements().size()); + for (int i = 0; i < exampleList.size(); i++) { + assertEquals(exampleList.get(i), select.getElements().get(i)); + } + } +} diff --git a/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java new file mode 100644 index 0000000..85fd304 --- /dev/null +++ b/projects/elinrin/src/test/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmtTest.java @@ -0,0 +1,195 @@ +package ru.mipt.diht.students.elinrin.collectionquery.impl; + +import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import ru.mipt.diht.students.elinrin.collectionquery.Aggregates; +import ru.mipt.diht.students.elinrin.collectionquery.CollectionQuery; +import ru.mipt.diht.students.elinrin.collectionquery.OrderByConditions; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.function.Function; + +@RunWith(MockitoJUnitRunner.class) +public class SelectStmtTest extends TestCase { + + List exampleList, emptyExampleList, distinctExampleList; + Function functionAge; + Function functionName, functionGroup; + CollectionQuery.Student student; + SelectStmt select, distinctSelect; + SelectStmt groupSelect; + + @Before + public void setUp() throws Exception { + exampleList = new ArrayList<>(); + emptyExampleList = new ArrayList<>(); + distinctExampleList = new ArrayList<>(); + exampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + exampleList.add(new CollectionQuery.Student("petrov", LocalDate.parse("1997-02-20"), "495")); + exampleList.add(new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495")); + distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + distinctExampleList.add(new CollectionQuery.Student("garkaviy", LocalDate.parse("1997-02-20"), "495")); + distinctExampleList.add(new CollectionQuery.Student("ivanov", LocalDate.parse("1996-08-06"), "494")); + functionAge = CollectionQuery.Student::age; + functionName = CollectionQuery.Student::getName; + functionGroup = CollectionQuery.Student::getGroup; + student = new CollectionQuery.Student("sidorov", LocalDate.parse("1996-10-29"), "495"); + select = FromStmt.from(exampleList).select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup); + distinctSelect = FromStmt.from(distinctExampleList).selectDistinct(CollectionQuery.Student.class, + CollectionQuery.Student::getName, CollectionQuery.Student::getGroup); + groupSelect = FromStmt.from(exampleList).select(CollectionQuery.Statistics.class, + CollectionQuery.Student::getGroup, Aggregates.count(CollectionQuery.Student::getName)); + } + + @Test + public void testWhere() throws Exception { + List result = (List) select + .where(s -> Objects.equals(s.getGroup(), "494")) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testGroupBy() throws Exception { + List result = (List) groupSelect + .groupBy(CollectionQuery.Student::getGroup) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Statistics("495", 3)); + resultList.add(new CollectionQuery.Statistics("494", 1)); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testOrderBy() throws Exception { + List result = (List) select + .orderBy(OrderByConditions.desc(CollectionQuery.Student::getGroup)) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testHaving() throws Exception { + List result = (List) groupSelect + .groupBy(CollectionQuery.Student::getGroup) + .having(s -> Objects.equals(s.getGroup(), "494")) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Statistics("494", 1)); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testLimit() throws Exception { + List result = (List) select + .limit(2) + .execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + + result = (List) select + .limit(5) + .execute(); + resultList.clear(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testExecute() throws Exception { + List result = (List) select.execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + + List resultWithAggr = (List) groupSelect.execute(); + List resultListWithAggr = new ArrayList<>(); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("494", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + resultListWithAggr.add(new CollectionQuery.Statistics("495", 1)); + assertEquals(resultWithAggr.size(), resultListWithAggr.size()); + for (int i = 0; i < resultWithAggr.size(); i++) { + assertEquals(resultListWithAggr.get(i).toString(), resultWithAggr.get(i).toString()); + } + } + + @Test + public void testUnion() throws Exception { + List result = (List) select.union(). + from(exampleList). + select(CollectionQuery.Student.class, CollectionQuery.Student::getName, + CollectionQuery.Student::getGroup). + execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + resultList.add(new CollectionQuery.Student("petrov", "495")); + resultList.add(new CollectionQuery.Student("sidorov", "495")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } + + @Test + public void testIsDistinct() throws Exception { + List result = (List) distinctSelect.execute(); + List resultList = new ArrayList<>(); + resultList.add(new CollectionQuery.Student("garkaviy", "495")); + resultList.add(new CollectionQuery.Student("ivanov", "494")); + assertEquals(resultList.size(), result.size()); + for (int i = 0; i < resultList.size(); i++) { + assertEquals(resultList.get(i).toString(), result.get(i).toString()); + } + } +} From 35b75d8835c20bec86a61b626c4ec63687f8f6b1 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 08:57:39 +0300 Subject: [PATCH 26/27] ... --- .../ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java | 0 .../diht/students/elinrin/collectionquery/CollectionQuery.java | 0 .../ru/mipt/diht/students/elinrin/collectionquery/Conditions.java | 0 .../diht/students/elinrin/collectionquery/OrderByConditions.java | 0 .../ru/mipt/diht/students/elinrin/collectionquery/Sources.java | 0 .../elinrin/collectionquery/aggregatesImpl/Aggregator.java | 0 .../diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java | 0 .../students/elinrin/collectionquery/aggregatesImpl/Count.java | 0 .../diht/students/elinrin/collectionquery/aggregatesImpl/Max.java | 0 .../diht/students/elinrin/collectionquery/aggregatesImpl/Min.java | 0 .../mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java | 0 .../diht/students/elinrin/collectionquery/impl/SelectStmt.java | 0 .../ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java | 0 .../diht/students/elinrin/collectionquery/impl/UnionStmt.java | 0 .../ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java | 0 .../ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java | 0 .../java/ru/mipt/diht/students/elinrin/miniorm/User.java | 0 .../ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java | 0 .../diht/students/elinrin/miniorm/annotations/PrimaryKey.java | 0 .../ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java | 0 .../students/elinrin/miniorm/exception/HandlerOfException.java | 0 .../java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java | 0 .../java/ru/mipt/diht/students/elinrin/threads/Counter.java | 0 .../java/ru/mipt/diht/students/elinrin/threads/Parse.java | 0 .../java/ru/mipt/diht/students/elinrin/threads/Rollcall.java | 0 .../students/elinrin/threads/exception/HandlerOfException.java | 0 .../diht/students/elinrin/threads/exception/UserException.java | 0 .../diht/students/elinrin/twitterstream/InteractiveParse.java | 0 .../ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java | 0 .../ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java | 0 .../ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java | 0 .../mipt/diht/students/elinrin/twitterstream/TwitterProvider.java | 0 .../diht/students/elinrin/twitterstream/commands/Commands.java | 0 .../diht/students/elinrin/twitterstream/commands/ExitCommand.java | 0 .../diht/students/elinrin/twitterstream/commands/HelpCommand.java | 0 .../diht/students/elinrin/twitterstream/commands/HideCommand.java | 0 .../students/elinrin/twitterstream/commands/LimitCommand.java | 0 .../students/elinrin/twitterstream/commands/PlaceCommand.java | 0 .../students/elinrin/twitterstream/commands/QueryCommand.java | 0 .../students/elinrin/twitterstream/commands/StreamCommand.java | 0 .../elinrin/twitterstream/exception/HandlerOfException.java | 0 41 files changed, 0 insertions(+), 0 deletions(-) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/User.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/Counter.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/Parse.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java (100%) rename projects/elinrin/src/{ => main}/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java (100%) diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Aggregates.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/CollectionQuery.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Conditions.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/OrderByConditions.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/Sources.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Aggregator.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Avg.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Count.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Max.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/aggregatesImpl/Min.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/Tuple.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/UnionStmt.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/ClassConverter.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/DatabaseService.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/User.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/User.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/User.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Column.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/PrimaryKey.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/annotations/Table.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/miniorm/exception/HandlerOfException.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/BlockingQueue.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Counter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Counter.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Counter.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Parse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Parse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Parse.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/Rollcall.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/HandlerOfException.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/threads/exception/UserException.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/InteractiveParse.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PackageParse.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/PrintTweet.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/RunTwitter.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/TwitterProvider.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/Commands.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/ExitCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HelpCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/HideCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/LimitCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/PlaceCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/QueryCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/commands/StreamCommand.java diff --git a/projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java similarity index 100% rename from projects/elinrin/src/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java rename to projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/twitterstream/exception/HandlerOfException.java From c7a41828b191b979593d1f01fa5f321709dac512 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 19 Dec 2015 09:09:12 +0300 Subject: [PATCH 27/27] what are you waiting for --- .../collectionquery/impl/FromStmt.java | 8 +-- .../collectionquery/impl/SelectStmt.java | 52 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java index fae6f13..cd2b65e 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/FromStmt.java @@ -50,10 +50,10 @@ public class JoinClause { private List secondElements = new ArrayList<>(); private List> elements = new ArrayList<>(); - public JoinClause(final List firstElements, final Iterable secondElements) { - this.firstElements.addAll(firstElements.stream().collect(Collectors.toList())); - for (J curr : secondElements) { - this.secondElements.add(curr); + public JoinClause(final List gottenFirstElements, final Iterable gottenSecondElements) { + firstElements.addAll(gottenFirstElements.stream().collect(Collectors.toList())); + for (J curr : gottenSecondElements) { + secondElements.add(curr); } } diff --git a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java index a8245a4..65104af 100644 --- a/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java +++ b/projects/elinrin/src/main/java/ru/mipt/diht/students/elinrin/collectionquery/impl/SelectStmt.java @@ -52,34 +52,34 @@ public final List getElements() { private boolean isJoin; @SafeVarargs - public SelectStmt(final List gottenElements, final Class gottenReturnClass, final boolean isDistinct, - final Function... functions) { - this.elements = new ArrayList<>(); + public SelectStmt(final List gottenElements, final Class gottenReturnClass, final boolean gottenIsDistinct, + final Function... gottenFunctions) { + elements = new ArrayList<>(); for (T element : gottenElements) { //System.out.println(element.toString()); elements.add(element); } returnClass = gottenReturnClass; - this.isDistinct = isDistinct; - this.functions = functions; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = false; + isDistinct = gottenIsDistinct; + functions = gottenFunctions; + numberOfObjects = -1; + isUnion = false; + isJoin = false; } - public SelectStmt(final List elements, final boolean isDistinct, final Function first, + public SelectStmt(final List gottenElements, final boolean gottenIsDistinct, final Function first, final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { - //System.out.println(element.toString()); - this.elements.add(element); + elements = new ArrayList<>(); + for (T element : gottenElements) { + //System.out.println(gottenElement.toString()); + elements.add(element); } - this.returnClass = elements.get(0).getClass(); - this.isDistinct = isDistinct; - this.functions = new Function[]{first, second}; - this.numberOfObjects = -1; - this.isUnion = false; - this.isJoin = true; + returnClass = gottenElements.get(0).getClass(); + isDistinct = gottenIsDistinct; + functions = new Function[]{first, second}; + numberOfObjects = -1; + isUnion = false; + isJoin = true; } @SafeVarargs @@ -97,14 +97,14 @@ public SelectStmt(final List gottenPastElements, final List gottenElements pastElements = gottenPastElements; } - public SelectStmt(final List gottenPastElements, final List elements, final boolean gottenIsDistinct, + public SelectStmt(final List gottenPastElements, final List gottenElements, final boolean gottenIsDistinct, final Function first, final Function second) { - this.elements = new ArrayList<>(); - for (T element : elements) { + elements = new ArrayList<>(); + for (T element : gottenElements) { //System.out.println(element.toString()); - this.elements.add(element); + elements.add(element); } - this.returnClass = elements.get(0).getClass(); + returnClass = gottenElements.get(0).getClass(); isDistinct = gottenIsDistinct; functions = new Function[]{first, second}; numberOfObjects = -1; @@ -266,8 +266,8 @@ public final UnionStmt union() throws InvocationTargetException, NoSuchMet public class CQLComparator implements Comparator { private Comparator[] comparators; @SafeVarargs - public CQLComparator(final Comparator... comparators) { - this.comparators = comparators; + public CQLComparator(final Comparator... gottenComparators) { + comparators = gottenComparators; } @Override