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