• TVShow.java

  • §
    package MusicLandscape.entities;
    
    /**
     * represents the appearance of an artist in (a certain edition of) a TVShow as a specific event. e.g.
     * "Johnny Cash" on "The Tonight Show".
     *
     * @author Jonas Altrock (ew20b126@technikum-wien.at)
     * @version 1
     * @since ExerciseSheet03
     */
    public class TVShow extends Event {
        /**
         * the name of this TV show
         * <p>
         * The name of a TVShow cannot be empty or composed of whitespace only.
         */
        private String name;
    
        /**
         * the number of viewers of this TVShow
         * <p>
         * must be non-negative, 0 means unknown
         */
        private int viewers = 0;
    
        /**
         * creates a default TVShow
         * <p>
         * a default TVShow is a default event with an unknown name and an unknown number of viewers.
         */
        public TVShow() {
            super();
        }
    
        /**
         * creates a TV show from an event
         * <p>
         * this constructor performs some kind of promotion such that it takes a generic event and creates
         * a TV show which is a (deep) copy of the original event. The resulting TV show has unknown name and
         * unknown viewers.
         *
         * @param e - the event to copy/promote to TV show
         */
        public TVShow(Event e) {
            super(e);
        }
    
        /**
         * creates a deep copy of a TVShow
         *
         * @param tvs - the TV show to copy
         */
        public TVShow(TVShow tvs) {
            super(tvs);
    
            name = tvs.name;
            viewers = tvs.viewers;
        }
    
        /**
         * gets the number of viewers of this TVShow
         *
         * @return the viewers
         */
        public int getViewers() {
            return viewers;
        }
    
        /**
         * sets the viewers of this TVshow
         * <p>
         * illegal arguments are ignored
         *
         * @param v - the number of viewers to set
         */
        public void setViewers(int v) {
            if (v < 0) {
                return;
            }
            viewers = v;
        }
    
        /**
         * gets the name of this TVShow
         *
         * @return the name
         */
        public String getName() {
            return name;
        }
    
        /**
         * sets the name of this TVShow
         * <p>
         * illegal arguments are ignored
         *
         * @param name - the name to set
         */
        public void setName(String name) {
            if (name == null || name.isBlank()) {
                return;
            }
    
            this.name = name;
        }
    
        /**
         * returns a String representation of this TV
         * <p>
         * show the string representation of a TV show is (without quotes):
         * <pre>
         * "artist name" @ "show name" on "date"
         * "description"
         * ("audience" attending ("impact"))
         * </pre>
         * audience are all viewers and attendees of a show
         *
         * @return the string representation
         */
        @Override
        public String toString() {
            return getArtist().getName() + " @ " + name + " on " + getDate().toString() + "\n" +
                    getDescription() + "\n" +
                    "(" + (viewers + getAttendees()) + " attending (" + impact() + "))";
        }
    
        /**
         * returns the impact of this event
         * <p>
         * the impact is an estimation of the number of people who took notice of this event for a TV show
         * event, the impact is the audience times 2. audience are all viewers and attendees of a show
         *
         * @return the impact
         */
        @Override
        public int impact() {
            return (viewers + getAttendees()) * 2;
        }
    }