001 /***************************************************************************************************
002 * MODULE DESCRIPTION
003 ****************************************************************************************************
004 *
005 * NAME: EntityHandler.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
023 package kiurubeans;
024 import javax.servlet.http.HttpServletRequest;
025
026 /**
027 * Representation of a database entity.
028 * @author Miika Nurminen
029 */
030 public abstract class EntityHandler extends KiuruHandler {
031
032 // Attributes
033
034 /** Updates attributes from database based on current ID information */
035 public static final int GET_RECORD=1;
036
037 /** Clears attributes. Used when adding a new record */
038 public static final int RESET_RECORD=2;
039
040 /** Deletes record from database & clears attributes */
041 public static final int DELETE_RECORD=3;
042
043 /** Saves current record from database, provided that attributes are ok. */
044 public static final int POST_RECORD=4;
045
046
047
048 // Constructors
049 /**
050 * Dummy empty constructor.
051 */
052 public EntityHandler() {
053 }
054
055
056 // Access methods
057
058 /**
059 * Returns current max state value. Inherited classes may override this
060 * when new states are introduced.
061 *
062 * @return max state value
063 */
064 protected int getMaxState() {
065 return 4;
066 }
067
068 // Operations
069
070 /**
071 * Implementation of modify rights checking.
072 *
073 * @return true is user can modify entity.
074 * @see #hasModifyRight()
075 */
076 protected abstract boolean doCheckModifyRight();
077
078 /**
079 * Returns true if current user has full rights to modify current entity.
080 * Descendant classes may introduce more detailed modification constraints.
081 * <p>
082 * Note! User must be set when calling this method.
083 *
084 * @return true is user can modify entity
085 * @see #doCheckModifyRight()
086 */
087 public boolean hasModifyRight() {
088 if (getUser()==null) throw new IllegalStateException("User is not assigned!");
089 return doCheckModifyRight();
090 }
091
092
093 /**
094 * Performs action based on actionType. Called from performAction.
095 * Descendant classes should override this and call the same method
096 * in inherited class as default.
097 *
098 * @throws Exception If something went wrong during actual executed action.
099 * @see KiuruHandler#performAction()
100 */
101 protected void defaultAction() throws java.lang.Exception {
102 switch (getEnumState()) {
103 case GET_RECORD:
104 getRecord();
105 break;
106 case RESET_RECORD:
107 resetRecord();
108 break;
109 case DELETE_RECORD:
110 deleteRecord();
111 break;
112 default:
113 postRecord();
114 break;
115 }
116 }
117
118
119 /**
120 * Retrieves record from database according to current Id field(s)
121 * value(s).
122 * <p>
123 * Id field(s) are defined in descendant classes. Method implements
124 * also user rights check, eg. if user has no right to retrieve
125 * the record, empty object is returned instead.
126 *
127 * @throws Exception if there is a problem with DB connection
128 */
129 public abstract void getRecord() throws Exception;
130
131 /**
132 * Clears field values.
133 * <p>
134 * Result should be equivalent to constructing a new object.
135 * Nothing is saved to database.
136 */
137 public abstract void resetRecord();
138
139 /**
140 * Deletes current record from database.
141 * <p>
142 * Actually applies deleted=true. Object is cleared after deletion.
143 *
144 * @throws Exception if there is a problem with DB connection
145 */
146 public abstract void deleteRecord() throws Exception;
147
148 /**
149 * Saves record to database.
150 * <p>
151 * If field values are not valid, sets Ok property to false.
152 *
153 * @throws Exception if there is a problem with DB connection
154 */
155 public abstract void postRecord() throws Exception;
156
157 /** Default implementation of clearing action state. Descendant classes may
158 * override this.
159 * @see #resetActionState(HttpServletRequest)
160 * @param request The request-object of the JSP.
161 */
162 protected void doClearActionState(HttpServletRequest request) {
163 if (getEnumState()==RESET_RECORD || getEnumState()==NO_ACTION)
164 return;
165 setEnumState(GET_RECORD);
166 }
167
168 /** Returns if entity is in a state of adding a new record.
169 * Implementation depends of a descendand class.
170 * @return True if the record doesn't exist in the database, yet
171 */
172 public abstract boolean getAddingNew();
173
174 /** Ensures empty request parameters are clearer when entity is posted.
175 * <p>
176 * If bean is used in a JSP, this should be called in the beginning of page.
177 * If form content is "" or null it is not sent via HTTP, so those fields
178 * must be cleared manually. Method may be called from a handler or UI page.
179 *
180 * @param request HTTP request with parameters
181 * @see #doClearEmptyParameters(HttpServletRequest)
182 */
183 public void clearEmptyParameters(HttpServletRequest request) {
184 super.clearEmptyParameters(request);
185 if (getEnumState()==POST_RECORD) { //or: action!= NO_ACTION? no (continueSearch)
186 kotkabeans.Log.log("Clearing empty parameters");
187 doClearEmptyParameters(request);
188 }
189 }
190
191 }
192 /***************************************************************************************************
193 * COPYRIGHT (C) KIURU -PROJECT GROUP
194 * Limited rights granted. Please refer to license.
195 **************************************************************************************************/