/* * HtmlQuestionasgroup.java * * Created on 4. toukokuuta 2003, 11:23 */ package kottarainenbeans; import java.beans.*; import kotkabeans.*; import kiurubeans.HtmlBean; import kottarainenbeans.*; import java.sql.*; import java.util.*; import javax.servlet.http.*; /** * * @author sampsa * * Modified 8.5.2003 by tmpoyhon * - in answering fields' labels' printing fixed */ public class HtmlQuestionasgroup extends Questionasgroup implements java.io.Serializable { private String htmtTemplatePath; private TemplateHandler htmlTH; private String printType=""; private int subQuestiontypeid=1; private int subSubElementCount=1; /** Same as in parent class Questionasgroup */ public HtmlQuestionasgroup(String JSPvid, String templatePath) { super(JSPvid, templatePath); } /** returns the path of common htmt directory */ public String getHtmtTemplatePath() { return this.htmtTemplatePath; } /** sets htmt directory */ public void setHtmtTemplatePath(String htmtTemplatePath) { this.htmtTemplatePath = htmtTemplatePath; } /** creates TemplateHandler for html handling */ public void setHtmlTH() { this.htmlTH = new TemplateHandler(getHtmtTemplatePath()+"/Questionasgroup.htmt"); } /** returns type, which this class builds html. * Only one type is no longer implemented and this type is not needed. */ public String getPrintType() { return this.printType; } /** sets printtype. Not yet needed. */ public void setPrintType(String printType) { this.printType = printType; } /** returns not deleted subElements (questions) amount. */ public int getSubElementCount() { Enumeration en= subElements.elements(); int i = 0; while(en.hasMoreElements()){ Question question=(Question)en.nextElement(); if(question.isPointerDeleted() == false) i++; } return i; } /** returns subElemenet (Questionfields) amount inside of the first * subElement (Question) */ public int getSubSubElementCount() { return this.subSubElementCount; } /** set subElement (Questionfield) amount in every subElement (Question). * If there is more than wanted,function will mark delete attribute as true. */ public void setSubSubElementCount(int subSubElementCount) { this.subSubElementCount = subSubElementCount; } /** returns the type that all subElements (Question) should be. */ public int getSubQuestiontypeid() { return this.subQuestiontypeid; } /** Sets the type that all subElements (Question) should be. */ public void setSubQuestiontypeid(int subQuestiontypeid) { this.subQuestiontypeid = subQuestiontypeid; } /** returns html code that is build. opens also db-connection * */ public String getHtml() { DB db=new DB("Haetaan gethtml:n kautta"); String get=""; try{ db.connect(); get=getHtml(db); }finally{ db.disconnect(); return get; } } /** returns html code that is build. */ public String getHtml(DB db) { Properties variableTable = getHtmlValues(db); if (getPrintType().equals("for_answering")) { String html = htmlTH.CompleteTemplate("" + "for_answering_questionasgroup_content", variableTable); //if no label then just prints questions if (!getLabel().equals("")) { variableTable.setProperty("content",html); return htmlTH.CompleteTemplate("" + "for_answering_questionasgroup_header", variableTable); } else { return html; } } else if (getPrintType().equals("edit")) { return htmlTH.CompleteTemplate("edit_questionasgroup",variableTable); } else return ""; } private String getSubElementsHtml() { Enumeration en = subElements.elements(); String print=""; String fieldDefaults=""; Properties macroTable = new Properties(); String fieldHiddens=""; int i = 1; int j = 1; boolean isHeaderPrinted = false; //flag for fieldlabel input printing while(en.hasMoreElements()){ Question subElement = (Question)en.nextElement(); if (subElement.isDeleted() || subElement.isPointerDeleted()) continue; //this builds input for questionfield labels or header text if //printtype is answering if (isHeaderPrinted == false) { print = getFieldHeaders(subElement); isHeaderPrinted = true; } macroTable.setProperty("label",subElement.getLabel()); macroTable.setProperty("JSPvid",subElement.getJSPvid()); Enumeration QuestionFields = subElement.getSubElements().elements(); while(QuestionFields.hasMoreElements()){ if (j > getSubSubElementCount()) break; Questionfield subSubElement = (Questionfield)QuestionFields.nextElement(); if (subSubElement.isDeleted()) continue; if(getPrintType().equals("for_answering")) { fieldDefaults = fieldDefaults + getAnsweringSubSubElementsHtml(subSubElement,j++, subElement.getQuestiontypeid(),subElement.getJSPvid()); fieldHiddens = fieldHiddens + getFieldHiddens(subSubElement); } else fieldDefaults = fieldDefaults + getSubSubElementsHtml( subSubElement,j++, subElement.getQuestiontypeid(), subElement.getJSPvid()); } macroTable.setProperty("questionid", Integer.toString(subElement.getQuestionid())); if(subElement.getQuestiontypeid()==4 && getPrintType().equals(""+ "for_answering")){ macroTable.setProperty("radios",fieldDefaults); fieldDefaults = htmlTH.CompleteTemplate(""+ "for_answering_radio_hidden", macroTable); } if(subElement.getQuestiontypeid()==5 && getPrintType().equals(""+ "for_answering")){ macroTable.setProperty("options",fieldDefaults); fieldDefaults = htmlTH.CompleteTemplate("for_answering_select", macroTable); } macroTable.setProperty("fielddefaults",fieldDefaults); if(getPrintType().equals("for_answering")) print = print + htmlTH.CompleteTemplate("for_answering_question",macroTable); else print = print + htmlTH.CompleteTemplate("question",macroTable); i++; j=1; fieldDefaults = ""; } return print; } private String getFieldHiddens(Questionfield subSubElement){ Properties macroTable = new Properties(); macroTable.setProperty("id", String.valueOf(subSubElement.getQuestionfieldid())); return htmlTH.CompleteTemplate("hiddens", macroTable); } private String getSubSubElementsHtml(Questionfield subSubElement, int fieldnum, int qstypeid,String qsJSPvid) { Properties macroTable = new Properties(); macroTable.setProperty("JSPvid", String.valueOf(subSubElement.getJSPvid())); macroTable.setProperty("questionJSPvid", qsJSPvid); String defaultValue = (!subSubElement.getDefaultvalue().equals("")) ? subSubElement.getDefaultvalue() : ""; String fieldType; //this if checks whether printtype is "for_answering" or not and decides //typeid in basis of that information if (!(getPrintType().equals("for_answering"))) qstypeid = getSubQuestiontypeid(); switch(qstypeid) { case 1 : fieldType = "text"; break; case 2 : fieldType = "textarea"; break; case 3 : fieldType = "checkbox"; defaultValue=setSubSubElementDefaultValue(defaultValue); break; case 4 : //this implements radiobutton, case 5 selectlist case 5 : fieldType = "radio"; defaultValue=setSubSubElementDefaultValue(defaultValue); break; case 6 : fieldType = "comment"; break; default : fieldType = "text"; } macroTable.setProperty("defaultvalue",defaultValue); return htmlTH.CompleteTemplate("fielddefault_"+fieldType, macroTable); } /** Creates fields' html-format when in "for_answering"-state. * @author Tiina Pöyhönen 8.5.2003 * @return Completed html-format for fields. */ private String getAnsweringSubSubElementsHtml(Questionfield subSubElement, int fieldnum, int qstypeid,String qsJSPvid){ Properties macroTable = new Properties(); macroTable.setProperty("JSPvid", String.valueOf(subSubElement.getQuestionid())); macroTable.setProperty("id", String.valueOf(subSubElement.getQuestionfieldid())); macroTable.setProperty("questionid", String.valueOf(subSubElement.getQuestionid())); String defaultValue = (!subSubElement.getDefaultvalue().equals("")) ? subSubElement.getDefaultvalue() : ""; String fieldType; //this if checks whether printtype is "for_answering" or not and decides //typeid in basis of that information switch(qstypeid) { case 1 : fieldType = "text"; break; case 2 : fieldType = "textarea"; break; case 3 : fieldType = "checkbox"; defaultValue=setSubSubElementDefaultValue(defaultValue); break; case 4 : fieldType = "radio"; defaultValue=setSubSubElementDefaultValue(defaultValue); break; case 5 : fieldType = "option"; macroTable.setProperty("label", subSubElement.getLabel()); defaultValue = setSubSubElementDefaultValue(defaultValue); defaultValue = (defaultValue.equals("checked")) ? "selected=\"selected\"" : ""; break; case 6 : fieldType = "comment"; break; default : fieldType = "text"; } macroTable.setProperty("defaultvalue",defaultValue); //next is needed for radiogroups macroTable.setProperty("questionJSPvid", qsJSPvid); return htmlTH.CompleteTemplate("for_answering_fielddefault_"+fieldType, macroTable); } private String setSubSubElementDefaultValue(String defaultValue) { if (defaultValue.equals("on")) return "checked"; else return defaultValue; } private String getFieldHeaders(Question question) { Properties macroTable = new Properties(); macroTable.setProperty("JSPvid",getJSPvid()); Enumeration fields = question.getSubElements().elements(); String label = ""; String subsection = ""; String section = ""; String fieldHeaders = ""; if (getPrintType().equals("edit")) { subsection = "fieldheader"; // returns input fields section = "fieldheaders"; } else if (getPrintType().equals("for_answering")) { if (getSubQuestiontypeid() == 5) return ""; subsection = "for_answering_fieldheader"; // returns text headers section = "for_answering_fieldheaders"; } int i=0; boolean isEmpty = true; while (fields.hasMoreElements()) { Questionfield subsubElement = (Questionfield)fields.nextElement(); if (subsubElement.isDeleted()) { i++; continue; } label = subsubElement.getLabel(); if (!label.equals("")) isEmpty = false; macroTable.setProperty("label",subsubElement.getLabel()); macroTable.setProperty("fieldnum",String.valueOf(i+1)); fieldHeaders = fieldHeaders + htmlTH.CompleteTemplate(subsection,macroTable); i++; } if (isEmpty && getPrintType().equals("for_answering")) return ""; //if no header set, nothing will print macroTable.setProperty("fieldheaders",fieldHeaders); return htmlTH.CompleteTemplate(section, macroTable); } private Properties getHtmlValues(DB db) { Properties variableTable = new Properties(); variableTable.setProperty("label",this.getLabel()); variableTable.setProperty("uri",this.getUri()); variableTable.setProperty("bankgroupid", Integer.toString(getBankgroupid())); variableTable.setProperty("bankuserightid", Integer.toString(getBankuserightid())); variableTable.setProperty("personid",Integer.toString(getPersonid())); variableTable.setProperty("deleted", String.valueOf(isDeleted())); variableTable.setProperty("JSPvid", getJSPvid()); variableTable.setProperty("subelementcount", String.valueOf(getSubElementCount())); variableTable.setProperty("subsubelementcount", String.valueOf(getSubSubElementCount())); variableTable.setProperty("rownumber", String.valueOf(getOrdernum()+".")); try { variableTable = makeLists(variableTable, db); } catch (Exception e) {} variableTable.setProperty("questions",getSubElementsHtml()); return variableTable; } private Properties makeLists(Properties variableTable, DB db) { RS2 rs; HtmlBean HB = new HtmlBean(); String SQLsentence = "SELECT * FROM questionbankgroup WHERE deleted='false'"; try { rs = DBhandler.bringFromDatabase(db, "QuestionnairesFrDb", SQLsentence,"HtmlQuestionAsGroup1"); String list = HB.makeSelectList(getJSPvid()+"_bankgroupid",rs, "bankgroupid","name",String.valueOf(getBankgroupid())); variableTable.setProperty("bankgrouplist",list); } catch (Exception e) {} SQLsentence = "SELECT * FROM questionbankuseright WHERE deleted='false'"; try { rs = DBhandler.bringFromDatabase(db, "QuestionnairesFrDb", SQLsentence,"HtmlQuestionAsGroup2"); String list = HB.makeSelectList(getJSPvid()+"_bankuserightid",rs, "bankuserightid","name",String.valueOf(getBankuserightid())); variableTable.setProperty("bankuserightlist",list); } catch (Exception e){} SQLsentence = "SELECT * FROM questiontype WHERE deleted='false'"; try { rs = DBhandler.bringFromDatabase(db, "QuestionnairesFrDb", SQLsentence,"HtmlQuestionAsGroup3"); String list = HB.makeSelectList(getJSPvid()+"_questiontypeid",rs, "questiontypeid","name",String.valueOf(getSubQuestiontypeid())); variableTable.setProperty("questiontypelist",list); } catch (Exception e){} return variableTable; } public void update(Properties commonVars){ super.update(commonVars); String id=getJSPvid(); setPrintType(commonVars.getProperty(id+"_printtype",getPrintType())); try { setSubQuestiontypeid(Integer.parseInt(commonVars.getProperty(id+ "_questiontypeid", String.valueOf(getSubQuestiontypeid())))); } catch (NumberFormatException e) {} try { setSubSubElementCount(Integer.parseInt(commonVars.getProperty(id+ "_subsubelementcount", String.valueOf(getSubSubElementCount())))); } catch (NumberFormatException e) {} try { int newSubElementCount = Integer.parseInt(commonVars.getProperty(id+ "_subelementcount", String.valueOf(getSubElementCount()))); if (newSubElementCount > getSubElementCount()) addSubElements(newSubElementCount - getSubElementCount()); else if (newSubElementCount < getSubElementCount()) deleteLastSubElements(getSubElementCount() - newSubElementCount); } catch (NumberFormatException e) {} handleSubElements(commonVars); } private void handleSubElements(Properties commonVars) { Enumeration en = subElements.elements(); while(en.hasMoreElements()){ Question qs=(Question)en.nextElement(); qs.setQuestiontypeid(getSubQuestiontypeid()); if (getSubSubElementCount() > qs.getSubElementCount()) qs.addSubElements(getSubSubElementCount() - qs.getSubElementCount()); else if (getSubSubElementCount() < qs.getSubElementCount()) qs.deleteLastSubElements(qs.getSubElementCount() - getSubSubElementCount()); setSubSubElementsLabel(qs,commonVars); } } private void setSubSubElementsLabel(Question question,Properties commonVars){ Enumeration fields = question.getSubElements().elements(); int i=0; while (fields.hasMoreElements()) { Questionfield subSubElement = (Questionfield)fields.nextElement(); if (subSubElement.isDeleted()) { i++; continue; } else { String label=""; try { label = commonVars.getProperty(getJSPvid()+ "_questionfieldheader_"+(i+1),subSubElement.getLabel()); } catch (NullPointerException npe) { subSubElement.setLabel("virhe"); } subSubElement.setLabel(label); i++; } } } public void deleteLastSubElements(int howmany) { Enumeration en= subElements.elements(); int startDeletingIndex=(getSubElementCount()+1)-howmany; int i=1; while(en.hasMoreElements()){ Question question=(Question)en.nextElement(); if (question.isPointerDeleted()) continue; if(i>=startDeletingIndex) question.setDeleted(true); i++; } } protected void getSubElementsFromdb(DB db) { super.getSubElementsFromdb(db); Enumeration en= subElements.elements(); if (en.hasMoreElements()){ Question question=(Question)en.nextElement(); setSubSubElementCount(question.getSubElementCount()); setSubQuestiontypeid(question.getQuestiontypeid()); } } public void addSubElements(int howmany) { int elements; for (int i=0;i