/* * Questionnaire.java * * Created on 8. huhtikuuta 2003, 12:35 * */ package kottarainenbeans; import java.beans.*; import kotkabeans.*; import kottarainenbeans.*; import java.sql.*; import java.util.*; import javax.servlet.http.*; /** Class for Questionnaire * * @author tmpoyhon * Modified * 14.5.2003: Changed so that personid doesn't change if is permanent and * personid's update doesn't include JSPvid * 12.6.2003: Code cleanup by Tiina */ public class Questionnaire extends Object implements java.io.Serializable { private boolean deleted; private int questionnaireId; private String uri; private String label; private Calendar begintime = Calendar.getInstance(); private Calendar endtime = Calendar.getInstance(); private int bankgroupid; private int bankuserightid; private int personid; private String JSPvid; private boolean modified; private boolean permanent; private static String state; protected TemplateHandler TH; protected Vector subElements = new Vector(); protected Vector metaElements=new Vector(); private String templatePath; public Questionnaire() { Initialize(); } public Questionnaire(String JSPvid, String templatePath) { setTemplatePath(templatePath); setTH(); setJSPvid(JSPvid); Initialize(); //InitializeMetadatas(); //temporary out of use } public void Initialize(){ setBankgroupid(0); setBankuserightid(0); setLabel(""); setUri(""); setPermanent(false); setPersonid(0); setQuestionnaireId(0); setModified(false); setState("edit"); } public void InitializeMetadatas(){ try { RS2 rs; Properties macroTable = new Properties(); String SQLsentence = TH.CompleteTemplate("get_parametertypes",macroTable); System.out.println(SQLsentence); rs = DBhandler.bringFromDatabase("ParametedtypesFrDb", SQLsentence, "getQuestionparametertypes"); while(rs.next()){ addMetaElements(1); Metadata meta=(Metadata)getMetaElements().lastElement(); meta.setParentid(getQuestionnaireId()); meta.setParametertypeid(rs.getInt("parametertypeid")); meta.setParameterTypeName(rs.getString("name")); } } catch (Exception e){ System.out.println(e.getMessage()); } } public void Empty() { Initialize(); subElements = new Vector(); metaElements = new Vector(); } public boolean isDeleted() { return this.deleted; } public void setDeleted(boolean deleted) { this.deleted = deleted; setModified(true); } public int getQuestionnaireId() { return this.questionnaireId; } public void setQuestionnaireId(int questionnaireId) { this.questionnaireId = questionnaireId; setModified(true); } public String getUri() { return this.uri; } public void setUri(String uri) { this.uri = uri; setModified(true); } public String getLabel() { return this.label; } public void setLabel(String label) { this.label = label; setModified(true); } public void setBegintime(int year, int mon, int day, int hour, int min, int second) { begintime.set(year,mon,day,hour,min,second); } public void setEndtime(int year, int mon, int day, int hour, int min, int second) { endtime.set(year,mon,day,hour,min,second); } public int getBankgroupid() { return this.bankgroupid; } public void setBankgroupid(int bankgroupid) { this.bankgroupid = bankgroupid; setModified(true); } public int getBankuserightid() { return this.bankuserightid; } public void setBankuserightid(int bankuserightid) { this.bankuserightid = bankuserightid; setModified(true); } public int getPersonid() { return this.personid; } public void setPersonid(int personid) { if(isPermanent()) return; this.personid = personid; setModified(true); } public String getJSPvid() { return this.JSPvid; } public void setJSPvid(String JSPvid) { this.JSPvid = JSPvid; } public boolean isModified() { return this.modified; } public void setModified(boolean modified) { this.modified = modified; } public boolean isPermanent() { return this.permanent; } public void setPermanent(boolean permanent) { this.permanent = permanent; } public void setTH() { this.TH = new TemplateHandler(getTemplatePath()+"/Questionnaire.sqlt"); } public Vector getSubElements() { return subElements; } public Vector getMetaElements(){ return this.metaElements; } public String getTemplatePath() { return this.templatePath; } public void setTemplatePath(String templatePath) { this.templatePath = templatePath; this.setTH(); } public String getValuesFromDb(int questionnaireId){ DB db=new DB("Haetaan kysely"); String get=""; try{ db.connect(); get=getValuesFromDb(questionnaireId,db); }finally{ db.disconnect(); return get; } } /** Takes questionnaire with id as "questionnaireId" out of database * @param questionnaireId Tells the identifying id for the query to the * database */ public String getValuesFromDb(int questionnaireId, DB db) throws Exception { RS2 rs; try { Properties macroTable = new Properties(); macroTable.setProperty("questionnaireId", String.valueOf(questionnaireId)); String SQLsentence = TH.CompleteTemplate("get_questionnaire",macroTable); rs = DBhandler.bringFromDatabase(db,"QuestionnairesFrDb", SQLsentence,"getQuestionnaire"); if( rs.next() ) { setQuestionnaireId(rs.getInt("questionnaireid")); setBankuserightid(rs.getInt("bankuserightid")); setBankgroupid(rs.getInt("bankgroupid")); setPersonid(rs.getInt("personid")); setLabel(rs.getString("label")); setUri(rs.getString("uri")); begintime.setTime( new java.text.SimpleDateFormat(""+ "yyyy-MM-dd HH:mm:ss").parse( rs.getString("begintime")) ); endtime.setTime( new java.text.SimpleDateFormat(""+ "yyyy-MM-dd HH:mm:ss").parse( rs.getString("endtime")) ); setModified(false); setPermanent(true); getSubElementsFromDb(db); if(!getState().equals("answering")){ getMetaElementsFromdb(db); } } } catch (Exception e){ return "Kyselyn lukemisessa kannasta tuli poikkeus."; } return "Kyselyn lukeminen kannasta onnistui."; } protected void getSubElementsFromDb(DB db) throws Exception { Properties macroTable = new Properties(); macroTable.setProperty("questionnaireId", String.valueOf(questionnaireId)); String SQLsentence = TH.CompleteTemplate("get_questiongroups",macroTable); RS2 rs; rs = DBhandler.bringFromDatabase(db,"Questionnaires_groupsFrDb", SQLsentence,"getQuestionnaires_groups"); int i=1; try { while(rs.next()) { subElements.addElement(new Questiongroup(createSubId(""+ "questiongroup")+i,getTemplatePath())); ((Questiongroup)subElements.lastElement()).getValuesFromDb( rs.getInt("questiongroupid"), db); ((Questiongroup)subElements.lastElement()).setStatusid( rs.getInt("questionstatusid")); ((Questiongroup)subElements.lastElement()).setOrdernum( rs.getInt("ordernum")); i++; } } catch (Exception e) {} } private void getMetaElementsFromdb(DB db) throws Exception { Properties macroTable = new Properties(); macroTable.setProperty("questionnaireId", String.valueOf(getQuestionnaireId())); String SQLsentence = TH.CompleteTemplate("get_metadatas",macroTable); RS2 rs = DBhandler.bringFromDatabase(db,"QuestionnaireFrDb", SQLsentence,"getMetadataNumbersForQuestionnaire"); int i=1; try { while(rs.next()){ metaElements.addElement(new Metadata(JSPvid+"_meta_"+i, templatePath)); ((Metadata)metaElements.lastElement()).getValuesFromDb( getQuestionnaireId(),rs.getInt("parametertypeid"),db); i++; } } catch(Exception e){} } public int saveToDatabase() { DB db=new DB("Haetaan kysely"); int get=0; try{ db.connect(); get=saveToDatabase(db); } finally { db.disconnect(); return get; } } public int saveToDatabase(DB db) throws Exception { if(!isModified()) { saveSubElementsToDB(db); saveMetaElementsTodb(db); return 0; } RS2 rs; String sqlInfo = ""; String logInfo = ""; String SQLsentence = ""; Properties macroTable = new Properties(); macroTable.setProperty("deleted",String.valueOf(isDeleted())); macroTable.setProperty("label",getLabel()); macroTable.setProperty("uri",getUri()); macroTable.setProperty("begintime",getTimeStamp(begintime)); macroTable.setProperty("endtime",getTimeStamp(endtime)); macroTable.setProperty("bankgroupid", String.valueOf(getBankgroupid())); macroTable.setProperty("bankuserightid", String.valueOf(getBankuserightid())); macroTable.setProperty("personid",String.valueOf(getPersonid())); int revalue=0; if (isPermanent()==false) { if (!buildQuestionnaireId(db)) //Sets Unique id to this class return -1; macroTable.setProperty("questionnaireId", String.valueOf(getQuestionnaireId())); SQLsentence = TH.CompleteTemplate("insert_questionnaire",macroTable); sqlInfo = "questionnaire-insert"; logInfo = "Inserts questionfields information to the db"; revalue = getQuestionnaireId(); } else { macroTable.setProperty("questionnaireId", String.valueOf(getQuestionnaireId())); SQLsentence = TH.CompleteTemplate("update_questionnaire",macroTable); sqlInfo = "questionnaire-update"; logInfo = "Updates questionnaires information to the db"; } try{ int error = DBhandler.insertIntoDatabase(db,logInfo, SQLsentence, sqlInfo); saveSubElementsToDB(db); saveMetaElementsTodb(db); } catch (Exception e){} setModified(false); setPermanent(true); return revalue; } private void saveSubElementsToDB(DB db) { Enumeration en = subElements.elements(); int revalue; while(en.hasMoreElements()){ Questiongroup group=(Questiongroup)en.nextElement(); revalue = group.saveToDatabase(db); if (revalue > 0) saveSubElementToMatrixDB("INSERT",db,group.getQuestiongroupid(), false,group.getOrdernum(),group.getStatusid()); else if (group.isPointerDeleted() == true && revalue == 0) saveSubElementToMatrixDB("UPDATE",db,group.getQuestiongroupid(), group.isPointerDeleted(),group.getOrdernum(),group.getStatusid()); } } private void saveSubElementToMatrixDB(String type, DB db, int subId, boolean deleted, int orderNum, int statusId) { RS2 rs; String sqlInfo = ""; String logInfo = "Attach questiongroup to questionnaire"; String SQLsentence = ""; Properties macroTable = new Properties(); macroTable.setProperty("deleted",String.valueOf(deleted)); macroTable.setProperty("questionnaireId", String.valueOf(getQuestionnaireId())); macroTable.setProperty("questiongroupId",String.valueOf(subId)); macroTable.setProperty("questionstatusid",String.valueOf(statusId)); macroTable.setProperty("ordernum",String.valueOf(orderNum)); if (type.equals("INSERT")) { SQLsentence = TH.CompleteTemplate("insert_matrix",macroTable); sqlInfo = "Update questionnaire_questiongroup element"; } if (type.equals("UPDATE")) { SQLsentence = TH.CompleteTemplate("update_matrix",macroTable); sqlInfo = "Update questionnaire_questiongroup element"; } try { DBhandler.insertIntoDatabase(db,logInfo, SQLsentence, sqlInfo); } catch (Exception e){} } private void saveMetaElementsTodb(DB db){ Enumeration en = metaElements.elements(); while(en.hasMoreElements()){ Metadata meta=(Metadata)en.nextElement(); meta.saveToDatabase(getQuestionnaireId(),db); } } public void addSubElements(int howmany) { int elements; for (int i=0;i