Advertisement
Guest User

Untitled

a guest
Feb 15th, 2018
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 22.82 KB | None | 0 0
  1. // Felix Vejdegren || Jack Hällström || Douglas Hammarstam
  2. // feve5814@student.su.se || jaha4972@student.su.se || doha6991@student.su.se
  3. import java.util.*;
  4.  
  5.  
  6. public class Register {
  7.     private Scanner keyboard = new Scanner(System.in);
  8.  
  9.  
  10.     private List<Event> eventList = new ArrayList<>();
  11.     private List<Participant> participantList = new ArrayList<>();
  12.  
  13.  
  14.  
  15.     private int participantNumber = 99;
  16.  
  17.  
  18.     private String readCommand() {
  19.  
  20.         System.out.println("Vad vill du göra?\n 1: Lägga till gren\n 2: Registrera ny deltagare\n 3: Ta bort deltagare\n 4: Registrera resultat\n 5: Se resultatlista för deltagare\n 6: Se resultatlista för specifik gren\n 7: Skicka meddelande\n 8: Avsluta");
  21.         return inputStrings("Skriv ditt val här: ");
  22.     }
  23.  
  24.     private boolean useCommand(String command) {
  25.  
  26.         switch (command) {
  27.             case "1":
  28.             case "Add event":
  29.                 addEvent();
  30.                 break;
  31.             case "2":
  32.             case "Add participant":
  33.                 addParticipant();
  34.                 break;
  35.             case "3":
  36.             case "Remove participant":
  37.                 removeParticipant();
  38.                 break;
  39.             case "4":
  40.             case "Add result":
  41.                 addResult();
  42.                 break;
  43.             case "5":
  44.             case "Participant":
  45.                 viewParticipant();
  46.                 break;
  47.             case "7":
  48.                 System.out.println(eventList);
  49.                 System.out.println(participantList);
  50.                 break;
  51.             case "Exit":
  52.                 System.out.println("Program closing, goodbye!");
  53.                 return false;
  54.  
  55.             default:
  56.                 if (command.startsWith("Message")) {
  57.                     message(command);
  58.                 } else if (eventExistsStartMenu(command)) {
  59.                     viewEvent(command);
  60.                 }else{
  61.                     System.out.println("Error, wrong command");
  62.                 }
  63.         }
  64.         return true;
  65.     }
  66.  
  67.     private void addEvent() {
  68.  
  69.         String eventNameTemp = inputStrings("Event name: ");
  70.         while(eventNameTemp.trim().isEmpty() || eventNameTemp.isEmpty()){
  71.             System.out.println("Error: name can't be empty");
  72.             eventNameTemp = inputStrings("Event name: ");
  73.         }
  74.         boolean eventAlreadyExists = false;
  75.  
  76.         for (Event e : eventList){
  77.             if (eventNameTemp.equals(e.getEventName())){
  78.                 eventAlreadyExists = true;
  79.                 break;
  80.             }
  81.         }
  82.         if(eventAlreadyExists){
  83.             System.out.println("Error: "+ eventNameTemp + " has already been added");
  84.         }else{
  85.             int attemptsAllowedTemp = inputInts("Attempts allowed: ");
  86.             while (attemptsAllowedTemp <= 0){
  87.                 System.out.println("Error: too low, must allow at least one attempt");
  88.                 attemptsAllowedTemp = inputInts("Attempts allowed: ");
  89.             }
  90.             System.out.println(eventNameTemp + " with " + attemptsAllowedTemp + " attempts allowed created");
  91.             eventList.add(new Event(eventNameTemp,attemptsAllowedTemp));
  92.         }
  93.  
  94.     }
  95.  
  96.     private void addParticipant() {
  97.  
  98.         String firstName = inputStrings("First name: ");
  99.         while (firstName.trim().isEmpty()) {
  100.             System.out.println("Error: name can't be empty!");
  101.             firstName = inputStrings("First name: ");
  102.         }
  103.  
  104.  
  105.         String lastName = inputStrings("Last name: ");
  106.         while (lastName.trim().isEmpty()) {
  107.             System.out.println("Error: name can't be empty!");
  108.             lastName = inputStrings("Last name: ");
  109.         }
  110.  
  111.  
  112.         String team = inputStrings("Team: ");
  113.         while (team.trim().isEmpty()) {
  114.             System.out.println("Error: name can't be emtpy!");
  115.             team = inputStrings("Team: ");
  116.         }
  117.  
  118.         participantNumber++;
  119.  
  120.         participantList.add(new Participant(firstName, lastName, team, participantNumber));
  121.  
  122.         System.out.println(participantList.get(participantList.size() - 1) + " added");
  123.  
  124.     }
  125.  
  126.     private void removeParticipant() {
  127.  
  128.         int participantToDelete = inputInts("Number: ");
  129.         if(!removeParticipantFromList(participantToDelete)){
  130.             System.out.println("Error: no participant with number " + participantToDelete + " exists");
  131.         }
  132.     }
  133.  
  134.     private void addResult(){
  135.  
  136.         int participantNumber = inputInts("Number: ");
  137.         if(!participantExists(participantNumber)){
  138.             System.out.println("Error: no participant with number " + participantNumber + " found!");
  139.             return;
  140.         }
  141.         Participant p = addResultParticipant(participantNumber);
  142.         String eventName = inputStrings("Event: ");
  143.         if(!eventExists(eventName)){
  144.             System.out.println("Error: no event called \"" + eventName + "\" found!");
  145.             return;
  146.         }
  147.         Event e = findEvent(eventName);
  148.  
  149.         if(p.countTries(participantNumber, eventName) < e.getAttemptsAllowed()){
  150.             double result = getResult(inputDoubles("Results for " + getName(participantNumber) + " from " + p.getTeam() + " in " + eventName + ": "), participantNumber, p, eventName);
  151.  
  152.             p.setResult(participantNumber, new Result(result, findEvent(eventName), p));
  153.             e.setResultListEvent(eventName, new Result(result, findEvent(eventName), p));
  154.  
  155.  
  156.         }else{
  157.             System.out.println("Error: " + getName(participantNumber) + " from " + p.getTeam() + " has already made " + e.getAttemptsAllowed() + " attempts in " + eventName);
  158.         }
  159.  
  160.     }
  161.  
  162.     private double getResult(double result, int startNumber, Participant o, String eventName){
  163.  
  164.         while (result < 0) {
  165.             System.out.println("Error: must be greater than or equal to zero!");
  166.             result = inputDoubles("Results for " + getName(startNumber) + " from " + o.getTeam() + " in " + eventName + ": ");
  167.         }
  168.  
  169.         return result;
  170.     }
  171.  
  172.     private void viewParticipant(){
  173.  
  174.         int inputViewParticipant = inputInts("Number: ");
  175.         if(!participantExists(inputViewParticipant)) {
  176.             System.out.println("Error: no participant with number " + inputViewParticipant + " found!");
  177.             return;
  178.         }
  179.         Participant p = findParticipant(inputViewParticipant);
  180.  
  181.         for (Event e : eventList) {
  182.             if(p.didParticipate(inputViewParticipant, e.getEventName())) {
  183.                 System.out.print("Results for " + getName(inputViewParticipant) + " in " + e.getEventName() + ": ");
  184.  
  185.                 p.getResultPerEvent(inputViewParticipant, e.getEventName());
  186.             }
  187.  
  188.             System.out.println(" ");
  189.         }
  190.     }
  191.  
  192.     private Participant findParticipant(int participantNumber){
  193.         for (Participant p : participantList){
  194.             if(p.getNumber() == participantNumber){
  195.                 return p;
  196.             }
  197.         }
  198.         return null;
  199.     }
  200.  
  201.     private List<Result> createBestResultList(String eventName){
  202.  
  203.         List<Result> bestResultList = new ArrayList<>();
  204.  
  205.  
  206.         for (Event e : eventList) {
  207.             if (eventName.equals(e.getEventName())) {
  208.  
  209.  
  210.                 for (Participant p : participantList) {
  211.                     for (Result r : p.getResultList()) {
  212.                         if (r.getEventName().equals(eventName) && !bestResultList.contains(p)) {
  213.                             bestResultList.add(r);
  214.  
  215.                         }
  216.                     }
  217.                 }
  218.             }
  219.         }
  220.  
  221.         return bestResultList;
  222.     }
  223.  
  224.     private void viewEvent(String eventName) {
  225.  
  226.         for (Event e : eventList){
  227.             if (eventName.equals(e.getEventName())){
  228.  
  229.                 e.viewEventList();
  230.             }
  231.         }
  232.  
  233.        // sortAlphabetically(bestResultList);
  234.         //bubbleSortList(bestResultList);
  235.  
  236.      /*   Participant[] bestResultsArray = convertListToArray(bestResultList);
  237.         int[] placements = new int[bestResultList.size()];
  238.         if (placements.length != 0)
  239.             placements[0] = 1;
  240.  
  241.         for (int i = 1; i < placements.length; i++){
  242.             for (Participant p : bestResultsArray){
  243.                 placements[i] = bestResultsArray[i].getResult().getResult() == bestResultsArray[i-1].getResult().getResult() ? placements[i - 1] : i+1;
  244.             }
  245.         }
  246.  
  247.         System.out.println("Results for " + eventName);
  248.         for (int i = 0; i < bestResultsArray.length; i++) {
  249.             System.out.print(placements[i] + ": ");
  250.             System.out.println(bestResultsArray[i].getResult().getResult() + " " + bestResultsArray[i].getFullName() + " " +  bestResultsArray[i].getTeam());
  251.         }*/
  252.  
  253.  
  254.  
  255.     }
  256.  
  257.     private List<Participant> sortAlphabetically(List<Participant> listToSort){
  258.  
  259.         Collections.sort(listToSort, new Comparator<Participant>() {
  260.             public int compare(Participant p1, Participant p2) {
  261.                 return p1.getFullName().compareTo(p1.getFullName());
  262.             }
  263.         });
  264.         return listToSort;
  265.     }
  266.  
  267.     private List<Participant> bubbleSortList(List<Participant> listToSort){
  268.         int n = listToSort.size();
  269.         Participant temp;
  270.  
  271.         for (Participant p : listToSort) {
  272.             for (int i = 0; i < n; i++) {
  273.                 for (int j = 1; j < (n - i); j++) {
  274.                     if (listToSort.get(j - 1).getResult().getResult() < listToSort.get(j).getResult().getResult()){
  275.                         temp = listToSort.get(j - 1);
  276.                         listToSort.set(j - 1, listToSort.get(j));
  277.                         listToSort.set(j, temp);
  278.                     }
  279.                 }
  280.             }
  281.         }
  282.         return listToSort;
  283.     }
  284.  
  285.     private Participant [] convertListToArray (List finishedList){
  286.         Participant[] resultArray = new Participant[finishedList.size()];
  287.         finishedList.toArray(resultArray);
  288.         return resultArray;
  289.     }
  290.  
  291.     private boolean removeParticipantFromList (int participantNumber){
  292.         for (Participant p : participantList){
  293.             if(p.getNumber() == participantNumber){
  294.                 System.out.println(p.getFullName() + " from " + p.getTeam() + " with number " + participantNumber + " removed");
  295.                 participantList.remove(p);
  296.                 return true;
  297.             }
  298.         }
  299.         return false;
  300.     }
  301.  
  302.     private boolean participantExists (int participantNumber){
  303.  
  304.         for (Participant o : participantList){
  305.             if(o.getNumber() == participantNumber){
  306.                 return true;
  307.             }
  308.         }
  309.         return false;
  310.     }
  311.  
  312.     private boolean eventExists(String eventName){
  313.         boolean exists = false;
  314.  
  315.         for (Event e : eventList){
  316.             if(eventName.equals(e.getEventName())) {
  317.                 exists = true;
  318.                 break;
  319.             }else{
  320.                 exists = false;
  321.             }
  322.         }
  323.         return exists;
  324.     }
  325.  
  326.     private Participant addResultParticipant(int participantNumber) {
  327.         Participant o = null;
  328.         for (Participant p : participantList) {
  329.             if (participantNumber != p.getNumber()) {
  330.                 o = null;
  331.             } else {
  332.                 o = p;
  333.                 return o;
  334.             }
  335.         }
  336.         return o;
  337.     }
  338.  
  339.     private Event findEvent(String eventName){
  340.         Event w = null;
  341.         for (Event e : eventList){
  342.             if(!eventName.equals(e.getEventName())){
  343.                 w = null;
  344.             }else{
  345.                 w = e;
  346.                 return w;
  347.             }
  348.         }
  349.         return w;
  350.     }
  351.  
  352.     private boolean eventExistsStartMenu(String command){
  353.         for (Event e : eventList){
  354.             if(command.equals(e.getEventName())){
  355.                 return true;
  356.             }
  357.         }
  358.         return false;
  359.     }
  360.  
  361.     private void message(String command) {
  362.  
  363.         String cutMessage = command.substring(8, Math.min(command.length(), 62));
  364.  
  365.         if (cutMessage.length() % 2 == 0) {
  366.             int paddingNeededPerSide = (58 - cutMessage.length()) / 2;
  367.             String paddingLeftSide = String.format("%" + paddingNeededPerSide + "s", "");
  368.             String paddingRightSide = String.format("%-" + paddingNeededPerSide + "s", "");
  369.  
  370.             System.out.println("############################################################");
  371.             System.out.println("#                                                          #");
  372.             System.out.println("#" + paddingLeftSide + cutMessage.toUpperCase() + paddingRightSide + "#");
  373.             System.out.println("#                                                          #");
  374.             System.out.println("############################################################");
  375.         } else {
  376.             int paddingNeededPerSide = (58 - cutMessage.length()) / 2;
  377.             String paddingLeftSide = String.format("%" + paddingNeededPerSide + "s", "");
  378.             String paddingRightSide = String.format("%-" + paddingNeededPerSide + "s", "");
  379.  
  380.             System.out.println("############################################################");
  381.             System.out.println("#                                                          #");
  382.             System.out.println("#" + paddingLeftSide + cutMessage.toUpperCase() + paddingRightSide + " #");
  383.             System.out.println("#                                                          #");
  384.             System.out.println("############################################################");
  385.         }
  386.  
  387.  
  388.     }
  389.  
  390.     private String getName(int number) {
  391.  
  392.         String fullName = null;
  393.  
  394.         for (Participant p : participantList) {
  395.             if (p.getNumber() == number) {
  396.                 fullName = p.getFirstName() + " " + p.getLastName();
  397.                 return fullName;
  398.             }
  399.         }
  400.  
  401.         return fullName;
  402.     }
  403.  
  404.     private String inputStrings(String prompt) {
  405.         System.out.print(prompt);
  406.         String s = keyboard.nextLine().toLowerCase().trim();
  407.  
  408.         if(s.isEmpty()){
  409.             s = " ";
  410.         }
  411.         String sNormalized = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
  412.         return sNormalized;
  413.     }
  414.  
  415.     private int inputInts(String prompt) {
  416.         System.out.print(prompt);
  417.         int i = keyboard.nextInt();
  418.         keyboard.nextLine();
  419.         return i;
  420.     }
  421.  
  422.     private double inputDoubles(String prompt) {
  423.         System.out.print(prompt);
  424.         double d = keyboard.nextDouble();
  425.         keyboard.nextLine();
  426.         return d;
  427.     }
  428.  
  429.     private void run() {
  430.         boolean running;
  431.  
  432.         do {
  433.  
  434.             String command = readCommand();
  435.             running = useCommand(command);
  436.  
  437.         } while (running);
  438.     }
  439.  
  440.     public static void main(String[] args) {
  441.         new Register().run();
  442.  
  443.     }
  444.  
  445. }
  446.  
  447.  
  448. NY KLASS RESULT
  449.  
  450. // Felix Vejdegren || Jack Hällström || Douglas Hammarstam
  451. // feve5814@student.su.se || jaha4972@student.su.se || doha6991@student.su.se
  452.  
  453. public class Result {
  454.  
  455.     private double result;
  456.     private Event e;
  457.     private Participant p;
  458.  
  459.  
  460.     public Result(double result, Event e, Participant p) {
  461.         this.e = e;
  462.         this.result = result;
  463.         this.p = p;
  464.     }
  465.  
  466.     public double getResult() {
  467.         return result;
  468.     }
  469.  
  470.     public void setResult(double result) {
  471.         this.result = result;
  472.     }
  473.  
  474.     public Event getEvent() {
  475.         return e;
  476.     }
  477.  
  478.     public void setEvent(Event e){
  479.         this.e = e;
  480.     }
  481.  
  482.     public Participant getParticipant() {
  483.         return p;
  484.     }
  485.  
  486.     public void setParticipant(Participant p){
  487.         this.p = p;
  488.     }
  489.  
  490.     public String getEventName(){
  491.         return e.getEventName();
  492.     }
  493.  
  494.     public String toString() {
  495.         return (" " + e + " " + result + " " + p);
  496.     }
  497.  
  498.  
  499. }
  500.  
  501. NY KLASS EVENT
  502.  
  503. // Felix Vejdegren || Jack Hällström || Douglas Hammarstam
  504. // feve5814@student.su.se || jaha4972@student.su.se || doha6991@student.su.se
  505.  
  506.  
  507. import java.util.ArrayList;
  508. import java.util.Collections;
  509. import java.util.Comparator;
  510. import java.util.List;
  511.  
  512. public class Event {
  513.  
  514.     private String eventName;
  515.     private int attemptsAllowed;
  516.     private List<Result> resultListEvent = new ArrayList<>();
  517.  
  518.     public Event(String eventName, int attemptsAllowed) {
  519.         this.eventName = eventName;
  520.         this.attemptsAllowed = attemptsAllowed;
  521.     }
  522.  
  523.     public String getEventName() {
  524.         return eventName;
  525.     }
  526.  
  527.     public void setEventName(String eventName) {
  528.         this.eventName = eventName;
  529.     }
  530.  
  531.     public int getAttemptsAllowed() {
  532.         return attemptsAllowed;
  533.     }
  534.  
  535.     public void setAttemptsAllowed(int attemptsAllowed) {
  536.         this.attemptsAllowed = attemptsAllowed;
  537.     }
  538.  
  539.     public List<Result> getResultListEvent(){
  540.         return resultListEvent;
  541.     }
  542.  
  543.     public void setResultListEvent(String eventNameSet, Result r){
  544.         if (eventName.equals(eventNameSet)){
  545.             resultListEvent.add(r);
  546.             bubbleSortList(resultListEvent);
  547.         }
  548.     }
  549.  
  550.     public List<Result> checkForDuplicates() {
  551.  
  552.         List<Result> resultListTemp = new ArrayList<>();
  553.         boolean duplicateExist = false;
  554.         Result resultTemp = null;
  555.  
  556.             for (Result r : resultListEvent) {
  557.                 System.out.println("första for");
  558.                 if(resultListTemp.isEmpty()){
  559.                     System.out.println("första IF BÖR BARA FUNKA 1 GÅNG");
  560.                     resultListTemp.add(r);
  561.                 }else{
  562.                     for (Result t : resultListTemp){
  563.                         System.out.println("andra for");
  564.                         if ( t.getParticipant() != r.getParticipant()) {
  565.                             duplicateExist = true;
  566.                             resultTemp = t;
  567.                             System.out.println(resultListTemp + " inne i if");
  568.                         }
  569.                     }
  570.                     if(duplicateExist){
  571.                         resultListTemp.add(resultTemp);
  572.                     }
  573.                 }
  574.             }
  575.             System.out.println(resultListTemp);
  576.             return resultListTemp;
  577.     }
  578.  
  579.     public List<Result> bubbleSortList(List<Result> listToSort){
  580.         int n = resultListEvent.size();
  581.         Result temp;
  582.  
  583.         for (Result r : listToSort){
  584.             for(int i = 0 ; i < n; i++){
  585.                 for ( int j = 1; j < (n - i); j++){
  586.                     if(listToSort.get(j-1).getResult() < listToSort.get(j).getResult()){
  587.                         temp = listToSort.get(j - 1);
  588.                         listToSort.set(j -1, listToSort.get(j));
  589.                         listToSort.set(j, temp);
  590.                     }
  591.                 }
  592.             }
  593.         }
  594.         return listToSort;
  595.  
  596.     }
  597.  
  598.     public void viewEventList() {
  599.  
  600.         System.out.println(bubbleSortList(sortAlphabetically(checkForDuplicates())));
  601.     }
  602.  
  603.     public List<Result> sortAlphabetically(List<Result> listToSort){
  604.  
  605.         Collections.sort(listToSort, new Comparator<Result>() {
  606.             public int compare(Result r1, Result r2) {
  607.                 return r1.getParticipant().getFullName().compareTo(r2.getParticipant().getFullName());
  608.             }
  609.         });
  610.         return listToSort;
  611.  
  612.     }
  613.  
  614.     public void getResultsPerEvent(){
  615.         for (Result r : resultListEvent){
  616.  
  617.         }
  618.     }
  619.  
  620.     public String toString() {
  621.         return (eventName + " " + attemptsAllowed);
  622.     }
  623.  
  624. }
  625.  
  626. NY KLASS PARTICIPANT
  627.  
  628. // Felix Vejdegren || Jack Hällström || Douglas Hammarstam
  629. // feve5814@student.su.se || jaha4972@student.su.se || doha6991@student.su.se
  630. import java.util.ArrayList;
  631. import java.util.List;
  632.  
  633. public class Participant {
  634.  
  635.     private String firstName;
  636.     private String lastName;
  637.  
  638.     private String team;
  639.     private int number;
  640.     private List<Result> resultList = new ArrayList<>();
  641.  
  642.  
  643.     public Participant(String firstName, String lastName, String team, int number) {
  644.         this.firstName = firstName;
  645.         this.lastName = lastName;
  646.         this.team = team;
  647.         this.number = number;
  648.     }
  649.  
  650.  
  651.     public String getFirstName() {
  652.         return firstName;
  653.     }
  654.  
  655.     public void setFirstName(String firstName) {
  656.         this.firstName = firstName;
  657.     }
  658.  
  659.     public String getLastName() {
  660.         return lastName;
  661.     }
  662.  
  663.     public void setLastName(String lastName) {
  664.         this.lastName = lastName;
  665.     }
  666.  
  667.     public String getFullName() {
  668.         return firstName + " " + lastName;
  669.     }
  670.  
  671.     public String getTeam() {
  672.         return team;
  673.     }
  674.  
  675.     public void setTeam(String team) {
  676.         this.team = team;
  677.     }
  678.  
  679.     public int getNumber() {
  680.         return number;
  681.     }
  682.  
  683.     public void setNumber(int number) {
  684.         this.number = number;
  685.     }
  686.  
  687.     public Result getResult(){
  688.         for (Result r : resultList){
  689.             return r;
  690.         }
  691.         return null;
  692.     }
  693.  
  694.     public List<Result> getResultList(){
  695.         return resultList;
  696.     }
  697.  
  698.     public void setResult(int participant, Result r){
  699.         if(participant== number){
  700.             resultList.add(r);
  701.             bubbleSortList(resultList);
  702.         }
  703.     }
  704.  
  705.     public int countTries(int number, String eventName){
  706.         int tries = 0;
  707.         for(Result r : resultList){
  708.             if(r.getEventName().equals(eventName) && getNumber() == number)
  709.                 tries++;
  710.         }
  711.         return tries;
  712.     }
  713.  
  714.     public void getResultPerEvent (int viewParticipant, String eventName){
  715.  
  716.         List<Result> participantResults = new ArrayList<>();
  717.  
  718.         for(Result r : resultList){
  719.             if(getNumber() == viewParticipant && r.getEventName().equals(eventName)){
  720.                 participantResults.add(r);
  721.             }
  722.         }
  723.         System.out.print(participantResults);
  724.     }
  725.  
  726.     public boolean didParticipate (int number, String eventName){
  727.         for (Result r : resultList){
  728.             if(getNumber()==number &&  r.getEventName().equals(eventName)){
  729.                 return true;
  730.             }
  731.         }
  732.         return false;
  733.     }
  734.  
  735.     public List<Result> bubbleSortList(List<Result> listToSort){
  736.         int n = resultList.size();
  737.         Result temp;
  738.  
  739.         for (Result r : listToSort){
  740.             for(int i = 0 ; i < n; i++){
  741.                 for ( int j = 1; j < (n - i); j++){
  742.                     if(listToSort.get(j-1).getResult() < listToSort.get(j).getResult()){
  743.                         temp = listToSort.get(j - 1);
  744.                         listToSort.set(j -1, listToSort.get(j));
  745.                         listToSort.set(j, temp);
  746.                     }
  747.                 }
  748.             }
  749.         }
  750.         return listToSort;
  751.  
  752.     }
  753.  
  754.     public String toString() {
  755.         return (firstName + " " + lastName + " from " + team + " with number " + number);
  756.     }
  757. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement