1 package com.sri.emo.wizard.completion.persistence; 2 3 import com.jcorporate.expresso.core.db.DBConnection; 4 import com.jcorporate.expresso.core.db.DBException; 5 import com.jcorporate.expresso.core.dbobj.DBField; 6 import com.jcorporate.expresso.core.dbobj.SecurDBObject; 7 import com.jcorporate.expresso.core.security.ReadOnlyUser; 8 import com.sri.emo.dbobj.Node; 9 import com.sri.emo.dbobj.WizDefinition; 10 import com.sri.emo.wizard.persistence.AdditionalInfo; 11 12 import java.util.ArrayList; 13 import java.util.Iterator; 14 import java.util.List; 15 16 /*** 17 * Gateway class to the completion definition. Provides a slightly different 18 * definition that wizard 19 * 20 * @author Michael Rimov 21 * @version 1.0 22 */ 23 public class CompletionDefinition extends SecurDBObject implements AdditionalInfo { 24 25 26 /*** 27 * 28 */ 29 private static final long serialVersionUID = 1L; 30 31 public static final String FLD_ID = "Id"; 32 33 public static final String FLD_TARGET_NODE = "TargetNode"; 34 35 public List completionDetails = new ArrayList(); 36 37 public static final String TABLE_NAME = "EMOCOMPLETIONDEF"; 38 39 /*** 40 * Retrieve the target node id. 41 * 42 * @return int 43 * @throws DBException 44 */ 45 public int getTargetNodeId() throws DBException { 46 return this.getFieldInt(FLD_TARGET_NODE); 47 } 48 49 /*** 50 * Retrieve the associated target node. 51 * @return 52 * @throws DBException 53 */ 54 public Node getTargetNode() throws DBException { 55 Node target = new Node(); 56 target.setNodeId(this.getField(FLD_TARGET_NODE)); 57 target.retrieve(); 58 return target; 59 } 60 61 62 /*** 63 * Sets the wizard definition. 64 * 65 * @param definition WizDefinition 66 * @throws DBException 67 */ 68 public void setWizardDefinition(WizDefinition definition) throws DBException { 69 this.setField(FLD_ID, definition.getId()); 70 } 71 72 /*** 73 * Retrieve the wizard definition. 74 * 75 * @return WizDefinition 76 * @throws DBException 77 */ 78 public WizDefinition getWizardDefinition() throws DBException { 79 WizDefinition wizdef = new WizDefinition(); 80 wizdef.setId(this.getField(FLD_ID)); 81 wizdef.retrieve(); 82 return wizdef; 83 } 84 85 /*** 86 * Default constructor to create a new object. 87 * 88 * @throws DBException upon construction error. 89 */ 90 public CompletionDefinition() throws DBException { 91 super(); 92 } 93 94 /*** 95 * Constructor that takes a <tt>DBConnection</tt> for use inside a transaction. 96 * 97 * @param newConnection DBConnection the transaction connection. 98 * @throws DBException upon construction error. 99 */ 100 public CompletionDefinition(DBConnection newConnection) throws DBException { 101 super(newConnection); 102 } 103 104 /*** 105 * Constructor taht takes a <tt>ReadOnlyUser</tt> security context. This 106 * is most often set by the default constructor, so you only want to do this 107 * if you want to use special security permissions (such as Admin or SuperUser) 108 * 109 * @param readOnlyUser ReadOnlyUser the ReadOnlyUser instance. 110 * @throws DBException upon construction error. 111 */ 112 public CompletionDefinition(ReadOnlyUser readOnlyUser) throws DBException { 113 super(readOnlyUser); 114 } 115 116 117 /*** 118 * Retrieve a list of all completion details. 119 * 120 * @return List java.util.List of <tt>CompletionDetail</tt> objects. 121 * @throws DBException upon query error. 122 */ 123 public List getCompletionDetails() throws DBException { 124 if (getStatus().equals(STATUS_NEW) && this.get(FLD_ID) == null) { 125 return completionDetails; 126 } else { 127 CompletionDetails details = new CompletionDetails(); 128 details.set(CompletionDetails.FLD_WIZARD_ID, this.get(FLD_ID)); 129 return (List) details.searchAndRetrieveList(CompletionDetails.FLD_PART_ID); 130 } 131 } 132 133 /*** 134 * Adds a completion detail to the definition. 135 * 136 * @param oneDetail CompletionDetails 137 * @throws DBException 138 */ 139 public void addCompletionDetail(CompletionDetails oneDetail) throws DBException { 140 if (this.getStatus().equals(STATUS_NEW) && this.get(FLD_ID) == null) { 141 completionDetails.add(oneDetail); 142 } else { 143 oneDetail.set(CompletionDetails.FLD_WIZARD_ID, this.get(FLD_ID)); 144 oneDetail.update(); 145 } 146 } 147 148 /*** 149 * Override of add that also adds the completion details as well. 150 * 151 * @throws DBException 152 */ 153 public void add() throws DBException { 154 super.add(); 155 156 if (completionDetails == null || completionDetails.size() == 0) { 157 return; 158 } 159 160 DBConnection connection = this.getLocalConnection(); 161 boolean setConnection = false; 162 if (connection != null) { 163 setConnection = true; 164 } 165 166 for (Iterator i = completionDetails.iterator(); i.hasNext();) { 167 CompletionDetails oneDetail = (CompletionDetails) i.next(); 168 if (setConnection) { 169 oneDetail.setConnection(connection); 170 } 171 oneDetail.set(CompletionDetails.FLD_WIZARD_ID, this.get(FLD_ID)); 172 oneDetail.add(); 173 } 174 175 completionDetails = null; 176 } 177 178 179 /*** 180 * Method to set up the fields for this database object. 181 * 182 * @throws DBException If there is an error setting up the fields as 183 * requested. For example, if a field allowing null is requested as 184 * part of the key 185 */ 186 protected void setupFields() throws DBException { 187 this.setTargetTable(TABLE_NAME); 188 setDescription("Completion Wizard Additional Info"); 189 setCharset("ISO-8859-1"); 190 191 this.addField(FLD_ID, DBField.INT_TYPE, 0, false, "Wizard Id"); 192 this.addField(FLD_TARGET_NODE, DBField.INT_TYPE, 0, false, "Target Node Id"); 193 194 this.addDetail(CompletionDetails.class.getName(), FLD_ID, CompletionDetails.FLD_WIZARD_ID); 195 this.addKey(FLD_ID); 196 } 197 198 /*** 199 * Attribute to know what the id field of the additional information 200 * database object is. 201 * 202 * @return String 203 * @todo Implement this com.sri.emo.dbobj.wizards.AdditionalInfo method 204 */ 205 public String getIdField() { 206 return FLD_ID; 207 } 208 }