001 /*************************************************************************************************** 002 * MODULE DESCRIPTION 003 **************************************************************************************************** 004 * 005 * NAME: ContactPerson.java 006 * LANGUAGE: Java2 007 * DATE: 27.3.2003 008 * AUTHOR: Miika Nurminen, University of Jyväskylä 009 * 010 **************************************************************************************************** 011 * COPYRIGHT (C) KIURU -PROJECT GROUP 012 * Limited rights granted. Please refer to license 013 **************************************************************************************************** 014 * 015 **************************************************************************************************** 016 * UPDATES 017 **************************************************************************************************** 018 * 019 * 27.3.2003: Initial release / mn 020 * 021 ****************************************************************************************************/ 022 package kiurubeans; 023 import kotkabeans.UseModule; 024 import kotkabeans.RS2; 025 import kotkabeans.DB; 026 import kotkabeans.AutoNumber; 027 import java.sql.PreparedStatement; 028 import javax.servlet.http.HttpServletRequest; 029 030 031 /** 032 * Representation of a contact person. 033 * 034 * @author Miika Nurminen 035 */ 036 public class ContactPerson extends EntityHandler { 037 038 // Attributes 039 040 /** Holds value of property personId. */ 041 private int personId; 042 043 /** Holds value of property lastName. */ 044 private String lastName; 045 046 /** Holds value of property organisationId. */ 047 private int organisationId; 048 049 /** Tells if this contactPerson already exists in the database */ 050 private boolean addingNew; 051 052 // Constructors 053 /** Default constructor */ 054 public ContactPerson() { 055 super(); 056 resetRecord(); 057 } 058 059 // Access methods 060 061 /** Getter for property personId. 062 * @return Value of property personId. 063 */ 064 public int getPersonId() { 065 return this.personId; 066 } 067 068 /** Setter for property personId. 069 * @param personId New value of property personId. 070 */ 071 public void setPersonId(int personId) { 072 this.personId = personId; 073 } 074 075 /** Getter for property lastName. 076 * @return Value of property lastName. 077 */ 078 public String getLastName() { 079 return this.lastName; 080 } 081 082 /** Setter for property lastName. 083 * @param lastName New value of property lastName. 084 */ 085 public void setLastName(String lastName) { 086 this.lastName = lastName; 087 if ((lastName==null) || (lastName.length()==0)) { 088 setOk(false); 089 kotkabeans.Log.log("now adding error form name!!!"); 090 addError("Nimi ei voi olla tyhjä!"); 091 } 092 } 093 094 /** Getter for property organisationId. 095 * @return Value of property organisationId. 096 */ 097 public int getIntOrganisationId() { 098 return this.organisationId; 099 } 100 101 // even if internally int, property must have string getters & setters 102 /** Returns ID of organisation that contact person is related to. 103 * @return The OrganisationId of the contact person. 104 */ 105 public String getOrganisationId() { 106 return Integer.toString(this.organisationId); 107 } 108 109 /** Setter for property organisationId. 110 * @param organisationId New value of property organisationId. 111 */ 112 public void setOrganisationId(String organisationId) { 113 if (KiuruString.isEmpty(organisationId)) organisationId="0"; 114 try { 115 setOrganisationId(Integer.parseInt(organisationId)); 116 } 117 catch (Exception e) { 118 setOk(false); 119 addError("Virheellinen kotiorganisaatio!"); 120 } 121 } 122 123 /** Setter for property organisationId. 124 * @param organisationId New value of property organisationId. 125 */ 126 public void setOrganisationId(int organisationId) { 127 if (organisationId<=0) { 128 setOk(false); 129 addError("Henkilöllä on oltava kotiorganisaatio!"); 130 } 131 this.organisationId = organisationId; 132 } 133 134 /** This method sets the internal state of the object into "Post". 135 * @param s Actually not needed. The important thing is that it exists. 136 */ 137 public void setSubmitPost(String s) { 138 setEnumState(EntityHandler.POST_RECORD); 139 } 140 141 // Operations 142 143 /** 144 * Implementation of modify rights checking. 145 * This should be called 146 * @return true is user can modify entity. 147 * @see EntityHandler#hasModifyRight() 148 */ 149 protected boolean doCheckModifyRight() { 150 if (getUser().getPersonID()==getPersonId()) return true; 151 return (getUser().getAccessRightLevelID() >= UseModule.ACCESS_RIGHT_LEVEL_TEACHER); 152 } 153 154 /** Deletes current record from database. NOT IMPLEMENTED YET. 155 * <p> 156 * Actually applies deleted=true. Object is cleared after deletion. 157 */ 158 public void deleteRecord() { 159 } 160 161 /** Retrieves record from database according to current Id field(s) 162 * value(s). 163 * <p> 164 * Id field(s) are defined in descendant classes. Method implements 165 * also user rights check, eg. if user has no right to retrieve 166 * the record, empty object is returned instead. 167 */ 168 public void getRecord() { 169 if (getAddingNew()) { 170 throw new IllegalStateException("Cannot get a nonexistent record!"); 171 } 172 StringBuffer sb = new StringBuffer(30); 173 sb.append("select * from person where personid="); 174 sb.append(getPersonId()); 175 try { 176 RS2 rs = SimpleDb.simpleQuery("Trying to fetch a contactperson record.", 177 sb.toString()); 178 // if no record is found make a new record. 179 if (!SimpleDb.checkIfEditable(rs)) { 180 resetRecord(); 181 return; 182 } 183 setPersonId(rs.getInt("personid")); 184 setLastName(SimpleDb.getString(rs,"lastname")); 185 setOrganisationId(rs.getInt("homeorganisationid")); 186 } 187 catch (Exception e) { 188 resetRecord(); 189 } 190 } 191 192 193 /** Tells if the data of the contact person has changed. 194 * @return True, if the data of the contact person has changed. 195 * @param db Database connection 196 * @throws Exception If something went wrong in the database handling 197 */ 198 private boolean dataChanged(DB db) throws Exception { 199 if (getAddingNew()) { 200 throw new IllegalStateException("Cannot check whether a new record is changed!"); 201 } 202 RS2 rs = new RS2(db.executeQuery("select * from person where deleted=false and personid ="+getPersonId())); 203 if (rs.next()) 204 if ( (rs.getString("lastname").equals(getLastName())) && (rs.getInt("homeorganisationid")==getIntOrganisationId())) { 205 addError("Tietoja ei ole muutettu!"); 206 return false; 207 } 208 return true; 209 } 210 211 /** Saves record to database. 212 * <p> 213 * If field values are not valid, sets Ok property to false. 214 * @throws Exception if there is a problem with DB connection. 215 */ 216 public void postRecord() throws Exception { 217 DB db=new DB("ContactPerson.postRecord db"); 218 db.connect(); 219 PreparedStatement ps=null; 220 try { 221 if (getAddingNew()) { // setting new id from autonumber 222 setPersonId(AutoNumber.getNumber("Person")); 223 } 224 225 StringBuffer s = new StringBuffer(); 226 kotkabeans.Log.log("NOW CHECKING"); 227 if ( SimpleDb.recordExists(db, "person", "personId", getPersonId()) ) { 228 if (!dataChanged(db)) { 229 db.disconnect(); 230 return; // no changes, we can exit 231 } 232 ps = db.prepareStatement("update person set deleted=false, lastname=?, homeorganistionid=?"+ 233 "where personid=?"); 234 ps.setString(1, getLastName()); 235 ps.setInt(2, getIntOrganisationId()); 236 ps.setString(3, Integer.toString(getPersonId())); 237 238 ps.executeUpdate(); 239 addNotice("Yhteyshenkilön "+getLastName()+" tiedot päivitetty!"); 240 } 241 else { // insert 242 kotkabeans.Log.log("NOW INSERTING"); 243 ps = db.prepareStatement("insert into person "+ 244 "(deleted,personid,callname,firstnames,lastname,languageid,homeorganisationid,fundingorganisationid,account,password,registeredon,sessiontimeout,autologout,socsecbirth,socseccentury,socsecend) values "+ 245 "('f' ,? ,'' ,'' ,? ,2 ,? ,? ,'' ,'' ,'now' ,100,'f', '' ,'' ,'')"); 246 ps.setInt(1, getPersonId()); 247 ps.setString(2, getLastName()); 248 ps.setInt(3, getIntOrganisationId()); 249 ps.setInt(4, getIntOrganisationId()); 250 251 ps.executeUpdate(); 252 // db.executeUpdate("insert into person (deleted,personid,callname,firstnames,lastname,languageid,homeorganisationid,fundingorganisationid,account,password,registeredon,sessiontimeout,autologout,socsecbirth,socseccentury,socsecend) values ('f' ,"+getPersonId()+" ,'' ,'' ,'"+getLastName() +"' ,2 ,"+getOrganisationId()+" ,"+getOrganisationId()+" ,'' ,'' ,'now' ,100,'f', '' ,'' ,'')"); 253 254 kotkabeans.Log.log("NOW INSERTED"); 255 addNotice("Lisätty yhteyshenkilö "+getLastName()+"."); 256 } 257 258 } 259 finally { 260 if (ps!=null) 261 ps.close(); 262 db.disconnect(); 263 } 264 } 265 266 /** Clears field values. 267 * <p> 268 * Result should be equivalent to constructing a new object. 269 * Nothing is saved to database. 270 * 271 */ 272 public void resetRecord() { 273 this.addingNew = true; // indicates we are adding a new record 274 this.personId = -1; 275 this.lastName = ""; 276 this.organisationId = 0; 277 } 278 279 280 /** Implementation of parameter clearing. Clears parameters that wasn't given 281 * from the JSP. 282 * @see EntityHandler#clearEmptyParameters(HttpServletRequest) 283 * @param request Request-object from the JSP page. 284 */ 285 protected void doClearEmptyParameters(HttpServletRequest request) { 286 if (KiuruString.isEmpty(request.getParameter("lastName"))) { 287 setLastName(""); 288 } 289 if (KiuruString.isEmpty(request.getParameter("organisationId"))) { 290 System.out.println("clearing empty organisationid!"); 291 setOrganisationId(""); 292 } 293 } 294 295 /** Returns if entity is in a state of adding a new record. 296 * Implementation depends of a descendant class. 297 * @return True if the record doesn't exist in the database, yet. 298 */ 299 public boolean getAddingNew() { 300 return this.personId==-1; 301 } 302 303 304 /** Implementation of clearing action state. 305 * @see EntityHandler#clearEmptyParameters(HttpServletRequest) 306 * @param request The request-object from the JSP-page. 307 */ 308 protected void doClearActionState(HttpServletRequest request) { 309 /* http parameter test must be applied, othervise page may not be cleared 310 when called multiple times. personid=-1 -comparison is not advisable 311 because the page would be cleared then. */ 312 if (KiuruString.isEmpty(request.getParameter("personId"))) 313 setEnumState(EntityHandler.RESET_RECORD); 314 else 315 setEnumState(EntityHandler.NO_ACTION); 316 } 317 318 } 319 /*************************************************************************************************** 320 * COPYRIGHT (C) KIURU -PROJECT GROUP 321 * Limited rights granted. Please refer to license. 322 **************************************************************************************************/