001    package market;
002    
003    /* Generated by Together */
004    import java.util.Calendar;
005    
006    import users.User;
007    
008    /**
009     * A person that interacts with the market. Can be a {@link UCustomer customer} or an
010     * {@link UStaffer employee}.
011     */
012    public class UPerson extends User {
013    
014        public static String HERR = new String("Herr");
015        public static String FRAU = new String("Frau");
016    
017        private String salutation;
018        private String name;
019        private String firstName;
020        private String street;
021        private int postcode;
022        private String city;
023        private String telephone;
024        private Calendar date;
025    
026        /**
027         * Creates a new person.
028         * @param userName the person's ID.
029         */
030        public UPerson(String userName){
031            super(userName);
032            date = (Calendar)SMarket.getTime().clone();
033        }
034    
035        /**
036         * Sets the person's name.
037         * @param salutation the person's salutation (Mr, Mrs)
038         * @param name the person's surname.
039         * @param firstName the person's forename.
040         */
041        public void setFullName(String salutation, String name, String firstName) {
042            this.salutation = salutation;
043            this.name = name;
044            this.firstName = firstName;
045        }
046    
047        /**
048         * Sets the person's address.
049         */
050        public void setAddress(String street, int postcode, String city) {
051            this.street = street;
052            this.postcode = postcode;
053            this.city = city;
054        }
055    
056        /**
057         * Sets the person's telephone number.
058         */
059        public void setTelephone(String telephone) {
060            this.telephone = telephone;
061        }
062    
063        /**
064         * Gets the person's name.
065         * @return the full name, containing salutation, forename and surname.
066         */
067        public String getFullName() {
068            return (salutation + " " + firstName + " " + name);
069        }
070    
071        /**
072         * Gets the person's address.
073         * @return the address, containing street, postcode and city.
074         */
075        public String getAdress() {
076            return (street + Integer.toString(postcode) + city);
077        }
078    
079        /**
080         * Gets the person's telephone number.
081         * @return the telephone number.
082         */
083        public String getTelephone() {
084            return telephone;
085        }
086    
087        /**
088         * Gets the person's salutation.
089         * @return the salutation.
090         */
091        public String getSalutation() {
092            return salutation;
093        }
094    
095        /**
096         * Sets the person's salutation.
097         * @param salutation the salutation to be set.
098         */
099        public void setSalutation(String salutation) {
100            this.salutation = salutation;
101        }
102    
103        /**
104         * Gets the person's surname.
105         * @return the surname.
106         */
107        public String getSurname() {
108            return name;
109        }
110    
111        /**
112         * Sets the person's surname.
113         * @param name the surname to be set.
114         */
115        public void setSurname(String name) {
116            this.name = name;
117        }
118    
119        /**
120         * Gets the person's forename.
121         * @return the forename.
122         */
123        public String getFirstName() {
124            return firstName;
125        }
126    
127        /**
128         * Sets the person's forename.
129         * @param firstName the forename to be set.
130         */
131        public void setFirstName(String firstName) {
132            this.firstName = firstName;
133        }
134    
135        /**
136         * Gets the street where the person lives.
137         * @return the street.
138         */
139        public String getStreet() {
140            return street;
141        }
142    
143        /**
144         * Sets the street where the person lives.
145         * @param street the street to be set.
146         */
147        public void setStreet(String street) {
148            this.street = street;
149        }
150    
151        /**
152         * Gets the person's postcode.
153         * @return the postcode.
154         */
155        public int getPostcode() {
156            return postcode;
157        }
158    
159        /**
160         * Sets the person's postcode.
161         * @param postcode the postcode to be set.
162         */
163        public void setPostcode(int postcode) {
164            this.postcode = postcode;
165        }
166    
167        /**
168         * Gets the city where the person lives.
169         * @return the city.
170         */
171        public String getCity() {
172            return city;
173        }
174    
175        /**
176         * Sets the city where the person lives.
177         * @param city the city.
178         */
179        public void setCity(String city) {
180            this.city = city;
181        }
182    
183        /**
184         * Gets the day the person has first had contact with the market.<br>
185         * For customer this is the registration, for workers the day of employment.
186         *
187         * @return the date registration or employment.
188         */
189        public Calendar getDayOfRegistration() {
190            return date;
191        }
192    
193        /**
194         * Returns the time in months the person has been part of the market, be it as customer or worker.
195         * @return the time of membership or employment.
196         * @see #getDayOfRegistration
197         */
198        public int getMonthsOfMembership() {
199            Calendar start = (Calendar)date.clone();
200            Calendar now = SMarket.getTime();
201            int months = 12 * (now.get(Calendar.YEAR) - start.get(Calendar.YEAR));
202            months += now.get(Calendar.MONTH) - start.get(Calendar.MONTH);
203            if (start.get(Calendar.DATE) > now.get(Calendar.DATE)) months--;
204            return months;
205        }
206    
207        /**
208         * Sets the default comparison order for UPersons to <surname, forename>
209         */
210        public int compareTo(Object o) {
211            if (o instanceof UPerson) {
212                UPerson u = (UPerson) o;
213                return new String(getSurname() + getFirstName()).compareTo(
214                        new String(u.getSurname() + u.getFirstName()));
215            } else {
216                return 0;
217            }
218        }
219    }