From 05b892db2b170a903e85ccf29d27533a6ef0ceb6 Mon Sep 17 00:00:00 2001 From: ElinRin Date: Sat, 28 Nov 2015 17:39:02 +0300 Subject: [PATCH 01/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] 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/17] /**/ --- .../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/17] 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 + + +