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 035 /** 036 * Constructor 037 * 038 * @param area academic area 039 * @param classification academic classification 040 * @param major major 041 */ 042 public AreaClassificationMajor(String area, String classification, String major) { 043 iArea = area; 044 iClassification = classification; 045 iMajor = major; 046 } 047 048 /** 049 * Constructor 050 * 051 * @param area academic area 052 * @param classification academic classification 053 * @param major major 054 * @param concentration concentration (optional) 055 */ 056 public AreaClassificationMajor(String area, String classification, String major, String concentration) { 057 iArea = area; 058 iClassification = classification; 059 iMajor = major; 060 iConcentration = concentration; 061 } 062 063 /** 064 * Constructor 065 * 066 * @param area academic area 067 * @param classification academic classification 068 * @param major major 069 * @param concentration concentration (optional) 070 * @param weight weight (optional) 071 */ 072 public AreaClassificationMajor(String area, String classification, String major, String concentration, Double weight) { 073 iArea = area; 074 iClassification = classification; 075 iMajor = major; 076 iConcentration = concentration; 077 iWeight = weight; 078 } 079 080 /** 081 * Constructor 082 * 083 * @param areaCode academic area abbreviation 084 * @param areaName academic area name 085 * @param classificationCode academic classificationCode 086 * @param classificationName academic classificationName 087 * @param majorCode major code 088 * @param majorName major name 089 */ 090 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName) { 091 iArea = areaCode; 092 iAreaName = areaName; 093 iClassification = classificationCode; 094 iClassificationName = classificationName; 095 iMajor = majorCode; 096 iMajorName = majorName; 097 } 098 099 /** 100 * Constructor 101 * 102 * @param areaCode academic area abbreviation 103 * @param areaName academic area name 104 * @param classificationCode academic classificationCode 105 * @param classificationName academic classificationName 106 * @param majorCode major code 107 * @param majorName major name 108 * @param concentrationCode concentration (optional) 109 * @param concentrationName concentration (optional) 110 */ 111 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName) { 112 iArea = areaCode; 113 iAreaName = areaName; 114 iClassification = classificationCode; 115 iClassificationName = classificationName; 116 iMajor = majorCode; 117 iMajorName = majorName; 118 iConcentration = concentrationCode; 119 iConcentrationName = concentrationName; 120 } 121 122 /** 123 * Constructor 124 * 125 * @param areaCode academic area abbreviation 126 * @param areaName academic area name 127 * @param classificationCode academic classificationCode 128 * @param classificationName academic classificationName 129 * @param majorCode major code 130 * @param majorName major name 131 * @param concentrationCode concentration (optional) 132 * @param concentrationName concentration (optional) 133 * @param weight weight (optional) 134 */ 135 public AreaClassificationMajor(String areaCode, String areaName, String classificationCode, String classificationName, String majorCode, String majorName, String concentrationCode, String concentrationName, Double weight) { 136 iArea = areaCode; 137 iAreaName = areaName; 138 iClassification = classificationCode; 139 iClassificationName = classificationName; 140 iMajor = majorCode; 141 iMajorName = majorName; 142 iConcentration = concentrationCode; 143 iConcentrationName = concentrationName; 144 iWeight = weight; 145 } 146 147 /** 148 * Constructor 149 * 150 * @param areaCode academic area abbreviation 151 * @param areaName academic area name 152 * @param classificationCode academic classificationCode 153 * @param classificationName academic classificationName 154 * @param majorCode major code 155 * @param majorName major name 156 * @param concentrationCode concentration (optional) 157 * @param concentrationName concentration (optional) 158 * @param degreeCode degree (optional) 159 * @param degreeName degree (optional) 160 * @param weight weight (optional) 161 */ 162 public AreaClassificationMajor( 163 String areaCode, String areaName, 164 String classificationCode, String classificationName, 165 String majorCode, String majorName, 166 String concentrationCode, String concentrationName, 167 String degreeCode, String degreeName, 168 Double weight) { 169 iArea = areaCode; 170 iAreaName = areaName; 171 iClassification = classificationCode; 172 iClassificationName = classificationName; 173 iMajor = majorCode; 174 iMajorName = majorName; 175 iConcentration = concentrationCode; 176 iConcentrationName = concentrationName; 177 iDegree = degreeCode; 178 iDegreeName = degreeName; 179 iWeight = weight; 180 } 181 182 /** Academic area 183 * @return academic area abbreviation 184 **/ 185 public String getArea() { 186 return iArea; 187 } 188 189 /** Academic classification 190 * @return classification code 191 **/ 192 public String getClassification() { 193 return iClassification; 194 } 195 196 /** Major 197 * @return major code 198 **/ 199 public String getMajor() { 200 return iMajor; 201 } 202 203 /** Concentration (optional) 204 * @return concentration code 205 **/ 206 public String getConcentration() { 207 return iConcentration; 208 } 209 210 /** Degree (optional) 211 * @return degree code 212 **/ 213 public String getDegree() { 214 return iDegree; 215 } 216 217 /** Academic area name 218 * @return academic area name 219 **/ 220 public String getAreaName() { 221 return iAreaName; 222 } 223 224 /** Academic classification name 225 * @return classification name 226 **/ 227 public String getClassificationName() { 228 return iClassificationName; 229 } 230 231 /** Major name 232 * @return major name 233 **/ 234 public String getMajorName() { 235 return iMajorName; 236 } 237 238 /** Concentration (optional) 239 * @return concentration name 240 **/ 241 public String getConcentrationName() { 242 return iConcentrationName; 243 } 244 245 /** Degree (optional) 246 * @return degree name 247 **/ 248 public String getDegreeName() { 249 return iDegreeName; 250 } 251 252 /** Weight (optional, defaults to 1.0) 253 */ 254 public double getWeight() { return iWeight == null ? 1.0 : iWeight.doubleValue(); } 255 256 @Override 257 public int hashCode() { 258 return toString().hashCode(); 259 } 260 261 @Override 262 public boolean equals(Object o) { 263 if (o == null || !(o instanceof AreaClassificationMajor)) 264 return false; 265 AreaClassificationMajor acm = (AreaClassificationMajor) o; 266 return ToolBox.equals(acm.getArea(), getArea()) && ToolBox.equals(acm.getClassification(), getClassification()) && ToolBox.equals(acm.getMajor(), getMajor()); 267 } 268 269 @Override 270 public String toString() { 271 return getArea() + "/" + getMajor() + (getConcentration() == null || getConcentration().isEmpty()? "" : "-" + getConcentration()) + " " + getClassification(); 272 } 273}