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
zcmZQzU|?lrtW#!mG+|(JnjWYr?68@UL8Bz4#Kg$dK)<9YF|Rl+zbH4cBr`ux-#Ndu
zs5sTgBgEH7uc9P1FNMjCyFy&c(HO3mf!oc9M_ZeL$!RW+urLFoo3lf_jt&Ep(*}nS
zQBejKH*YBjS4vcrfeD4j=#~nRI|Y(sbZb=5(P3nAdL{=}*(e9r2j#UwRK9|!T<LOG
z&%u>}$(hUPqPQvptJ?;4Jv{~{XFhguaRw$79;4fKUa*`fuedk^quUV?Fi(k3T%3W~
z?G!|x5=0*|kJ0TSL{1YV$LRLJWud-<3nP=Wq0=gHRR(6aw=Sv%4h{@30Umb+MI$3d
zCTBBo2?+)!cMA?M&y_<$f`QT9%hcGIk;yqgMN*Q1$vr_1%!`(klw@FbPhd4RW?*s#
z^BCPzB@sMk_f$a$Pf${lfziE;9n8yN2b+S-V|4FuxNBm{$mCq%5FjPR!0g`PP;Fwu
zz~tQQ;3_4>zy#qlGC4Qff~613nV5ihauA*fM6HOF6a%CCbuKV(Iu}?YGLO;yp(0pr
zp*&dbp*(`e=%MJ~YzlG$#7Z^~MOIT&xC<CP)VNT%2E1VI0cMb$9<~Z#9@uqEFdo<z
zMvpj%Ifq$6cB1eYJ@WL-%ov$m^ps>|7??cTM8P~;VHp_)W{-AG2#-@nhJn#z5(k*)
z!2#wiby#O^!N}wi?vNrU$H45d)FIv6oPo(D%^_4yj)4inX9V%x!14#=&CNkvDF}}h
zq8P+u^f)So;4z`_7(MRmfaMx=!20g<LwNjhatw?f?_|Jc_RE0f-m!q?`dPqopCrJ%
z$r50>Pkay_A4txVffLMI$O&>O3Xjp#NWlW+Er>UmJxzElEEt$v*7JasBJ&tM9R<L0
zX$~MCGQqeFV7Gb3IQUvxGBUaBbMTRuXJGb>QG{?6Av{h?O9m#FeVp?03{0LeNIXW*
zR0*)$aS5<osu+YPCNIyx=vk``=H1tpmuFz{tYv}lSio|PGGH4X%YbcY<N?b)<^jv~
z3V?a<1;Az^^B6tnfo*qXfVc&j$LP7qA<)X2k;#=$N<o2v#dDLfl@*95q@cjS?0J^c
z%8G%>m5)<Ffq@By$LM*D4=g7Rk-Nr&;4yl><Fd8}=>wU<1ml5KGJ5`D1<NV3g3Uzc
zF?#Vh_}JJmGP!CSD=IQDd6_GKd3FkliVVzN=2A8`3{0+eQeZi2F)+_bOi_`6(JPP@
ztTKWX%u7_ZwPj>-O;l1+Vqo@4<g~SAU~*05R8nGKLg6ubWl4hNvLuz17+AcrSRp)C
zB_#$%uY6uGFP|5z51Gg4Rm%#tp%$XD*WS*Kk;%2qR9TsU$!oO&m^WKNS($;^Yc;Q(
z9Rri=Y+i^Q5|7bqhcH-fg)ms<4o(P<Q(2jT(d!_Dw-Ll+Lg6uby_C1NXJm5SC#j;s
z!0h#s)!v=~%476;Ck5u6<pRsS<3jKly?*e6dHeWPR2Z00c#Pf(LJp1&j_|UY(Yx2-
zvxB>XCj*n~Lx<n$1`Mp;Q`jBc9o*ppjNY@kpaM_1)YTany_X6>`R{qu)ft$*SHm>C
zXIEEeU_#?FdT(Nds{h6c*1z9jkAsJU2P2c~ABP9(1`JHz#~ijmMBJDhu4(8qFnb?!
zm;)EtrJ)BFX@iT**U$xv6v9PXHFUrtF>sM=4Q-H!6<okYLklDz4HHn%&;;>WL3{=#
zHzrmM4Ukh%_>A7C#h~&$Vw#!^EZ(O%V0;cuO$J8q%bXxSBa@p5CzyYi8OoPq2J;`v
zgZK<gZtC({S_~}S4`KS%IkdDG7`<Qef#eyP-1Pat{2%O4z8yP=@57)3;)B`?O4`~C
zEIte{{oWkf+6;_79Q+`8MkcplelTAG=AL9uFkeX&B+tO)RwSyU!@%OB1k+!{p`*jV
z=%WR*uZkVaH(~*)XJm3~Vgd8bVfuSSb#)n7e9U3`dpLA;85n)+Vfv@AgZb_-{c~8r
zd>>f&EfdqzV_@;|f$3kyp{K{d=o13wGcviYgYaWv`nR)y<&z{p?qOhZJ1DNN&%ol7
z1Xd5?bLi_cF#2S{{CkoU%r61QA0w07Wfm~M-NDzv+rfu{$?c(ogOL#fi_cs>2OqG&
zYd#|*1|~E<qt9xX{7;ZPqt9*$ka|WYcTNc-BL-%l-B5XVPKf+TE|5F}le;(<*gRA|
zqt9(y2R{dY1}1l9J!4}A7N3t?4*p=iE*Gc~gT`m{`3;jd2gx(~vI~IJGcvh5^MTa+
zvh#uX3~)X-Ouaiqy?o|1hd@Ub1}66~4}DXI9tKulHBN^>hd>4<_b5(K;{uJ(=&LUX
zl}{ElHDzG*br6B_OZZGp8JK<D*kOEjuzplNqpvSaz8WOY=o^zc#UaR%nUTr8*@Fq>
z1ZLlu%u<ISM<xa&q25dxhY&{wMke<T_a$Zyoea#ry&0PvLLB}xFu6~5p9vLmaBv85
z2w`M$pUiJ&#=zpcf)&IEDFN{reb@4#@^=d&^O<~i^CR;aeXnF>JA^v?XJm3;>fR2r
zgUL@kL(U=0;U5E&`)c<ZbB7KFEJDnF;x07~VGbFLOzx{4u9(|1u=<I+L^^~yq%$(P
zZ*n+mZqLBxC+^_j5atjD5&^YvSp1AwL3{=#_e~%^qn|k+D&JKQna||s%8$%v^h<DF
z;1KSR#>nJ;#9_C&Jp+^9N@s6}2!~V#Cil}0>n!ZBh%o!DbS!d+aEN7OazAZlVa34e
zx6;weA;KYsk;(nCk%bilo8L+YXNL%f2#^4%^~2(Kj1|OZU~<0<;xqc4=0oM*6hh`R
z`P~#i<}><zcW8HrbckkTa(^aoVa34Y@1o-n<q*Zd<o*uaX2HQ{gvzt|yRagwXY}{v
zLgfeZLirz=EiD-s{S)BoL3}1OKBIpc2S`05llxZ=u=;(X4lxcf3{38inJp|B82v8`
zLiu11GokSr{h#tc<)QvT<um&KV|9pihy_IhD2N#Ym^op5Hjw!NJiJgoIK-LI_>2K+
zj^`ZW98wvXJh&Y4t?d|C1JpDe;vC{Y0-(kdbATNyh|j>}!3E+o1~_ve^O*viIgt5`
z0g;ZS4)G2tj7%Ov4(Zl*3~T|B4h|0S4)Gunersz6mVgpg5TAj`LkPrY45;Ko<+lqW
z^O*wL`H}gI0ZSaVIV3nFGctLoID}f;F)#(ZcZhXJbVy=g^3ZW`v$4e@!W{5k*&)#(
zk&($mN7}}QfhFKQD~J!$0^&0UeBp)hxom707y}vkL3~Cg4-0-UUtZTC$svi6$-`IG
z)|P=KP@WaUXMpk<168<Td=6V%2F5^rX%L^0$s=4E%%3Idkm8WSz~rIGY;DcJ7`R>l
z$_Ix66B?f}@Bj}~9_mSS0mi_aY!0cQJP3&zCNw@{;A4KMJR~NV&;=NSY(yQ>9nu+?
z+z&FFn=>#51qwj<;DUk)jn5dA!~>OwmILSlj6s#m4jB#^ph65>JTV5<aKHpWy)?$4
z7G5YHQd%*g3or)FNuKGD>F|${$)nkAiGzbf2Lo%+oa7RROozXWOdefsbHQS4L311&
z95Nj;L1O$44h{|sEJ52@K_U!H9$gR-#-KfX=pv^CQAL=7PVu9PFa|wM+Ubzx@Q0Df
zV~$%l*gB?Qy`&U}Y=_?rOdgBfiX0prS{bm32?XmoX*gs%lrS=REOzj6aCC5HU=P-F
zeC3esP|V2WvBJR>EXEeBXXTLXkPQ;z1viITf?ZibA`DC(D<C3_!CrjmA`$$kB22*%
zyr?3K!Nrc|4ml1*j7%OoOu?2h1@Cfr<dEx7$iU=rK+VC)!HEH%5F=a_d+;uYl@7TM
z1&mA{#}vRCS%Y^u_&DS`<bi~Qz(Op+yA&OA9dbb;JYW&#;FIhi5e6oYW9(oNCJYhA
z;0s((HD_6&YA$e~iZBNMU~|ZG$OD-JF_{S=0@cMB!oUJj!^q@ug#~O5V~DV#L%u^k
zBa_E1h%V+3C3cVq1Cz%ssCzI(7(+C<plTjM-4mk8fhxin63pgM;7|Z^55(_G7$S@z
z(J(bo+nEp|P?H%$3RoQqk>i6gq?8L?q@EWla+n$FuO7HAhzL^%x(H*)Bo3%9XoN9g
zh%kmc6LlzdC}v>t*vbq}dyFB!`Jf`uw8w-Y!WhcM162b{Rv03Tp~|cdB@QK^Oae{(
zjG-D_7(zz8P@!c|`$O&F`XC}q7$S_JuKZA4uuQ~+Da06>=s44%)S-%z$>WDZl7p**
zI|F-YqGPl}sY4|rlgB@Y7_b;yXrj48sY5A9h{wUz!Igm}w2T!b!ocM54<f=CTFr+p
z(upR*6xzvyu4b{rI)^fc3PvVRUI$;WZA_sr9HJe{9m*M)JVk9C+#K8(@Ch-(Rk4M>
zU`5r(82XkAUF172R78RqY&K&U3tSgOgb720F^tO`q>GWsQ`#J=t6S8e(xH-p$&-s2
z93+fk3wR+SupnW=5Mc~k#{*G=@GYhgW7u(4hbo6E21KkdhMnQU5W2<-75WWx!DF~S
zhzL^{x(H*~OMa*>SnM)k3NePWIz>2CJG3$~d8RsqI(RyGGq8uVI!QTHJG3w|d1gEK
zgT>gwSuGu^9jZY>JPw`?o(wGEGOQpG1}4vJhzMi2A|JYlKAH$qxIPcM8c)YehZ=`w
zMkdcH2M4fiOyPZwVh*(qO$<z)O@<C$4qgoSgc#wf*u(oA?mE;uG%_-Ic4&h&vWE9L
z)H&2T)Psa%!9pzIeGY*RwGMS4A#s?HqC>4iEhCfXWFD{xbNF0#kO%{l=VW%U2or_~
zWB3v-sG3=<P&G?9P(>KS&u}`_LG0oLt6>bk&IS?znGCUu2_XVChcWygn?t=rJp+?x
z2gHR;7$S@jY%Cx(j7**jSs*4yNGdusI5aRac`k>T%p9S?4iaHt@>~w}1%?P?ggzHk
z%{r(rBJ?>>MHnL@IUE`t8bR)X1R@iL2xCMt8&nO{b|!=f)MUnp3RZ_E<cMXAsO3Tz
zY3GHCv@%2eH3hB<BEl4bF2Wcwivy|)8uLsTB8(AlL>*cjS{Rr-%bCHcm@$%(A1VS(
z#Y`9?jFEyoP&M!biYdexsm1Eh3TpqrGZJH@J{N|NB`;Jc1LguZxITyoQzW_wW26s1
zR2M8mGGPiaMrJrZb7*tuWn}U^=-}bt>)_A89+}~|!lBKfhmpzixPuc|j4d+5(xJ_v
z4J5?l;OpSaz!F){3KC&p@;nX^VT^3yLl>EZCc+dsi3eTH8V68kvzw90^O`Z(GN#Cn
z4oe(59J&~oJntzx_&NA7;1gnmt74D*=#cBs;n2y*<oQGvtdS-1qq;+fLkA<1=O=!!
z2y+xOJ4l3q$@3FCScC~fgfWVX7pmqb2UHCgH>wC@lqruxC&Vruuo}jwAWo17$Yh9J
zOb8LEIgC-+tPWksUSo_Z;6fLv;)RMlWQLmD4%Y<{VTwW*VT|f!gX)6%oe4vPG3u_U
zLytob1C!@vW^gnzMt$Okia?{02}6W2nu!Oh1{OmYB8<_}tPZ^ny$pzS#2Br>g(0NH
z3l%y7wLjV%t`8!@gdxHhZOaeU1xt@im_m%vk&a~!eGZcunY;wd9ReMK8Q7yE9W5OC
z940X`d5IZ<h1jAatsMFs`amMQ;9)S9=mJ)d2m_Os7(|3Ix|9!Hq?sR8gekh27gdBY
zdY(h8L%+jBMkX&cMX+T|(N7H=COAxBVDi!vatLw=V!$oJ2v@@v{gf3|7i07*E_9JE
zyigHCX0XYOF^q6s5D_K}5ylvH9*{0ZCNC2nsIGWXhe-~T7?`}2nZd!q7*oOr6@dl^
z6NU(5OfwHu4a}z)B8)L}SRE!iOlE+`24l=ZE_9LAyigHgnC&~@x*#G<G3X+UG5h$T
zx}cHDgdxHhbIWD7!xV>=j7(lW4woH593mN*V{Vx{OmUdP$mA6!4jx2gj(INz6M+mf
zGRM4U2Z=B+d4;iq)i7a*Fvfi2hpLI?f~xt(iz>nx%gPNENoRwoiDl(P6=95(ajA5e
z>adal;YOBNMFEGY4pSMJyaFHtql~e}>`)P?tC<iYP_r3hy<F@Zra7!&VDid!0FAju
zGBDv2V`TCwby(~W>JY)e9_!`&&taOwaz-YvYKOUCF}7GQONVI=(?CKz4xtXA3@ovU
ztRN8vCa-FU2xDv-AG$~hng~;D2@krO3C^Al(;b#EGI@16^n-0<ioNdi$zg`WQU)fk
zNe*=mVGiL8c*PhI>eyqiJ8gHE;jn~}$!mr~1z0a@>~$v_hZzowz+$OjF_zftPTUSN
z92SDbBEW;Ptg+V}7dp&vm=6~70*kT4UUw{TnBg!FEan0hV~xG;@Yi96!yJ&9F<6Kt
z_PWCvhZzpDK|;D<A&{ylhZzntK|&H>A(q(d+72@uW`IP5z#`1CFZf_0oG=kqkO%{l
z*9_>`a_kE<5ysfJoKQ7$S-`rOV&Af(iZI501Nm<T1C!T6h{;T`-(b3+B8+j091b%b
zW`gX3xQ7WL0#~EW0#d`s<h2H37h{}*p2IAMS&U3xn}or(Gsgw<!$i1XBCH@01}3jf
zP+!CaqlqxaMQ}mYY=^0d;6N2&j7#E%itK^<A})y&RfI9FpUq*m!)%Z*AmPk}A;K6p
zoeQc4>SiW{2-IZ8xFZ}6a~$S?%z;E96NU(5+&LDI8b&6s<FL?ptnDz@VJ;(+*BJq*
z-+!=zL>QR7&cOVIF2Wf1R{*N!A~#qUQ`}!ZR1wB_eGZ3t4)Z|nfuu4f3=zh7OCG2i
zsO?M$5va+G@fjQr^Bv}c%yEFEU?xl<#`q!@kSazduX|9R#kZ?EEO1!B$mI2y7wksn
z_?fIA5e6o&$55YPh%m;_<Athu!2#CA6hDs}RfIAAEQiBFhlOAlLGl?BrVwNNbxx=%
zsQpX`5vbXW3CtW0iyRh#O@icNCQKp51YQ=9Dn=%+pDYgH4&e-p2}(u|iyam-GI{+M
z1dA{y*s_8|7?`~Nvw}sKFhm#=oCG0iyjgglYMl5{MHmxGIUJTaECIU+Qr0kG3Na?s
z^FmcY?Pr3Ez|3Y$n9J(06r~hoOjyK)A+&}UDm0ZD9NvrxJK_2uB1{+}j0yWWpt@kC
zBon3(W1^_2!*Yk^3`}0_%-~|5F;R;jDgrI`nJ`2c6RmilYTzY0rVwLdD67K?a18~k
zc^DI;xG;oLc%ecSFc%cU^+80K646B%6U+Ibx?nXJ6Q&Sj;sVENhgA;i8JWCwEF5AS
z;uzQy7dYBFta4b#$mDHg1QudTTwvp{%3&2qgcm$x#FDs^6(qvI<ZT2IVNBe|hc0r4
zA60}Y@eD7j2xH=Nhc<`R4r>{iyq%Q5mN6yi89J<SSi`{N?IjGEUcxED2v@_Fq{oV?
zi!sTV3thyP7b@b*3^tiD$qTLvBEp0r!k82Q*2T!=9RQi`VoX{o>afmX9RriMJu^5s
z7?bu1Kt-Uz!Gs~gm~@^8ss`>;bP>j+7pxBJ9o93zV}mj2Ef>1TcV4K7KGgPP7Pu~m
z2or_~V=@;%R2MW-nJ`2clhvF99X2@ZV`TEqblB(+?~uyCo~-69?6ARMFC&w8zQby;
z7+bQMrNah?4Im*N@Z1?ovMnn}gn`LBA0on-?8JvI5`ZSclpMf=t|rSV(P5**9!4hb
zI)^!6+nAC!IPp4ca@ftl<lW}b<B$NF<-#Y%h)~Czyurv}lfx!PChzI|4haqk49v-A
z*+C)<Oy1Mk!6Hl;B8<sbKo)LdVDg^F0abH_8>$N`!kGNt@tnhE6j!k%f01$6?68@E
z$-9ditdB88h!ZLTwVw$g0y8N^*Rj!Ii^DDkChuhqIS~Kh6JuoZUhfbLo{(fu(RFll
z*y6C0k;!|jgD+T&B}La!*kOyq4zQRjOw8et!xo3_U@-@<7;B2IL%PEjhpiwn9k38f
zimrvj7Kbe$5qZ$`Bm;Aboit2D3?{-25@BHS-pUOYVM?(>6Jbp86o9HZ08``1hbqFD
z5((3FniFbHBqvl2RD?05g~MU1!&Z=85ce=4MBr-rSU_qRnY{0^fTlzl7*iH&I&5>;
z#>nLTSO_e_oU(-*B*MVt{TMopiXp<7vY!X4<{dj&7gNf9E>sc5l(%dS+a0!p+ye<Q
zCJYhAR2B}X8mR3|2ob2sjHw134m%unfXs1##0C?l5M!zp3rH0sllM2M&r%aP9CkYF
z1nYyuEEA>>V`?@VNEIWK_a8Q}PZ(31SRHnOQy47eFs8P1VF*p+g$iwA2FD0v>O8nU
zhzJvg2xICJ4yZ0z3S`0*VoYNdb=d2$mx0N<ni*VVFs4cILq(uP1`~z|W11E(R1Lf|
zz!YLkb76JZ=dh0fQED-!d2(S01@l6Ma$qh<fa`;ZFr}f3Fs7yPLv_JQKPF5e#<V8K
zI*0uZM;MuWR4pCS9Woi%)0!L|9QHdLW@PfwHU<l^r8U_&?047?65$0;bhD(*W(A2b
zF!^XhL>SW+@S%&W<3|-?N?XT^D#Dm{(xJoQfWsk1CLe2Muw_i?f<_Jp9S$-u`8bO}
zro?fIFv8War3<p6>S9b6<3blv;Dw5~L1yC_({<sxAR<f{B8=(Ad>~znOg^4`VD~Vl
z_li0kb~wzy<YU1M4i3ijMFLO}XmBuLh%lya=7p+(`xIS-G5sv7!x4ug4Di@sOuxj1
zE^>z#Dxv|i{Uux%M1(0FU4$|HJwH?zG*X!`L>M!;okSdtI-Fr-^2r3vojc?*uxD^P
zUUfL?aGH_HC*L8}A=@FBfh~jE(&4DXQIHT1NF4)9h7v1Cgn`K?A0on-q0WacVu~ih
zlwrz)uEyU{$>Es8DMltA(8vMEHl~cJ4(A+>JDg--@@aE$cgS(bVZbZKh)~C#G1XzZ
z!*Pcbj7&bg4h~?wEE!WB!W@n}9A{+mS*igRV$RsA2@{criHO5QgkU1<AQ1*8pQY?z
z5vGi-Xd;Xmdjz0r)^J1B?BPQdVazxq1QprN3srLlrVA><m~o#Qs^$nMRLy-(R1wBZ
z4he@75TA*G)i7sr3cy4Jz#@#9(kxJs`7BToB@U1X$QKa5GiAa>pms54TCzHvL<w)k
zOgk<NArD@tP!}`Q>`=HqhzL_Ax(H)tG#gYGEIybpg%~r}h&r5hIL*N1Q_T!cV2qgu
z`Jp1v1jd9R!kBrH7pexHb})q)GheehoN+kAfJozvnIE_?gnsctg>s-S$YO`<gNQI;
zh%jdH3P5$i@(L5C5M!2>6OY4LhbxRsJ`Wv|9SR(Z7}&G49M3wOb-2vP<n!Di7A(e=
zrDf@G*5NEjhzGp5f+fq56(qvI<ntUN!kFd8hb|I=Cc=~z0<!KbvaUQwDTi|oml&CR
zzB%}TZDY#X;&9C2yu(EXCZB)ykd+d6gc#wf*t51c^gEn)xWLHd%W47E$da|iA;{sp
z!+Ay~Ur80P5OdZQRhWo0Ohg<eA_Nm*2Z=B+`AV{bMVPX#pouVM-4=kVQQ(HExy^?v
z!kG0MCZf#=Rr8t$ss<{;nDvVrDq;dt^NSNzgfUxL#Nh(OV^9}ntMI@?c)%tzW*f0U
zMTA+PB9<H=5s)t+erL*ti$LvS%no36xQHCqjM<@F=pymF5D{M{W~j+Ia9t1)rfhT(
z#_S?Cs4i$^Fky%=W*-)Hxa@G5fyw7HGdN)}X5Zk4ia-+<6NU(5_6uI98hDz)6k^O_
zVs*IUaD@Spwi$ESxiEwTd7(m2pf1RfgX@EcFky%==BNljb;0ro6Q&Sjj-z9%!&Qe{
zj7+}%b`B*DWen^&j*e~)R~>FLGWmvDfQ8s{9Bmw~I$Q;bK-S!_<V3N8L>QQSLm?uJ
zIq`hxBDwsiB1}2Cyr?3KIUNqY4%ZxRFf#e3YJe?c%DG_faNXfL1CwvABxF$xP7y}9
z8n&DZtf;yebFOlsi`?ghiWD$|O=iq_1J?x+VZsn$%=sh?(#6Q+TPzIGl^Z1LaMR%?
z1CwtOGk7r(V{W<tR0J9vOc)}JxfQ%nH87uIh%n|(Vs*IXaEk#R8;rTrxzI%x@<K&|
zV79M=>w<_d<)Vu)=57&y>Vifp6NU(5?nP%0huaP>7@2%$IIM7}aHwHm&b?^maNFTF
zBa`n^0f!2Q3I^ufuk0WZ1}5L7>|hZl3=ziMKYUO%YdE25{_voRFy@IlGdtXIc)@_M
zjU`W7-r<hJ9R?=fIUHbpjCnR(P!Xv8Ob8LE*^GH%PTL&rIy`4!^4;dp1$H+RJ~2in
z-+d0%4wVko4D5MfPNfca9iA~V`5pnS?sBMRV9N`$bhztq7bFB(mBf;l%L)=<VDdcz
z5n;?L;zJi{KoeogYv4gwGskhC!##(mj7+|l9MZuqV9I;qnC5Wb;Ryqi?`?-L$QmSk
zVvGoN?0HWdwH@v|JZ5C_ec%uX*2|jr#9@ZReTRo2F<r0_OWqTQ1c&<$4?se4Fd;*S
z`wsU(A`)N`=De>WFcHW~DCWGc93T+}Cf^4fU^Pq_B8+)|d7x@uutU}S<w6x<%;)5W
zioEB9sLAK#L=|DoH{o!2;P3!s7sNeG2ob0*#(X;#kQzoN-(M_Xa~She*&H4^JOt^2
z_=^ccgfTyt7o>)f$&UfDE{rk1+rii2k;5ZKCO>{9utCiEYvo`fk}wetkO%{lA3xOd
z`D@Wc81uJ^LDh&0f^{+FZxulmVaz|n4HeOVdHxJ1st9BLPY#F24v#_JfW#ORh6rN;
zGZ#b+%*{*)5va+G1#+woPf$`4V}UXkhLA2VROl`<*wu^$R&ad~5he@~#sUWps4iGa
zW5N_-ESN6p@XX;E1C#FsX7GYO#)38cP!VX>VZsn$EZD;fRRhlzm_m#NH&`8>gL647
z_c9jT<-!np&I=Vf2y?*~xITyoQvtdNW5F*0s4iG3z=SEpSg7LI=<w3v9V3&Us}*RG
z90PlyildXmONY0NOn%-bU?H|b6&r__4lh9>yx_%cEQPkLAQ1*8KW~T#W1$ltx<~*&
zst8kI057TtV_~*Kr^73UH;hbv(JElem<l%=JG^#y&A{ZBEDBjAhf{<Ru7<5}Gb^et
z#=;$3=pu)Bp(1I_V3QdO&%<>=M3^u{7z?lRgLE-6`DOA$bQKwjI=ppw%fRFp!3+)#
z#v(TXs0cJTm@q^bi^6%KYG6La5MeATWOaDw@Qwi<8;nI|T<9VVyigGjnC-oAT@Vqb
zB6JbPqR9eKUC>Bn!VqCB+Tira;l0CeMkc>5hi->PhgJsWq74py4(}b_Gcx&2Qw1;X
zV=g);4-=7siAcaigkd7=AQ1*8ziI4X5vHPZXd;Y7R|TPJ=JG(*T;)d<VJvzE)3p*}
z4s+2n7O0w)EMQ%XMX#7ZB8*IaYnh-TZv{Xi3`~9-xWOV!MQ`~~MHq`YojM&pfHp3`
zJ<C$eC+6_M;R6GcUmwIa#$q)ds0h^eOb8LE*^I?bPR<S=9eyz|`R#Uy0tXutJ~2in
zzrzmR4owa%4D7{DPD~CT9ey%0`JHrd1&gs2J6Sq>bodAo;sGycWGRkh1&J^)`JIG_
zFc!!0p^N08i7*xC@Sv;daP)Tg<nV)$$?v*3*fOT#3l5(hK0AD8VDfvQ=FsfW%z#gb
z5w428_=3X@htCe*7@7Q@DS$Py7GH4ibNKA=1tcT{7Gf#Bpa?P_B*Ft0VJ^PU4iaHt
z@_WV(7Gc5=VJv>e1y%Ew6{_YL2dW5Ti2$3!7l$t(b08)&Aw;0M7)vBrKx!D7{JyY&
z&0#Fj)pGdi@RgCt?-xWDbBQZENQ8mO?-$fP7$S@%K3otr{)|xfl=yI<iZGT`usM8l
z_y%$h#P3WPB8(*sFf~xyncyNYlNn2<vpRf7jt|C?Ib7%>%Xpz8kC~zV+6>nP5n(Dp
z7hx>f$pO^`jW8w*5ynyhQHP%nKN*<(t}=tu9%HF0KU4&o_Lwk47)wogp=w~s3PXgk
zG?3Nd7dVr^5<g>U7#D_60xwkP7|i}$xITyoQz^O#V`;GfR2M80F<}ZZmfjI{`0MbO
zfyrYgGk9YZW9df$s0egp6cdIBV;K_<R1JL36Q&SjnIyBrKhQ2!_~tCeG8qn-5G%yG
zG8KNP2yC|&6Q&SjS&V~^BLjHvEp($TOIf)nNQ8mOeG#*n83SWkj{uYp-gnD{#%C;>
z%LSE(ZKK5yVJths>d5HG$iU>U4_%FlA;MU8SICjskr}Zun6d1SleQz9qc8)Lf48GJ
zXn`gJTR9i2Bby@|1C#$W=-NvR5yo<Un3~xTHH_sVB2ZlmAnP-k%cVGBBAk%bnB`LJ
zFcEefB8=tAFq2opOg7+w>e|Kw*2P%v?0Dai-BE~v$^VeU1F)-^u!ymiJKH+4JF+t}
z`5#wx=y&L6U@A|Rfr{J^0gEt~C$ob@7?}KTu!BVy%d<qGBKLX0BFyDQFg5pKYARWw
zYM!xz)i9N#i!heAI@&sNI0`T_`M-CF0xj)iU@mWU6msNn<Y#2^|Ks2b7Go`6;o#xO
z>Bz;%6u=+?7Gf!1A@9iP$O#e=0E;k}Z{Y@sFfau$aDzpdFhm&3_p?LQa6?y{mhWdp
z6=5uY!sf{3$OSS7Vlop#1geX%{0$RG4I@*45EIxg#`2%Mj@*viAYBj_GGT}?Rw!yZ
z@;LG^G6jgrf^{)f=*ogb7~mqz6}nt75y+ZZ#tL&GkO(7FfV>b`7juO<H%NqmDL@|T
zQw$Nt3MY1`8ZCCHE+-b42n$$*vBHfBB*MrPpa=CuMWLJ{pCcb5Q-C?dE~biFA&>|I
zvWNgo1QI@s6`S}S1snw!5HZGtDa2TD+{RJRQIL@-z}LuOqQgW6ri$C@P>~3Aun2R-
zZ6TP55Lkq%;<f-tgn=m_LI5gqp9d-u!vhv!tavL570D6>i!fKb<%Nmxf<+iBez8ME
z%GtppOc)}Jl^jxzLXJX=OaaZ3;Pt`Gl^onK5pI|WJ4l3qDWI7hEW%jH&jJ<cVgZXV
zVTdqR3iCnL^g&i9Ggk_8z(hE}x)>{^S)n4+SivGp7$S_7dXAeNMIDtGm;zQhJaL%n
zFpq(y(uUnp)KQdyDPRk9r7eaCW2LhIRLyS4`dr4!7{>-jF-JuPrhu~!2f!vV5fHoV
zu+3qb!(0YrbucmJ%1nnaM{!4S2Bv`P4nYpn9A+>u;S*zI3b^Os>@eM7Is;Q>frB4N
zFC$aHQyZvIje`?NhygCdTv@{f6X60YVytX42Z=B;1-v%|i!fKV>A*zPU?M^=5gxDz
zW91AfkO%`)z;7wA2y^8O9+(JB%@SUa2qRM<J1<xbW924pkO%`)peQ$3gsE~9CrpGB
zEW%j%%3*_}q@x@IQ=pzhw8Kn?xeUyee|Q`v9VHo<0!?{93sV`GFhm%uL>y`zr5t4$
z5&BrFL_{2=9Hl_|_`v#@tE6~fB2besL>Q~on4oGLnZUXjtF$q6p^Gq9xj6VbN;}Fj
zFa^3exPslyghh;{%0=8!+EJR3DbO3b6t*gW3napTEW!a3fh>+?tV$7glyQ_{WD1NH
z121Z2u1evCiEzV2*g+x;Oo7qtU=hZuY!;|U5(`*_2}6XjDj#eP15;oc%$$4<sID{)
zur9``awe!q9uruE2}6Xjs)g54799NLJfP*W3`|wstWc3UR<H<T)eC2HM-@jS2ByGC
zPGSxV99A>1RefW3RB=>cU<#be4p}maA;MVomkX+92^UxmV>P=tRAikXScJKn7iP{n
zs5uxSjMXAAbGE|FQR9J{bDRfk4r8^Y(?ds9M?(gtz{`$T!ER*2BF0{AY38WvsLIF`
zctaVoWVJd%3@Y+e3??E15@BEpd@2GJi4lN`yc7V7Fjkj1L^`TDsxdMJ{&$D~Em>t?
zt}c;*3CX}j*g+x;Oo9K|!6Ho6C1@gy)zzX9H9>5mP&L)UFcD#}2xIjG8>oo14OoPw
zdIAef1iWCDfw6ju6i9@TDM(%ltcJOIiV#SIfhkB{2rR-_y^I4YV#om&VZsn$tX>cG
zMUWND7wci>Si#IW$OSdWhYM;Bx(H+SB}X|&bw^D`rl4qteDKm+*6K?RxsK|N>L4+D
zun=?ge-)UB3QU9@B*MTH6wMA6VXFR*Cc;?5CJR-QBnwef!zK+Akp_z})+ob7>LDUb
zHOi7uHT9BEH7*V*jv9^{j7&jGA=We1G%JBb7?^^VDuER-)wIh&MOMmzMHp+=iaTmL
zYJ!{y@dgt@1a9;ZZK#@A24Gz*HAh%rA}nAL#+nmsAQ48Upm}Uik@NB(5s>XL_n?a~
z)_isFbJTLwVq^+B=imfcoLtLq3>CU-3>IOo<!1+pFfaw(We1BeVTdr+is?YrJkbHG
zVW}14fr;>dMHp+9BtasKOhF$c!6MAHN-Q7|2Bx47EMO7FS~XFq$QMzt2y?9(7fgf;
zEW%i802BEK5n;j*VXU=b1?ggB3g%*k>hf?n;Hd3rz{nIV;?Ur*)L|t9bFGK5qqd_q
zBU7-pICyC^b8RvwNQ8kYSep|p!h|8hSewHKRb#>jRg=R56X5}iFxECWbU5lb8ZaPi
zW2tQwbJTIvVPFcD6acGYuI=W4i9nZTV~8-;PKK#bgs5Sxoy!H)1$8wOLc|1S|3-%Z
zM_osK2Bu(Vhd{7znQHNfF){^vI=DG3b6CN^T)S1qQP)wIktx_$%3+zqG6v?_Z5$vG
z2Bu(N4zLIlh6rQrNp`531a_zzbP>kdyV8z&j(QAC!5QjcyO?l_Ffs+_OG1{E*FF&j
z>0)FGE)xQaFxNg~2Z=B+1vj#TMVK%|7;E2gK-H9SK-Hj&FxK(%IvP3}GBO2E=YcHL
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
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

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;
zt2W_s+1(YVUfF%{of>&&!`#W+o)o^DU2`_pfk#(lsq2QL%3<p^&OT5VmdJM5%g1L?
zxH#jx&)tXlx>ns3u6^)GIy+juza#lTlIJU}TPC|j1+-Q>{Vt4LyIG~{o7q?Illzn;
zHb-C2W(;|vz3X9pjMCQcqPcgD?Mzvzv88nG{i>AqKv{-xg>BRQ`u7C{hEzy!to9b>
z(DBdf$?l)KWW{I3n-b~QGJ|#(SZUndyKSl7gDI1~o}JEp;KsYYGQagM7f(A}Dl(ku
zctpcTcl*;Ylht9YW_!}VFx)k^V5tuGSad<U=RMDTzO0_>t9>^6B&r5@*4SEe2StW@
zbv;#;nWVPiSE=DnlZWgjQ>O?Vx!PG~812+*nRcEb^m;>ZmD!djB6ou2f+Vv7Gg{g1
zG|%4|eXZ$ItIH|9%^O!vNxCz&v*9mukXF3RI+g$}t*NDx6xOh>tv;VETOVB-o4QG?
z;r_bJiNCkHnuqn>T%A4V|HWOr4^H+j2(Ak@iROM25gT^)VWIDF8Kaw;t(@QUnclA{
zJ2v%f!Ttk$`fNtUYM<C<ZDuk_Km1o_KHKBDThwNh@wr6aP+D5u{af<MO0f?y3$D)T
z-pH}z=D*3GQsaI_&SXEPeB#NTOKDusRWHTbw5+{)@UyFD%oC$iMP8g54-d0)dhRip
z=(4j+TZN@mU1W`F^uei_n>J6qxgx-5fy&0IXVb#J7)Y`#wwC!mG513wPv@eJTOKLa
zD>PYS9$JZNl&f6gyXfk;DCg8P?(HcOK8n`P+uj_?QQob1_sw2qjePzkx$kx)X(e~9
zikQ5zmVNs>IXRzaJ{7(JZ~3^7++47mk^Qb^bGy)8&u?6h-aJ|mxAy8<59h`oa;voi
z-YI@OVaIqRR>qJk*X#V6A6M_J*GRE{WzO~Q!y^wq7U%YT88O)xIN6s@ao}^znsiuT
z&%Vr(+SzIoW}PZo@%Kziij(=PYXawYILy0Qea%I_AVTEgr@Px)p9pDQj=U2b9=g2V
zYNe~*(+hieJoVcZc1<icn82#xIOl}ui?7-ri$s6u$(HVQSjTt5izS%9K#loa&GY`&
zPihTYg_73F9Flr`D%2qV*hbySub1DA{MdTSVC{})w|b^q|CqIWclqm`{^|kZtR)lA
zWlo#6r#2|G)hI%rQ6u%Lr0E+suRev@iw`WTb-jFjPt#qCH@;fGc6529eOu+SCBr0U
z{_7yKV409o;gqh%UmjU^mL3;4%eH7{%-<^tCzmz52%E$|X1M62{VKuLZJW;FV@E!E
zIJvzQJjr=vLi)Fp3vQ+eU1K`4j#E4>#$i>qVBGcA2c@?9spbxv#qIW;cRF6(6*<9j
zPC<K;)`u0zdUtv<3%KL*SUsPZNtC3|xq4|zA(vFxRxb%(i-~vos_qFg9iA&_Fk!bq
zYPs{2biOTdo4=jx+E}H<bmY69S?1$Uav@LS0$O)_DShvpG-2vpE}cog_clym-xEF2
zhNExx&J-<AL6se*KNZ)U<o`UYN6V&3>&^p(H-Vau!?qt+I3!dlqjcw?%Z&Nq6PJ7L
zyr<Nob0LeVn5Di@(Vt!R_S?Uj-TpV8NWM6c-lUwq)y!{^KzT?`Yuj}0ngr`Fk^4;R
z4CXT^zbTjNw2}T=$@ju|_tu&9yJMQ>%vDJ~dwp(W^6rJ<Z-1`6_~PNbyrcUnCOuzN
zcK)#Wq_etvQY<#Ln_ix@@aAo~3cF1ej2mWbUia16?%%Rad0t$4S1%rz_RZ<b_s0*L
zJ}do~tTfE}EOch^GTXzxJ<bv;vp;)RX1S#6e=>4;e|q9;ZGn*N=*Etuz7w-17p~`F
zbWvG9X~O0yDXUJNSY6p#&s$WlTQ=iEptDc6WNO%AhxtJrk6!<NU13-h`@JgO`V-rp
zdZm=wC7bpehTOa_vg%EKo9Xfudsw@=Jnp@kK509vcjxnme(N1iJ~f)OSN8NjYp2xz
zbMH95pEQZ7(melp#-Zv8_hY-iFFN(Ux#(K#$G$J$=3S7``1tQenf4_9f<E~pE9yGR
z!=8Ljj5GQ0PWi;g#hp{Gr`7yEd3?gF#{$bk7B?ytsAa47EWbJ-O_EQ^t}(|>Q|)$8
z?*Wk%;Tl8r`Aly&1$Nt=)&14OviNTL(m4)x?9-ml-FklU8vTNdULVG_vX>jgwm<H^
z^Yfj^XVrH*+FneYV><iCX@+UR&flgcoY-VpFMIG~D9iEdP7i)qy_fKJ+Q@ss>xuM=
zljh9HjtQoxP2Z{AKQ!~f?TVj$&(~g<@FzCq)82@bTKguQ^%ws#IDU0rfAKFzq|M8O
z=f~?7|K^lWt?QccZ)W?;`PDQ2u}+ui`k-IgQs4TfzPDum!K~_sSFQ#d?hTTS=B|5v
z@L##cm+u=lh@X%z_}IVj=Tm<{`41DipPaw5WxvAh{Y`z6hoY=n^&J?0*q^?2pXr>~
z$@@Dk%R>Gg-1>d1%KsxiKf|w_*7KPg``=CaAG6t+SgB%zRWDj=FF5N4^qsuwbZ4{F
zz12}~EV+N`7c9>WV0vb1S2nk$bGeoAuLTEq)<lSGa$LaFllr-8kxJbY4Uwcoxk=vd
zd@t?IY<Dl-u9=$KdbNLj++V*3zqNN=?BAWqb^hrDlebBe(`w>>F)WNsnEEDsOWk+J
zb9Zk(eEX*7WBCHV3pE+G%9qyd5OUnzykoKL!8(^}=cmfIVl(7-^qk`m6R;9~=#}oM
zcIoDe^OiqWJ^o;<Y9)Tx{dwox;&Qq5a$#4BJk6Aj%gU-&T;9YJdGIs0RlLvB#xDuH
zF8NnqM@629b}ZVZFv(0QmP2vQ{w0DOcfQ}>7cAepL+22aqxj-oe;W^pe`4Gt-dJx~
zb+?2w#BP^}{_>-91utB_D1G|TD*0HswRIx>-7me?$o9Q<;&ctawK3{wBpcHnE3*UX
zElhjZ;>G_qta-|)+3~hORv?%uwtSVnG;@M2Q-U)GgR~`snPcM8*>`vOo_Fy*&-A!C
zwsoHDOJT{XzVJ&g#oqldHe7wadDcW#_o#p01helmO87}%*?*$%hUUC^{8Ht+>-ILR
z&j0=1X-iMVw7{5KUHSDEeBLDjIg4&HG;&Wfb$aliC8uXoa%s!^H$RRmF6a5_ceC%^
z4aRp78%*kw4_=yEE}nPPHO5-r;&4Ei(DJaZx%+Cj9o)^JvM}H+Ut3q-gM_TxyW4Ny
zmQbt~RQ&D4u~Q<QXP3QE@`XUV<PU+3at^J0$J9<QWLwN++ta97)wq)-@=bY6#me`G
zPFt+gbH5UQ(PI5Y=@&clx{lX<(b^LuYkn=jQX`$meoBqW6z6-K{{oNs^8DB%G<(nE
zg-_;wkX`Td@Q3n?ABz=_ufFp|>r2)u#R(-0mkvEWyMM`@sCK2ZJzsg}iKl3siLxvc
zTV!hTQKCXQpY6NH6^FaN9+O&&r9SYoMJ%YuaQk?{=Yne2^3*RZIdNAuT)gdHwTS=G
zZ<QVYRCbuIdaQE&;^#l64o#QVKfPpYR&29<`d6zh6Yicd;rBTarB|@ce?9lcLk&x^
zzpXxzvpOgD)`rSh#$R*O!akffetw<vOO>Hw$q#$$hOmm}8S{A8PN+K16fgLr<%^r)
zWof0y_D3T3tV*2o+O&?PB*M(3puuwgN1^|pF8*BCu>V<en0aU9o2O-8Y8KW+`p9ly
zsq)8;(br#P*^fm>{@c2#rC-bbHr-d@S=#;gk>A^;=6(?~Y~SB4^+ecN);}mJt$)`9
zTZ`#&eed>}e*01{qJ1ED#-HtvpZ3i-=a+ZrZMm7G;5&vz)e|qqo_L(M=Z>(`#M7MJ
z@<%)S@7-Qv<al^_@r1jzCtlX=u@P7-zL!a#-z<^kX#2DY7oAT$PTXT7bo|9dhJLpS
z_Ojy*BK{pOlNom$-e1$sT=u12`2h3X{|o`%>>L;KoibMNGB9{)Ffat*?BR(pFfbIQ
z7U!21C8z49q!uR^WfqiV=I5=AIGZnHDpI~l{^T;xDQYIJUQB_;u3t87zNwaViQ9Ei
zW5`;qkE(njhpb<p^qaZ<*1UI1*j0|m9%Sug7C$#<r!rrRg+SjQ{y&U!4t(<~D^GhP
zdH#}ZMS9uaKXrBQzuUc;|BsEg>7ZxB`CBK7=1y2p<`d|1TVkTZA+fA>4&nBIC!3%1
z3zRK*y{ExeeD8dp3U)zmYsFHg|0nm`-=6>P-_>hI422doJbupNLDmQE#eOcboc!&j
z<M$1h<rdBJ+)(;6FNml1&~vAKlYX9TsCwsqrO;AlKR?5aWQ+Ib8$SPgd@nfVqUH?o
z-Uqwa@BjP!xZs)m1Ba)x6`#Mu{+(?~Te)wsg-qW<qZ`W_vZETG8}4NPVEO0A#rEfl
zO4ZALKG^wP?~`Pj_n)SN$AZ7rTR(ceuh-C~{)CxW{m<v;zVAOMpOx@V<VxpfrlX3+
z-nkLam07ttUAV$7D`;l)CLYWAxO(!@`^_mIINEw!_t*U_{k*wbYKA?dcOJuU^$Uv_
z?O1iK64WGF^6dHU?_&Rvp10$~vC4lgj=dJ?B5&lrD87<gyx6*Z@8NlOUzYb<9iQ8L
z?`_`m2Yhej<d1F?cqH#NuTkHjR;qF?b5gwCmzznauQ4Pw&2zmoxv;M6pj|k}(Z2d?
z-7?$zH@Iv&CUY>%<Brq8Wd&V=-xVC&UVq^!Iw$eOS4G-s)5Pg(6wfbP(71+S^L9~}
znU8;+aFzR%>1S9U`}{B)>sf~jg+|LYpP78tl46qi|Lnt!|2ztl&pS<dvEuiI)3fzj
zlTucmoKtC-{!i#=HYeBOGY*mJ=d2lv69q0BEb?J*3NC(rB<7e@^GkyeDVZ*V{^-s-
zVUMbm-&Q#9isj8ukDX}PB$UMIyxg}?HKpuaq?6;{><!1$HeCq*5OLk}W^LxC3dXY<
z6|H~yI16*qrE+6Au3tT}&(2l*XPfEQ^~!4UktT;OY!yto?~%DBck0DUDq5`jmziy!
z!tr|BW23aw%Fa>?XL?AxAM9Q9BJkK(mE1fLxAPT`Gqdy(Qg-J|f5SfSmDZVfd+Dj$
z?9@5Mw6tebhCWqDow7gZO@!+U-Dj8mM7cCBCk2M~RfhJtgzD+CDIYR-f6MHA_Gkse
zjy=XJ;@0i({q$7p;<@<z4~hN!Z1Q=Z9`g2b&EED(h{ySw*wVLJy#3Rjvau{x4_nit
zYyC+#FDfW(-ieUv6^VP+>{`t#=`ECh-T33Q^r+T<D#G_3FDY1UqxmA??6WojtB6Ip
z{(&7&TMKozEfzTaZq=OjF13v@2G{E}XGHtIkC`pq{j<l|ta#DFqoyxXmx@YUbP$qU
z>RHbFtIk1jD$CBY<>7Ij>r($lT#`{UkX{r$<KT|$UuVM?X<dK5>RD>0;j=ed^V2z|
zpY`ZmD!KNjJwKNu+v~7tYL9!9=NqeavoBxpe@~?0{gBNwi~=@ay1jYpb5G9LO-$2|
z`>fKPIVXh6IIL1q=H-gzt4lUn)$a|BbDEj#v_eZ_X34_&FNzmx_Y42~#V)V+BxAXC
zn5&=O*?-1zR$&vwKfIZCHh)&_rnpt7N*@XZ=e;gmoV0JoTct&vMms~B%2!8StlNB|
zr|9OTbCsKOSS!z7Ig|0JW`|)OfA8t#wI|Es!#9}R-<r8AC9<ad!Y`S5p;=ua&+V`3
zc3iPK6{aD4UiIn2B4badXkWjZay*xxi~G*jQHqW+m?y3#a&o4R{*JBM%S(!NKhC-r
zuDSU7R=o{n-2vip4p-W?>x$ibbYjQ(N%vnU9$)2^e(hB3_9Kd)4$pb(mZD&LMs(}5
zNQYY~r)D|^Z)*KD!Sv+H-#u9|k+WEu+?IdJYTbQq<vwFyp0`$;bgoaxd{p-Jed5&L
zw=U)|q=sKr%0Bv^5mZFyPU&VyWMyFJkiu6)g9hOei;MG<GZR52bMe+0ud_wMC64vK
zUTS!3gJ@^c65XW0<k@#`-ag~e?Y-JDd+%~x-bH=87f0TmZLFSlD`?{vr9~QDfm6Dc
z25H^P_~?ApU+h1Vy=Ln_&VQ_Rh2K;KzJ1zbsV>aCJLU83=W{;Wov%FKQv81DjQ7<^
zHv^xy7+a`$KRtNf`)YDtVfW+yyz*Bw)vdoBJ?$TN^vE2+jVClkV(#C6DH^N);mGaa
zSts+)*T3FhKmVI-jam4SHkb09&qUhiG_9$OKI&xoYUjU<wJ|)eq(3kEc-i=#=)U8J
zuPbR@Q<>CRqi{E?@W<?3uld{NYvnzi@cQEVya4{Ibt}WBCKVo<k;JyzL?X2-beTlz
ztk7kWscoTY5~<Td(<D>-LZ3-2J*nmEmbuZZJMh+;OL<}6%-*&v5y_spcEXb_ZVG=M
zKUyL%Ir_6g?%Cjn+FSJRS!rcW-@C3Ru+Glt<NpKJhKjeORi5;l|FtQ6deMI7PQ~^8
z-%Y;#e=@~TGl_HY(Y_P~SNqG7TVDKIR`|^1pNamJ$Q<{pvgcRs*z{GncI)8<K|Cgs
z$M^*N_W4zQI=A_&@#c^7Bu-3b-J@RP$u)0@Qbkfm^`uK5Ra$LcKC*r29rQs(_Tc0x
z+tf2<{V$!EoOe%np9-tLk)VxdcJ-vp&n`R7l(TZzGQYTTZDa4vTRe8}c~0$a|K8H?
zeQ<J4%O2xfmFcCQo;|*_ZmsjZ+38l5O7AP&k7?zF9@^#mb*f3PS@db9=#sY6MkQrU
zUgasJyOg_kEuMbg@z1lc8;(0U?oPb=t}iCK++g053F?IqtIu%Ed$PsWu+*<7=8Ev)
zIq!}Htn*#U?lV`;An=}dh5wHoA~qY9p5$gd&wcsi?D3_sv+oHv&5!xcd2s!bubhT9
z+NZsqaBp3uZ@c`+nxc%h)j5(jF(nUub*v^%e`x+~M|<q~wPFs>;?MZ;>K4Dush#@x
zz$HsQoe~+Hr_pWi(^{u(RF+|%_N_4CwG4aBrdwNI%Ko2Lc5j>CJ+o80`@gsJul}rc
z-TZ!xE61HM&KgzoxqhWtoyAvQy5_BRITw2UM2%{>c862E99Ql?E5oE$m+vj)UE#kz
z$>+E3tg2e$lXqw6m4E#;rOEtO)BI;vH;SLm2tWFCO@?fpm%xGFNt4$VUR)O?XmaoV
z(~mYS_m%fZJq&HRuJFh1AuGpv)jy1fm|KK7>OFRFKU7JqV4bYQ^Z)-jp?7XKl>P`F
zlIF;F`H_5RzQP>!J(3UoIln8|xco3~*)DLe?}OQ)-2(R<EA$WT=B)4hVDNCg;J>Z{
z{X@zv-<9|DZ)pC&c&M<2U(l|nU}6F1L*<s!9P+9$&O4kcI1iN`5=!j<U~wq9WxuP1
z!XMj1_XX`*KX@LpSNg;JFkawa=ZByce_^}s50ZzT3);E=P&y>e5%2ax=%HPUI!C<o
z53Pssg8Te_s2wur_}}*-zh$~|P4|cS9RD4E@EzLDdEfnq-oyO@bq+ri57oE#Z@3OB
zf@UWM7JITVF#MJW6+w(lA`Bw%nE>P#B&ZNVnixQv7YOi1)rnlNfm)adosW32w>QyE
iKz0|Z-L1k549LY{fHx}}$b4o7W`=DH3=A9+ARYi0FW1Ka

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="&quot;1600&quot;"
+        hours="5.0"/>
     <table day="Tuesday"
         room="EL6"
         lectureType="lecture"
+        starteTime="&quot;1215&quot;"
+        endTime="&quot;1400&quot;"
         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("&lt;", "<")
+			.replace("&gt;", ">")
+			.replace("&amp;", "&")
+			.replace("&quot;", "'")
+	}
+	
+	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("&lt;", "<").replace("&gt;", ">").replace("&amp;", "&").replace("&quot;", "\'");
+  }
+  
+  @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