Advertisement
Guest User

Untitled

a guest
Jun 28th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.71 KB | None | 0 0
  1. /*
  2. Kurwiu, jak jesteś z Wydziału Mądrości i Inteligencji UJ i znalazłeś ten kod przeszukując PasteBina, to masz wielkie szczęście, bo nie musisz sam opracowywać kodu z Javy, masz wszystkie komentarze podane tu na tacy. Życze smacznego i powodzenia jutro :>
  3. */
  4.  
  5. interface Email{                                      //(1) Interfejs Email z deklaracja dwoch metod
  6.     public String getFrom();                          //(2) getterów dla pola From i pola Message
  7.     public String getMessage();                       //(3)
  8. }                                                     //(4)
  9. // ##############################################     //(5)
  10. class TextEmail implements Email{                     //(6)  Klasa TextEmail implementująca intefejs Email(1)
  11.     private String from, message;                     //(7)  pola typu String from, message
  12.     public TextEmail(String from, String message){    //(8)  Konstruktor klasy z polami from i message
  13.         this.from = from;                             //(9)  przypisanie wartości z konstruktora do pol klasy
  14.         this.message = message;                       //(10) poprzez słowo kluczowe this mówiące o tym, ze dopisujemy
  15.     }                                                 //(11) do pola 'tego' obiektu klasy
  16.     public String getFrom()   { return from;    }     //(12) Implementacja getterow dla pol From i Message
  17.     public String getMessage(){ return message; }     //(13) z interfejsu Email (1)
  18. }                                                     //(14)
  19. // ##############################################     //(15)
  20. class Filter{                                         //(16) Klasa Filter, z konstrukcji będąca prawie interfejsem
  21.     public boolean check(Email r) {return true;}      //(17) Deklaracja dwóch metod - check i process, obie metody
  22.     public void process(Email e){}                    //(18) w argumentach mają Email, metoda check zawsze zwraca
  23. }                                                     //(19) boolean o wartości true
  24. // ##############################################     //(20)
  25. class PatternFilter extends Filter{                   //(21) Klasa PatterFilter rozszerzająca klasę Filter(16)
  26.     private String pattern;                           //(22) pole typu String - pattern, do przechowywania regexa
  27.     public PatternFilter(String pattern){             //(23) (wyrażenie regularne do filtrowania maili)
  28.         this.pattern = pattern;                       //(24) <- Jednoargumentowy konstruor klasy przypisujący
  29.     }                                                 //(25)                                             regex
  30.     public boolean check(Email e){                    //(26) Metoda check, zwracająca wartość logiczną true lub false
  31.         return (e.getFrom() + e.getMessage()).        //(27) w zależności od tego, czy pole form + message z Emaila
  32.                 matches(pattern);                     //(28) podanego w argumencie pasuje do podanego
  33.     }                                                 //(29) w klasie wyrażenia regularnego
  34. }                                                     //(30)
  35. // ##############################################     //(31)
  36. class FolderFilter extends PatternFilter{             //(32) Klasa FolderFilter rozszerzająca klasę PatterFilter(21)
  37.     private String folder;                            //(33) Pole typu String przechowujące nazwę folderu
  38.     public FolderFilter(String f,String p){           //(34) Konstruktor klasy z argumentami dla folderu i patternu
  39.         super(p);                                     //(35) (regexu przekazywanego klasie nadrzednej poprzez slowo
  40.         this.folder = f;                              //(36)  kluczowe super - wywoluje linie 23)
  41.     }                                                 //(37)  W powyższej linii zwykłe przypisanie wartości do pola
  42.     public void process(Email e){                     //(38)
  43.         System.out.println("Moved to "+folder);       //(39) Metoda process z argumentem typu Email(1), przy wywolaniu
  44.     }                                                 //(40) wyrzuca na ekran wiadomość Moved to 'folder
  45. }                                                     //(41) z pola klasy(33)'
  46. // ##############################################     //(42)
  47. class PriorityFilter extends PatternFilter{           //(43) Klasa PriorityFilter rozszerzająca klase PatternFilter(21)
  48.     public PriorityFilter(String p){                  //(44) Konstruktor klasy z wywołaniem kostruktora klasy nadrzędnej
  49.         super(p);                                     //(45) (23) z argumentem bedacym wyrazeniem regularnym filtru
  50.     }                                                 //(46)
  51.     public void process(Email e){                     //(47) Metoda process z argumentem typu Email(1), przy wywołaniu
  52.         System.out.println("Marked as important");    //(48) wyrzuca na ekran wiadomość 'Marked as important'
  53.     }                                                 //(49)
  54. }                                                     //(50)
  55. // ##############################################     //(51)
  56. class GroupFilter extends Filter{                     //(52) Klasa GroupFilter rozszerzajaca klase Filter(16)
  57.     class Node{                                       //(53) Klasa wewnetrzna Node przechowujaca Filter (w tym kazda
  58.         Filter filter;                                //(54) klase rozszerzajaca Filter, co wynika z polimorfizmu)
  59.         Node next;                                    //(55) Referencja do kolejnego Node (struktura listy)
  60.         Node(Filter filter, Node next){               //(56) Konstruktor klasy z argumentami Filter i Node
  61.             this.filter = filter;                     //(57) przypisującymi polom klasy wartości z argumentów.
  62.             this.next = next;                         //(58)
  63.         }                                             //(59)
  64.     }                                                 //(60)
  65.     Node node;                                        //(61) Pole klasy GroupFilter - Node(53), czyli klasy wewnetrzenej
  66.     public boolean check(Email e){                    //(62) Metoda check zwracajaca wartośc logiczną (true, false)
  67.         Node n = this.node;                           //(63) Deklaracja zmiennej n typu Node, przypisująca wartość
  68.         while(n!=null){                               //(64) z pola klasy Node. (61)
  69.             if(n.filter.check(e)) return true;        //(65) Pętla przechodząca po całej liście Node'ów, aż do samego
  70.             n = n.next;                               //(66) końca (czyli braku następnika listy [n!=null])
  71.         }                                             //(67) Gdy któryś z regexów będzie pasować do Emaila z argumentu
  72.         return false;                                 //(68) zwraca wartość true, jeżeli żaden nie przypasuje cała meto-
  73.     }                                                 //(69) da zwraca false
  74.     public void process(Email e){                     //(70) Metoda precess z argumentem typu Email(1)
  75.         Node n = this.node;                           //(71) Deklaracja zmiennej node, analogicznie do linii 55.
  76.         boolean r = false;                            //(72) Deklaracja zmiennej logicznej r, przypisana wartosc false
  77.         while(n!=null){                               //(73) Petla przebiegajaca, po calej liscie Node`ów.
  78.             if(n.filter.check(e)){                    //(74) Jeżeli którykolwiek z filtrów zwraca wartość true
  79.                 n.filter.process(e);                  //(75) to wykonaj metodę process (linie 38, 47)
  80.                 r = true;                             //(76) i jeżeli tak jest to przypisz zmiennej r wartość true
  81.             }                                         //(77)
  82.             n = n.next;                               //(78) Przejscie do nastepnego elemetu listy.
  83.         }                                             //(79)
  84.         if(!r) throw new RuntimeException(            //(80) Jeżeli r nie jest true, tzn jest false rzuca wyjątek
  85.                 "Cannot process message");            //(81) RuntimeException z komunikatem Cannot process message
  86.     }                                                 //(82)
  87.     public void setNext(Filter filter){               //(83) Dodawanie kolejnego Filter do listy Node.
  88.         this.node = new Node(filter,this.node);       //(84) Przypisanie następnika listy do pola składowego klasy
  89.     }                                                 //(85)
  90. }                                                     //(86)
  91. // ##############################################     //(87)
  92. class EmailProcessor{                                 //(88) Klasa EmailProcessor
  93.     GroupFilter filter = new GroupFilter();           //(89) Deklaracja zmiennej GroupFilter(52), z przypisaniem nowego
  94.     public void addFilter(Filter filter){             //(90) obiektu. Metoda addFilter z argumentem typu Filter(16).
  95.         this.filter.setNext(filter);                  //(91) Dodawanie kolejnego filtra do listy Node z klasy
  96.     }                                                 //(92) GroupFilter(52)
  97.     public void process(Email mail){                  //(93) Jednoargumentowa metoda process z argumentem typu Email.
  98.         System.out.println("%%%->\nNew message from " //(94) Wypisywanie na ekran nadawcy Email z emial oraz tresci
  99.                 + mail.getFrom() + "\nMessage: "      //(95) wiadomosci.
  100.                 + mail.getMessage());                 //(96)
  101.         filter.process(mail);                         //(97) Przetworzenie danego maila wedlug process z danego linii 70
  102.     }                                                 //(98)
  103. }                                                     //(99)
  104. // ##############################################     //(100)
  105. class Test{                                           //(101) Klasa test zawierajaca metode uruchamiajaca main
  106.     public static EmailProcessor init(){              //(102) Metoda inicjalizująca EmailProcessor zwracajaca ten typ
  107.         EmailProcessor p = new EmailProcessor();      //(103) Tworzenie nowego EmailProcessor
  108.         Filter[] filters = {                          //(104) Stworzenie tablicy filtrów
  109.                 new Filter(),                         //(105) Pustego Filter
  110.                 new FolderFilter("work","(.*)company(.*)"),   //(106) FolderFilter z regexem w argumencie
  111.                 new PriorityFilter("(.*)money(.*)") };//(107) ProrityFilter z regexem w argumencie.
  112.         for(Filter f : filters) p.addFilter(f);       //(108) Petla wykonujaca sie dla kazdego elementu tablicy filters
  113.         return p;                                     //(109) przy kazdym kroku, dopisanie filtru do listy filtrow.
  114.     }                                                 //(110) Na koniec zwrocenie ProcessFilter utworzonego w linii 103
  115.     public static void main(String[] args){           //(111) Metoda uruchamiajaca main
  116.         try{                                          //(112) Początek bloku try - catch, służacego do łapania wyjątków
  117.             EmailProcessor p = init();                //(113) Przypisanie EmailProcessor z metody z linii 102 do zm. p
  118.             Email m = new TextEmail(                  //(114) Stworzenie 3 maili typu TextEmail z parametrami
  119.                     "noone@gmail.com","You won a lot of money!"); //(115)  from i message.
  120.             Email b = new TextEmail(                  //(116) -*-
  121.                     "boss@company.com","You got promoted!");      //(117) -*-
  122.             Email h = new TextEmail(                  //(118) -*-
  123.                     "hater@facebook.com","I like you!");          //(119) -*-
  124.             Email[] inbox = {m,b,h};                  //(120) Tablica maili z linii 114, 116, 118 w zmiennej inbox
  125.             for(Email mail : inbox) p.process(mail);  //(121) Wykonanie metody process dla każdego elementu tablicy
  126.             p.process(new Email(){                    //(122) Wykonanywanie metody process dla obiektu anonimowego inter
  127.                 public String getFrom(){ return "#@#"; }      //(123) -fejsu Email z nadpisaniem metod tego interfejsu
  128.                 public String getMessage(){return "?!?";}});  //(124) na zwracajace #@# i ?!? (czyli regexy)
  129.         }catch(Exception e){                          //(125) Lapanie wyjatku Exception (czyli kazdego wyjatku w tym
  130.             System.out.println(e.getMessage());       //(126) przedewszystkim RuntimeException z linii 80)
  131.         }                                             //(127) Przy przechwyceniu wyjatku wyrzuca na ekran wiadomosc bledu
  132.     }                                                 //(128) przy RuntimeException z linii 80 wypisze na ekran
  133. }                                                     //(129) 'Cannot process message'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement