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 implements Comparable<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 private String iCampus, iCampusName; 036 037 /** 038 * Constructor 039 * 040 * @param area academic area 041 * @param classification academic classification 042 * @param major major 043 */ 044 public AreaClassificationMajor(String area, String classification, String major) { 045 iArea = area; 046 iClassification = classification; 047 iMajor = major; 048 } 049 050 /** 051 * Constructor 052 * 053 * @param area academic area 054 * @param classification academic classification 055 * @param major major 056 * @param concentration concentration (optional) 057 */ 058 public AreaClassificationMajor(String area, String classification, String major, String concentration) { 059 iArea = area; 060 iClassification = classification; 061 iMajor = major; 062 iConcentration = concentration; 063 } 064 065 /** 066 * Constructor 067 * 068 * @param area academic area 069 * @param classification academic classification 070 * @param major major 071 * @param concentration concentration (optional) 072 * @param weight weight (optional) 073 */ 074 public AreaClassificationMajor(String area, String classification, String major, String concentration, Double weight) { 075 iArea = area; 076 iClassification = classification; 077 iMajor = major; 078 iConcentration = concentration; 079 iWeight = weight; 080 } 081 082 /** 083 * Constructor 084 * 085 * @param areaCode academic area abbreviation 086 * @param areaName academic area name 087 * @param classificationCode academic classificationCode 088 * @param classificationName academic classificationName 089 * @param majorCode major code 090 * @param majorName major name 091 */ 092 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName) { 093 iArea = areaCode; 094 iAreaName = areaName; 095 iClassification = classificationCode; 096 iClassificationName = classificationName; 097 iMajor = majorCode; 098 iMajorName = majorName; 099 } 100 101 /** 102 * Constructor 103 * 104 * @param areaCode academic area abbreviation 105 * @param areaName academic area name 106 * @param classificationCode academic classificationCode 107 * @param classificationName academic classificationName 108 * @param majorCode major code 109 * @param majorName major name 110 * @param concentrationCode concentration (optional) 111 * @param concentrationName concentration (optional) 112 */ 113 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName) { 114 iArea = areaCode; 115 iAreaName = areaName; 116 iClassification = classificationCode; 117 iClassificationName = classificationName; 118 iMajor = majorCode; 119 iMajorName = majorName; 120 iConcentration = concentrationCode; 121 iConcentrationName = concentrationName; 122 } 123 124 /** 125 * Constructor 126 * 127 * @param areaCode academic area abbreviation 128 * @param areaName academic area name 129 * @param classificationCode academic classificationCode 130 * @param classificationName academic classificationName 131 * @param majorCode major code 132 * @param majorName major name 133 * @param concentrationCode concentration (optional) 134 * @param concentrationName concentration (optional) 135 * @param weight weight (optional) 136 */ 137 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName, Double weight) { 138 iArea = areaCode; 139 iAreaName = areaName; 140 iClassification = classificationCode; 141 iClassificationName = classificationName; 142 iMajor = majorCode; 143 iMajorName = majorName; 144 iConcentration = concentrationCode; 145 iConcentrationName = concentrationName; 146 iWeight = weight; 147 } 148 149 /** 150 * Constructor 151 * 152 * @param areaCode academic area abbreviation 153 * @param areaName academic area name 154 * @param classificationCode academic classificationCode 155 * @param classificationName academic classificationName 156 * @param majorCode major code 157 * @param majorName major name 158 * @param concentrationCode concentration (optional) 159 * @param concentrationName concentration (optional) 160 * @param degreeCode degree (optional) 161 * @param degreeName degree (optional) 162 * @param weight weight (optional) 163 */ 164 public AreaClassificationMajor( 165 String areaCode, String areaName, 166 String classificationCode, String classificationName, 167 String majorCode, String majorName, 168 String concentrationCode, String concentrationName, 169 String degreeCode, String degreeName, 170 Double weight) { 171 iArea = areaCode; 172 iAreaName = areaName; 173 iClassification = classificationCode; 174 iClassificationName = classificationName; 175 iMajor = majorCode; 176 iMajorName = majorName; 177 iConcentration = concentrationCode; 178 iConcentrationName = concentrationName; 179 iDegree = degreeCode; 180 iDegreeName = degreeName; 181 iWeight = weight; 182 } 183 184 /** 185 * Constructor 186 * 187 * @param areaCode academic area abbreviation 188 * @param areaName academic area name 189 * @param classificationCode academic classificationCode 190 * @param classificationName academic classificationName 191 * @param majorCode major code 192 * @param majorName major name 193 * @param concentrationCode concentration (optional) 194 * @param concentrationName concentration (optional) 195 * @param degreeCode degree (optional) 196 * @param degreeName degree (optional) 197 * @param programCode program (optional) 198 * @param programName program (optional) 199 * @param weight weight (optional) 200 */ 201 public AreaClassificationMajor( 202 String areaCode, String areaName, 203 String classificationCode, String classificationName, 204 String majorCode, String majorName, 205 String concentrationCode, String concentrationName, 206 String degreeCode, String degreeName, 207 String programCode, String programName, 208 Double weight) { 209 iArea = areaCode; 210 iAreaName = areaName; 211 iClassification = classificationCode; 212 iClassificationName = classificationName; 213 iMajor = majorCode; 214 iMajorName = majorName; 215 iConcentration = concentrationCode; 216 iConcentrationName = concentrationName; 217 iDegree = degreeCode; 218 iDegreeName = degreeName; 219 iProgram = programCode; 220 iProgramName = programName; 221 iWeight = weight; 222 } 223 224 /** 225 * Constructor 226 * 227 * @param areaCode academic area abbreviation 228 * @param areaName academic area name 229 * @param classificationCode academic classificationCode 230 * @param classificationName academic classificationName 231 * @param majorCode major code 232 * @param majorName major name 233 * @param concentrationCode concentration (optional) 234 * @param concentrationName concentration (optional) 235 * @param degreeCode degree (optional) 236 * @param degreeName degree (optional) 237 * @param programCode program (optional) 238 * @param programName program (optional) 239 * @param weight weight (optional) 240 */ 241 public AreaClassificationMajor( 242 String areaCode, String areaName, 243 String classificationCode, String classificationName, 244 String majorCode, String majorName, 245 String concentrationCode, String concentrationName, 246 String degreeCode, String degreeName, 247 String programCode, String programName, 248 String campus, String campusName, 249 Double weight) { 250 iArea = areaCode; 251 iAreaName = areaName; 252 iClassification = classificationCode; 253 iClassificationName = classificationName; 254 iMajor = majorCode; 255 iMajorName = majorName; 256 iConcentration = concentrationCode; 257 iConcentrationName = concentrationName; 258 iDegree = degreeCode; 259 iDegreeName = degreeName; 260 iProgram = programCode; 261 iProgramName = programName; 262 iCampus = campus; 263 iCampusName = campusName; 264 iWeight = weight; 265 } 266 267 /** Academic area 268 * @return academic area abbreviation 269 **/ 270 public String getArea() { 271 return iArea; 272 } 273 274 /** Academic classification 275 * @return classification code 276 **/ 277 public String getClassification() { 278 return iClassification; 279 } 280 281 /** Major 282 * @return major code 283 **/ 284 public String getMajor() { 285 return iMajor; 286 } 287 288 /** Concentration (optional) 289 * @return concentration code 290 **/ 291 public String getConcentration() { 292 return iConcentration; 293 } 294 295 /** Degree (optional) 296 * @return degree code 297 **/ 298 public String getDegree() { 299 return iDegree; 300 } 301 302 /** Program (optional) 303 * @return program code 304 **/ 305 public String getProgram() { 306 return iProgram; 307 } 308 309 /** Academic area name 310 * @return academic area name 311 **/ 312 public String getAreaName() { 313 return iAreaName; 314 } 315 316 /** Academic classification name 317 * @return classification name 318 **/ 319 public String getClassificationName() { 320 return iClassificationName; 321 } 322 323 /** Major name 324 * @return major name 325 **/ 326 public String getMajorName() { 327 return iMajorName; 328 } 329 330 /** Concentration (optional) 331 * @return concentration name 332 **/ 333 public String getConcentrationName() { 334 return iConcentrationName; 335 } 336 337 /** Degree (optional) 338 * @return degree name 339 **/ 340 public String getDegreeName() { 341 return iDegreeName; 342 } 343 344 /** Program (optional) 345 * @return program name 346 **/ 347 public String getProgramName() { 348 return iProgramName; 349 } 350 351 /** Campus (optional) 352 * @return campus name 353 **/ 354 public String getCampus() { 355 return iCampus; 356 } 357 358 /** Campus (optional) 359 * @return campus name 360 **/ 361 public String getCampusName() { 362 return iCampusName; 363 } 364 365 /** Weight (optional, defaults to 1.0) 366 */ 367 public double getWeight() { return iWeight == null ? 1.0 : iWeight.doubleValue(); } 368 369 @Override 370 public int hashCode() { 371 return toString().hashCode(); 372 } 373 374 @Override 375 public boolean equals(Object o) { 376 if (o == null || !(o instanceof AreaClassificationMajor)) 377 return false; 378 AreaClassificationMajor acm = (AreaClassificationMajor) o; 379 return ToolBox.equals(acm.getArea(), getArea()) && ToolBox.equals(acm.getClassification(), getClassification()) && ToolBox.equals(acm.getMajor(), getMajor()); 380 } 381 382 @Override 383 public String toString() { 384 return getArea() + "/" + getMajor() + (getConcentration() == null || getConcentration().isEmpty()? "" : "-" + getConcentration()) + " " + getClassification(); 385 } 386 387 private String getDegreeNotNull() { return (iDegree == null ? "" : iDegree); } 388 private String getProgramNotNull() { return (iProgram == null ? "" : iProgram); } 389 private String getCampusNotNull() { return (iCampus == null ? "" : iCampus); } 390 private String getConcentrationNotNull() { return (iConcentration == null ? "" : iConcentration); } 391 392 @Override 393 public int compareTo(AreaClassificationMajor acm) { 394 if (getWeight() != acm.getWeight()) 395 return getWeight() > acm.getWeight() ? -1 : 1; 396 if (!getArea().equals(acm.getArea())) 397 return getArea().compareTo(acm.getArea()); 398 if (!getClassification().equals(acm.getClassification())) 399 return getClassification().compareTo(acm.getClassification()); 400 if (!getDegreeNotNull().equals(acm.getDegreeNotNull())) 401 return getDegreeNotNull().compareTo(acm.getDegreeNotNull()); 402 if (!getProgramNotNull().equals(acm.getProgramNotNull())) 403 return getProgramNotNull().compareTo(acm.getProgramNotNull()); 404 if (!getMajor().equals(acm.getMajor())) 405 return getMajor().compareTo(acm.getMajor()); 406 if (!getCampusNotNull().equals(acm.getCampusNotNull())) 407 return getCampusNotNull().compareTo(acm.getCampusNotNull()); 408 return getConcentrationNotNull().compareTo(acm.getConcentrationNotNull()); 409 } 410}