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