001package org.cpsolver.studentsct.model;
002
003import org.cpsolver.ifs.util.ToolBox;
004
005/**
006 * Academic area, classification, and major code. This class is used for
007 * {@link Student#getAreaClassificationMajors()}. <br>
008 * <br>
009 * 
010 * @version StudentSct 1.3 (Student Sectioning)<br>
011 *          Copyright (C) 2007 - 2014 Tomáš Müller<br>
012 *          <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
013 *          <a href="http://muller.unitime.org">http://muller.unitime.org</a><br>
014 * <br>
015 *          This library is free software; you can redistribute it and/or modify
016 *          it under the terms of the GNU Lesser General Public License as
017 *          published by the Free Software Foundation; either version 3 of the
018 *          License, or (at your option) any later version. <br>
019 * <br>
020 *          This library is distributed in the hope that it will be useful, but
021 *          WITHOUT ANY WARRANTY; without even the implied warranty of
022 *          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
023 *          Lesser General Public License for more details. <br>
024 * <br>
025 *          You should have received a copy of the GNU Lesser General Public
026 *          License along with this library; if not see
027 *          <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>.
028 */
029public class AreaClassificationMajor {
030    private String iArea, iClassification, iMajor, iConcentration;
031    private String iAreaName, iClassificationName, iMajorName, iConcentrationName;
032    private Double iWeight;
033    private String iDegree, iDegreeName;
034    private String iProgram, iProgramName;
035
036    /**
037     * Constructor
038     * 
039     * @param area academic area
040     * @param classification academic classification
041     * @param major major
042     */
043    public AreaClassificationMajor(String area, String classification, String major) {
044        iArea = area;
045        iClassification = classification;
046        iMajor = major;
047    }
048    
049    /**
050     * Constructor
051     * 
052     * @param area academic area
053     * @param classification academic classification
054     * @param major major
055     * @param concentration concentration (optional)
056     */
057    public AreaClassificationMajor(String area, String classification, String major, String concentration) {
058        iArea = area;
059        iClassification = classification;
060        iMajor = major;
061        iConcentration = concentration;
062    }
063    
064    /**
065     * Constructor
066     * 
067     * @param area academic area
068     * @param classification academic classification
069     * @param major major
070     * @param concentration concentration (optional)
071     * @param weight weight (optional)
072     */
073    public AreaClassificationMajor(String area, String classification, String major, String concentration, Double weight) {
074        iArea = area;
075        iClassification = classification;
076        iMajor = major;
077        iConcentration = concentration;
078        iWeight = weight;
079    }
080    
081    /**
082     * Constructor
083     * 
084     * @param areaCode academic area abbreviation
085     * @param areaName academic area name
086     * @param classificationCode academic classificationCode
087     * @param classificationName academic classificationName
088     * @param majorCode major code
089     * @param majorName major name
090     */
091    public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName) {
092        iArea = areaCode;
093        iAreaName = areaName;
094        iClassification = classificationCode;
095        iClassificationName = classificationName;
096        iMajor = majorCode;
097        iMajorName = majorName;
098    }
099    
100    /**
101     * Constructor
102     * 
103     * @param areaCode academic area abbreviation
104     * @param areaName academic area name
105     * @param classificationCode academic classificationCode
106     * @param classificationName academic classificationName
107     * @param majorCode major code
108     * @param majorName major name
109     * @param concentrationCode concentration (optional)
110     * @param concentrationName concentration (optional)
111     */
112    public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName) {
113        iArea = areaCode;
114        iAreaName = areaName;
115        iClassification = classificationCode;
116        iClassificationName = classificationName;
117        iMajor = majorCode;
118        iMajorName = majorName;
119        iConcentration = concentrationCode;
120        iConcentrationName = concentrationName;
121    }
122    
123    /**
124     * Constructor
125     * 
126     * @param areaCode academic area abbreviation
127     * @param areaName academic area name
128     * @param classificationCode academic classificationCode
129     * @param classificationName academic classificationName
130     * @param majorCode major code
131     * @param majorName major name
132     * @param concentrationCode concentration (optional)
133     * @param concentrationName concentration (optional)
134     * @param weight weight (optional)
135     */
136    public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName, Double weight) {
137        iArea = areaCode;
138        iAreaName = areaName;
139        iClassification = classificationCode;
140        iClassificationName = classificationName;
141        iMajor = majorCode;
142        iMajorName = majorName;
143        iConcentration = concentrationCode;
144        iConcentrationName = concentrationName;
145        iWeight = weight;
146    }
147    
148    /**
149     * Constructor
150     * 
151     * @param areaCode academic area abbreviation
152     * @param areaName academic area name
153     * @param classificationCode academic classificationCode
154     * @param classificationName academic classificationName
155     * @param majorCode major code
156     * @param majorName major name
157     * @param concentrationCode concentration (optional)
158     * @param concentrationName concentration (optional)
159     * @param degreeCode degree (optional)
160     * @param degreeName degree (optional)
161     * @param weight weight (optional)
162     */
163    public AreaClassificationMajor(
164            String areaCode, String areaName,
165            String classificationCode, String classificationName,
166            String majorCode, String majorName,
167            String concentrationCode, String concentrationName,
168            String degreeCode, String degreeName,
169            Double weight) {
170        iArea = areaCode;
171        iAreaName = areaName;
172        iClassification = classificationCode;
173        iClassificationName = classificationName;
174        iMajor = majorCode;
175        iMajorName = majorName;
176        iConcentration = concentrationCode;
177        iConcentrationName = concentrationName;
178        iDegree = degreeCode;
179        iDegreeName = degreeName;
180        iWeight = weight;
181    }
182    
183    /**
184     * Constructor
185     * 
186     * @param areaCode academic area abbreviation
187     * @param areaName academic area name
188     * @param classificationCode academic classificationCode
189     * @param classificationName academic classificationName
190     * @param majorCode major code
191     * @param majorName major name
192     * @param concentrationCode concentration (optional)
193     * @param concentrationName concentration (optional)
194     * @param degreeCode degree (optional)
195     * @param degreeName degree (optional)
196     * @param programCode program (optional)
197     * @param programName program (optional)
198     * @param weight weight (optional)
199     */
200    public AreaClassificationMajor(
201            String areaCode, String areaName,
202            String classificationCode, String classificationName,
203            String majorCode, String majorName,
204            String concentrationCode, String concentrationName,
205            String degreeCode, String degreeName,
206            String programCode, String programName,
207            Double weight) {
208        iArea = areaCode;
209        iAreaName = areaName;
210        iClassification = classificationCode;
211        iClassificationName = classificationName;
212        iMajor = majorCode;
213        iMajorName = majorName;
214        iConcentration = concentrationCode;
215        iConcentrationName = concentrationName;
216        iDegree = degreeCode;
217        iDegreeName = degreeName;
218        iProgram = programCode;
219        iProgramName = programName;
220        iWeight = weight;
221    }
222
223    /** Academic area 
224     * @return academic area abbreviation
225     **/
226    public String getArea() {
227        return iArea;
228    }
229
230    /** Academic classification 
231     * @return classification code
232     **/
233    public String getClassification() {
234        return iClassification;
235    }
236    
237    /** Major 
238     * @return major code
239     **/
240    public String getMajor() {
241        return iMajor;
242    }
243    
244    /** Concentration (optional)
245     * @return concentration code
246     **/
247    public String getConcentration() {
248        return iConcentration;
249    }
250    
251    /** Degree (optional)
252     * @return degree code
253     **/
254    public String getDegree() {
255        return iDegree;
256    }
257    
258    /** Program (optional)
259     * @return program code
260     **/
261    public String getProgram() {
262        return iProgram;
263    }
264    
265    /** Academic area  name
266     * @return academic area name
267     **/
268    public String getAreaName() {
269        return iAreaName;
270    }
271
272    /** Academic classification name
273     * @return classification name
274     **/
275    public String getClassificationName() {
276        return iClassificationName;
277    }
278    
279    /** Major name
280     * @return major name
281     **/
282    public String getMajorName() {
283        return iMajorName;
284    }
285    
286    /** Concentration (optional)
287     * @return concentration name
288     **/
289    public String getConcentrationName() {
290        return iConcentrationName;
291    }
292    
293    /** Degree (optional)
294     * @return degree name
295     **/
296    public String getDegreeName() {
297        return iDegreeName;
298    }
299    
300    /** Program (optional)
301     * @return program name
302     **/
303    public String getProgramName() {
304        return iProgramName;
305    }
306    
307    /** Weight (optional, defaults to 1.0)
308     */
309    public double getWeight() { return iWeight == null ? 1.0 : iWeight.doubleValue(); }
310
311    @Override
312    public int hashCode() {
313        return toString().hashCode();
314    }
315
316    @Override
317    public boolean equals(Object o) {
318        if (o == null || !(o instanceof AreaClassificationMajor))
319            return false;
320        AreaClassificationMajor acm = (AreaClassificationMajor) o;
321        return ToolBox.equals(acm.getArea(), getArea()) && ToolBox.equals(acm.getClassification(), getClassification()) && ToolBox.equals(acm.getMajor(), getMajor());
322    }
323
324    @Override
325    public String toString() {
326        return getArea() + "/" + getMajor() + (getConcentration() == null || getConcentration().isEmpty()? "" : "-" + getConcentration()) + " " + getClassification();
327    }
328}