From 26802d794b212b6ed26709b2a4bb98f4f96721e4 Mon Sep 17 00:00:00 2001 From: konrad Date: Thu, 24 Dec 2009 19:23:20 +0000 Subject: [PATCH] first attempt at HTML output for Wob-Files git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@351 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33 --- wob/magicsmoke.wolf | 2 +- woc/htmlout.cpp | 226 +++++++++++++++++++++++++++++++++++++++++++++++++++ woc/htmlout.h | 47 +++++++++++ woc/processor.cpp | 21 +++++ woc/processor.h | 4 + woc/woc.pro | 2 + 6 files changed, 301 insertions(+), 1 deletions(-) create mode 100644 woc/htmlout.cpp create mode 100644 woc/htmlout.h diff --git a/wob/magicsmoke.wolf b/wob/magicsmoke.wolf index e898b9b..be0a76a 100644 --- a/wob/magicsmoke.wolf +++ b/wob/magicsmoke.wolf @@ -33,7 +33,7 @@ userName="Session::currentUserName()" init="new Session($this)"/> - + diff --git a/woc/htmlout.cpp b/woc/htmlout.cpp new file mode 100644 index 0000000..05bfadf --- /dev/null +++ b/woc/htmlout.cpp @@ -0,0 +1,226 @@ +// +// C++ Implementation: qtout +// +// Description: +// +// +// Author: Konrad Rosenbaum , (C) 2009 +// +// Copyright: See README/COPYING files that come with this distribution +// +// + +#include "htmlout.h" + +#include +#include + +WocHtmlOut::WocHtmlOut(QDomElement&el) +{ + qDebug("Info: creating Html Output Generator."); + m_basedir=WocProcessor::instance()->baseDir()+"/"+el.attribute("sourceDir","."); + m_subdir=el.attribute("subDir","htmlwob"); + bool clean=str2bool(el.attribute("clean","0")); + //cleanup directory (remove normal files, assume remainder is harmless) + QDir d(m_basedir+"/"+m_subdir); + if(d.exists() && clean){ + QStringList ent=d.entryList(QDir::Files); + for(int i=0;i\n\n")); + m_index.write(QByteArray("Project Index\n")); + + m_index.write(QByteArray("\n")); + //TODO: write project info +} + +WocHtmlOut::~WocHtmlOut(){} + +void WocHtmlOut::finalize() +{ + //TODO: write index table content + m_index.write(QByteArray("

Classes

