1 /*
2     SPDX-License-Identifier: GPL-2.0-or-later
3 
4     SPDX-FileCopyrightText: 2003 Brian Thomas
5     <brian.thomas@gsfc.nasa.gov>
6     SPDX-FileCopyrightText: 2004-2021 Umbrello UML Modeller Authors
7     <umbrello-devel@kde.org>
8 */
9 
10 #ifndef JAVAWRITER_H
11 #define JAVAWRITER_H
12 
13 #include "simplecodegenerator.h"
14 #include "umloperationlist.h"
15 #include "umlattributelist.h"
16 #include "umlassociationlist.h"
17 
18 class UMLOperation;
19 
20 /**
21  * Class JavaWriter is a code generator for UMLClassifier objects.
22  * Create an instance of this class, and feed it a UMLClassifier when
23  * calling writeClass and it will generate a java source file for
24  * that concept.
25  * This is the "old" code generator that does not support code editing
26  * in the Modeller but uses significantly less file space because the
27  * source code is not replicated in the XMI file.
28  */
29 class JavaWriter : public SimpleCodeGenerator
30 {
31 public:
32     JavaWriter();
33     virtual ~JavaWriter();
34 
35     virtual void writeClass(UMLClassifier *c);
36 
37     virtual Uml::ProgrammingLanguage::Enum language() const;
38 
39     QStringList defaultDatatypes() const;
40 
41 private:
42     void writeClassDecl(UMLClassifier *c, QTextStream &java);
43 
44     void writeConstructor(UMLClassifier *c, QTextStream &java);
45 
46     static bool compareJavaMethod(UMLOperation *op1, UMLOperation *op2);
47 
48     static bool javaMethodInList(UMLOperation *umlOp, UMLOperationList &opl);
49 
50     void getSuperImplementedOperations(UMLClassifier *c, UMLOperationList &yetImplementedOpList, UMLOperationList &toBeImplementedOpList, bool noClassInPath = true);
51 
52     void getInterfacesOperationsToBeImplemented(UMLClassifier *c, UMLOperationList &opl);
53 
54     void writeOperations(UMLClassifier *c, QTextStream &j);
55 
56     void writeOperations(UMLOperationList &list, QTextStream &j);
57 
58     void writeAttributeDecls(UMLAttributeList &atpub, UMLAttributeList &atprot,
59                              UMLAttributeList &atpriv, QTextStream &java);
60 
61     void writeAssociationDecls(UMLAssociationList associations, Uml::ID::Type id, QTextStream &java);
62 
63     void writeAssociationRoleDecl(QString fieldClassName, QString roleName, QString multi,
64                                   QString doc, Uml::Visibility::Enum visib, QTextStream &java);
65 
66     void writeAttributeMethods(UMLAttributeList &atpub, Uml::Visibility::Enum visibility, QTextStream &java);
67 
68     void writeAssociationMethods(UMLAssociationList associations, UMLClassifier *thisClass,
69                                  QTextStream &java);
70 
71     void writeAssociationRoleMethod(QString fieldClassName, QString roleName, QString multi,
72                                     QString description, Uml::Visibility::Enum visib, Uml::Changeability::Enum change,
73                                     QTextStream &java);
74 
75     void writeSingleAttributeAccessorMethods(QString fieldClassName, QString fieldVarName,
76             QString fieldName, QString description,
77             Uml::Visibility::Enum visibility, Uml::Changeability::Enum change,
78             bool isFinal, QTextStream &java);
79 
80     void writeVectorAttributeAccessorMethods(QString fieldClassName, QString fieldVarName,
81             QString fieldName, QString description,
82             Uml::Visibility::Enum visibility, Uml::Changeability::Enum change,
83             QTextStream &java);
84 
85     void writeComment(const QString &text, const QString &indent, QTextStream &java, bool javaDocStyle=false);
86 
87     void writeDocumentation(QString header, QString body, QString end, QString indent, QTextStream &java);
88 
89     QString getUMLObjectName(UMLObject *obj);
90 
91     QString fixTypeName(const QString& string);
92 
93     QString fixInitialStringDeclValue(const QString& val, const QString& type);
94 
95     void writeBlankLine(QTextStream& java);
96 
97     QString m_startline;    ///< a \n, used at the end of each line
98     bool    m_isInterface;  ///< whether or not this concept is an interface
99 
100 };
101 
102 #endif // JAVAWRITER_H
103