From c76bf032f457824adf2cfd036e723e1f1fc648aa Mon Sep 17 00:00:00 2001 From: Quit Phuong Bui <quitpb@stud.ntnu.no> Date: Sat, 29 Sep 2018 16:34:49 +0200 Subject: [PATCH] added transformation --- .classpath | 1 + .project | 6 + META-INF/MANIFEST.MF | 9 +- README.md | 24 + bin/coursePage/Slot.class | Bin 740 -> 744 bytes .../impl/CoursePagePackageImpl.class | Bin 18237 -> 18237 bytes bin/coursePage/impl/EvaluationFormImpl.class | Bin 3591 -> 0 bytes bin/coursePage/impl/EventImpl.class | Bin 3850 -> 0 bytes bin/coursePage/impl/InformationImpl.class | Bin 6077 -> 0 bytes bin/coursePage/impl/LabImpl.class | Bin 1688 -> 0 bytes bin/coursePage/impl/LectureImpl.class | Bin 1724 -> 0 bytes bin/coursePage/impl/OrganizationImpl.class | Bin 3865 -> 0 bytes .../impl/RelationToOtherCoursesImpl.class | Bin 1604 -> 0 bytes bin/coursePage/impl/SlotImpl.class | Bin 6717 -> 6677 bytes bin/coursePage/impl/creditsImpl.class | Bin 1901 -> 0 bytes .../util/CoursePageResourceFactoryImpl.class | Bin 0 -> 762 bytes .../util/CoursePageResourceImpl.class | Bin 0 -> 650 bytes .../transformation/.Course2HTML.java._trace | Bin 0 -> 22100 bytes .../transformation/.Course2HTML.xtendbin | Bin 0 -> 9057 bytes .../transformation/.XhtmlUtil.java._trace | Bin 0 -> 9028 bytes .../transformation/.XhtmlUtil.xtendbin | Bin 0 -> 6356 bytes bin/tdt4250/transformation/Course.xmi | 42 ++ bin/tdt4250/transformation/Course2HTML.class | Bin 0 -> 21659 bytes bin/tdt4250/transformation/XhtmlUtil.class | Bin 0 -> 9843 bytes model/Course.xmi | 6 +- model/Course1.xmi | 2 + model/StudyProgram.xmi | 2 + model/coursePage.ecore | 4 +- model/coursePage.genmodel | 3 +- plugin.xml | 7 + src/coursePage/Slot.java | 14 +- .../impl/CoursePagePackageImpl.java | 4 +- src/coursePage/impl/EvaluationFormImpl.java | 265 ----------- src/coursePage/impl/EventImpl.java | 368 --------------- src/coursePage/impl/InformationImpl.java | 442 ------------------ src/coursePage/impl/LabImpl.java | 146 ------ src/coursePage/impl/LectureImpl.java | 148 ------ src/coursePage/impl/OrganizationImpl.java | 296 ------------ .../impl/RelationToOtherCoursesImpl.java | 157 ------- src/coursePage/impl/SlotImpl.java | 26 +- src/coursePage/impl/creditsImpl.java | 163 ------- .../util/CoursePageResourceFactoryImpl.java | 41 ++ .../util/CoursePageResourceImpl.java | 32 ++ src/tdt4250/transformation/Course.xmi | 42 ++ src/tdt4250/transformation/Course2HTML.xtend | 179 +++++++ src/tdt4250/transformation/XhtmlUtil.xtend | 135 ++++++ .../transformation/.Course2HTML.java._trace | Bin 0 -> 22100 bytes .../transformation/.Course2HTML.xtendbin | Bin 0 -> 9057 bytes .../transformation/.XhtmlUtil.java._trace | Bin 0 -> 9028 bytes .../transformation/.XhtmlUtil.xtendbin | Bin 0 -> 6356 bytes .../tdt4250/transformation/Course2HTML.java | 307 ++++++++++++ .../tdt4250/transformation/XhtmlUtil.java | 170 +++++++ 52 files changed, 1027 insertions(+), 2014 deletions(-) create mode 100644 README.md delete mode 100644 bin/coursePage/impl/EvaluationFormImpl.class delete mode 100644 bin/coursePage/impl/EventImpl.class delete mode 100644 bin/coursePage/impl/InformationImpl.class delete mode 100644 bin/coursePage/impl/LabImpl.class delete mode 100644 bin/coursePage/impl/LectureImpl.class delete mode 100644 bin/coursePage/impl/OrganizationImpl.class delete mode 100644 bin/coursePage/impl/RelationToOtherCoursesImpl.class delete mode 100644 bin/coursePage/impl/creditsImpl.class create mode 100644 bin/coursePage/util/CoursePageResourceFactoryImpl.class create mode 100644 bin/coursePage/util/CoursePageResourceImpl.class create mode 100644 bin/tdt4250/transformation/.Course2HTML.java._trace create mode 100644 bin/tdt4250/transformation/.Course2HTML.xtendbin create mode 100644 bin/tdt4250/transformation/.XhtmlUtil.java._trace create mode 100644 bin/tdt4250/transformation/.XhtmlUtil.xtendbin create mode 100644 bin/tdt4250/transformation/Course.xmi create mode 100644 bin/tdt4250/transformation/Course2HTML.class create mode 100644 bin/tdt4250/transformation/XhtmlUtil.class create mode 100644 model/Course1.xmi create mode 100644 model/StudyProgram.xmi delete mode 100644 src/coursePage/impl/EvaluationFormImpl.java delete mode 100644 src/coursePage/impl/EventImpl.java delete mode 100644 src/coursePage/impl/InformationImpl.java delete mode 100644 src/coursePage/impl/LabImpl.java delete mode 100644 src/coursePage/impl/LectureImpl.java delete mode 100644 src/coursePage/impl/OrganizationImpl.java delete mode 100644 src/coursePage/impl/RelationToOtherCoursesImpl.java delete mode 100644 src/coursePage/impl/creditsImpl.java create mode 100644 src/coursePage/util/CoursePageResourceFactoryImpl.java create mode 100644 src/coursePage/util/CoursePageResourceImpl.java create mode 100644 src/tdt4250/transformation/Course.xmi create mode 100644 src/tdt4250/transformation/Course2HTML.xtend create mode 100644 src/tdt4250/transformation/XhtmlUtil.xtend create mode 100644 xtend-gen/tdt4250/transformation/.Course2HTML.java._trace create mode 100644 xtend-gen/tdt4250/transformation/.Course2HTML.xtendbin create mode 100644 xtend-gen/tdt4250/transformation/.XhtmlUtil.java._trace create mode 100644 xtend-gen/tdt4250/transformation/.XhtmlUtil.xtendbin create mode 100644 xtend-gen/tdt4250/transformation/Course2HTML.java create mode 100644 xtend-gen/tdt4250/transformation/XhtmlUtil.java diff --git a/.classpath b/.classpath index 22f3064..213e409 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="xtend-gen"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="bin"/> diff --git a/.project b/.project index cdcd018..fed0ee2 100644 --- a/.project +++ b/.project @@ -5,6 +5,11 @@ <projects> </projects> <buildSpec> + <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> <buildCommand> <name>org.eclipse.ocl.pivot.ui.oclbuilder</name> <arguments> @@ -46,5 +51,6 @@ <nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.ocl.pivot.ui.oclnature</nature> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> </natures> </projectDescription> diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 81be62e..cb9c3a6 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -12,5 +12,12 @@ Export-Package: coursePage, coursePage.impl, coursePage.util Require-Bundle: org.eclipse.core.runtime, - org.eclipse.emf.ecore;visibility:=reexport + org.eclipse.emf.ecore;visibility:=reexport, + org.eclipse.emf.ecore.xmi;visibility:=reexport, + com.google.guava, + org.eclipse.xtext.xbase.lib, + org.eclipse.xtend.lib, + org.eclipse.xtend.lib.macro, + org.w3c.xhtml1;bundle-version="0.1.0" Bundle-ActivationPolicy: lazy + diff --git a/README.md b/README.md new file mode 100644 index 0000000..cc29637 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +#Transformation + +##Plugin and extensions +Plug-in added to Plug-In dependencies: **org.w3c.xhtml1** +Extension used in Course2HTML.xtend: **Xhtml1Factory** and **XhtmlUtil** + +**Xhtml1Factory** +With this extension we can implement methods to generate html tags/types like createH1Type and createH2Type + +**XhtmlUtil** +Utilize methods from Xhtml1Factory. + + +##Transformation + +In this model i have done a Model 2 Text transformation. + +Source model : xmi +Target model: Text in html format + +To run the the sample provided in the transformation +1. Open Course2HTML.xtend in /tdt4250.web/src/tdt4250/transformation/Course2HTML.xtend +2. Right Click, Run As > Java Application +3. Console will display the output of the transfomration diff --git a/bin/coursePage/Slot.class b/bin/coursePage/Slot.class index 8948891dd115d35b37d8ca3f56b8a381d761ca7e..d05ea552ca35df67f394c8636d68936d99718051 100644 GIT binary patch delta 71 zcmaFD`hs<XE2EW&hNe$eVp*boPGVlVesD=qW?s5ABLi=7YDsWOVo^zINM>#-BZH_0 LhN{igjG2r8QoI+W delta 67 zcmaFC`h<0ZE2Ei^hNe$eVp*boX-Q^|zDr_Bsx>16Z*gi#a7kiONoq)DZYm>#um+l% J&Gn3#i~#F#73Kf{ diff --git a/bin/coursePage/impl/CoursePagePackageImpl.class b/bin/coursePage/impl/CoursePagePackageImpl.class index 416d445a20385eeb0b9d70c29621d7e91964a2a8..408d0278a105c53256b292a6fe391094fc3223fe 100644 GIT binary patch delta 31 ncmdnn$GEqTaYLR1qsZiZ2PHNUMh0QV7n1`W#5S*Wn7{@ArlAS< delta 31 ncmdnn$GEqTaYLR1WAfyD2PL*-Mh0QV7n1`W#5S*Wn7{@AvAqhF diff --git a/bin/coursePage/impl/EvaluationFormImpl.class b/bin/coursePage/impl/EvaluationFormImpl.class deleted file mode 100644 index 6dfb015cc70ed0dc559e2fa6236882ba1779c3b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3591 zcmX^0Z`VEs1_l!b7j_0FMh2zi{L-T0)PThFRQ=4{f*gI<vc#Oy#FEVXJh%L!T+iHs z9Cij4Mh5fzqICV#<ebcc;#B?A+%)~v<oqJ27T?Ug%-qBrSO27})Z`M778U3GypqJs zywoB_242?)N8fl?7gsmOP@fP+21XY~243g<yyB9?yppiQoYGV_1}I=;U`ee=%w=Q{ z2nh1`a&-<t(#Bp;ln*kVkwMroIM~zO&)3xtS)MDgxHvOCFE=%>gpq;GCNnRy#Ey}H zSwl07k%7fIKP8o&L70(&KP#~;Q9ma!FJ0fYs3^aPgF%#$r6M%1D7830rz|x^Avr&{ zATtN-e}#gg{G^=J++r&QF3ymQRE3htf>Z_6@KH!k%*)F!QAkQvNK_~;El4fO%qvMP zN=r;mRme|6Qw$0jYfN>yrNs~f@)Y2jxi~{WmgQy^=O&gUXIR1PNzTtJOD!r<NGr<E zRd999E6r6X$yac7&PgmT=Hhe>bMy&y4Ds~$i+A%6@{NxN1wBk_QmO*nm-$5snZ*hq zhbJneWv1q&V9^VW0&=w@B8glRMja1NTO>u?Xvq7Lo8;)6=D8Sz7{qxP_!%S^8ALUF z5M@(vNl|8Ax;3cm;`hnSOZ6+wO-d~aNleN~Wn>WY$xlwq2}>->1o5GQEF~G4#f%Ip zK7`A2Yeoj1)ZmiDlFVdqxxvVwprPr5y?lq1EY=(h3XBY)_=`z!DM@;v#mK;(o?7Ax zF7}x<G+j6tR2Uf)30lR-z+Mc~#-ib(8OFh&!N?FxP#+~_BqIY?dTL1ktRCVjhI2R= zbQl>D$grHG1joq0o1R+Yh*Zz<79;aH7z`L0lF4udsU-%eo_0?yVPp{3@QjMmL`t}j zCV({ug9#(Uef%x~SF1z0#sY;xFentnG(0hb0F-yxQbY5KK`K}@JRy9~Vz3SnKZ=oo zqa+`a(-|2=G?0T4B5KXZz!jWdT9lmXmI=!E;;3y8P;){LRAw+Th<fHF=jRn?7MG;v zm3U;P79|!XXH+sW@Ob9sr51s6d1^5`gA*fzF7|v5Zu()i;}{t@;Vn4^MFvI&W(EcZ zHU=36Rt7c(Mh12U1_mYu4h9wmE(TB|PKJRSO`HcR&Wk3_2NvgLU}4~A5MW?r5Ck_# znHd-v7#O&AGYCZriEL*O+YdHh5^N_(MwUT}fq{VsqKZM9L56{WfrUYqK@O`4@>onr z#bN>@gCc_xRuh!5n2?Lr1XTt#BojcP1o4GB789zlnxIL78=A11poPN?+F0DskJSWS z65KEys|k8I+@O!e4NI_^V8~#E6p}3P^k9s|g!NcWFl8`9G64}6*i1Nx)dX_}3nUYm z@Vem|Rue24tcW(@HC7X>8ElYD0HuCNio%vAe`7I$nZXvEd+ZqO!M!U7kT1YF*pb1R GffE2;;fiSh diff --git a/bin/coursePage/impl/EventImpl.class b/bin/coursePage/impl/EventImpl.class deleted file mode 100644 index 2b04296f01629da0777e61e0464fb5ef32ec1c3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3850 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 diff --git a/bin/coursePage/impl/InformationImpl.class b/bin/coursePage/impl/InformationImpl.class deleted file mode 100644 index c9f8627eccd2ea83254eb9af4e9589ce8d0d6962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6077 zcmX^0Z`VEs1_l#`Bz6WSMh5xh{L-T0)PThFRQ=4{f*gI%ytMqH+{BX1{5;Rxf*f`R z7Dfj1{GxRI)a0DZg5p&D)Z8@v)a3jksCwVbyv*Fh99RFOtkmQZkQNo^{JfIH%)Hbh zb_O;^1~DWXkPK&J;Bj$`jCXZ$b#n~$31MUq@Ig}Ol2~cY$iSSESjou18|3fri=<Ex zSz%Cqey%km14~hUel8;eS3yo<US4X7TYeEEgR&30vy=04bMy1`OG`3y^j&>2i%YB- z890M8)AJHbN{dn%8SDt_utBywxTG|tGN33wy(lr)+RmDhLDa|9IV3d5H9jOVz!k~K z63DuIQj<Z}g;W-#S~D_m=ODO@3?jiHjzJ-=@gbhR$od6*vJ%S@Ar5y*ECK1`DlSPZ zDoG8=%uQuv5Ono(LD$2cnwJ8RWwXi5%Pg^DWMJ0N3}a+qan4UkWoM9OWZ(yznv<B9 zuJ2k@lwZWbAkWBtIyA2+wKzYgEHy<TIX|}`GY6a)6bg#+lX6mXi>(y6I6*O@kery8 zmtUfgl&Sz%pI@YqS*!pOO;kwBOwCE*;`H=$^AGZM4Ds~$BV9*)yo+NbIoil`V0?Ul zkE5TTt4q9_e-Js=B1b<t`jKLv9PO}FK#pDteLfmbL}!EecuL}FG@wTV8lz;5j~~J% z&uEIKS&HUjkYP~dVUT1{Vq_52fHWe&)qQYDQD$DcHK;kj?~|FA>Q|bZlv)&$n3R*s z$ROmCpPZNzmROVt;zI>lN-{Ew85tCjTQb-hjMj_{JgLDYi6xoI&N+$2#f%IJ8k!jG zDo6v;6|BOVgF%atAsBzN1JvpuxhcWOz?Pm`;sR<!3TbE}yByTM<Y3TaWKbk%Eh7V4 zG1L%Y4RkX!!#Eg>7#Si6nu6R8BB52o$iSYSS^{e1GBOCGdI2P8&B(xB43if@aUED1 z<U9*ThDZ{fM||svk%2cowIl$k)vbypwz0Ll9f(nfueHs=V9UsmK%&n`ZsjmC@TI4g zAT`+;8Kh9-0ZGo9k%6xmO|>*itRO1}MUFEgLn4V@AiboAL{czPe*u&mz-@nUR|wjp z;4MxqK~^LTEie#jKrZ$qJ<v&R)iN@0rKgs-!ul^<#c&P>gD)dPEQujTT62q$fiKlF zuPn8wI5j9WH@_^Ek)cNeM*-%USCU$k2k-q_dt#`ACjGqplFYP9eLoPDnGEhwIcFqh z=2>GFjf8YCGO(n&r<O1>h--L8MQI`x>X0tDH3vg5BV#xIFar1DkjhgMiX_yMjQFAg zRUgS25mh_snE+Kk$w?AbJE<v(B{dinV`3Vfn9&8QgV|C;^NK+#STsB#e9vOA4iG<z zk%6NmA5vp8GKgp(M>#~)nvsDkIKQ+gIn^x_RDp{ijkAD8Wb{CJosogZGcPZ-2wdl; z7PB)XFf!<(kB~s>WpKTYIk3aXzzHAPVNhgXWMF1sWMF0BW{_cEXW(F9U|?b31k*AM zTnyY`J`a@UW#D6AWZ-9DU|?bpV31)DWDo+&3xjDH1`!5PFkcKz%P@$8X%+?vFfGi$ z!XU{Y#lXlQ4Ia7z*~`GdwVOdEQb=w)gTj8WxylR-3~UUH3=9lD3@Qu^3_M^q7lSH; z8rW=g1`VtxXksy89TpQ98MGO6u$rKY#e{8GP0(jBKr(@e0p<%sEG8VrYJxF?36cpQ z-$KFxn;TAJHNlj@49Nt98_cn|;RaR{EE%jAn4qy~jU`TOu$c4+t4VeY_DF8Q@0&MR zO>kgvL^1*48z(Go_=(j77Y0`(6Y#o$krAs2ZVc{7CLrA4f$0WDKCC8qk>Ca~tR{Hl zaDxvPHz;E@!H>Zo$rmi}w237)8TGK55Wo<K)r24{Zm_{>LI^`Bk_pUkH()a%6srkg z4B<#7AmRd>2_;xfh+v2$+Js41O^9NMMlu0^iduoi1SW<UaETVn5C;kYa7i1_kjTIZ E0N=e>J^%m! diff --git a/bin/coursePage/impl/LabImpl.class b/bin/coursePage/impl/LabImpl.class deleted file mode 100644 index fde3fcf8f08fb63bf538a9681aac8109f08509bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmX^0Z`VEs1_l!bBX$NRMh5ZZ{L-T0)PThFRQ=4{f*gIH#3aw$f*f`R7Dfj1{GxRI z)a0DZg5p&D)Z8@v)a3jks5;-wyv*Fh99RFOtkmQZkQNo^{JfIH%)Hbhb_O;^20kQ{ zeG-!x8Q60YlR`3cQyCeQeb5a~&d<%w&(kk0$;{Dr^~o$Qv1Vl849-l?ODriZN@Zj) zC#=K92gyR$vedj1YddR31~!|_yv!0iMh0dL%`ip=7U%qwR4xW)27Vp}ZU!Dk27aH+ zyi~u^+@#c^ki?{%R7M6NpZw&+oUp{AOb{O`$WoG#S<J{FiEIgScv&+t@T3NpB$i|* zJLe=87c(*_XlP<M8WMi4U=`Nv4C0Io{8@=*iTXK-dFlGDMMe2V91N0-4Bnx6MXAO4 zIc2FS3d#Ao1(`XCC7Jno3I#>^Nja&xRtj94K8{Wb$%%P+`6UWTsS0q_`9%tu#R?$N zM1{1>)SMJ9E(S3MX^>xK7#T!0d=S<JmlS2@rCWmng)2R^#0M5Rs#x5OEqW}8QHM2B zI2aTe8A6HjV|=`iqf>l{r>`q<zGY<KOZChvOD!r+4NA?;FH2=)=+VFt4W4-=sYQA4 zBy8=8p$_Wpy!?{Pv`T$H5S5t>jtb|D#LPTv%m^l=gOPzH)jhR@kwIL;Gb&0GDLNqe z$Qq;|7^FZ<!xK{$6j^Mkp?Sq16)YN_5WZ(ISO<t7#mK-FoL^d$oa&YdO3OUZ?5qch zcSZ&t&%C_UB5?9cEoNshU}Vrm&xw#E3QpRXS)7r96Q0Q#6d4#9m>C!uSQ!`@SQywD zI2afiI2jlim>9SiI2c$!*^7aZftP`S!I*)OfsuiMfmLfe1K&ol5&;GV1}+9B1_lOw z1{MYb20;b}1|Ena1|bGv1_lNe1`!5Pr~xKmix?QVb~A`Y3Q25dklGJ7g$=CB63GNE zs0oY=vJ7$zOi)M3gPnqEk^&Z!oUxju#Gs7i78a1}!EV83LI741R2Wo=HX#nH32F@L zNG34jbwe&z6Eqk!kxT%EJ|sl3`Jxu930e%=M4Qlq#RMh>9dOL)GU$Qa4^Be*42BGx E09x09p8x;= diff --git a/bin/coursePage/impl/LectureImpl.class b/bin/coursePage/impl/LectureImpl.class deleted file mode 100644 index d033e44b3e84972bae43a4e3c87f858ac3a5019c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1724 zcmX^0Z`VEs1_l!bBX$NRMh5BR{L-T0)PThFRQ=4{f*gIH)Z~)VqEye^f*f`R7Dfj1 z{GxRI)a0DZg5p&D)Z8@v)a3jks9N95yv*Fh99RFOtkmQZkQNo^{JfIH%)Hbhb_O;^ z1|cNVp$0QDaOXg*2+7P%Wn@tHLAM||KQ}i&PrtMzGe_UmC$qT3nvsDsI5Ryj5#%sN z26MtXY<!R`b}dWIE3vk-W@KQq$;`_vv14Rl*3b-NWMFa5Pf6usU}oUwVc=%qVPxR< z$;?ajE6q(xEec6Y%1LEp5c0`SPRt2QEXoA&p@J+W8JWe546?|Upog6`BLh!ra7kiG zX0mfmVsSAegMx-8hQlFY=?Ye1&CVds$iSbKSeB@tlbDyT?^;xpU&O&6$;jXznpc!s zoS##cnxc@LpIeZblUS0OpQlhzl%JH7nro%N#p&bf91<Gjs*s$RmzQ6nkd&$b*O6bO zkXft%5=~S{%S_El;o@QtV~_^<S%#58RKo{hWpGJRW?s5AC~)}FQ%j&x28k$DEbhk^ zRhGo4!x}*x42p~lu|)edJ|61n_z+KDB7M%tz?bToSC(2-oEnsxn_rg7$k3yKBU(K3 zN>YpR;K|$C6GI);`+4~#nQ4{!ejq9{85}jv8Ht&B)|e4aNCzVWOR9Tn2_u8JhG$fi zCQ{Tu@|ZP9K`=;xn1&~&EGXjGQbY5KK`K}@JRy9~Vz3SnKZ=ooD>%QjC^^+F6O_IM zpivCUyLzB>z{tSknU|MZ1WuBv#q10Qj10QyITVs?!ATyo2w-I3gckw~iVTbl%nXbS ztPG3{EDY=n91M&MoD2*MOblEM91JX=Y{$UJz{|kEV9dbCz{tSBz^b*Kfo~&Ni2wrw z0~Z4m0|SF00}F!@gCGL~0}n(IgAju-0|NsKg9w8t)BqE(MGOpFyBWkHg(S8!NbQH4 z!Uoo5jbs8B)C5KbSq3=<Ca9z2!A?OnNdb#Vu2@Y{Vo*kM3k%5gV7Fj1AqcApDh#Sb zn~;Fj1T_YABomnNx*;E{2^tKVNG5<n9}=S2d{K|p1T6+_qD|<-VgeI`4mjp?8T3Hz M2PYwY215o;00D83LI3~& diff --git a/bin/coursePage/impl/OrganizationImpl.class b/bin/coursePage/impl/OrganizationImpl.class deleted file mode 100644 index edf4388c970706e4773b6b8d70ff31f372b4c5d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3865 zcmX^0Z`VEs1_l#`Om+q)Mh1oC{L-T0)PThFRQ=4{f*gJSqV&YP%&Nqa%=|ph+=3i- z1{OvJ^ZcT8{nX@~%!1-n{nXqv{nX_ABB%!6%)HFp#2i=uq^#8B5|9=Z=lr~q#LT?Z zB6bEgMh0;tE09fRWZ?C4^mUDQb#Zlb4D|_NWDxSnN-Rs%&q>Tn*AFf!%FIi*W@KQ= zOUzAWWMIxnEM{a-_Ca?^a(-@Zex815NoJ0|t50Tei8UhwXK-eEUSdgUQ7R*Y6=5AV zK1eQf%`M2uuS`v~wzFnr;44ZkF38U-&P>Wlb;~beWDrJH>I@D#YeohRo8+9#yv!0i zMh0dL%`ip=7U%qwR89s)1`!?xb_Nbc27aH+yi~u^+@#c^ki?{%RFGfulM{2o5{oiH ze5fFs4cHhi24)6H9tLp+L68~JJPe#5GgwM8GK(1*l#rc(HOj0R8F*5IOA<>mlbv%C zi;Ec<6f`t3f&mhRu3#0`><o&G4E%`DcP%Q)FXCWOW@HEn%_~YR&d(`JO;JeB&n?Kz z0VfTGf};GSoYY(^1ujniAa_SU&nU+bPk%p!<ixzZ{1SzvR0X)U{33<SVg-<BqC#3` zYEB9l7lQ(WD#(Lsj0~b0n6VBDL-zF45<hU%i)d(KDq&<`FNP@KV9;h{h$79I@$sOf zN1S6B8Q9WOOFTfyPZdizVoQKF#HhoS>^K+<7#Si-^^b>RFtOedOiwKdLQB}98k)%I z3YxS*$<Ks`fscWokwGjeu{bk17*lJx1{R$d$qgDzdHE%oX_fkZASyE%oRpk15;OCx zF%u{u9UKf6j0~xyhEtGhaDcyGu&0xcYrLC(5Yb^)jOlSPY#!GP<6y91WO#?)UB&46 zCO)1lhoR)X0W^b=fjiYRuPn8wIMp#Fg^{6010w-I${WwTlGLI+cy(dziJ^{Aw3D7t z7#a9rjtff7%`Z#kU~pt)m`8F95uL@T5i5)gEUE6PC5#N>8lF*6$ORyzqP6B=aAjn; zPO>M6FZa-VL3iH=gM2Th;fYlCL%j~F9@tVt^NK+#STsB#e9vOA4iG<zk%6NmAJT;2 zVqj$O<6-b;2w-I3NcAiZD9W#>1Xt8ipn5ilhrx$IgPkFSkwF|$|3S1mm1gFoq!w{8 z1T&~|FoZKQa42YiS|e5pAfZSehA4(;Mh3RTf`Zh%6h;PJY&98@>ro7~1{o0xG9r$V zK}N$FIfgM61~D?Q6{QxJ=9DlpNa8e-k%2e3Br!SLH?aWPpx_G5FD*(=b;|@bIYg0L zU!aDX9>~Lt3_PBBd8tL<hCpgDJ3~4ngD!e23zB)ktqsif9wP%Myv4_$$iT?J%)rRN z%D}=P18V#*Ffg!y8Zcm*i-DVgk%5PSfq{vEmw^RTvoJ6)2rzIk2rvjTFfs@+Ffgbx zFfxDuE8}Jc;f-LWq6`cSY+zwM1~IS*$WU>(7CQzeuq=<(b_NNpO$@?Y8Ke+8`52fP z7#IQ=SQyM1xETV$Ch$PiGsrN=f*mHuAP=?P1nhhU2Cm%<3Xwue+Zj~$gKb2(AqvR^ zE~p8N4C)LTP!seS7{R8qYHeYV+JL4x8A&rMT(c&F8dNjLdL{;#^;%f0&qp!=VZ9E6 zE&~%ZWc9$|2r>y2k`RyRV=<``t4W3oMo_mPd&C&sBP~dp5gsvRFoS9aSq}<#i1p@J zte=2n0>UGf3|2@cAcDdgiwX0wnqbRdhhzc^JTS2Z!6vLG*yAw40gD?BU^T&s!5OO? zT(FpM0jmja4DLuKAVLzG36HUw;KAUDWC9{2v6=7_s|j8V-o%=~$cNPgA9${4Wng9i zxxqwh8-wpm1`e(541pVVGXzJ17~2^_eYAzbwlPG6YlCtPm?5CKjUgsndmBSMDD5#b zfO4P|0~-SaqdWr-qauR@qY{HWqcVdAqY8sQqbk^bF^C<|j3vP!!;rv`$iT>u#J~W` a*E|eN49VaenZl3?N*LhMDvcq7ffE2YvaI6( diff --git a/bin/coursePage/impl/RelationToOtherCoursesImpl.class b/bin/coursePage/impl/RelationToOtherCoursesImpl.class deleted file mode 100644 index 71b91b89648c5fbdde3bafeb903aabc61c3d9480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1604 zcmX^0Z`VEs1_l!bBX$NRMh30q{L-T0)PThFRQ=4{f*k#z)SSeU%>2BNeE*V+)FNlF zbg^e{K@K|u3nPPheo?x9YI06yL2;^nYHpf-YI1%NRI6`hUS@7$j;nuCR%&tyNQ;Vd zeqKppW?pI$I|CadgCde;*zI9t;3$GRfRRDO2T6T$QEEzNNwGB}1Dj1|US^3MBLlOB zW*8#_i*tTTDi;GY11}E)Cj%EF1HVsZUaDVdZc=JdNMce>DkFoCPkwS@PFP}5CWsFe zWGTtWEM{cTLAHcI2v{>R@T3NpB$i|*JLe=87c(*_XlVLi4-r?e3Tt)-QAP&-ti-ZJ z{hY+SbbZ&NqWmHb260A)#L&E=)Z+Y{veXoX<ow)%Oh~vZ6cptr<)r3XDR6NHx%xPU zc>4Rrhxo_)hj_RK#XI|l1_iqYD<mi8<>i+sB&90A&B!lO$ShU>i6$zfWv1q&aB(q+ zFi3&|MT(I@RKo}1h~Sc<%)E4KQ0Q@|r<TB?f{{T?LlZeTU}4U|Ajim%O@Vvk<6&MQ z&gF~@0!fL*naS=5$8j<+GAQyeurqKlGH@3o#2FdHHL$rE<T;j9_tX-Q0?()@O(g$A z5~wvJ150W!NP(D!C#EdO0JhZ7ykd|F77b4b-?JF31H_MFWZ(+UFD*(=b;|^$GI>}y zVrCsZP}nmv@Ob9sr51q`MrtuTg8?IhF80I&PKTJ;iIIU5o}m~N85kLu85kK@85kK@ zK;go`z`)7C0?Gpnj11fi3=GB$j0}tn3=FJV+ZlK^GB7YOG4L@kFmN$2F)%RbGq5li zFz_=lFz`SWF$gdSGB7Z(FbFXSLk%ziTfo4;wVOdCQb=q&gT#KgDQsX}mPjUWK}}#} zkY<p<YJw~l6Wp<yAP+Y|AMS}Q3<?|2tPe)g%nG+&i9s33dXQ%!9>8XOJdz0r52!Gx zBALJf3N&yKU^5{Ls|jih>PRLq<29iYs|gwmnn)(#_eBR*6SNq#i8f(67895lbim=Q R%b*8xKRCVVGZ->(0sw_CQ|ABx diff --git a/bin/coursePage/impl/SlotImpl.class b/bin/coursePage/impl/SlotImpl.class index 696211bf24b77260bd0782fde476c3195bc70c90..779060ef53a47f0a46b908c6d761dd5d841be900 100644 GIT binary patch delta 1161 zcmdmMGS!6Z)W2Q(7#J8#7=<=+$ubHF`D7)QCF<uS=B4WgmlS2@rEfN8<Y%=K(a^+@ zv1Vl8Elw>7E=epZNe#)&O=V;d)xc0SxrR+cPyoZ!&1^0#N?Z(#3{QC&o-xESGH|4N z76%mNS5$H_Ff+X1VR+0?&d%^^vH`b@{7Z&6JPfuBl^hK37#Y|VG*S{PtrWNzUNU^( zVfe`KX>v2SHOEVaFCfm>$;Y^jQol1YaOfx$<>%*GDR40SWMtsiQOHS6E-5Wa4XG?h z1quFUWZ=_LD2BToB=(n)fm=r*H7^C^8IZt#Mg~qDg^c{tqGGUxjEp=C9~qe#8DunE zG$(K1k>uiHc*)2D5@em+z@y0glHtYVB|O25ypw<M=&%SdGU!fzz%Dk~j`yXg2?HC0 z2Llg741*9u0fQJr3xgEHqRBRVQL<YYSQzXWxEX>Ngc#BoBpIq06d3v#)EU+==rC-Z zyqV9Mao^<kd^U{7Co2ewPIlxE6uiK|%5afEgy9l{G{a>EJ%%fj=L(2V-o>BIcn7S; zS|CvHDFZ9RGX@cc=M2&eFBtR~UQV7X(8Tz0vVvfm;4cPNhTjY#41XA;8U8ZpG5iDT zUniK&$OhK0FXS%B&%nwkz`(^Q$RNll#Gt|`Jh@#cj!_yc|69miP=$e&QI&y<QH?>6 zQJq1BQDbtja1Eyc13RN3gBYXn<Qu}Sj5c7^#v&eqt_-Y<ZVX(E?hJyA9t^6Co|Ah- zHYx@&=rD#b7&3-2m@!5$STja3I55UAxH85ucrhk01TiK}juU<9n#-WWn9pFsSioS) zSj1q<Sj=F@SjynWSjOPaSi#`WSjiB;Sj`Z@Si=y>SjUjWSkF+v*uYT8*u+r7*vwGN z*vin%*fzOG?5JZugAU_F24lua3?__I7_1qmGT1OqXK-em!QjF;i@}?5HiHl2T!vuA zc?=<p3m9S<7c#^#E@nt(T*8pTxQro_arx#+;);xl8yIvLH!)Z-Zej3X+{O^bxPzgN zaTmif#yt#s8TT=qVmvVUiiAUbIRhhuA_D`%Uj}9dCI$wE7OiazPi8W3Xl-YBzF{}R z%SaGoJHu-qZK1c@7~Y3#Yi(h0*v9ZVTwCZHjPC^D|A6sbApBo2z8jb!^ao67ZDH^L zGlc$aV|ZT=HqdJuBSW~hfaW$v=5Xz8jBFbi7#NrttQi;>oEQWc7#L46@GzcXkYGH^ zAkTP?L4)x;gFfR01`EcE4EBtd7(5s+Gx#%JVTfS7$`H?ZjUj{aIzv9=4TcKFn+)}g zw-{^~7#PGLo@4M~@MU0NkYLDRWM|}HU}VtB1Y5<(!@$JI$-uzC#K^_S&A`AQ#K6Q5 T$jHOU$HvLP%*f9u$iN8z;$$l} delta 1153 zcmbPgve$&`)W2Q(7#J8#7)3U6$ubHE_+%xPCF+-!Waj9*B$lLZwq)dIH51a%L=(4W zWZ*4MEeS43EGkJ2$;?e<WDwRsQ!}}VO@p5g&Ai=gE-aRe3?eWSa}x8?^@B@_GV{`{ zxfmE3p7Ag|XNYBF;7Ii>4k*g6sN`Z`W_ZcN@R;EVJHzYAirg|BuNdC)FxWD@o1Dug zA<n_@fsuh-K_exx(n^7g;T6Lt9)`~hUna+JTXVc(_y*#9pFE%2i2o-e1BZ@6QGR}| zl>!ID@5v9iMQr{uGVtjr6vI6MlKIcbz^$W@nwJ9dm6ZYqBO@aNr;b8KerZuL*ak*s z9){11ERzj*6ggfovVl14lOuT)nO`xyoLtKj%*a3aB99KE(B^+UOpKyt3~UTu3_J{R z3_=V=3}Osz3{nhBCX4b#$!=p{VQ^sJW(Z*rV#r{SWT;_KV3@$5&ajR_hhh8V9zJWv z1Cvki*)X1*{GVTRvJ`)y;3WoDhRX~h3|APW8Ll$uF<hHmASgb0GJiJXy~+Ri(*&P0 zurj=05Mg-9AkFZKL66}zSiV;voAEQ)3_ig?!9NVF41XC!82&LxGyG@JV`P|IAlSsn z0hZ?wau*b2U}Y3y;9?YJ5M&f#P+=6EoFEj(C_8z-P>i4&11qCC0~ezPgCL_Og9@Y8 z<OCt{$<D&5oJI`njK&ONjHZ(}3cE7eflcEP@ep)pU}f}R;9~S-5M=aXP-XO<oGP+W zF@!;fF^s{GF@nL2F^a*OF^0i`F^<8NF@eF0F^M6FF=ev3=u6jp1|7yi1{20222;io z23y8b20O-b1~<kE26x6P27ktCh5*J|h6u(whDgQ+h9t&Dh62VWhC;>`h8o6JhFZpU zhGxc&$*E#T9VasAFivJLW}L!c!Z?k=nsGXV4dYA(XU16!E{t;+ycy>*_%P0A2xeTs z5W={KA(nA5LmcB$hGfQN3@MB&7%~}GZq620WK`V5pu@O@!HRJkg9qadhA_rm40Viq z7?v^aW7x}hfZ-J5p~-6{9O|DiFfu4IFfjaMU}j)qU|?v~+Q#s7CIg4oc7_)lb~C(+ z1TnTVyz$W%dcTd~W4N}~76ylH3}3^wg?_;JP7wYt7~ciL{{!Q@LHPe*d=D^Rn2}){ zLp{VquWgJ>;o1V4+Zb8HwYM>HY+ztuU}mspU|?`!5MW?nJj1}lc#c7W@jQb(;{^r{ z#)}O4jF%WJ7%wx}GhSivV7$uU&v=a?g7G>-JmU?9491%b1&p^CDj9DxG%(&_uwh_e z5QF%R!H2<@fq_ASA(xSpk&A&*n;{cy6(bJ=6C*bR0|OHy4<j!F1A`C)6GI>)AEN*p NCj&F1Afqq?CjdnpDRBS* diff --git a/bin/coursePage/impl/creditsImpl.class b/bin/coursePage/impl/creditsImpl.class deleted file mode 100644 index 6fb7e2794d05a920259301308e06675e25bbdbc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1901 zcmX^0Z`VEs1_l#`0Col@Mh5BR{L-T0)PThFRQ=4{f*k$iqSTbkl48%?f*f`R7Dfj1 z{GxRI)a0DZg5p&D)Z8@v)a3jks9N95yv*Fh99RFOtkmQZkQNo^{JfIH%)Hbhb_O;^ z1|cNVp$0QD@CW#N`h^6?ySli#IfnX#FfuT@Ff#Bu=jRodB<7WbCFYc-vN1pbBLiDO zer8@tF(U(;O=ezZi5(*Yvxa6EBLj<beo87A12cml4+Ad)A14DNgD?*R4+94y1HVsZ zUaDVdZc=JdNMce>DkFoCPkwS@PFP}5CWsFeWGTtWEM{bo^+9qadKg$UGVr7Zmn4>C zCOhXO78f%zC}?Q<U=I^lunKE-25CkH{;b5ZME#t^ymWonqN4mF4hC692LI5!qSWI2 zoU+suh2;F)g3O%6lFa-(g@U5|q@2`TD+Ml2=O9-X&yZk+<ixzZ{1SzvR0X(>{33<S zVg-<BqC#3`YEB9l7lRaoJjnM7j0~b0J_sv=ONuh{(yc+k#F?I25&#WBW(`djMh4De zgb0g<i)I)HgBl}4IMHs4kB3Acac*Q}U`cgPEn#F3*YJ#r(nNA3B-L1h6a<45h-r9Y z%7VPWmKvH@3{t_O;R)e;7K3$w_)&}u93}Y>4>K}|Xdv4F5w+%GU}P}jVK8PeVPxP) z^(+o3%CD#dC!;7(`Z42S&}T4UXRu&o5JwL}r_#)vl++?F26F~^4hCyR1}+5+NP4tV z014XiFxWBJGcvFx78IoBr7$w+Vv7bOZ$X>{HP#wrgd@lZCq@Pt4HrzeBP(<PDRc!X zbjGjHjFEw@D7CmWr-YF~5~tma47|Z5iOJc%i3QO7z!jWdT9lmXmI=x+0?_;l%GG+H zU}0q7@yyFhEdnR<)M9o9KSl;!>=^-^i7*QXMg~rJ@xY+Sz{tSNz{tSLz{DWKz|O$I zz{tSKz`(%7z{S7<%Ek-~44e!spsdZn$iUCQz+eMb&%nT?wVgpgi*GA~&_=L&5e5bZ zJ_cq61_pBm76yF=P6i7GQ3eJE9tK7R1_mw$F$Qr41_l-e2?j~1NhUCpb~8vt3dw9| zklPP8i4CmF5sL|o42ld&P!seSn84~-wYD$_tw+=Bg`}AkYCR)^GJ^_KGst?7bGg9Q zt75S}49NtT2N)UD88nbgU;%j!rwNHzP0(b}LNWor8}hN5pv|CzWC9ajH`HM@L6<>~ zXcKy|nxM~M05zeNftdm11{1Aq42ClqIJCAim~Pn3U>*r#Y-h0a(H64W#$Xe!4T`31 z3=ZMi0-D<xoWr%ZF}Q7DU|?Wo03{wN22gb~i-Ct>4ub^4Tn2fDc?=p1^BMFR7J%&+ sgV+I$NeKoS26qMz21W)?unCMj3``7O;3VM9-~$Q}aLV>&@Mquz0Df<YU;qFB diff --git a/bin/coursePage/util/CoursePageResourceFactoryImpl.class b/bin/coursePage/util/CoursePageResourceFactoryImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..c1521ebf4f1db810b3873bb1ef4f87257db3c83b GIT binary patch literal 762 zcmX^0Z`VEs1_l!bX?6xCMh4yF{L-T0)PThFRQ=MD%p84ZI6o-0IKQ+gIn^yOxg@`+ z(lfUphn<0ik-<E_C|y4_IVZEAI8{G2H%&h^Ilm}XzX+;aKQp%=M<0u3Mg}&U%)HDJ zJ4Oa(4b3n{1{UZ1lvFMTW(H0k237_(Mh1SL%)C^;(%hufqL9R-oK!{zA)ox@#GJ6i zqD&AUD#%ijky*^hpzlMH+pQTH_>zlK6H8KIZewKd(eOd{Omcp1ZhjslEJA}ktu--J zpm`T&nl(FvAR~hsVK;#Sl8ZrrK^Wv~5k>|TA{-IM$iQ4$l*!1Th~XS`2QxCT6{QxJ z=9Dlp5bt(I2CiU8WM_hcT?ub0(923JOJq=FU}Rus00AZjMo|1QFfy<+FfbT1FfuSQ zFfg!cZD-)v$iTqB#K6VCz`(`8#K6EH#lXTK&A`pTz`z4h#K6PA%fP_E$iT<I4>iD- zff;Nt_ihG(NbT(mLcTg1(2P-K;ABt(8>0YG3N?m-ftx{;L5zWsfs=uWL7YK?0pvDG Hux=>;YN5!G literal 0 HcmV?d00001 diff --git a/bin/coursePage/util/CoursePageResourceImpl.class b/bin/coursePage/util/CoursePageResourceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..6f37983c59184f3de3bed2d6d81a887fa3e87401 GIT binary patch literal 650 zcmX^0Z`VEs1_l!b8FmIHMh3Oy{L-T0)PThFRQ=MD%p84ZI6o-0IKQ+gIn^__AcviS zg^@uozbIWlH904<pg2`OH8)K^H95a1Rlg!PQ$I7eAV)vK*ArO}BLkaFW?p8A9V3H^ zh7Y>l<ow*+{5*)Ap+TP3nqiC#EYA5Usay=q44ga+tPE_74E#Qsd8vM-xk;%-A&E&j zsf-LlKKaRsIbn%KnIJw?kfkIevzU=V!-qJ}STiy(mlkC*GAI&s6(a+)hGrPZNkSke z39vJWFfyoTC6*=X=OpH(>xbqQmlhP{7nP)@_!p!WC6;97=ebrSrxt)191LQN3<@Fs zF8)>uiKQj^y6LHTAT_Be3c0Bz8Tly+#U-UlTnxet5+K7R85u-1d=O>_mlS2@rGo>8 zD;OLTZkeDUkj5TGdLW$)iVTbl%nTsF#J~s&L<U9%b_NCpI|e2OCI$uuHZAS#3>+I7 z7#NrsxEL51xWJ;446F=N4BQM13}RqD8v_pmFUSxEHU>Theg;Mc1_o9J0jOCv49s8= oKCSHxg1Z@nBZWk_Gl=g;GgF3vg+Uf<CJ#h4)J#SODX>au0M!<p00000 literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/.Course2HTML.java._trace b/bin/tdt4250/transformation/.Course2HTML.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..45b2449d975603ae77fb547cc8683d5a903a561d GIT binary patch literal 22100 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 Pt`lK}ip*mLi!cHJ^{&pF literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/.Course2HTML.xtendbin b/bin/tdt4250/transformation/.Course2HTML.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..ea966ac41758aa9d1eb6d525f9338c8b8ce4ec1c GIT binary patch literal 9057 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 literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/.XhtmlUtil.java._trace b/bin/tdt4250/transformation/.XhtmlUtil.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..b11a4a6d7ecd69df8ed67cdc288801edad29ecff GIT binary patch literal 9028 zcmZQzU|?lrjId#JSk1uXSnAuu<Iv8?pjMJnVq#=!pkGpym{**ZUzD3zl9`{UACXa# zn-f}+nWI-xlA4#o<n%4nRm5QxTqgssvn-dWC<BvYH5U&L1EaH!;{!1z1}4XDM>#$* z23BWdb}=zHm(kgZ1<dVd;p1aqbhZ-(^Ct82@i8zvyFipqX6NH$U_#+BI(u_~RnFo7 z>x*_=Bd*BE<ha<8jZch$$vN6_mbd}~jL+;Gts^eZ$mF;}fuEm&$+=h<%-b%=&(FZ@ zT*4tP&cNijodYa~%wu$}V+X4|$j;Bt!06oLm?@#a$mDq1;g*0X1G96FL!N{LBa`Dz z69EAR7Uzwe5)uqdj{o=t1Q-~d4`@N;R0RYWn4J$uKzI@m9v@icO+K*7b6jBFb1ne^ z1}0}@9;5ROA+X#>Ua;H^0R)fH`86-dOea=$uqpo?zDa_-3~?Nb3yX-PBm<M<1+c7( z6bG0Gb}18#_YWec<8Vkyo`K1U&tbZNC<BuVDxcZKTw7Y2k;zF!Mo^G}$t6G#%v0eJ z6l7p_31F9&W?*tsVTZ^e@fcmgxxjMTtYEot4g`<UCEKA&Mvjrm$;2T?NQ8meCEvkM zMuw5e$-==$NQi;ir9cJ3Re|uhWMmkaoGiG6gcz7y3Xph=E>%)sIVUNw$|^w!Pf$pR zfzhR#1I!EN0P92MF}h4w1=|p>3f4CrVrD$V24o(i%R*_eDVfq>l?x#@WI}A%#0i$G z;so1(%wu#p%`Yp<z~s~_EhNIggoVe*<kZ6_EX=^<a)}+RaxyyxkI_}wAxK4yfyrsD znS>MrtE&`;iVBR!=&HmH=51t`kYHeR)f5Etc5q8bFfhC7L*#aV<d{%+jIL%ZV3qq> z!1|ozR8<+7oQ}v#NHH+EdWwO0C&eTs8JJx?xl~mdn4C^>NlG#>x(4%rd6#*>a>48n z9y?eriUrKO#R5ucuE;z_*Br+%4Pyo-r{@moGKvhWuEiW08gMS7Yc)HV`<h)whJn$w zNfgZc#4jVm!0g%qk^2OaV?yCEy7ohi`N;v+H{VfC(}<DDnaRONMv;Npb-u%YO+yA4 zpT+gOnzlA0lQX+GD6m~034wWnyt1+k%&w1EwY3?ToWVRs*XO(l9<%Fn76^|;R+fR$ z^)&~WC&~df1)0a_`p2O_N1u_&Sy59?fq~ggjZasXk;z$=S5A(B*-f2ASC@gwS(Qaj zj)4h<$LOZV3RbDhDksOl=oTobr^mqLY%DIPz`z9NF)}$@^2p0GFuMh^g5|(GMz=5? z1drJ*j2*&bmzQT?bc<yH^Bh>@<r$bzc#LlC{00ULP<Jw+@EF}z2^kr|Lyghxq~k<W zYX&CgAcrz#RR%V<3&N(Ra4w_UV^%OXj8$2gfzj=S7?>9=psdWm?DmcW!sAd@W?(|$ zF}i(&$R&g17~TFu^yPr{xwEo^_2saG^r7$=-FY~{a>bk=``l$6EzGPKnVf4Kyp>fM znB8R^4w_jq!1zpXev^X}D8WPcj7-iOg~8k^hZu7UMkeP?pp3)fUL|X8&H&{xVc~&P zvZ|;sFuQj$LsWuzjP5;L2p*Gr4+nzB=zf^Z!UAL_NF@^rkJ0@UCs=M5C)hE_JVy6d z4p~+ppTS)I*CE`>ih;>_g^Y>{1B-_s7lg;9qQb!FA*~Bhs|IqMhqNGs#}DCgfK@hu z%MA}{Bp#!OGACHB3tUooD6=DYj2=2NVBSP=kmEdbq!2tt4^N2gkWfV7F?u9Af3S53 zV_<SV<G4`Wh=I)`gWc8^&Smt-=LK^w@T#jbFnZL8fq8cY)YTc7J(@TmJPvhr1|}39 zqemA+?kPx)(POd#Smiq@u)dk15T2;IIs=QxOjZbw6>P&ii1nY@!Db@!7(JFj<bFfs zka>(A>%gYCFhfk)?L5)WA(WBHh0`%b-H3tNW4CjWokIu%On}AXm4lmugM$MjlMA03 zsQmKeRf6(mBs4S_m_2z}L3{=#7cigEQ%Dw>&*CWrmuJ<`U|{qV=YYy9f=f9xKBK1s zA4r~&$wiA3Y`y|azZOV8lP4;l(NmQZq@IDvMV|%iK2>&PKBK3((-8+phag5K7js7= zO+yA2&jcX{CkH1+CKqc#O-%-7&qNLopMlB6nnP2QfeDSz=$XR`l4oRcac9-kWMK5H zb8>ZXb_if#a`APP0Tsm<BCMX<9WoqT9o!h1T!MAAv>2E@w`)4MI=C`0xui;KX)!QC z`HW01seEAhGaN8^4zN5bpV9LQH&i~C4J?0!6PeHG#VP9G2DT4uKC>4$7l_Zm<Wj~3 zQjf-G^b%u-%7g7^Lh!-nGkR$`lsdROxHB@jv^d0QYcnu;**nBTMJ6}|XlpYtd)XVn z1k@mWDHvZA!sh|;8JJuq@IXvJ;WK)9^Fih3aDwH%Ve();qgSLDRDP)-SUyq&na}8z zuMg#K)6&*vVDZWqgz-V@8NC`{<{gLFkIHBC>J<Q~XJm4@!VPwBFDr=8z~piTTy1)x z@)^A*aYN;AvVq+*i4&R6=(Wn>wu6U*A0v~?6Nd&J0|r*Ft11qj4xWrmE-!d>bQqYu zo^ycs3`{OBICOLvn9%r)Uhg@f@*h~i^6%M^`HbEi91dO%ULgG-^Oz8PuzE&sV^#-m z2X96umv44DdJK%-QF0Ex4!#Ubu9n(*1`JF%_>4@h4zl|C49wn998mQR9Qyho^(cHs z?<7&Eyoad1J_Cz)5-W_)s;|$$=$#Hz?+ek7%4hU0V1ud;V*{Iy%4hUmCg|Yr;LiXH zKqhnnM(?{K4uKAVh`fg`!002!?-1+|%mB;pOy~lPK9)ibp$?(&LXOcV!YR}t!Xbr$ z$+ghohlv#ft4}<)Lxe*FT!7Ih3noy?ZDPW}=u;{ORnQ<|V#2`eQ_TV6bC{SgFro1o zeVPTJ@*M(T{j;5T9U>i)8JS#XI$SWZVqo%_?fBav(jkcfLxhpZb)Lg<Q%eSBpV<ys z4v`L#j7+X;^-N6}n0?Mm!uaA4z5s~Nz~s7C0MwxHIgi3;^tsOomEQ|)jQHGVN9Hs7 zypVzNkATc$@_8YJ%xCoFa_n)40y`4oBo<$OMTaPdC<Z3i#h|7Sqpy(!ln-_x6M_#m zk<mBA(b^%}A(4T}^^QZQsU-swZV^T%*GCR@W)=)Az9A0#9ikm#8JS$4S(=$Ku=<8* zIz&4}gZO-AW(>@}nH(TK1C#4B4l^?bCNw^yZy`5S{v8`wzK|1{&*<CY;NuYE5W~pi z`dtHT;39DtUmU{c1@Re}T)*?0nK3Z>uIGaA-B`H52BPvAeRqmM<@p4`@;gP4`Ha5b z*&SjXVnGfDd4LJQ2Ro3__rDNS9_$__INuFy9;2TeheMo097sPXK$y_@jDAKAArA2l z2@Fhb3Jwlt77R?dMHrdf)Q!!}8JPWy^c><H;u)CS^mIV2Jt&`%$xTlVEbk})lNSKX zqw*R30{Niwc6?y<fvhk-tGPJ?qhA;Yl<y2~O``D`{R%`K5*!jh_JQnY_ABBB@fn!h z{JFvQq4F91>e!(2VD~X0_;wKcwzvp5q&d_wFuCPA-m-D<U|{px&Eb&dkcJRp^gGN8 z6)EJkv0-5JyC4VU*GbseFfjXFgXyT_u(4raLgO>~-2>SHGO<kntpB|jRR44kpV{v# zO#gI<epEiA-(Q&ge2_e&Kd<v9hjfP;Mkcovj`Kl|X7=ZGp6rnBP|W}rV)3_iaB#?U z$Yf-4TdNCd82U#mLizh-Y;75s{i9hyd<G^rFrU#sK?a%6?4Q65<8#~EGBEmQ3qbiN z1;FN^@)`YGoL)L)IaD$-x!rXPwsUY}VD|42b;xqaVq|iAC}L;F!0g}24dOE}xjp2z zvtwXF<1_kCX9dYKGP!+VwX<Vj^k3<;+acSbf`Q5Ho1+!TNG41nX8)CroetR!MT|^t ze;oGPJGd|~`>%A!a>#bbW@K{b*0Z-~VD`T&3FC`H_yQn41Cu+qfW18flmA^5KBNCz zPN=*zJ6QfLJ2Icq|C<byuLLrW$^V-aGM_O(#!<{6$DxP;?k1K1MMZ}kha3hbcSa6- zdj`e;7YQgI>_jF6A8aIJK$gQ^hg^q31}1kahenXMnD7WOGPyfClsGszI5V&WWZ607 zI^;4kxx0ef;tb3I4Z<)HaO)W)!T}OtU~+ebwzmTs&_oymI=G=~eAysv=70`PR1wC2 z$s$mZU=gqy=77mCUBTR75ypUdFq7k8cA<+f25jeX$aBa8xd-BACWHvwoXZaG4*3oR z3{37B4!&T&G6i6YF$Y{$a>#ecXJm3OP;_u~aAaT(xXcX_VPJAE;0B8@VTdpW+!KSU zsTKpPVF|d$0ux~Yi!cT};(&_ObAUydFhm#wUc=OMz|^3NFa|P7I21S(FfzGM7YFqn z7?=V%1wbMUOz!gpaELGlT03ew6gyNfGP&<}$N@L+SpuycnH`E9${Cs5FF8bj#aIKa z9i}-HJCuUNtiVDnfz}RL4#f^7AR$ATkhVjyLop+h`+E_v2y>v9AWVcGCc*&{VPJB9 z5AA*gdZCFh1_p6L)qH0M>tYHFVn-EW42<T2iu_}Rs)>e~0~KKmte0^pfw)i_tcEdg zE*nS$WIM!#Ob8LUt^;fir4FSGOzxK;{$dJ57hw!M!46Wx$mGEaaUo;iEmMawhcZSc z4?Y>NUCe>6C1E1sFcATe2m_M`p8!~dDeyI#2xH)HPN*6=h{;TWzu8em7=u{2pdzYJ zzX!2!po%aCX>mA|JCuWb0f{gs3=zg46Q~-Po0$+IP?H&h+_@bpAPEH09b^u2X9tNe zFuCuCxR5c(j|D1nj0NH^3=zhlAVH{_Qx1t>Ma)4#955kBQeX^<f{DOV9uuYzV^D{H zLzP1n1Cxg_xHrYXgdxHhv_{CG#-RpLdoc!`c8qnXcj#bX^6++8?cn9$&%hRRiNm4Z zp&m(yG3XXARLGwf-0@)ydM*bQiID({FbBPbX^Vk&jxa<RgT4wtb)^V^buk9BX+uRy zRly?6!8|fB5gC{WCrpGBEW#KpDg+g&69S7c1<S*1?||BlA;K7}0W)VJ%p6OHR}Kvh z?TkzwvmK(r-e(TBbU5wM;Lyf^ESBkz;n3vJ!pP*Yz}~?d)RPN_3NgTiSc3D!9GV=O z7??bka)7#j42;2ToKTVVoL~_q3=ziQ*}4wR4$TZq9y`^bM&lA;Wb)WA?cn3!!@wFm zn-!`HD#94NfEOxqo*Ar$F?g*2RAj#ZScC~fgfVy@2UN`^4yYP*5ys#*0uHSXtqe>a zj|3e29Q+uVFhm$b1cV&g9omrsjWI;u@v}ph!%PMyk6#Xl9ReM~7}!G0xE;D2x{!nz zLmYXbLjQQdT}s9fKN*OKC$|__ggGPxs?C#|8!W<vA;K6E4^txsQNtLLEde!0NeHZq zIiwJ3m!}fME+z~S#*jKzs4jh0ur9`sZpTRu-3~JtnLJG$I=~)b4(WC*cIbAP&VVeo z&r!&s*I_Cnlc$wKp+k^E2m^D-AyJ23hh9b|PdgEZAcr6Z=8(hOAQ1*8Pdjd~2or_~ zW5`8TkQzoNPhVEB8pe>v4o@8V9HuZZc?LT~fX!yYC&tL+8R_5)?trs|Ja$;_(C09j zk;$`06CxDK$M4YZ(9g)^*}w-DVGiYI1&J^)c{Z?uMVK%|7(>OuY8aV3J0WTqLu~{c zCOAxBWb*8XnPbBW5@BHS?1!jf3Pl%T40Ys&s+qzGwabwcRfI9Ln%QBJ!z4x~&qd5& zHH@K?`5mT!Lm(0|vcMR+NChgAVFy;j61s>3Cc*(0VGLcx4HYTi28%FZh%kn3gP9Bs zA0`YD#?aT?4$~Z_F)(?q<A#h{V2Ch=aS1uhaF~IVCK$ss9cvtBJ1k{j@;vBpz#+mR zj)5)AfWu+7!)zoW#xM(BsL)Yf@c0B{n5!IA<dOtfggML`rtK1Ri~~c2F)UaBs_PbH zoP#keMFJ}FS_o=R7R;{K5WASd&_x)-%2}bhez1adF^07`$~eq%Si;EU`Ol#l>=EX$ z7KgtMa~u{kAjDY0wm3LA%yXE>$mGSW3mLNryQBye5rK?qFo#`Y1&J^)c|k=O!>-Gq ziZF*==Z1-JgUw+Kdn5oAk%x|^V2Ch={dNd;nD4NVk;%*0+#$*#hJiWkzo^4}hxv?5 zUgjd;Ara<q25yiD1Cy6IH&}!TLxeG$j}@ebk;%)A6|9CaTtU@gfx`j@CNCd3u*pm~ zMHrd9f`q~28m!?8tWaH05yo&;UZ_YcGgu8{xDhv0BnUb>f+4~fZU-|bffcNa2}6W2 zJX647k;5VeCa+up$e;y=2xEA!ki!y(B}h@m7{11#$6>j{N(Lsc7MCiA1W?_F5c6ws zsB&m=Xk%at-^}N*++jHblV1m)LyJQT0~3Y_WB5S{sG4aKU^R^4H<h3w>tw(p%;EQ8 z=B$I6gD%1t{uZWY4@3=P_#b|#Ij1=x=0q^D!$jD@B1{+}j1innP&JpBz-kyHgcTfC zIILh`^1G@D_7@XQ5k@AzTk?>qFG5NJq>GWs@1X=(ggHWr4<y3C<oA#dEW(5#!Wf~! i1y%E&3#^7YLW3P9!VVT;jL>I-ihN@Ni!fn`FaiKP$jUVU literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/.XhtmlUtil.xtendbin b/bin/tdt4250/transformation/.XhtmlUtil.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..7f14767d8a52b5e21951f926aa9f7cec8033f2a4 GIT binary patch literal 6356 zcmWIWW@Zs#;Nak3_*!G@%YX!U7#J8*bJKK_^Ycnl^Gb@BMzL1h_7Lk+wOn>&q0zFt zx_Pff#CMroHhH@&_f}r;hfiAHECRK?*QsnjYh--*qMWg@vGHd)W8=?vtCho2kKg>g zFJ!7|zT7{4lW%v|M4c=<cY0fA=aEC4r&r}lN>~&=a%r3zvNUZ|Q(h1MoGmlL^7d)* zsBCiGb93DapA*_wXXQmKUX!A^OO0c-RK9H{?;M%QzGeYi)UtD=rZ9J|dsN`zGheq< z`pslsN%@(Qfdao|HXZn!vfTI7DfWh`D(kYfwk`=@y~}Jvu$`W~)Ir{7Tg(@1v+fTs zH|Ul0;*{U&nJ&}#RhPN?cwfW6XAC*tBOHAm#F<AVW&}+2El%8gblWzU=;$DUNpF)D z=|*OBzBao#DX{yW<~7UrA|L#i-+wdJ{kUzqxM}Ru8sh`z+%>_kqaSr&uPu7H!seXc z>{%_|CmLJ$CQP_@qpM}t(iLX?%>~=nh$`tV6<+eh(JL+ZbkH{Ao2#UAT-NF4cXpkA z$z*v~LB0B0@Py`D>+)t!I{lila<78Ec=HuuY46s_!eODY@fx50%WT)r*>+;*q4_f& zn;t&bv#({s<EhQfk#8oM`fjh7#+NNx>*h2kvZRw)k|*ZY<XJJPk$Q}!eoI%cu{y@H zIXTVg)a|1y)_uGr@YG6s;+qF7$~Ei;lQ)I#T@xa5L(d~M%=7t;ld}%`2$!9i7PZQ& z;%&xEAuT8W!quy$_wiLWweZES&^+h4<@{4Gxk<dPa>32dy6=4B5j$jCpuAQ3)Q=X^ zaG{3fi%uSUa!+crW^2jOzBe|3FIt42=x!;UcU!_O<}OqC_61tWt%0WlwtQ6Nkq+;R zv6Ow)bguQ)u~5^kdFxy@vW8weCVR;ABKzuFw=T(Qt&WI^Tx%0AWZli@z@8fVH781; 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 literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/Course.xmi b/bin/tdt4250/transformation/Course.xmi new file mode 100644 index 0000000..d740ed4 --- /dev/null +++ b/bin/tdt4250/transformation/Course.xmi @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<coursePage:Course + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:coursePage="platform:/resource/tdt4250.web/model/coursePage.ecore" + code="TDT4100" + name="OOP" + content="content" + credits="7.5"> + <timetable> + <table starteTime="1415" + endTime="1600" + hours="5.0"/> + <table day="Tuesday" + room="EL6" + lectureType="lecture" + starteTime="1215" + endTime="1400" + hours="5.0"/> + </timetable> + <relation + creditsReduction="3.0"/> + <grading points="70.0"/> + <courseWork + lectureHours="5.0" + labHours="5.0"/> + <hasBeenTaught + semester="V16" + credits="7.5"/> + <courseStaff> + <inTheStaff + name="Hallvard Trætteberg"> + <role/> + <isCC/> + </inTheStaff> + <inTheStaff + name="Alf Inge"> + <role + role="assistant"/> + </inTheStaff> + </courseStaff> +</coursePage:Course> diff --git a/bin/tdt4250/transformation/Course2HTML.class b/bin/tdt4250/transformation/Course2HTML.class new file mode 100644 index 0000000000000000000000000000000000000000..ee452b8edd48d92d21a92d550d39f7f1f1a9e4dc GIT binary patch literal 21659 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 literal 0 HcmV?d00001 diff --git a/bin/tdt4250/transformation/XhtmlUtil.class b/bin/tdt4250/transformation/XhtmlUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..6aea8b798cc65f3140180c80d82f8dba1b576aec GIT binary patch literal 9843 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 SK(-qi8(SHgS#W8&asdD_+8Bxe literal 0 HcmV?d00001 diff --git a/model/Course.xmi b/model/Course.xmi index 02255e2..c8a876f 100644 --- a/model/Course.xmi +++ b/model/Course.xmi @@ -8,10 +8,14 @@ content="content" credits="7.5"> <timetable> - <table hours="5.0"/> + <table starteTime="1415" + endTime=""1600"" + hours="5.0"/> <table day="Tuesday" room="EL6" lectureType="lecture" + starteTime=""1215"" + endTime=""1400"" hours="5.0"/> </timetable> <relation diff --git a/model/Course1.xmi b/model/Course1.xmi new file mode 100644 index 0000000..7dbfc5b --- /dev/null +++ b/model/Course1.xmi @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<coursePage:Course xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:coursePage="platform:/resource/tdt4250.web/model/coursePage.ecore"/> diff --git a/model/StudyProgram.xmi b/model/StudyProgram.xmi new file mode 100644 index 0000000..9ad19e9 --- /dev/null +++ b/model/StudyProgram.xmi @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<coursePage:StudyProgram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:coursePage="platform:/resource/tdt4250.web/model/coursePage.ecore"/> diff --git a/model/coursePage.ecore b/model/coursePage.ecore index 456144c..ebc4ca0 100644 --- a/model/coursePage.ecore +++ b/model/coursePage.ecore @@ -78,8 +78,8 @@ <eStructuralFeatures xsi:type="ecore:EAttribute" name="day" eType="#//Day"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="room" eType="#//Room"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="lectureType" eType="#//LectureType"/> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="starteTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="endTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="starteTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="endTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> <eStructuralFeatures xsi:type="ecore:EReference" name="scheduleFor" lowerBound="1" upperBound="-1" eType="#//StudyProgram"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="hours" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/> diff --git a/model/coursePage.genmodel b/model/coursePage.genmodel index 24715aa..b6df41f 100644 --- a/model/coursePage.genmodel +++ b/model/coursePage.genmodel @@ -4,7 +4,8 @@ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false" operationReflection="true" importOrganizing="true"> <foreignModel>coursePage.ecore</foreignModel> - <genPackages prefix="CoursePage" disposableProviderFactory="true" ecorePackage="coursePage.ecore#/"> + <genPackages prefix="CoursePage" resource="XMI" disposableProviderFactory="true" + ecorePackage="coursePage.ecore#/"> <genEnums typeSafeEnumCompatible="false" ecoreEnum="coursePage.ecore#//Role"> <genEnumLiterals ecoreEnumLiteral="coursePage.ecore#//Role/lecturer"/> <genEnumLiterals ecoreEnumLiteral="coursePage.ecore#//Role/assistant"/> diff --git a/plugin.xml b/plugin.xml index 8a9ca1c..2fe8d95 100644 --- a/plugin.xml +++ b/plugin.xml @@ -14,4 +14,11 @@ genModel="model/coursePage.genmodel"/> </extension> + <extension point="org.eclipse.emf.ecore.extension_parser"> + <!-- @generated coursePage --> + <parser + type="coursepage" + class="coursePage.util.CoursePageResourceFactoryImpl"/> + </extension> + </plugin> diff --git a/src/coursePage/Slot.java b/src/coursePage/Slot.java index b6d3ca0..5e701ed 100644 --- a/src/coursePage/Slot.java +++ b/src/coursePage/Slot.java @@ -2,8 +2,6 @@ */ package coursePage; -import java.util.Date; - import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; @@ -127,12 +125,12 @@ public interface Slot extends EObject { * </p> * <!-- end-user-doc --> * @return the value of the '<em>Starte Time</em>' attribute. - * @see #setStarteTime(Date) + * @see #setStarteTime(String) * @see coursePage.CoursePagePackage#getSlot_StarteTime() * @model * @generated */ - Date getStarteTime(); + String getStarteTime(); /** * Sets the value of the '{@link coursePage.Slot#getStarteTime <em>Starte Time</em>}' attribute. @@ -142,7 +140,7 @@ public interface Slot extends EObject { * @see #getStarteTime() * @generated */ - void setStarteTime(Date value); + void setStarteTime(String value); /** * Returns the value of the '<em><b>End Time</b></em>' attribute. @@ -153,12 +151,12 @@ public interface Slot extends EObject { * </p> * <!-- end-user-doc --> * @return the value of the '<em>End Time</em>' attribute. - * @see #setEndTime(Date) + * @see #setEndTime(String) * @see coursePage.CoursePagePackage#getSlot_EndTime() * @model * @generated */ - Date getEndTime(); + String getEndTime(); /** * Sets the value of the '{@link coursePage.Slot#getEndTime <em>End Time</em>}' attribute. @@ -168,7 +166,7 @@ public interface Slot extends EObject { * @see #getEndTime() * @generated */ - void setEndTime(Date value); + void setEndTime(String value); /** * Returns the value of the '<em><b>Schedule For</b></em>' reference list. diff --git a/src/coursePage/impl/CoursePagePackageImpl.java b/src/coursePage/impl/CoursePagePackageImpl.java index cec0bf4..e0f1497 100644 --- a/src/coursePage/impl/CoursePagePackageImpl.java +++ b/src/coursePage/impl/CoursePagePackageImpl.java @@ -1031,8 +1031,8 @@ public class CoursePagePackageImpl extends EPackageImpl implements CoursePagePac initEAttribute(getSlot_Day(), this.getDay(), "day", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSlot_Room(), this.getRoom(), "room", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSlot_LectureType(), this.getLectureType(), "lectureType", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getSlot_StarteTime(), ecorePackage.getEDate(), "starteTime", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getSlot_EndTime(), ecorePackage.getEDate(), "endTime", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getSlot_StarteTime(), ecorePackage.getEString(), "starteTime", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getSlot_EndTime(), ecorePackage.getEString(), "endTime", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSlot_ScheduleFor(), this.getStudyProgram(), null, "scheduleFor", null, 1, -1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSlot_Hours(), ecorePackage.getEDouble(), "hours", null, 0, 1, Slot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); diff --git a/src/coursePage/impl/EvaluationFormImpl.java b/src/coursePage/impl/EvaluationFormImpl.java deleted file mode 100644 index 5edcbe6..0000000 --- a/src/coursePage/impl/EvaluationFormImpl.java +++ /dev/null @@ -1,265 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.EvaluationForm; - -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.ecore.EClass; - -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Evaluation Form</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.EvaluationFormImpl#getExam <em>Exam</em>}</li> - * <li>{@link coursePage.impl.EvaluationFormImpl#getProject <em>Project</em>}</li> - * <li>{@link coursePage.impl.EvaluationFormImpl#getAssignment <em>Assignment</em>}</li> - * </ul> - * - * @generated - */ -public class EvaluationFormImpl extends MinimalEObjectImpl.Container implements EvaluationForm { - /** - * The default value of the '{@link #getExam() <em>Exam</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getExam() - * @generated - * @ordered - */ - protected static final double EXAM_EDEFAULT = 0.0; - /** - * The cached value of the '{@link #getExam() <em>Exam</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getExam() - * @generated - * @ordered - */ - protected double exam = EXAM_EDEFAULT; - /** - * The default value of the '{@link #getProject() <em>Project</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getProject() - * @generated - * @ordered - */ - protected static final double PROJECT_EDEFAULT = 0.0; - /** - * The cached value of the '{@link #getProject() <em>Project</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getProject() - * @generated - * @ordered - */ - protected double project = PROJECT_EDEFAULT; - /** - * The default value of the '{@link #getAssignment() <em>Assignment</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getAssignment() - * @generated - * @ordered - */ - protected static final double ASSIGNMENT_EDEFAULT = 0.0; - /** - * The cached value of the '{@link #getAssignment() <em>Assignment</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getAssignment() - * @generated - * @ordered - */ - protected double assignment = ASSIGNMENT_EDEFAULT; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected EvaluationFormImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.EVALUATION_FORM; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public double getExam() { - return exam; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setExam(double newExam) { - double oldExam = exam; - exam = newExam; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVALUATION_FORM__EXAM, oldExam, exam)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public double getProject() { - return project; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setProject(double newProject) { - double oldProject = project; - project = newProject; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVALUATION_FORM__PROJECT, oldProject, project)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public double getAssignment() { - return assignment; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setAssignment(double newAssignment) { - double oldAssignment = assignment; - assignment = newAssignment; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVALUATION_FORM__ASSIGNMENT, oldAssignment, assignment)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.EVALUATION_FORM__EXAM: - return getExam(); - case CoursePagePackage.EVALUATION_FORM__PROJECT: - return getProject(); - case CoursePagePackage.EVALUATION_FORM__ASSIGNMENT: - return getAssignment(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.EVALUATION_FORM__EXAM: - setExam((Double)newValue); - return; - case CoursePagePackage.EVALUATION_FORM__PROJECT: - setProject((Double)newValue); - return; - case CoursePagePackage.EVALUATION_FORM__ASSIGNMENT: - setAssignment((Double)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.EVALUATION_FORM__EXAM: - setExam(EXAM_EDEFAULT); - return; - case CoursePagePackage.EVALUATION_FORM__PROJECT: - setProject(PROJECT_EDEFAULT); - return; - case CoursePagePackage.EVALUATION_FORM__ASSIGNMENT: - setAssignment(ASSIGNMENT_EDEFAULT); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.EVALUATION_FORM__EXAM: - return exam != EXAM_EDEFAULT; - case CoursePagePackage.EVALUATION_FORM__PROJECT: - return project != PROJECT_EDEFAULT; - case CoursePagePackage.EVALUATION_FORM__ASSIGNMENT: - return assignment != ASSIGNMENT_EDEFAULT; - } - return super.eIsSet(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) return super.toString(); - - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (exam: "); - result.append(exam); - result.append(", project: "); - result.append(project); - result.append(", assignment: "); - result.append(assignment); - result.append(')'); - return result.toString(); - } - -} //EvaluationFormImpl diff --git a/src/coursePage/impl/EventImpl.java b/src/coursePage/impl/EventImpl.java deleted file mode 100644 index 257d413..0000000 --- a/src/coursePage/impl/EventImpl.java +++ /dev/null @@ -1,368 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.Event; -import coursePage.StudyProgram; - -import java.util.Collection; -import java.util.Date; - -import org.eclipse.emf.common.notify.Notification; - -import org.eclipse.emf.common.util.EList; - -import org.eclipse.emf.ecore.EClass; - -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -import org.eclipse.emf.ecore.util.EObjectResolvingEList; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Event</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.EventImpl#getDay <em>Day</em>}</li> - * <li>{@link coursePage.impl.EventImpl#getTime <em>Time</em>}</li> - * <li>{@link coursePage.impl.EventImpl#getDate <em>Date</em>}</li> - * <li>{@link coursePage.impl.EventImpl#getRoom <em>Room</em>}</li> - * <li>{@link coursePage.impl.EventImpl#getStudyprogram <em>Studyprogram</em>}</li> - * </ul> - * - * @generated - */ -public class EventImpl extends MinimalEObjectImpl.Container implements Event { - /** - * The default value of the '{@link #getDay() <em>Day</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDay() - * @generated - * @ordered - */ - protected static final String DAY_EDEFAULT = null; - - /** - * The cached value of the '{@link #getDay() <em>Day</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDay() - * @generated - * @ordered - */ - protected String day = DAY_EDEFAULT; - - /** - * The default value of the '{@link #getTime() <em>Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getTime() - * @generated - * @ordered - */ - protected static final int TIME_EDEFAULT = 0; - - /** - * The cached value of the '{@link #getTime() <em>Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getTime() - * @generated - * @ordered - */ - protected int time = TIME_EDEFAULT; - - /** - * The default value of the '{@link #getDate() <em>Date</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDate() - * @generated - * @ordered - */ - protected static final Date DATE_EDEFAULT = null; - - /** - * The cached value of the '{@link #getDate() <em>Date</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDate() - * @generated - * @ordered - */ - protected Date date = DATE_EDEFAULT; - - /** - * The default value of the '{@link #getRoom() <em>Room</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getRoom() - * @generated - * @ordered - */ - protected static final String ROOM_EDEFAULT = null; - - /** - * The cached value of the '{@link #getRoom() <em>Room</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getRoom() - * @generated - * @ordered - */ - protected String room = ROOM_EDEFAULT; - - /** - * The cached value of the '{@link #getStudyprogram() <em>Studyprogram</em>}' reference list. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getStudyprogram() - * @generated - * @ordered - */ - protected EList<StudyProgram> studyprogram; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected EventImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.EVENT; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public String getDay() { - return day; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setDay(String newDay) { - String oldDay = day; - day = newDay; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVENT__DAY, oldDay, day)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public int getTime() { - return time; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setTime(int newTime) { - int oldTime = time; - time = newTime; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVENT__TIME, oldTime, time)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Date getDate() { - return date; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setDate(Date newDate) { - Date oldDate = date; - date = newDate; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVENT__DATE, oldDate, date)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public String getRoom() { - return room; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setRoom(String newRoom) { - String oldRoom = room; - room = newRoom; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.EVENT__ROOM, oldRoom, room)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EList<StudyProgram> getStudyprogram() { - if (studyprogram == null) { - studyprogram = new EObjectResolvingEList<StudyProgram>(StudyProgram.class, this, CoursePagePackage.EVENT__STUDYPROGRAM); - } - return studyprogram; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.EVENT__DAY: - return getDay(); - case CoursePagePackage.EVENT__TIME: - return getTime(); - case CoursePagePackage.EVENT__DATE: - return getDate(); - case CoursePagePackage.EVENT__ROOM: - return getRoom(); - case CoursePagePackage.EVENT__STUDYPROGRAM: - return getStudyprogram(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.EVENT__DAY: - setDay((String)newValue); - return; - case CoursePagePackage.EVENT__TIME: - setTime((Integer)newValue); - return; - case CoursePagePackage.EVENT__DATE: - setDate((Date)newValue); - return; - case CoursePagePackage.EVENT__ROOM: - setRoom((String)newValue); - return; - case CoursePagePackage.EVENT__STUDYPROGRAM: - getStudyprogram().clear(); - getStudyprogram().addAll((Collection<? extends StudyProgram>)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.EVENT__DAY: - setDay(DAY_EDEFAULT); - return; - case CoursePagePackage.EVENT__TIME: - setTime(TIME_EDEFAULT); - return; - case CoursePagePackage.EVENT__DATE: - setDate(DATE_EDEFAULT); - return; - case CoursePagePackage.EVENT__ROOM: - setRoom(ROOM_EDEFAULT); - return; - case CoursePagePackage.EVENT__STUDYPROGRAM: - getStudyprogram().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.EVENT__DAY: - return DAY_EDEFAULT == null ? day != null : !DAY_EDEFAULT.equals(day); - case CoursePagePackage.EVENT__TIME: - return time != TIME_EDEFAULT; - case CoursePagePackage.EVENT__DATE: - return DATE_EDEFAULT == null ? date != null : !DATE_EDEFAULT.equals(date); - case CoursePagePackage.EVENT__ROOM: - return ROOM_EDEFAULT == null ? room != null : !ROOM_EDEFAULT.equals(room); - case CoursePagePackage.EVENT__STUDYPROGRAM: - return studyprogram != null && !studyprogram.isEmpty(); - } - return super.eIsSet(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) return super.toString(); - - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (day: "); - result.append(day); - result.append(", time: "); - result.append(time); - result.append(", date: "); - result.append(date); - result.append(", room: "); - result.append(room); - result.append(')'); - return result.toString(); - } - -} //EventImpl diff --git a/src/coursePage/impl/InformationImpl.java b/src/coursePage/impl/InformationImpl.java deleted file mode 100644 index df2c4e3..0000000 --- a/src/coursePage/impl/InformationImpl.java +++ /dev/null @@ -1,442 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.Day; -import coursePage.Information; -import coursePage.LectureType; -import coursePage.Room; -import coursePage.StudyProgram; - -import java.util.Collection; -import java.util.Date; - -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; - -import org.eclipse.emf.common.util.EList; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; - -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Information</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.InformationImpl#getDay <em>Day</em>}</li> - * <li>{@link coursePage.impl.InformationImpl#getRoom <em>Room</em>}</li> - * <li>{@link coursePage.impl.InformationImpl#getPlannedFor <em>Planned For</em>}</li> - * <li>{@link coursePage.impl.InformationImpl#getLectureType <em>Lecture Type</em>}</li> - * <li>{@link coursePage.impl.InformationImpl#getStarteTime <em>Starte Time</em>}</li> - * <li>{@link coursePage.impl.InformationImpl#getEndTime <em>End Time</em>}</li> - * </ul> - * - * @generated - */ -public class InformationImpl extends MinimalEObjectImpl.Container implements Information { - /** - * The default value of the '{@link #getDay() <em>Day</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDay() - * @generated - * @ordered - */ - protected static final Day DAY_EDEFAULT = Day.MONDAY; - - /** - * The cached value of the '{@link #getDay() <em>Day</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getDay() - * @generated - * @ordered - */ - protected Day day = DAY_EDEFAULT; - - /** - * The default value of the '{@link #getRoom() <em>Room</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getRoom() - * @generated - * @ordered - */ - protected static final Room ROOM_EDEFAULT = Room.ROOM; - - /** - * The cached value of the '{@link #getRoom() <em>Room</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getRoom() - * @generated - * @ordered - */ - protected Room room = ROOM_EDEFAULT; - - /** - * The cached value of the '{@link #getPlannedFor() <em>Planned For</em>}' containment reference list. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPlannedFor() - * @generated - * @ordered - */ - protected EList<StudyProgram> plannedFor; - - /** - * The default value of the '{@link #getLectureType() <em>Lecture Type</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getLectureType() - * @generated - * @ordered - */ - protected static final LectureType LECTURE_TYPE_EDEFAULT = LectureType.LAB; - - /** - * The cached value of the '{@link #getLectureType() <em>Lecture Type</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getLectureType() - * @generated - * @ordered - */ - protected LectureType lectureType = LECTURE_TYPE_EDEFAULT; - - /** - * The default value of the '{@link #getStarteTime() <em>Starte Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getStarteTime() - * @generated - * @ordered - */ - protected static final Date STARTE_TIME_EDEFAULT = null; - - /** - * The cached value of the '{@link #getStarteTime() <em>Starte Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getStarteTime() - * @generated - * @ordered - */ - protected Date starteTime = STARTE_TIME_EDEFAULT; - - /** - * The default value of the '{@link #getEndTime() <em>End Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getEndTime() - * @generated - * @ordered - */ - protected static final Date END_TIME_EDEFAULT = null; - - /** - * The cached value of the '{@link #getEndTime() <em>End Time</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getEndTime() - * @generated - * @ordered - */ - protected Date endTime = END_TIME_EDEFAULT; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected InformationImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.INFORMATION; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Day getDay() { - return day; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setDay(Day newDay) { - Day oldDay = day; - day = newDay == null ? DAY_EDEFAULT : newDay; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.INFORMATION__DAY, oldDay, day)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Room getRoom() { - return room; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setRoom(Room newRoom) { - Room oldRoom = room; - room = newRoom == null ? ROOM_EDEFAULT : newRoom; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.INFORMATION__ROOM, oldRoom, room)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EList<StudyProgram> getPlannedFor() { - if (plannedFor == null) { - plannedFor = new EObjectContainmentEList<StudyProgram>(StudyProgram.class, this, CoursePagePackage.INFORMATION__PLANNED_FOR); - } - return plannedFor; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public LectureType getLectureType() { - return lectureType; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setLectureType(LectureType newLectureType) { - LectureType oldLectureType = lectureType; - lectureType = newLectureType == null ? LECTURE_TYPE_EDEFAULT : newLectureType; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.INFORMATION__LECTURE_TYPE, oldLectureType, lectureType)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Date getStarteTime() { - return starteTime; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setStarteTime(Date newStarteTime) { - Date oldStarteTime = starteTime; - starteTime = newStarteTime; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.INFORMATION__STARTE_TIME, oldStarteTime, starteTime)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Date getEndTime() { - return endTime; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setEndTime(Date newEndTime) { - Date oldEndTime = endTime; - endTime = newEndTime; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.INFORMATION__END_TIME, oldEndTime, endTime)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { - switch (featureID) { - case CoursePagePackage.INFORMATION__PLANNED_FOR: - return ((InternalEList<?>)getPlannedFor()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.INFORMATION__DAY: - return getDay(); - case CoursePagePackage.INFORMATION__ROOM: - return getRoom(); - case CoursePagePackage.INFORMATION__PLANNED_FOR: - return getPlannedFor(); - case CoursePagePackage.INFORMATION__LECTURE_TYPE: - return getLectureType(); - case CoursePagePackage.INFORMATION__STARTE_TIME: - return getStarteTime(); - case CoursePagePackage.INFORMATION__END_TIME: - return getEndTime(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.INFORMATION__DAY: - setDay((Day)newValue); - return; - case CoursePagePackage.INFORMATION__ROOM: - setRoom((Room)newValue); - return; - case CoursePagePackage.INFORMATION__PLANNED_FOR: - getPlannedFor().clear(); - getPlannedFor().addAll((Collection<? extends StudyProgram>)newValue); - return; - case CoursePagePackage.INFORMATION__LECTURE_TYPE: - setLectureType((LectureType)newValue); - return; - case CoursePagePackage.INFORMATION__STARTE_TIME: - setStarteTime((Date)newValue); - return; - case CoursePagePackage.INFORMATION__END_TIME: - setEndTime((Date)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.INFORMATION__DAY: - setDay(DAY_EDEFAULT); - return; - case CoursePagePackage.INFORMATION__ROOM: - setRoom(ROOM_EDEFAULT); - return; - case CoursePagePackage.INFORMATION__PLANNED_FOR: - getPlannedFor().clear(); - return; - case CoursePagePackage.INFORMATION__LECTURE_TYPE: - setLectureType(LECTURE_TYPE_EDEFAULT); - return; - case CoursePagePackage.INFORMATION__STARTE_TIME: - setStarteTime(STARTE_TIME_EDEFAULT); - return; - case CoursePagePackage.INFORMATION__END_TIME: - setEndTime(END_TIME_EDEFAULT); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.INFORMATION__DAY: - return day != DAY_EDEFAULT; - case CoursePagePackage.INFORMATION__ROOM: - return room != ROOM_EDEFAULT; - case CoursePagePackage.INFORMATION__PLANNED_FOR: - return plannedFor != null && !plannedFor.isEmpty(); - case CoursePagePackage.INFORMATION__LECTURE_TYPE: - return lectureType != LECTURE_TYPE_EDEFAULT; - case CoursePagePackage.INFORMATION__STARTE_TIME: - return STARTE_TIME_EDEFAULT == null ? starteTime != null : !STARTE_TIME_EDEFAULT.equals(starteTime); - case CoursePagePackage.INFORMATION__END_TIME: - return END_TIME_EDEFAULT == null ? endTime != null : !END_TIME_EDEFAULT.equals(endTime); - } - return super.eIsSet(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) return super.toString(); - - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (day: "); - result.append(day); - result.append(", room: "); - result.append(room); - result.append(", lectureType: "); - result.append(lectureType); - result.append(", starteTime: "); - result.append(starteTime); - result.append(", endTime: "); - result.append(endTime); - result.append(')'); - return result.toString(); - } - -} //InformationImpl diff --git a/src/coursePage/impl/LabImpl.java b/src/coursePage/impl/LabImpl.java deleted file mode 100644 index de28c0b..0000000 --- a/src/coursePage/impl/LabImpl.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.Event; -import coursePage.Lab; - -import java.util.Collection; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Lab</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.LabImpl#getLabTime <em>Lab Time</em>}</li> - * </ul> - * - * @generated - */ -public class LabImpl extends MinimalEObjectImpl.Container implements Lab { - /** - * The cached value of the '{@link #getLabTime() <em>Lab Time</em>}' containment reference list. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getLabTime() - * @generated - * @ordered - */ - protected EList<Event> labTime; - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected LabImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.LAB; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EList<Event> getLabTime() { - if (labTime == null) { - labTime = new EObjectContainmentEList<Event>(Event.class, this, CoursePagePackage.LAB__LAB_TIME); - } - return labTime; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { - switch (featureID) { - case CoursePagePackage.LAB__LAB_TIME: - return ((InternalEList<?>)getLabTime()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.LAB__LAB_TIME: - return getLabTime(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.LAB__LAB_TIME: - getLabTime().clear(); - getLabTime().addAll((Collection<? extends Event>)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.LAB__LAB_TIME: - getLabTime().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.LAB__LAB_TIME: - return labTime != null && !labTime.isEmpty(); - } - return super.eIsSet(featureID); - } - -} //LabImpl diff --git a/src/coursePage/impl/LectureImpl.java b/src/coursePage/impl/LectureImpl.java deleted file mode 100644 index 8a07de6..0000000 --- a/src/coursePage/impl/LectureImpl.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.Event; -import coursePage.Lecture; - -import java.util.Collection; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; - -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Lecture</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.LectureImpl#getLectureTime <em>Lecture Time</em>}</li> - * </ul> - * - * @generated - */ -public class LectureImpl extends MinimalEObjectImpl.Container implements Lecture { - /** - * The cached value of the '{@link #getLectureTime() <em>Lecture Time</em>}' containment reference list. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getLectureTime() - * @generated - * @ordered - */ - protected EList<Event> lectureTime; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected LectureImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.LECTURE; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EList<Event> getLectureTime() { - if (lectureTime == null) { - lectureTime = new EObjectContainmentEList<Event>(Event.class, this, CoursePagePackage.LECTURE__LECTURE_TIME); - } - return lectureTime; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { - switch (featureID) { - case CoursePagePackage.LECTURE__LECTURE_TIME: - return ((InternalEList<?>)getLectureTime()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.LECTURE__LECTURE_TIME: - return getLectureTime(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.LECTURE__LECTURE_TIME: - getLectureTime().clear(); - getLectureTime().addAll((Collection<? extends Event>)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.LECTURE__LECTURE_TIME: - getLectureTime().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.LECTURE__LECTURE_TIME: - return lectureTime != null && !lectureTime.isEmpty(); - } - return super.eIsSet(featureID); - } - -} //LectureImpl diff --git a/src/coursePage/impl/OrganizationImpl.java b/src/coursePage/impl/OrganizationImpl.java deleted file mode 100644 index 36414d3..0000000 --- a/src/coursePage/impl/OrganizationImpl.java +++ /dev/null @@ -1,296 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.Course; -import coursePage.CoursePagePackage; -import coursePage.Employee; -import coursePage.Organization; - -import java.util.Collection; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; - -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Organization</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.OrganizationImpl#getName <em>Name</em>}</li> - * <li>{@link coursePage.impl.OrganizationImpl#getHas <em>Has</em>}</li> - * <li>{@link coursePage.impl.OrganizationImpl#getResponsibleFor <em>Responsible For</em>}</li> - * </ul> - * - * @generated - */ -public class OrganizationImpl extends MinimalEObjectImpl.Container implements Organization { - /** - * The default value of the '{@link #getName() <em>Name</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getName() - * @generated - * @ordered - */ - protected static final String NAME_EDEFAULT = null; - /** - * The cached value of the '{@link #getName() <em>Name</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getName() - * @generated - * @ordered - */ - protected String name = NAME_EDEFAULT; - /** - * The cached value of the '{@link #getHas() <em>Has</em>}' containment reference list. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getHas() - * @generated - * @ordered - */ - protected EList<Employee> has; - /** - * The cached value of the '{@link #getResponsibleFor() <em>Responsible For</em>}' containment reference. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getResponsibleFor() - * @generated - * @ordered - */ - protected Course responsibleFor; - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected OrganizationImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.ORGANIZATION; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public String getName() { - return name; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setName(String newName) { - String oldName = name; - name = newName; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.ORGANIZATION__NAME, oldName, name)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public EList<Employee> getHas() { - if (has == null) { - has = new EObjectContainmentWithInverseEList<Employee>(Employee.class, this, CoursePagePackage.ORGANIZATION__HAS, CoursePagePackage.EMPLOYEE__WORKS_FOR); - } - return has; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public Course getResponsibleFor() { - return responsibleFor; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public NotificationChain basicSetResponsibleFor(Course newResponsibleFor, NotificationChain msgs) { - Course oldResponsibleFor = responsibleFor; - responsibleFor = newResponsibleFor; - if (eNotificationRequired()) { - ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR, oldResponsibleFor, newResponsibleFor); - if (msgs == null) msgs = notification; else msgs.add(notification); - } - return msgs; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setResponsibleFor(Course newResponsibleFor) { - if (newResponsibleFor != responsibleFor) { - NotificationChain msgs = null; - if (responsibleFor != null) - msgs = ((InternalEObject)responsibleFor).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR, null, msgs); - if (newResponsibleFor != null) - msgs = ((InternalEObject)newResponsibleFor).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR, null, msgs); - msgs = basicSetResponsibleFor(newResponsibleFor, msgs); - if (msgs != null) msgs.dispatch(); - } - else if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR, newResponsibleFor, newResponsibleFor)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__HAS: - return ((InternalEList<InternalEObject>)(InternalEList<?>)getHas()).basicAdd(otherEnd, msgs); - } - return super.eInverseAdd(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__HAS: - return ((InternalEList<?>)getHas()).basicRemove(otherEnd, msgs); - case CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR: - return basicSetResponsibleFor(null, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__NAME: - return getName(); - case CoursePagePackage.ORGANIZATION__HAS: - return getHas(); - case CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR: - return getResponsibleFor(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__NAME: - setName((String)newValue); - return; - case CoursePagePackage.ORGANIZATION__HAS: - getHas().clear(); - getHas().addAll((Collection<? extends Employee>)newValue); - return; - case CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR: - setResponsibleFor((Course)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__NAME: - setName(NAME_EDEFAULT); - return; - case CoursePagePackage.ORGANIZATION__HAS: - getHas().clear(); - return; - case CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR: - setResponsibleFor((Course)null); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.ORGANIZATION__NAME: - return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); - case CoursePagePackage.ORGANIZATION__HAS: - return has != null && !has.isEmpty(); - case CoursePagePackage.ORGANIZATION__RESPONSIBLE_FOR: - return responsibleFor != null; - } - return super.eIsSet(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) return super.toString(); - - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (name: "); - result.append(name); - result.append(')'); - return result.toString(); - } - -} //OrganizationImpl diff --git a/src/coursePage/impl/RelationToOtherCoursesImpl.java b/src/coursePage/impl/RelationToOtherCoursesImpl.java deleted file mode 100644 index 6d1197e..0000000 --- a/src/coursePage/impl/RelationToOtherCoursesImpl.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.RelationToOtherCourses; -import coursePage.credits; - -import org.eclipse.emf.common.notify.Notification; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; - -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>Relation To Other Courses</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.RelationToOtherCoursesImpl#getRelation <em>Relation</em>}</li> - * </ul> - * - * @generated - */ -public class RelationToOtherCoursesImpl extends MinimalEObjectImpl.Container implements RelationToOtherCourses { - /** - * The cached value of the '{@link #getRelation() <em>Relation</em>}' reference. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getRelation() - * @generated - * @ordered - */ - protected credits relation; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected RelationToOtherCoursesImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.RELATION_TO_OTHER_COURSES; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public credits getRelation() { - if (relation != null && relation.eIsProxy()) { - InternalEObject oldRelation = (InternalEObject)relation; - relation = (credits)eResolveProxy(oldRelation); - if (relation != oldRelation) { - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.RESOLVE, CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION, oldRelation, relation)); - } - } - return relation; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public credits basicGetRelation() { - return relation; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setRelation(credits newRelation) { - credits oldRelation = relation; - relation = newRelation; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION, oldRelation, relation)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION: - if (resolve) return getRelation(); - return basicGetRelation(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION: - setRelation((credits)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION: - setRelation((credits)null); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.RELATION_TO_OTHER_COURSES__RELATION: - return relation != null; - } - return super.eIsSet(featureID); - } - -} //RelationToOtherCoursesImpl diff --git a/src/coursePage/impl/SlotImpl.java b/src/coursePage/impl/SlotImpl.java index 9e82dbd..b1afd23 100644 --- a/src/coursePage/impl/SlotImpl.java +++ b/src/coursePage/impl/SlotImpl.java @@ -10,8 +10,6 @@ import coursePage.Slot; import coursePage.StudyProgram; import java.util.Collection; -import java.util.Date; - import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; @@ -111,7 +109,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * @generated * @ordered */ - protected static final Date STARTE_TIME_EDEFAULT = null; + protected static final String STARTE_TIME_EDEFAULT = null; /** * The cached value of the '{@link #getStarteTime() <em>Starte Time</em>}' attribute. @@ -121,7 +119,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * @generated * @ordered */ - protected Date starteTime = STARTE_TIME_EDEFAULT; + protected String starteTime = STARTE_TIME_EDEFAULT; /** * The default value of the '{@link #getEndTime() <em>End Time</em>}' attribute. @@ -131,7 +129,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * @generated * @ordered */ - protected static final Date END_TIME_EDEFAULT = null; + protected static final String END_TIME_EDEFAULT = null; /** * The cached value of the '{@link #getEndTime() <em>End Time</em>}' attribute. @@ -141,7 +139,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * @generated * @ordered */ - protected Date endTime = END_TIME_EDEFAULT; + protected String endTime = END_TIME_EDEFAULT; /** * The cached value of the '{@link #getScheduleFor() <em>Schedule For</em>}' reference list. @@ -260,7 +258,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * <!-- end-user-doc --> * @generated */ - public Date getStarteTime() { + public String getStarteTime() { return starteTime; } @@ -269,8 +267,8 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * <!-- end-user-doc --> * @generated */ - public void setStarteTime(Date newStarteTime) { - Date oldStarteTime = starteTime; + public void setStarteTime(String newStarteTime) { + String oldStarteTime = starteTime; starteTime = newStarteTime; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.SLOT__STARTE_TIME, oldStarteTime, starteTime)); @@ -281,7 +279,7 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * <!-- end-user-doc --> * @generated */ - public Date getEndTime() { + public String getEndTime() { return endTime; } @@ -290,8 +288,8 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { * <!-- end-user-doc --> * @generated */ - public void setEndTime(Date newEndTime) { - Date oldEndTime = endTime; + public void setEndTime(String newEndTime) { + String oldEndTime = endTime; endTime = newEndTime; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.SLOT__END_TIME, oldEndTime, endTime)); @@ -375,10 +373,10 @@ public class SlotImpl extends MinimalEObjectImpl.Container implements Slot { setLectureType((LectureType)newValue); return; case CoursePagePackage.SLOT__STARTE_TIME: - setStarteTime((Date)newValue); + setStarteTime((String)newValue); return; case CoursePagePackage.SLOT__END_TIME: - setEndTime((Date)newValue); + setEndTime((String)newValue); return; case CoursePagePackage.SLOT__SCHEDULE_FOR: getScheduleFor().clear(); diff --git a/src/coursePage/impl/creditsImpl.java b/src/coursePage/impl/creditsImpl.java deleted file mode 100644 index 1824de1..0000000 --- a/src/coursePage/impl/creditsImpl.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - */ -package coursePage.impl; - -import coursePage.CoursePagePackage; -import coursePage.credits; - -import org.eclipse.emf.common.notify.Notification; - -import org.eclipse.emf.ecore.EClass; - -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -/** - * <!-- begin-user-doc --> - * An implementation of the model object '<em><b>credits</b></em>'. - * <!-- end-user-doc --> - * <p> - * The following features are implemented: - * </p> - * <ul> - * <li>{@link coursePage.impl.creditsImpl#getPoints <em>Points</em>}</li> - * </ul> - * - * @generated - */ -public class creditsImpl extends MinimalEObjectImpl.Container implements credits { - /** - * The default value of the '{@link #getPoints() <em>Points</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPoints() - * @generated - * @ordered - */ - protected static final double POINTS_EDEFAULT = 0.0; - - /** - * The cached value of the '{@link #getPoints() <em>Points</em>}' attribute. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @see #getPoints() - * @generated - * @ordered - */ - protected double points = POINTS_EDEFAULT; - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - protected creditsImpl() { - super(); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - protected EClass eStaticClass() { - return CoursePagePackage.Literals.CREDITS; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public double getPoints() { - return points; - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - public void setPoints(double newPoints) { - double oldPoints = points; - points = newPoints; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, CoursePagePackage.CREDITS__POINTS, oldPoints, points)); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case CoursePagePackage.CREDITS__POINTS: - return getPoints(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case CoursePagePackage.CREDITS__POINTS: - setPoints((Double)newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case CoursePagePackage.CREDITS__POINTS: - setPoints(POINTS_EDEFAULT); - return; - } - super.eUnset(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case CoursePagePackage.CREDITS__POINTS: - return points != POINTS_EDEFAULT; - } - return super.eIsSet(featureID); - } - - /** - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) return super.toString(); - - StringBuilder result = new StringBuilder(super.toString()); - result.append(" (points: "); - result.append(points); - result.append(')'); - return result.toString(); - } - -} //creditsImpl diff --git a/src/coursePage/util/CoursePageResourceFactoryImpl.java b/src/coursePage/util/CoursePageResourceFactoryImpl.java new file mode 100644 index 0000000..da7cbde --- /dev/null +++ b/src/coursePage/util/CoursePageResourceFactoryImpl.java @@ -0,0 +1,41 @@ +/** + */ +package coursePage.util; + +import org.eclipse.emf.common.util.URI; + +import org.eclipse.emf.ecore.resource.Resource; + +import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl; + +/** + * <!-- begin-user-doc --> + * The <b>Resource Factory</b> associated with the package. + * <!-- end-user-doc --> + * @see coursePage.util.CoursePageResourceImpl + * @generated + */ +public class CoursePageResourceFactoryImpl extends ResourceFactoryImpl { + /** + * Creates an instance of the resource factory. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public CoursePageResourceFactoryImpl() { + super(); + } + + /** + * Creates an instance of the resource. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public Resource createResource(URI uri) { + Resource result = new CoursePageResourceImpl(uri); + return result; + } + +} //CoursePageResourceFactoryImpl diff --git a/src/coursePage/util/CoursePageResourceImpl.java b/src/coursePage/util/CoursePageResourceImpl.java new file mode 100644 index 0000000..c77cb7b --- /dev/null +++ b/src/coursePage/util/CoursePageResourceImpl.java @@ -0,0 +1,32 @@ +/** + */ +package coursePage.util; + +import org.eclipse.emf.common.util.URI; + +import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl; + +/** + * <!-- begin-user-doc --> + * The <b>Resource </b> associated with the package. + * <!-- end-user-doc --> + * @see coursePage.util.CoursePageResourceFactoryImpl + * @generated + */ +public class CoursePageResourceImpl extends XMIResourceImpl { + /** + * Creates an instance of the resource. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param uri the URI of the new resource. + * @generated + */ + public CoursePageResourceImpl(URI uri) { + super(uri); + } + + CoursePageResourceImpl() { + throw new UnsupportedOperationException("TODO: auto-generated method stub"); + } + +} //CoursePageResourceImpl diff --git a/src/tdt4250/transformation/Course.xmi b/src/tdt4250/transformation/Course.xmi new file mode 100644 index 0000000..d740ed4 --- /dev/null +++ b/src/tdt4250/transformation/Course.xmi @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<coursePage:Course + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:coursePage="platform:/resource/tdt4250.web/model/coursePage.ecore" + code="TDT4100" + name="OOP" + content="content" + credits="7.5"> + <timetable> + <table starteTime="1415" + endTime="1600" + hours="5.0"/> + <table day="Tuesday" + room="EL6" + lectureType="lecture" + starteTime="1215" + endTime="1400" + hours="5.0"/> + </timetable> + <relation + creditsReduction="3.0"/> + <grading points="70.0"/> + <courseWork + lectureHours="5.0" + labHours="5.0"/> + <hasBeenTaught + semester="V16" + credits="7.5"/> + <courseStaff> + <inTheStaff + name="Hallvard Trætteberg"> + <role/> + <isCC/> + </inTheStaff> + <inTheStaff + name="Alf Inge"> + <role + role="assistant"/> + </inTheStaff> + </courseStaff> +</coursePage:Course> diff --git a/src/tdt4250/transformation/Course2HTML.xtend b/src/tdt4250/transformation/Course2HTML.xtend new file mode 100644 index 0000000..9c34400 --- /dev/null +++ b/src/tdt4250/transformation/Course2HTML.xtend @@ -0,0 +1,179 @@ +package tdt4250.transformation + +import org.w3c.xhtml1.util.Xhtml1ResourceFactoryImpl +import org.w3c.xhtml1.Xhtml1Factory +import coursePage.Course +import org.w3c.xhtml1.HtmlType +import org.eclipse.emf.ecore.xmi.XMLResource +import java.io.ByteArrayOutputStream +import org.eclipse.emf.common.util.URI +import java.io.IOException +import java.util.Arrays +import org.eclipse.emf.ecore.xml.namespace.XMLNamespaceFactory +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl +import coursePage.CoursePagePackage +import org.eclipse.emf.ecore.EObject +import coursePage.util.CoursePageResourceImpl +import coursePage.util.CoursePageResourceFactoryImpl + +class Course2HTML { + + Xhtml1ResourceFactoryImpl xhtml1ResourceFactoryImpl = new Xhtml1ResourceFactoryImpl + + def String generateHtml(Course course) { + val encoding = "UTF-8" + val html = generateHtmlType(course); + val root = XMLNamespaceFactory.eINSTANCE.createXMLNamespaceDocumentRoot += html + //val fileName = (if (course.name !== null) course.name.replace('.', '/') else "quiz")+ '.html' + val fileName = "Course" + '.html' + + val resource = xhtml1ResourceFactoryImpl.createResource(URI.createFileURI(fileName)) as XMLResource + resource.getDefaultSaveOptions().put(XMLResource.OPTION_ENCODING, encoding); + resource.contents += html + val outputStream = new ByteArrayOutputStream(4096) + resource.save(outputStream, null) + val originalOutput = outputStream.toString(encoding) + originalOutput.cleanHtml + } + + def cleanHtml(String html) { + html + .replace("xhtml:", "") + .replace("html_._type", "html") + .replace("xmlns:xhtml=", "xmlns=") + .replace("<", "<") + .replace(">", ">") + .replace("&", "&") + .replace(""", "'") + } + + extension Xhtml1Factory xhtml1Factory = Xhtml1Factory.eINSTANCE + extension XhtmlUtil xhtmlUtil = new XhtmlUtil + + def HtmlType generateHtmlType(Course course) { + val html = createHtmlType => [ + head = createHeadType => [ + title = createTitleType => [ + it += ("TITLE") + ] + meta += createMetaType => [ + httpEquiv = "content-type" + content = "text/html; charset=UTF-8" + ] + ] + body = createBodyType => [ + it +=createH1Type => [ + it += course.code + " " + course.name + ] + + it += createPType => [ + it += "This page contains all information about this course" + ] + + it += createPType => [ + it += "name: " + course.code + " " + course.name + ] + + it += createPType => [ + it += "credits: " + course.credits + ] + + it += createH2Type => [ + it += "TimeTable" + ] + for(slot: course.timetable.table){ + it += createPType =>[ + it += slot.day.toString + " " + slot.room.toString + " " +slot.starteTime + "-" +slot.endTime + + " " + slot.lectureType + ] + } + + + it += createH2Type => [ + it += "Evaluation" + ] + it += createPType => [ + for(evaluation : course.grading){ + it += evaluation.evaluation.toString + + " " + evaluation.points+ "/" + "100" + + } + ] + + it += createH2Type => [ + it += "Course Work" + ] + + it += createPType => [ + it += "Lecture Hours" + " " + course.courseWork.lectureHours.toString + ] + + + it += createPType => [ + it += "Lab Hours" + " " + course.courseWork.labHours.toString + ] + + it += createH2Type => [ + it += "Course Reduction" + ] + + for(ocourse :course.relation ){ + it += createPType =>[ + it+= ocourse.course.toString + " " + "Reduction:" + ocourse.creditsReduction.toString + ] + } + it += createH2Type => [ + it += "Course Staff" + ] + + for(person: course.courseStaff.get(0).inTheStaff){ + it += createPType =>[ + it += person.name + " " + person.role + ] + } + + + ] + ] + html +// fsa.generateFile(quiz.name.replace('.', '/') + '.html', stringBuilder); + } + + def static void main(String[] args) throws IOException { + val argsAsList = Arrays.asList(args) + val course = if (argsAsList.size > 0) getCourse(argsAsList.get(0)) else getSampleCourse(); + val html = new Course2HTML().generateHtml(course); + System.out.println(html); + } + + def static Course getSampleCourse() { + try { + return getCourse(Course2HTML.getResource("Course.xmi").toString()); + } + catch (IOException e) { + println(); + System.err.println(e); + return null; + } + } + + def static Course getCourse(String uriString) throws IOException { + val resSet = new ResourceSetImpl(); + resSet.getPackageRegistry().put(CoursePagePackage.eNS_URI, CoursePagePackage.eINSTANCE); + resSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new CoursePageResourceFactoryImpl()); + val resource = resSet.getResource(URI.createURI(uriString), true); + for (EObject eObject : resource.getContents()) { + if (eObject instanceof Course) { + return eObject as Course; + } + } + return null; + } + + + + + + + +} \ No newline at end of file diff --git a/src/tdt4250/transformation/XhtmlUtil.xtend b/src/tdt4250/transformation/XhtmlUtil.xtend new file mode 100644 index 0000000..810bdf3 --- /dev/null +++ b/src/tdt4250/transformation/XhtmlUtil.xtend @@ -0,0 +1,135 @@ +package tdt4250.transformation + +import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EDataType +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.EcorePackage +import org.eclipse.emf.ecore.util.EcoreUtil +import org.eclipse.emf.ecore.util.FeatureMap +import org.eclipse.emf.ecore.util.FeatureMapUtil +import org.w3c.xhtml1.Xhtml1Package + +class XhtmlUtil { + + def tag(String tagName) { + val typeName = tagName + "Type" + for (eClass : Xhtml1Package.eINSTANCE.EClassifiers.filter(EClass)) { + val className = eClass.name + if (className.equalsIgnoreCase(tagName) || className.equalsIgnoreCase(typeName)) { + return eClass + } + } + } + + def create(EClass tag) { + EcoreUtil.create(tag) + } + + def create(String tagName) { + val tag = tag(tagName) + if (tag !== null) { + create(tag) + } + } + + def attr(EObject eObject, String attrName) { + eObject.eClass.EAllStructuralFeatures.findFirst[name == attrName] + } + + def operator_add(EObject eObject, Pair<String, String> attr) { + val feature = attr(eObject, attr.key) + if (feature !== null) { + val featureType = feature.EType as EDataType + val value = featureType.EPackage.EFactoryInstance.createFromString(featureType, attr.value) + if (feature.many) { +// (eObject.eGet(feature) as EList<?>).add(value) + } else { + eObject.eSet(feature, value) + } + } + } + + def featureMap(EObject featureMapOwner) { + for (feature : featureMapOwner.eClass.EAllStructuralFeatures) { + if (feature.EType == EcorePackage.eINSTANCE.EFeatureMapEntry) { + return featureMapOwner.eGet(feature) as FeatureMap + } + } + } + + def operator_add(EObject featureMapOwner, EObject eObject) { + val featureMap = featureMap(featureMapOwner) + if (featureMap !== null) { + for (feature : featureMapOwner.eClass.EAllStructuralFeatures) { + if (feature.EType.isInstance(eObject)) { + featureMap.add(feature, eObject) + return featureMapOwner + } + } + System.err.println("Didn't find feature for " + eObject.eClass.name + " in " + featureMapOwner.eClass.name) + } + featureMapOwner + } + + def operator_add(EObject featureMapOwner, Iterable<? extends EObject> eObjects) { + for (eObject : eObjects) { + featureMapOwner += eObject + } + featureMapOwner + } + + def operator_add(FeatureMap featureMap, CharSequence text) { + if (featureMap !== null) { + FeatureMapUtil.addText(featureMap, if (text !== null) text.toString else "") + } + featureMap + } + + def operator_add(EObject featureMapOwner, CharSequence text) { + val featureMap = featureMap(featureMapOwner) + if (featureMap !== null) { + featureMap += text + } + featureMapOwner + } + +// def operator_add(Block block, EObject eObject) { +// add(block, block.group, eObject) +// } +// def operator_add(Block block, Iterable<? extends EObject> eObjects) { +// for (eObject : eObjects) { +// add(block, block.group, eObject) +// } +// } +// +// def operator_add(FormContent form, EObject eObject) { +// add(form, form.group, eObject) +// } +// def operator_add(FormContent form, Iterable<? extends EObject> eObjects) { +// for (eObject : eObjects) { +// add(form, form.group, eObject) +// } +// } +// +// def operator_add(Flow flow, EObject eObject) { +// add(flow, flow.group, eObject) +// } +// def operator_add(Inline inline, EObject eObject) { +// add(inline, inline.group, eObject) +// } +// def operator_add(ScriptType script, CharSequence text) { +// script.mixed += text +// } +// def operator_add(ButtonContent button, CharSequence text) { +// button.mixed += text +// } +// def operator_add(SelectType select, EObject eObject) { +// add(select, select.group, eObject) +// } + + // + + def StringBuilder operator_doubleLessThan(StringBuilder stringBuilder, Object o) { + return stringBuilder.append(o); + } +} diff --git a/xtend-gen/tdt4250/transformation/.Course2HTML.java._trace b/xtend-gen/tdt4250/transformation/.Course2HTML.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..45b2449d975603ae77fb547cc8683d5a903a561d GIT binary patch literal 22100 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 Pt`lK}ip*mLi!cHJ^{&pF literal 0 HcmV?d00001 diff --git a/xtend-gen/tdt4250/transformation/.Course2HTML.xtendbin b/xtend-gen/tdt4250/transformation/.Course2HTML.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..ea966ac41758aa9d1eb6d525f9338c8b8ce4ec1c GIT binary patch literal 9057 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 literal 0 HcmV?d00001 diff --git a/xtend-gen/tdt4250/transformation/.XhtmlUtil.java._trace b/xtend-gen/tdt4250/transformation/.XhtmlUtil.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..b11a4a6d7ecd69df8ed67cdc288801edad29ecff GIT binary patch literal 9028 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 literal 0 HcmV?d00001 diff --git a/xtend-gen/tdt4250/transformation/.XhtmlUtil.xtendbin b/xtend-gen/tdt4250/transformation/.XhtmlUtil.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..7f14767d8a52b5e21951f926aa9f7cec8033f2a4 GIT binary patch literal 6356 zcmWIWW@Zs#;Nak3_*!G@%YX!U7#J8*bJKK_^Ycnl^Gb@BMzL1h_7Lk+wOn>&q0zFt zx_Pff#CMroHhH@&_f}r;hfiAHECRK?*QsnjYh--*qMWg@vGHd)W8=?vtCho2kKg>g zFJ!7|zT7{4lW%v|M4c=<cY0fA=aEC4r&r}lN>~&=a%r3zvNUZ|Q(h1MoGmlL^7d)* zsBCiGb93DapA*_wXXQmKUX!A^OO0c-RK9H{?;M%QzGeYi)UtD=rZ9J|dsN`zGheq< z`pslsN%@(Qfdao|HXZn!vfTI7DfWh`D(kYfwk`=@y~}Jvu$`W~)Ir{7Tg(@1v+fTs zH|Ul0;*{U&nJ&}#RhPN?cwfW6XAC*tBOHAm#F<AVW&}+2El%8gblWzU=;$DUNpF)D z=|*OBzBao#DX{yW<~7UrA|L#i-+wdJ{kUzqxM}Ru8sh`z+%>_kqaSr&uPu7H!seXc z>{%_|CmLJ$CQP_@qpM}t(iLX?%>~=nh$`tV6<+eh(JL+ZbkH{Ao2#UAT-NF4cXpkA z$z*v~LB0B0@Py`D>+)t!I{lila<78Ec=HuuY46s_!eODY@fx50%WT)r*>+;*q4_f& zn;t&bv#({s<EhQfk#8oM`fjh7#+NNx>*h2kvZRw)k|*ZY<XJJPk$Q}!eoI%cu{y@H zIXTVg)a|1y)_uGr@YG6s;+qF7$~Ei;lQ)I#T@xa5L(d~M%=7t;ld}%`2$!9i7PZQ& z;%&xEAuT8W!quy$_wiLWweZES&^+h4<@{4Gxk<dPa>32dy6=4B5j$jCpuAQ3)Q=X^ zaG{3fi%uSUa!+crW^2jOzBe|3FIt42=x!;UcU!_O<}OqC_61tWt%0WlwtQ6Nkq+;R zv6Ow)bguQ)u~5^kdFxy@vW8weCVR;ABKzuFw=T(Qt&WI^Tx%0AWZli@z@8fVH781; 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 literal 0 HcmV?d00001 diff --git a/xtend-gen/tdt4250/transformation/Course2HTML.java b/xtend-gen/tdt4250/transformation/Course2HTML.java new file mode 100644 index 0000000..8df5710 --- /dev/null +++ b/xtend-gen/tdt4250/transformation/Course2HTML.java @@ -0,0 +1,307 @@ +package tdt4250.transformation; + +import coursePage.Course; +import coursePage.CoursePagePackage; +import coursePage.Employee; +import coursePage.Evaluation; +import coursePage.LectureType; +import coursePage.Lecturer; +import coursePage.RelationToCourse; +import coursePage.Slot; +import coursePage.util.CoursePageResourceFactoryImpl; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.emf.ecore.xml.namespace.XMLNamespaceDocumentRoot; +import org.eclipse.emf.ecore.xml.namespace.XMLNamespaceFactory; +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.lib.InputOutput; +import org.eclipse.xtext.xbase.lib.ObjectExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; +import org.w3c.xhtml1.BodyType; +import org.w3c.xhtml1.H1Type; +import org.w3c.xhtml1.H2Type; +import org.w3c.xhtml1.HeadType; +import org.w3c.xhtml1.HtmlType; +import org.w3c.xhtml1.MetaType; +import org.w3c.xhtml1.PType; +import org.w3c.xhtml1.TitleType; +import org.w3c.xhtml1.Xhtml1Factory; +import org.w3c.xhtml1.util.Xhtml1ResourceFactoryImpl; +import tdt4250.transformation.XhtmlUtil; + +@SuppressWarnings("all") +public class Course2HTML { + private Xhtml1ResourceFactoryImpl xhtml1ResourceFactoryImpl = new Xhtml1ResourceFactoryImpl(); + + public String generateHtml(final Course course) { + try { + String _xblockexpression = null; + { + final String encoding = "UTF-8"; + final HtmlType html = this.generateHtmlType(course); + XMLNamespaceDocumentRoot _createXMLNamespaceDocumentRoot = XMLNamespaceFactory.eINSTANCE.createXMLNamespaceDocumentRoot(); + final EObject root = this.xhtmlUtil.operator_add(_createXMLNamespaceDocumentRoot, html); + final String fileName = ("Course" + ".html"); + Resource _createResource = this.xhtml1ResourceFactoryImpl.createResource(URI.createFileURI(fileName)); + final XMLResource resource = ((XMLResource) _createResource); + resource.getDefaultSaveOptions().put(XMLResource.OPTION_ENCODING, encoding); + EList<EObject> _contents = resource.getContents(); + _contents.add(html); + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(4096); + resource.save(outputStream, null); + final String originalOutput = outputStream.toString(encoding); + _xblockexpression = this.cleanHtml(originalOutput); + } + return _xblockexpression; + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + public String cleanHtml(final String html) { + return html.replace("xhtml:", "").replace("html_._type", "html").replace("xmlns:xhtml=", "xmlns=").replace("<", "<").replace(">", ">").replace("&", "&").replace(""", "\'"); + } + + @Extension + private Xhtml1Factory xhtml1Factory = Xhtml1Factory.eINSTANCE; + + @Extension + private XhtmlUtil xhtmlUtil = new XhtmlUtil(); + + public HtmlType generateHtmlType(final Course course) { + HtmlType _xblockexpression = null; + { + HtmlType _createHtmlType = this.xhtml1Factory.createHtmlType(); + final Procedure1<HtmlType> _function = (HtmlType it) -> { + HeadType _createHeadType = this.xhtml1Factory.createHeadType(); + final Procedure1<HeadType> _function_1 = (HeadType it_1) -> { + TitleType _createTitleType = this.xhtml1Factory.createTitleType(); + final Procedure1<TitleType> _function_2 = (TitleType it_2) -> { + this.xhtmlUtil.operator_add(it_2, "TITLE"); + }; + TitleType _doubleArrow = ObjectExtensions.<TitleType>operator_doubleArrow(_createTitleType, _function_2); + it_1.setTitle(_doubleArrow); + EList<MetaType> _meta = it_1.getMeta(); + MetaType _createMetaType = this.xhtml1Factory.createMetaType(); + final Procedure1<MetaType> _function_3 = (MetaType it_2) -> { + it_2.setHttpEquiv("content-type"); + it_2.setContent("text/html; charset=UTF-8"); + }; + MetaType _doubleArrow_1 = ObjectExtensions.<MetaType>operator_doubleArrow(_createMetaType, _function_3); + _meta.add(_doubleArrow_1); + }; + HeadType _doubleArrow = ObjectExtensions.<HeadType>operator_doubleArrow(_createHeadType, _function_1); + it.setHead(_doubleArrow); + BodyType _createBodyType = this.xhtml1Factory.createBodyType(); + final Procedure1<BodyType> _function_2 = (BodyType it_1) -> { + H1Type _createH1Type = this.xhtml1Factory.createH1Type(); + final Procedure1<H1Type> _function_3 = (H1Type it_2) -> { + String _code = course.getCode(); + String _plus = (_code + " "); + String _name = course.getName(); + String _plus_1 = (_plus + _name); + this.xhtmlUtil.operator_add(it_2, _plus_1); + }; + H1Type _doubleArrow_1 = ObjectExtensions.<H1Type>operator_doubleArrow(_createH1Type, _function_3); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_1); + PType _createPType = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_4 = (PType it_2) -> { + this.xhtmlUtil.operator_add(it_2, "This page contains all information about this course"); + }; + PType _doubleArrow_2 = ObjectExtensions.<PType>operator_doubleArrow(_createPType, _function_4); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_2); + PType _createPType_1 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_5 = (PType it_2) -> { + String _code = course.getCode(); + String _plus = ("name: " + _code); + String _plus_1 = (_plus + " "); + String _name = course.getName(); + String _plus_2 = (_plus_1 + _name); + this.xhtmlUtil.operator_add(it_2, _plus_2); + }; + PType _doubleArrow_3 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_1, _function_5); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_3); + PType _createPType_2 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_6 = (PType it_2) -> { + double _credits = course.getCredits(); + String _plus = ("credits: " + Double.valueOf(_credits)); + this.xhtmlUtil.operator_add(it_2, _plus); + }; + PType _doubleArrow_4 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_2, _function_6); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_4); + H2Type _createH2Type = this.xhtml1Factory.createH2Type(); + final Procedure1<H2Type> _function_7 = (H2Type it_2) -> { + this.xhtmlUtil.operator_add(it_2, "TimeTable"); + }; + H2Type _doubleArrow_5 = ObjectExtensions.<H2Type>operator_doubleArrow(_createH2Type, _function_7); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_5); + EList<Slot> _table = course.getTimetable().getTable(); + for (final Slot slot : _table) { + PType _createPType_3 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_8 = (PType it_2) -> { + String _string = slot.getDay().toString(); + String _plus = (_string + " "); + String _string_1 = slot.getRoom().toString(); + String _plus_1 = (_plus + _string_1); + String _plus_2 = (_plus_1 + " "); + String _starteTime = slot.getStarteTime(); + String _plus_3 = (_plus_2 + _starteTime); + String _plus_4 = (_plus_3 + "-"); + String _endTime = slot.getEndTime(); + String _plus_5 = (_plus_4 + _endTime); + String _plus_6 = (_plus_5 + " "); + LectureType _lectureType = slot.getLectureType(); + String _plus_7 = (_plus_6 + _lectureType); + this.xhtmlUtil.operator_add(it_2, _plus_7); + }; + PType _doubleArrow_6 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_3, _function_8); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_6); + } + H2Type _createH2Type_1 = this.xhtml1Factory.createH2Type(); + final Procedure1<H2Type> _function_9 = (H2Type it_2) -> { + this.xhtmlUtil.operator_add(it_2, "Evaluation"); + }; + H2Type _doubleArrow_7 = ObjectExtensions.<H2Type>operator_doubleArrow(_createH2Type_1, _function_9); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_7); + PType _createPType_4 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_10 = (PType it_2) -> { + EList<Evaluation> _grading = course.getGrading(); + for (final Evaluation evaluation : _grading) { + String _string = evaluation.getEvaluation().toString(); + String _plus = (_string + " "); + double _points = evaluation.getPoints(); + String _plus_1 = (_plus + Double.valueOf(_points)); + String _plus_2 = (_plus_1 + "/"); + String _plus_3 = (_plus_2 + "100"); + this.xhtmlUtil.operator_add(it_2, _plus_3); + } + }; + PType _doubleArrow_8 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_4, _function_10); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_8); + H2Type _createH2Type_2 = this.xhtml1Factory.createH2Type(); + final Procedure1<H2Type> _function_11 = (H2Type it_2) -> { + this.xhtmlUtil.operator_add(it_2, "Course Work"); + }; + H2Type _doubleArrow_9 = ObjectExtensions.<H2Type>operator_doubleArrow(_createH2Type_2, _function_11); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_9); + PType _createPType_5 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_12 = (PType it_2) -> { + String _string = Double.valueOf(course.getCourseWork().getLectureHours()).toString(); + String _plus = (("Lecture Hours" + " ") + _string); + this.xhtmlUtil.operator_add(it_2, _plus); + }; + PType _doubleArrow_10 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_5, _function_12); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_10); + PType _createPType_6 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_13 = (PType it_2) -> { + String _string = Double.valueOf(course.getCourseWork().getLabHours()).toString(); + String _plus = (("Lab Hours" + " ") + _string); + this.xhtmlUtil.operator_add(it_2, _plus); + }; + PType _doubleArrow_11 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_6, _function_13); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_11); + H2Type _createH2Type_3 = this.xhtml1Factory.createH2Type(); + final Procedure1<H2Type> _function_14 = (H2Type it_2) -> { + this.xhtmlUtil.operator_add(it_2, "Course Reduction"); + }; + H2Type _doubleArrow_12 = ObjectExtensions.<H2Type>operator_doubleArrow(_createH2Type_3, _function_14); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_12); + EList<RelationToCourse> _relation = course.getRelation(); + for (final RelationToCourse ocourse : _relation) { + PType _createPType_7 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_15 = (PType it_2) -> { + String _string = ocourse.getCourse().toString(); + String _plus = (_string + " "); + String _plus_1 = (_plus + "Reduction:"); + String _string_1 = Double.valueOf(ocourse.getCreditsReduction()).toString(); + String _plus_2 = (_plus_1 + _string_1); + this.xhtmlUtil.operator_add(it_2, _plus_2); + }; + PType _doubleArrow_13 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_7, _function_15); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_13); + } + H2Type _createH2Type_4 = this.xhtml1Factory.createH2Type(); + final Procedure1<H2Type> _function_16 = (H2Type it_2) -> { + this.xhtmlUtil.operator_add(it_2, "Course Staff"); + }; + H2Type _doubleArrow_14 = ObjectExtensions.<H2Type>operator_doubleArrow(_createH2Type_4, _function_16); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_14); + EList<Employee> _inTheStaff = course.getCourseStaff().get(0).getInTheStaff(); + for (final Employee person : _inTheStaff) { + PType _createPType_8 = this.xhtml1Factory.createPType(); + final Procedure1<PType> _function_17 = (PType it_2) -> { + String _name = person.getName(); + String _plus = (_name + " "); + EList<Lecturer> _role = person.getRole(); + String _plus_1 = (_plus + _role); + this.xhtmlUtil.operator_add(it_2, _plus_1); + }; + PType _doubleArrow_15 = ObjectExtensions.<PType>operator_doubleArrow(_createPType_8, _function_17); + this.xhtmlUtil.operator_add(it_1, _doubleArrow_15); + } + }; + BodyType _doubleArrow_1 = ObjectExtensions.<BodyType>operator_doubleArrow(_createBodyType, _function_2); + it.setBody(_doubleArrow_1); + }; + final HtmlType html = ObjectExtensions.<HtmlType>operator_doubleArrow(_createHtmlType, _function); + _xblockexpression = html; + } + return _xblockexpression; + } + + public static void main(final String[] args) throws IOException { + final List<String> argsAsList = Arrays.<String>asList(args); + Course _xifexpression = null; + int _size = argsAsList.size(); + boolean _greaterThan = (_size > 0); + if (_greaterThan) { + _xifexpression = Course2HTML.getCourse(argsAsList.get(0)); + } else { + _xifexpression = Course2HTML.getSampleCourse(); + } + final Course course = _xifexpression; + final String html = new Course2HTML().generateHtml(course); + System.out.println(html); + } + + public static Course getSampleCourse() { + try { + return Course2HTML.getCourse(Course2HTML.class.getResource("Course.xmi").toString()); + } catch (final Throwable _t) { + if (_t instanceof IOException) { + final IOException e = (IOException)_t; + InputOutput.println(); + System.err.println(e); + return null; + } else { + throw Exceptions.sneakyThrow(_t); + } + } + } + + public static Course getCourse(final String uriString) throws IOException { + final ResourceSetImpl resSet = new ResourceSetImpl(); + resSet.getPackageRegistry().put(CoursePagePackage.eNS_URI, CoursePagePackage.eINSTANCE); + Map<String, Object> _extensionToFactoryMap = resSet.getResourceFactoryRegistry().getExtensionToFactoryMap(); + CoursePageResourceFactoryImpl _coursePageResourceFactoryImpl = new CoursePageResourceFactoryImpl(); + _extensionToFactoryMap.put("xmi", _coursePageResourceFactoryImpl); + final Resource resource = resSet.getResource(URI.createURI(uriString), true); + EList<EObject> _contents = resource.getContents(); + for (final EObject eObject : _contents) { + if ((eObject instanceof Course)) { + return ((Course) eObject); + } + } + return null; + } +} diff --git a/xtend-gen/tdt4250/transformation/XhtmlUtil.java b/xtend-gen/tdt4250/transformation/XhtmlUtil.java new file mode 100644 index 0000000..c229e2f --- /dev/null +++ b/xtend-gen/tdt4250/transformation/XhtmlUtil.java @@ -0,0 +1,170 @@ +package tdt4250.transformation; + +import com.google.common.base.Objects; +import com.google.common.collect.Iterables; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.util.FeatureMap; +import org.eclipse.emf.ecore.util.FeatureMapUtil; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.Pair; +import org.w3c.xhtml1.Xhtml1Package; + +@SuppressWarnings("all") +public class XhtmlUtil { + public EClass tag(final String tagName) { + final String typeName = (tagName + "Type"); + Iterable<EClass> _filter = Iterables.<EClass>filter(Xhtml1Package.eINSTANCE.getEClassifiers(), EClass.class); + for (final EClass eClass : _filter) { + { + final String className = eClass.getName(); + if ((className.equalsIgnoreCase(tagName) || className.equalsIgnoreCase(typeName))) { + return eClass; + } + } + } + return null; + } + + public EObject create(final EClass tag) { + return EcoreUtil.create(tag); + } + + public EObject create(final String tagName) { + EObject _xblockexpression = null; + { + final EClass tag = this.tag(tagName); + EObject _xifexpression = null; + if ((tag != null)) { + _xifexpression = this.create(tag); + } + _xblockexpression = _xifexpression; + } + return _xblockexpression; + } + + public EStructuralFeature attr(final EObject eObject, final String attrName) { + final Function1<EStructuralFeature, Boolean> _function = (EStructuralFeature it) -> { + String _name = it.getName(); + return Boolean.valueOf(Objects.equal(_name, attrName)); + }; + return IterableExtensions.<EStructuralFeature>findFirst(eObject.eClass().getEAllStructuralFeatures(), _function); + } + + public Object operator_add(final EObject eObject, final Pair<String, String> attr) { + Object _xblockexpression = null; + { + final EStructuralFeature feature = this.attr(eObject, attr.getKey()); + Object _xifexpression = null; + if ((feature != null)) { + Object _xblockexpression_1 = null; + { + EClassifier _eType = feature.getEType(); + final EDataType featureType = ((EDataType) _eType); + final Object value = featureType.getEPackage().getEFactoryInstance().createFromString(featureType, attr.getValue()); + Object _xifexpression_1 = null; + boolean _isMany = feature.isMany(); + if (_isMany) { + _xifexpression_1 = null; + } else { + eObject.eSet(feature, value); + } + _xblockexpression_1 = _xifexpression_1; + } + _xifexpression = _xblockexpression_1; + } + _xblockexpression = _xifexpression; + } + return _xblockexpression; + } + + public FeatureMap featureMap(final EObject featureMapOwner) { + EList<EStructuralFeature> _eAllStructuralFeatures = featureMapOwner.eClass().getEAllStructuralFeatures(); + for (final EStructuralFeature feature : _eAllStructuralFeatures) { + EClassifier _eType = feature.getEType(); + EDataType _eFeatureMapEntry = EcorePackage.eINSTANCE.getEFeatureMapEntry(); + boolean _equals = Objects.equal(_eType, _eFeatureMapEntry); + if (_equals) { + Object _eGet = featureMapOwner.eGet(feature); + return ((FeatureMap) _eGet); + } + } + return null; + } + + public EObject operator_add(final EObject featureMapOwner, final EObject eObject) { + EObject _xblockexpression = null; + { + final FeatureMap featureMap = this.featureMap(featureMapOwner); + if ((featureMap != null)) { + EList<EStructuralFeature> _eAllStructuralFeatures = featureMapOwner.eClass().getEAllStructuralFeatures(); + for (final EStructuralFeature feature : _eAllStructuralFeatures) { + boolean _isInstance = feature.getEType().isInstance(eObject); + if (_isInstance) { + featureMap.add(feature, eObject); + return featureMapOwner; + } + } + String _name = eObject.eClass().getName(); + String _plus = ("Didn\'t find feature for " + _name); + String _plus_1 = (_plus + " in "); + String _name_1 = featureMapOwner.eClass().getName(); + String _plus_2 = (_plus_1 + _name_1); + System.err.println(_plus_2); + } + _xblockexpression = featureMapOwner; + } + return _xblockexpression; + } + + public EObject operator_add(final EObject featureMapOwner, final Iterable<? extends EObject> eObjects) { + EObject _xblockexpression = null; + { + for (final EObject eObject : eObjects) { + this.operator_add(featureMapOwner, eObject); + } + _xblockexpression = featureMapOwner; + } + return _xblockexpression; + } + + public FeatureMap operator_add(final FeatureMap featureMap, final CharSequence text) { + FeatureMap _xblockexpression = null; + { + if ((featureMap != null)) { + String _xifexpression = null; + if ((text != null)) { + _xifexpression = text.toString(); + } else { + _xifexpression = ""; + } + FeatureMapUtil.addText(featureMap, _xifexpression); + } + _xblockexpression = featureMap; + } + return _xblockexpression; + } + + public EObject operator_add(final EObject featureMapOwner, final CharSequence text) { + EObject _xblockexpression = null; + { + final FeatureMap featureMap = this.featureMap(featureMapOwner); + if ((featureMap != null)) { + this.operator_add(featureMap, text); + } + _xblockexpression = featureMapOwner; + } + return _xblockexpression; + } + + public StringBuilder operator_doubleLessThan(final StringBuilder stringBuilder, final Object o) { + return stringBuilder.append(o); + } +} -- GitLab