\n
    \n")); + QStringList sl=WocProcessor::instance()->classNames(); + QString s; + qSort(sl); + for(int i=0;i"+sl[i]+"\n"; + m_index.write(s.toAscii()); + + m_index.write(QByteArray("
\n

Transactions

\n
    ")); + sl=WocProcessor::instance()->transactionNames(); + s=""; + qSort(sl); + for(int i=0;i"+sl[i]+"\n"; + m_index.write(s.toAscii()); + + m_index.write(QByteArray("
\n

Tables

\n
    ")); + sl=WocProcessor::instance()->tableNames(); + s=""; + qSort(sl); + for(int i=0;i"+sl[i]+"\n"; + m_index.write(s.toAscii()); + + m_index.write(QByteArray("
\n")); + + m_index.write(QByteArray("\n\n")); + m_index.close(); +} + +void WocHtmlOut::newTable(const WocTable&tbl) +{ + QString cn=tbl.name(); + QFile htm(m_basedir+"/"+m_subdir+"/table-"+cn+".html"); + if(!htm.open(QIODevice::WriteOnly|QIODevice::Truncate)){ + qDebug("Error: cannot create html file for table %s.",cn.toAscii().data()); + emit errorFound(); + return; + } + //lead in + htm.write(QString("Table "+cn+"\n").toAscii()); + + QString hcd; + //table declaration + hcd+="

Table "+cn+"

\n"; + hcd+="\n"; + QStringList cl=tbl.columns(); + for(int i=0;i\n"; + } + hcd+="
Column NameTypeProperties
"+tbl.columnType(cl[i])+""; + if(tbl.columnIsPrimary(cl[i])) + hcd+="Primary-Key "; + if(tbl.columnIsNull(cl[i])) + hcd+="NULL-able "; + if(tbl.columnHasDefault(cl[i])) + hcd+="default=\""+tbl.columnDefault(cl[i])+"\" "; + if(tbl.columnIsForeign(cl[i])){ + QStringList cf=tbl.columnForeign(cl[i]).split(":"); + hcd+="Foreign-Key="+cf[0]+"("+cf[1]+") "; + } + if(tbl.columnIsIndexed(cl[i])) + hcd+="Indexed "; + if(tbl.columnIsUnique(cl[i])) + hcd+="Unique"; + hcd+="
\n"; + + //enums + for(int i=0;i >lst=tbl.columnEnums(cl[i]); + if(lst.size()>0){ + hcd+="

Enum for column "+cl[i]+"

\n
    \n"; + for(int j=0;j\n"; + hcd+="
\n"; + } + } + + hcd+="\n"; + htm.write(hcd.toAscii()); +} + +void WocHtmlOut::newClass(const WocClass&cls) +{ + QString cn=cls.name(); + QFile htm(m_basedir+"/"+m_subdir+"/class-"+cn+".html"); + if(!htm.open(QIODevice::WriteOnly|QIODevice::Truncate)){ + qDebug("Error: cannot create html file for class %s.",cn.toAscii().data()); + emit errorFound(); + return; + } + //lead in + htm.write(QString("Class "+cn+"\n").toAscii()); + + QString hcd; + //class declaration + hcd+="

"; + if(cls.isAbstract())hcd+="Abstract "; + hcd+="Class "+cn+"

\n"; + + //enums + classEnums(cls,htm); + + //properties + classProperties(cls,htm); + + //TODO: mappings + + //lead out + htm.write(QByteArray("\n")); +} + +void WocHtmlOut::classEnums(const WocClass&cls,QFile&hdr) +{ + QStringList k=cls.enumTypes(); + if(k.size()==0)return; + QString hcd="

Enums

\n"; + for(int i=0;i\n"; + hcd+=""; + hcd+="\n"; + QList >ev=cls.enumValues(k[i]); + for(int j=0;j\n"; + } + hcd+="
SymbolValue
"+QString::number(ev[j].second)+"
\n"; + } + hdr.write(hcd.toAscii()); +} + +void WocHtmlOut::classProperties(const WocClass&cls,QFile&hdr) +{ + QStringList k=cls.propertyNames(); + if(k.size()==0)return; + QString hcd; + //declare members + hcd="

Properties

\n"; + for(int i=0;i\n"; + } + //write + hdr.write(hcd.toAscii()); +} + +void WocHtmlOut::newTransaction(const WocTransaction&trn) +{ + QString cn=trn.name(); + QFile htm(m_basedir+"/"+m_subdir+"/trn-"+cn+".html"); + if(!htm.open(QIODevice::WriteOnly|QIODevice::Truncate)){ + qDebug("Error: cannot create HTML file for transaction %s.",cn.toAscii().data()); + emit errorFound(); + return; + } + //basics + QStringList in=trn.inputNames(); + QStringList out=trn.outputNames(); + //lead in + QString hcd; + hcd="Transaction "+cn+"\n

Transaction "+cn+"

\n"; + hcd+="

Inputs:

\n
    \n"; + for(int i=0;i\n"; + //TODO: link class types + } + hcd+="
\n

Outputs:

\n
    \n"; + for(int i=0;i\n"; + //TODO: link class types + } + hcd+="
\n"; + hcd+="\n"; + htm.write(hcd.toAscii()); +} diff --git a/woc/htmlout.h b/woc/htmlout.h new file mode 100644 index 0000000..4b2dab0 --- /dev/null +++ b/woc/htmlout.h @@ -0,0 +1,47 @@ +// +// C++ Interface: qtout +// +// Description: +// +// +// Author: Konrad Rosenbaum , (C) 2009 +// +// Copyright: See README/COPYING files that come with this distribution +// +// + +#ifndef WOC_HTMLOUT_H +#define WOC_HTMLOUT_H + +#include "processor.h" + +#include + +class QDomElement; + +class WocHtmlOut:public WocOutput +{ + public: + WocHtmlOut(QDomElement&); + ~WocHtmlOut(); + protected: + virtual void finalize(); + virtual void newClass(const WocClass&); + virtual void newTable(const WocTable&); + virtual void newTransaction(const WocTransaction&); + private: + QString m_basedir,m_subdir; + QFile m_index; + + /**helper: generate enums for classes*/ + void classEnums(const WocClass&,QFile&); + /**helper: generate properties*/ + void classProperties(const WocClass&,QFile&); + /**helper: generate constructors/deserializer/copiers*/ + void classDeserializer(const WocClass&,QFile&); + /**helper: generate serializers*/ + void classSerializers(const WocClass&,QFile&); + +}; + +#endif diff --git a/woc/processor.cpp b/woc/processor.cpp index 0e3b88d..23223dd 100644 --- a/woc/processor.cpp +++ b/woc/processor.cpp @@ -14,6 +14,7 @@ #include "phpout.h" #include "qtout.h" +#include "htmlout.h" #include "../src/domquery.h" @@ -138,6 +139,10 @@ bool WocProcessor::processFile(QString fn) new WocPHPServerOut(el); if(m_error)return false; }else + if(tn=="HtmlOutput"){ + new WocHtmlOut(el); + if(m_error)return false; + }else if(tn=="Version"){ if(el.hasAttribute("comm")) m_verComm=el.attribute("comm"); @@ -277,6 +282,22 @@ QStringList WocProcessor::transactionNames()const return l; } +QStringList WocProcessor::classNames()const +{ + QStringList l; + for(int i=0;i