summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/javaantcodedocument.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/javaantcodedocument.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/javaantcodedocument.cpp312
1 files changed, 312 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/javaantcodedocument.cpp b/umbrello/umbrello/codegenerators/javaantcodedocument.cpp
new file mode 100644
index 00000000..a3a174a3
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/javaantcodedocument.cpp
@@ -0,0 +1,312 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * copyright (C) 2004-2007 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+/* This code generated by:
+ * Author : thomas
+ * Date : Tue Jun 24 2003
+ */
+
+// own header
+#include "javaantcodedocument.h"
+
+// qt/kde includes
+#include <qregexp.h>
+#include <kdebug.h>
+
+// local includes
+#include "javacodegenerator.h"
+#include "xmlcodecomment.h"
+#include "xmlelementcodeblock.h"
+#include "codegenfactory.h"
+#include "../umldoc.h"
+#include "../uml.h"
+
+
+// Constructors/Destructors
+//
+
+JavaANTCodeDocument::JavaANTCodeDocument ( )
+{
+ setFileName("build"); // default name
+ setFileExtension(".xml");
+ setID("ANTDOC"); // default id tag for this type of document
+}
+
+JavaANTCodeDocument::~JavaANTCodeDocument ( ) { }
+
+//
+// Methods
+//
+
+// Other methods
+//
+
+/**
+ * create a new CodeBlockWithComments object belonging to this CodeDocument.
+ * @return CodeBlockWithComments
+ */
+/*
+CodeBlockWithComments * JavaANTCodeDocument::newCodeBlockWithComments ( ) {
+ return new XMLElementCodeBlock(this,"empty");
+}
+*/
+
+HierarchicalCodeBlock * JavaANTCodeDocument::newHierarchicalCodeBlock ( ) {
+ return new XMLElementCodeBlock(this,"empty");
+}
+
+// Sigh. NOT optimal. The only reason that we need to have this
+// is so we can create the XMLNodes, if needed.
+// would be better if we could create a handler interface that each
+// codeblock used so all we have to do here is add the handler
+void JavaANTCodeDocument::loadChildTextBlocksFromNode ( QDomElement & root)
+{
+
+ QDomNode tnode = root.firstChild();
+ QDomElement telement = tnode.toElement();
+ bool loadCheckForChildrenOK = false;
+ while( !telement.isNull() ) {
+ QString nodeName = telement.tagName();
+
+ if( nodeName == "textblocks" ) {
+
+ QDomNode node = telement.firstChild();
+ QDomElement element = node.toElement();
+
+ // if there is nothing to begin with, then we don't worry about it
+ loadCheckForChildrenOK = element.isNull() ? true : false;
+
+ while( !element.isNull() ) {
+ QString name = element.tagName();
+
+ if( name == "codecomment" ) {
+ CodeComment * block = new XMLCodeComment(this);
+ block->loadFromXMI(element);
+ if(!addTextBlock(block))
+ {
+ kError()<<"Unable to add codeComment to :"<<this<<endl;
+ block->deleteLater();
+ } else
+ loadCheckForChildrenOK= true;
+ } else
+ if( name == "codeaccessormethod" ||
+ name == "ccfdeclarationcodeblock"
+ ) {
+ QString acctag = element.attribute("tag","");
+ // search for our method in the
+ TextBlock * tb = findCodeClassFieldTextBlockByTag(acctag);
+ if(!tb || !addTextBlock(tb))
+ {
+ kError()<<"Unable to add codeclassfield child method to:"<<this<<endl;
+ // DON'T delete
+ } else
+ loadCheckForChildrenOK= true;
+
+ } else
+ if( name == "codeblock" ) {
+ CodeBlock * block = newCodeBlock();
+ block->loadFromXMI(element);
+ if(!addTextBlock(block))
+ {
+ kError()<<"Unable to add codeBlock to :"<<this<<endl;
+ block->deleteLater();
+ } else
+ loadCheckForChildrenOK= true;
+ } else
+ if( name == "codeblockwithcomments" ) {
+ CodeBlockWithComments * block = newCodeBlockWithComments();
+ block->loadFromXMI(element);
+ if(!addTextBlock(block))
+ {
+ kError()<<"Unable to add codeBlockwithcomments to:"<<this<<endl;
+ block->deleteLater();
+ } else
+ loadCheckForChildrenOK= true;
+ } else
+ if( name == "header" ) {
+ // do nothing.. this is treated elsewhere
+ } else
+ if( name == "hierarchicalcodeblock" ) {
+ HierarchicalCodeBlock * block = newHierarchicalCodeBlock();
+ block->loadFromXMI(element);
+ if(!addTextBlock(block))
+ {
+ kError()<<"Unable to add hierarchicalcodeBlock to:"<<this<<endl;
+ block->deleteLater();
+ } else
+ loadCheckForChildrenOK= true;
+ } else
+ if( name == "codeoperation" ) {
+ // find the code operation by id
+ QString id = element.attribute("parent_id","-1");
+ UMLObject * obj = UMLApp::app()->getDocument()->findObjectById(STR2ID(id));
+ UMLOperation * op = dynamic_cast<UMLOperation*>(obj);
+ if(op) {
+ CodeOperation * block = 0;
+ kError() << "TODO: implement CodeGenFactory::newCodeOperation() for JavaANTCodeDocument" << endl;
+ break; // remove when above is implemented
+ block->loadFromXMI(element);
+ if(addTextBlock(block))
+ loadCheckForChildrenOK= true;
+ else
+ {
+ kError()<<"Unable to add codeoperation to:"<<this<<endl;
+ block->deleteLater();
+ }
+ } else
+ kError()<<"Unable to find operation create codeoperation for:"<<this<<endl;
+ } else
+ if( name == "xmlelementblock" ) {
+ QString xmltag = element.attribute("nodeName","UNKNOWN");
+ XMLElementCodeBlock * block = new XMLElementCodeBlock(this,xmltag);
+ block->loadFromXMI(element);
+ if(!addTextBlock(block))
+ {
+ kError()<<"Unable to add XMLelement to Java ANT document:"<<this<<endl;
+ block->deleteLater();
+ } else
+ loadCheckForChildrenOK= true;
+ }
+ /*
+ // only needed for extreme debugging conditions (E.g. making new codeclassdocument loader)
+ else
+ kDebug()<<" LoadFromXMI: Got strange tag in text block stack:"<<name<<", ignorning"<<endl;
+ */
+
+ node = element.nextSibling();
+ element = node.toElement();
+ }
+ break;
+ }
+
+ tnode = telement.nextSibling();
+ telement = tnode.toElement();
+ }
+
+ if(!loadCheckForChildrenOK)
+ {
+ CodeDocument * test = dynamic_cast<CodeDocument*>(this);
+ if(test)
+ {
+ kWarning()<<" loadChildBlocks : unable to initialize any child blocks in doc: "<<test->getFileName()<<" "<<this<<endl;
+ } else {
+ HierarchicalCodeBlock * hb = dynamic_cast<HierarchicalCodeBlock*>(this);
+ if(hb)
+ kWarning()<<" loadChildBlocks : unable to initialize any child blocks in Hblock: "<<hb->getTag()<<" "<<this<<endl;
+ else
+ kDebug()<<" loadChildBlocks : unable to initialize any child blocks in UNKNOWN OBJ:"<<this<<endl;
+ }
+ }
+
+}
+
+/** set the class attributes of this object from
+ * the passed element node.
+ */
+void JavaANTCodeDocument::setAttributesFromNode ( QDomElement & root)
+{
+
+ // superclass save
+ CodeDocument::setAttributesFromNode(root);
+
+ // now set local attributes
+ // setPackage(root.attribute("package",""));
+
+}
+
+/**
+ * load params from the appropriate XMI element node.
+ */
+void JavaANTCodeDocument::loadFromXMI ( QDomElement & root ) {
+ setAttributesFromNode(root);
+}
+
+/** set attributes of the node that represents this class
+ * in the XMI document.
+ */
+void JavaANTCodeDocument::setAttributesOnNode ( QDomDocument & doc, QDomElement & docElement)
+{
+
+ // superclass call
+ CodeDocument::setAttributesOnNode(doc,docElement);
+
+ // now set local attributes/fields
+ //FIX
+}
+
+/**
+ * Save the XMI representation of this object
+ */
+void JavaANTCodeDocument::saveToXMI ( QDomDocument & doc, QDomElement & root ) {
+ QDomElement docElement = doc.createElement( "codedocument" );
+
+ setAttributesOnNode(doc, docElement);
+
+ root.appendChild( docElement );
+}
+
+// we add in our code blocks that describe how to generate
+// the project here...
+void JavaANTCodeDocument::updateContent( ) {
+ // FIX : fill in more content based on classes
+ // which exist
+ CodeBlockWithComments * xmlDecl = getCodeBlockWithComments("xmlDecl","",0);
+ xmlDecl->setText("<?xml version=\"1.0\"?>");
+ addTextBlock(xmlDecl);
+
+ XMLElementCodeBlock * rootNode = new XMLElementCodeBlock(this, "project", "Java ANT build document");
+ rootNode->setTag("projectDecl");
+ addTextBlock(rootNode);
+
+ // <project name="XDF" default="help" basedir=".">
+ //HierarchicalCodeBlock * projDecl = xmlDecl->getHierarchicalCodeBlock("projectDecl", "Java ANT build document", 1);
+
+ // set some global properties for the build
+ /*
+ <!-- set global properties for this build -->
+ <!-- paths -->
+ <property name="docApi.dir" value="docs/api"/>
+ <property name="path" value="gov/nasa/gsfc/adc/xdf"/>
+ <property name="src" value="src/${path}/"/>
+ <property name="top" value="."/>
+ <property name="build" value="${top}/gov"/>
+ <property name="buildDir" value="${path}"/>
+ <!-- compiler directives -->
+ <property name="build.compiler" value="modern"/>
+ <property name="useDeprecation" value="no"/>
+ <property name="jarname" value="${project}.jar"/>
+ */
+
+}
+
+// We overwritten by Java language implementation to get lowercase path
+QString JavaANTCodeDocument::getPath ( )
+{
+
+ QString path = getPackage();
+
+ // Replace all white spaces with blanks
+ path.simplifyWhiteSpace();
+
+ // Replace all blanks with underscore
+ path.replace(QRegExp(" "), "_");
+
+ path.replace(QRegExp("\\."),"/");
+ path.replace(QRegExp("::"), "/");
+
+ path.lower();
+
+ return path;
+
+}
+
+
+#include "javaantcodedocument.moc"