-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathzdp_factorymethod3.abap
177 lines (143 loc) · 4.56 KB
/
zdp_factorymethod3.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
*&---------------------------------------------------------------------*
*& Report ZDP_FACTORYMETHOD3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdp_factorymethod3 NO STANDARD PAGE HEADING LINE-SIZE 80.
CLASS cl_abap_typedescr DEFINITION LOAD.
DATA: moff TYPE i
, slen TYPE i
, mlen TYPE i.
DEFINE get_clazz_name.
&2 = cl_abap_classdescr=>get_class_name( &1 ).
find REGEX 'CLASS=' in &2 MATCH OFFSET moff MATCH LENGTH mlen.
slen = moff + mlen.
SHIFT &2 by slen PLACES LEFT.
END-OF-DEFINITION.
CLASS page DEFINITION ABSTRACT.
ENDCLASS.
CLASS skillspage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS educationpage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS experiencepage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS introductionpage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS resultspage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS conclusionpage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS summarypage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS bibliographypage DEFINITION INHERITING FROM page.
ENDCLASS.
CLASS document DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
createpages ABSTRACT
, pages EXPORTING pages TYPE ANY TABLE.
PROTECTED SECTION.
DATA:
oa_pages_coll TYPE TABLE OF REF TO page.
ENDCLASS.
CLASS document IMPLEMENTATION.
METHOD pages.
pages[] = oa_pages_coll[].
ENDMETHOD.
ENDCLASS.
CLASS resume DEFINITION INHERITING FROM document.
PUBLIC SECTION.
METHODS:
constructor
, createpages REDEFINITION.
ENDCLASS.
CLASS resume IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
CALL METHOD me->createpages.
ENDMETHOD.
METHOD createpages.
DATA: page TYPE REF TO page.
CREATE OBJECT page TYPE skillspage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE educationpage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE experiencepage.
APPEND page TO oa_pages_coll.
ENDMETHOD.
ENDCLASS.
CLASS report DEFINITION INHERITING FROM document.
PUBLIC SECTION.
METHODS:
constructor
, createpages REDEFINITION.
ENDCLASS.
CLASS report IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
CALL METHOD me->createpages.
ENDMETHOD.
METHOD createpages.
DATA: page TYPE REF TO page.
CREATE OBJECT page TYPE introductionpage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE resultspage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE conclusionpage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE summarypage.
APPEND page TO oa_pages_coll.
CREATE OBJECT page TYPE bibliographypage.
APPEND page TO oa_pages_coll.
ENDMETHOD.
ENDCLASS.
CLASS mainapp DEFINITION.
PUBLIC SECTION.
CLASS-DATA: oa_document_coll TYPE TABLE OF REF TO document.
CLASS-METHODS main.
ENDCLASS.
CLASS mainapp IMPLEMENTATION.
METHOD main.
DATA: document TYPE REF TO document
,resume TYPE REF TO resume
,report TYPE REF TO report
,page TYPE REF TO page
,class_name TYPE abap_abstypename
,pages_coll TYPE TABLE OF REF TO page.
.
FIELD-SYMBOLS: <fs_document> TYPE REF TO document
,<fs_page> TYPE REF TO page.
CREATE OBJECT resume.
APPEND resume TO oa_document_coll.
CREATE OBJECT report.
APPEND report TO oa_document_coll.
* Loop at all documents
LOOP AT oa_document_coll ASSIGNING <fs_document>.
* Call macro to find out which Creator and Product are active
get_clazz_name <fs_document> class_name.
CASE class_name.
WHEN 'RESUME'.
WRITE: / 'Resume contains following pages:', / sy-uline.
CALL METHOD <fs_document>->pages( IMPORTING pages = pages_coll ).
* Loop at all pages in document Resume
LOOP AT pages_coll ASSIGNING <fs_page>.
get_clazz_name <fs_page> class_name.
WRITE: / class_name.
ENDLOOP.
WHEN 'REPORT'.
WRITE: / 'Report contains following pages:', / sy-uline.
CALL METHOD <fs_document>->pages( IMPORTING pages = pages_coll ).
* Loop at all pages in document Resume
LOOP AT pages_coll ASSIGNING <fs_page>.
get_clazz_name <fs_page> class_name.
WRITE: / class_name.
ENDLOOP.
ENDCASE.
ENDLOOP.
ENDMETHOD. "main
ENDCLASS. "mainapp IMPLEMENTATION
START-OF-SELECTION.
mainapp=>main( ).