Index: Application/Ringtoets/src/Application.Ringtoets.Setup/Licentie.rtf =================================================================== diff -u -rac3874de50137d233d2549e0bba66c7e9adeb33b -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Application/Ringtoets/src/Application.Ringtoets.Setup/Licentie.rtf (.../Licentie.rtf) (revision ac3874de50137d233d2549e0bba66c7e9adeb33b) +++ Application/Ringtoets/src/Application.Ringtoets.Setup/Licentie.rtf (.../Licentie.rtf) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -1,6 +1,6 @@ {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang2057\deflangfe2052\themelang2057\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} {\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} -{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f43\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;} +{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f43\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;} {\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};} {\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};} @@ -45,14 +45,14 @@ \sbasedon10 \slink19 \slocked \ssemihidden \styrsid7675473 Balloon Text Char;}{\s21\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2052 \sbasedon0 \snext21 \sqformat \spriority34 \styrsid1010843 List Paragraph;}}{\*\rsidtbl \rsid23861\rsid423640\rsid488029\rsid602071\rsid799973\rsid984897 \rsid1010843\rsid1055020\rsid1135803\rsid1180769\rsid1201894\rsid1206572\rsid1391986\rsid1582918\rsid1604777\rsid1800570\rsid1862769\rsid1918796\rsid1919364\rsid1920386\rsid2112962\rsid2185294\rsid2448324\rsid2521833\rsid2575490\rsid2649997\rsid2703580 -\rsid2906174\rsid3020322\rsid3093214\rsid3172558\rsid3241544\rsid3298861\rsid3426710\rsid3474088\rsid3612330\rsid3686156\rsid4150084\rsid4392039\rsid4660570\rsid4666693\rsid4733976\rsid4742281\rsid4987021\rsid5064623\rsid5267739\rsid5457331\rsid5593428 -\rsid5862844\rsid5910193\rsid6122838\rsid6624093\rsid6822061\rsid6904447\rsid6947589\rsid7168476\rsid7414554\rsid7633723\rsid7672292\rsid7675473\rsid7691196\rsid7754690\rsid7822308\rsid7881760\rsid7884431\rsid8282417\rsid8336808\rsid8355315\rsid8415516 -\rsid8471656\rsid8613675\rsid9054218\rsid9251590\rsid9259169\rsid9259511\rsid9324301\rsid9447286\rsid9534683\rsid9597286\rsid9837452\rsid10041733\rsid10243997\rsid10641850\rsid10645519\rsid10889275\rsid10903480\rsid10907227\rsid10959533\rsid10965045 -\rsid10969153\rsid11011627\rsid11234572\rsid11404854\rsid11541481\rsid11547836\rsid11865015\rsid11875882\rsid12255994\rsid12391384\rsid12545017\rsid12603449\rsid12614763\rsid12714335\rsid12780684\rsid12874015\rsid12992049\rsid13187850\rsid13327662 -\rsid13378822\rsid13521383\rsid13526046\rsid13526234\rsid13707436\rsid13846203\rsid13923732\rsid14042855\rsid14108769\rsid14562082\rsid14624369\rsid14690030\rsid14697806\rsid14769386\rsid15038976\rsid15292511\rsid15341850\rsid15485484\rsid15549573 -\rsid15599413\rsid15600639\rsid15997769\rsid15998385\rsid16072365\rsid16073068\rsid16086011\rsid16536768\rsid16612758\rsid16653078}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0 -\mnaryLim1}{\info{\title License Agreement}{\author Deltares}{\operator Robert Tangerman}{\creatim\yr2016\mo8\dy4\hr11\min47}{\revtim\yr2016\mo9\dy5\hr9\min45}{\printim\yr2016\mo1\dy13\hr13\min29}{\version18}{\edmins23}{\nofpages4}{\nofwords1024} -{\nofchars5838}{\*\company Stichting Deltares}{\nofcharsws6849}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\rsid2906174\rsid3020322\rsid3093214\rsid3172558\rsid3241544\rsid3298861\rsid3426710\rsid3474088\rsid3612330\rsid3686156\rsid3952517\rsid4150084\rsid4392039\rsid4660570\rsid4666693\rsid4733976\rsid4742281\rsid4987021\rsid5064623\rsid5267739\rsid5457331 +\rsid5593428\rsid5862844\rsid5910193\rsid6122838\rsid6624093\rsid6822061\rsid6904447\rsid6947589\rsid7168476\rsid7414554\rsid7633723\rsid7672292\rsid7675473\rsid7691196\rsid7754690\rsid7822308\rsid7881760\rsid7884431\rsid8282417\rsid8336808\rsid8355315 +\rsid8415516\rsid8471656\rsid8613675\rsid9054218\rsid9251590\rsid9259169\rsid9259511\rsid9324301\rsid9447286\rsid9534683\rsid9597286\rsid9837452\rsid10041733\rsid10243997\rsid10641850\rsid10645519\rsid10889275\rsid10903480\rsid10907227\rsid10959533 +\rsid10965045\rsid10969153\rsid11011627\rsid11234572\rsid11404854\rsid11541481\rsid11547836\rsid11865015\rsid11875882\rsid12255994\rsid12391384\rsid12545017\rsid12603449\rsid12614763\rsid12714335\rsid12780684\rsid12874015\rsid12992049\rsid13187850 +\rsid13327662\rsid13378822\rsid13521383\rsid13526046\rsid13526234\rsid13707436\rsid13846203\rsid13923732\rsid14042855\rsid14108769\rsid14562082\rsid14624369\rsid14690030\rsid14697806\rsid14769386\rsid15038976\rsid15292511\rsid15341850\rsid15485484 +\rsid15549573\rsid15599413\rsid15600639\rsid15997769\rsid15998385\rsid16072365\rsid16073068\rsid16086011\rsid16536768\rsid16612758\rsid16653078}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440 +\mintLim0\mnaryLim1}{\info{\title License Agreement}{\author Deltares}{\operator Edwin Bos}{\creatim\yr2016\mo8\dy4\hr11\min47}{\revtim\yr2016\mo9\dy5\hr11\min41}{\printim\yr2016\mo1\dy13\hr13\min29}{\version19}{\edmins24}{\nofpages4}{\nofwords1017} +{\nofchars5799}{\*\company Stichting Deltares}{\nofcharsws6803}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1 \noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 \jexpand\viewkind1\viewscale110\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct @@ -200,103 +200,100 @@ \hich\af2\dbch\af31505\loch\f2 7}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 .Data}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2906174 \hich\af2\dbch\af31505\loch\f2 .dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10041733 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 8}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid3952517 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 8}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 .Forms}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2906174 \hich\af2\dbch\af31505\loch\f2 .dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 9}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid1582918 .}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 - Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 \hich\af2\dbch\af31505\loch\f2 .IO}{\rtlch\fcs1 -\af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2906174 \hich\af2\dbch\af31505\loch\f2 .dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid11234572 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\insrsid2649997 0}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 -GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 .Plugin.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 11}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid11234572 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 9}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 .Plugin.dll +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 10}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11234572 \hich\af2\dbch\af31505\loch\f2 .Service.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 12}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11011627 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 11}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11011627 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11011627\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosionInwards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid11011627 \hich\af2\dbch\af31505\loch\f2 .Utils.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid14108769 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 13}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid14108769 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 12}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosion}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 Out}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 wards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 .Data.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid11234572 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 14}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid11234572 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 13}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosion}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 Out}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 wards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 .Forms.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 15}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 14}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosion}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 Out}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 wards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 .Plugin.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 16}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 15}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 GrassCoverErosion}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 Out}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769\charrsid10041733 \hich\af2\dbch\af31505\loch\f2 wards}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14108769 \hich\af2\dbch\af31505\loch\f2 .Service.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10041733 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 17}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10041733 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 16}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Data.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 18}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Forms.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10959533 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 19}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 17}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Forms.dll +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10959533 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 18}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Plugin.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 20}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Service.dll +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 19}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10959533 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.HeightStructures.Service.dll \par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 2}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2521833 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid12714335 \hich\af2\dbch\af31505\loch\f2 -Ringtoets.HydraRing.Calculation.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7633723 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 22}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\insrsid3952517 0}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2521833 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid12714335 \hich\af2\dbch\af31505\loch\f2 Ringtoets.HydraRing.Calculation.dll +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7633723 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 21}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10041733 .}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid12714335 \hich\af2\dbch\af31505\loch\f2 Ringtoets.HydraRing.Data.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7633723 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7822308 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 23}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7822308 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 22}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid8282417 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Hydra\hich\af2\dbch\af31505\loch\f2 Ring.IO.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 24}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Data.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 25}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid1920386 .}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 23}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Data.dll +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 24}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid1920386 .}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 Ringtoets.Integration.Forms.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 26}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Plugin.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 27}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Service.dll}{\rtlch\fcs1 \af2\afs21 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 25}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Plugin.dll +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 26}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Integration.Service.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13521383\charrsid13327662 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 28}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 27}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.Data.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10641850 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 29}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid10641850 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 28}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.Forms.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 30}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 29}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850\charrsid10641850 \hich\af2\dbch\af31505\loch\f2 Ringtoets.Piping.InputParameterCalculation}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15038976 \hich\af2\dbch\af31505\loch\f2 .dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850\charrsid15600639 -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 31}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.IO.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 30}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.IO.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850\charrsid15600639 -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 32}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.}{\rtlch\fcs1 \af2\afs21 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 31}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10641850 \hich\af2\dbch\af31505\loch\f2 KernelWrapper.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 33}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 32}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.Plugin.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7884431 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 34}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid7884431 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 33}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2575490 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.Primi}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7884431 \hich\af2\dbch\af31505\loch\f2 tives.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7884431\charrsid15600639 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 35}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 34}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Piping.Service.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid13526046 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 36}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid13526046 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 35}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Revetment.Data.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13526046 -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 37}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13526046 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Revetment.IO.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 36}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13526046 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Revetment.IO.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 38}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 37}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid12545017 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.Revetment.Service.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid3298861 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 39}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid3298861 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 38}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861\charrsid16536768 \hich\af2\dbch\af31505\loch\f2 StabilityStoneCover}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 .Data.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 40}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 39}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861\charrsid16536768 \hich\af2\dbch\af31505\loch\f2 StabilityStoneCover}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 .Forms.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 41}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 40}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861\charrsid16536768 \hich\af2\dbch\af31505\loch\f2 StabilityStoneCover}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 .IO.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 42}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 41}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861\charrsid16536768 \hich\af2\dbch\af31505\loch\f2 StabilityStoneCover}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 .Plugin.dll -\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 43}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 42}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861\charrsid16536768 \hich\af2\dbch\af31505\loch\f2 StabilityStoneCover}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3298861 \hich\af2\dbch\af31505\loch\f2 .Service.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid2649997 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 44}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid2649997 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 43}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid2649997 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.WaveImpactAsphaltCover.Data.dll -\par \hich\af2\dbch\af31505\loch\f2 4}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997 \hich\af2\dbch\af31505\loch\f2 5}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid2649997 \hich\af2\dbch\af31505\loch\f2 +\par \hich\af2\dbch\af31505\loch\f2 4}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 4}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid2649997 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.WaveImpactAsphaltCover.Forms.dll -\par \hich\af2\dbch\af31505\loch\f2 46. Ringtoets.WaveImpactAsphaltCover.Plugin.dll -\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid3298861 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7168476 \hich\af2\dbch\af31505\loch\f2 47. Ringtoets.WaveImpactAsphaltCover.Service.dll}{ -\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid15600639 +\par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 45}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid2649997 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.WaveImpactAsphaltCover.Plugin.dll +\par }\pard \ltrpar\ql \fi-360\li1215\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin1215\itap0\pararsid3298861 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3952517 \hich\af2\dbch\af31505\loch\f2 46}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\insrsid7168476 \hich\af2\dbch\af31505\loch\f2 . Ringtoets.WaveImpactAsphaltCover.Service.dll}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2649997\charrsid15600639 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid15600639\charrsid15600639 \par }{\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\insrsid15600639\charrsid7168476 \hich\af2\dbch\af31505\loch\f2 A. \tab }{\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 -\hich\af2\dbch\af31505\loch\f2 \hich\f2 Software licentievoorwaarden onder de \'93\loch\f2 \hich\f2 GNU LESSER GENERAL PUBLIC LICENSE\'94\hich\af2\dbch\af31505\loch\f2 versie 3 zoals gepubliceerd door de Free Software Foundation. +\hich\af2\dbch\af31505\loch\f2 \hich\f2 Software licentievoorwaarden onder de \'93\loch\f2 \hich\f2 GNU LESSER GENERAL PUBLIC LICENSE\'94\loch\f2 versie 3 zoals gepubliceerd door de Free Software Foundation. \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9259511 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 1. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 Dit programma genaamd \hich\f2 \lquote \loch\f2 Ringtoets\hich\f2 \rquote \loch\f2 - is software voor het gebruik bij het toetsen van dijken overeenkomstig het }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511 \hich\af2\dbch\af31505\loch\f2 WTI 2017 }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 voor dijken. Ringtoets is nog in ontwikkeling en nog niet voldoende get\hich\af2\dbch\af31505\loch\f2 -est om te gebruiken anders dan voor kennisname van haar functionaliteiten. Ieder ander gebruik wordt ten stelligste afgeraden door Deltares. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511 + is software voor het gebruik bij het toetsen van dijken overeenkomstig het }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511 \hich\af2\dbch\af31505\loch\f2 WTI 201\hich\af2\dbch\af31505\loch\f2 7 }{\rtlch\fcs1 +\af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 +voor dijken. Ringtoets is nog in ontwikkeling en nog niet voldoende getest om te gebruiken anders dan voor kennisname van haar functionaliteiten. Ieder ander gebruik wordt ten stelligste afgeraden door Deltares. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid9259511 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \par \hich\af2\dbch\af31505\loch\f2 2. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 Copyright }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15341850 \loch\af2\dbch\af31505\hich\f2 \'a9\loch\f2 }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 @@ -322,32 +319,32 @@ \hich\af2\dbch\af31505\loch\f2 geleverd}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 Zo niet, zie dan }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid4150084 \hich\af2\dbch\af31505\loch\f2 <} {\field\fldedit{\*\fldinst {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 HYPERLINK "}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \hich\af2\dbch\af31505\loch\f2 http://www.gnu.org/licenses/lgpl-3.0.en.html}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 -\hich\af2\dbch\af31505\loch\f2 " }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 {\*\datafield +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \hich\af2\dbch\af31505\loch\f2 http://www.gnu.org/licenses/lgpl-3.0\hich\af2\dbch\af31505\loch\f2 .en.html}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 " }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7200000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006c00670070006c002d0033002e0030002e0065006e002e006800 -74006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab0000000000004400e900006e14ec68d800000000000700b2004f000000ec000000006e20ffffff000000720021010002005900d8e90000fb00000037e90000be00}}}{\fldrslt {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +74006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab0000000000004400e900006e14ec68d800000000000700b2004f000000ec000000006e20ffffff000000720021010002005900d8e90000fb00000037e90000be0000}}}{\fldrslt {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \cs15\f2\fs21\ul\cf17\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid9534683 \hich\af2\dbch\af31505\loch\f2 http://www.gnu.org/licenses/lgpl-3.0.en.html}}}\sectd \ltrsect\linex0\headery708\footery708\colsx708\sectdefaultcl\sftnbj {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid4150084 \hich\af2\dbch\af31505\loch\f2 >}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid12603449 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 voor de tekst}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 . \par \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \hich\af2\dbch\af31505\loch\f2 6}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 . Alle namen}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid14769386 \hich\af2\dbch\af31505\loch\f2 , }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 logo\hich\f2 \rquote \loch\f2 s en verwijzingen naar "Deltares" zijn }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 logo\hich\f2 \rquote \hich\af2\dbch\af31505\loch\f2 s en verwijzingen naar "Deltares" zijn }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 geregistreerde merknamen van}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 Stichting Deltares, }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 en blijven te allen tijde eigendom van}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 Stichting Deltares. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid13187850 \hich\af2\dbch\af31505\loch\f2 Alle rechten voorbehouden. \par \par }\pard \ltrpar\ql \li855\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin855\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid13187850 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid15600639 {\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 B.\tab }{ -\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \hich\af2\dbch\af31505\loch\f2 \hich\f2 Software licentievoorwaarden onder de \'93\loch\f2 \hich\f2 GNU GENERAL PUBLIC LICENSE\'94\loch\f2 - versie 3 zoals gepubliceerd door de Free Software Foundation.}{\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 +\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \hich\af2\dbch\af31505\loch\f2 \hich\f2 Software licentievoorwaarden onder de \'93\loch\f2 \hich\f2 GNU GENERAL PUBLIC LICENSE\'94 +\hich\af2\dbch\af31505\loch\f2 versie 3 zoals gepubliceerd door de Free Software Foundation.}{\rtlch\fcs1 \ab\af2\afs24 \ltrch\fcs0 \b\f2\fs24\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid1800570 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid16073068 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 1. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 Dit programma genaamd \hich\f2 \lquote \loch\f2 Ringtoets\hich\f2 \rquote \loch\f2 is software voor het gebruik bij het toetsen van dijken overeenkomstig het }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068 \hich\af2\dbch\af31505\loch\f2 WTI 2017 }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 voor dijken. Ringtoets is nog in ontwikkeling en nog niet voldoende getest om te gebruiken anders dan voor kennisname van haar functionali -\hich\af2\dbch\af31505\loch\f2 teiten. Ieder ander gebruik wordt ten stelligste afgeraden door Deltares. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068\charrsid1010843 \hich\af2\dbch\af31505\loch\f2 voor dijken. Ringtoets is nog in ontwikkeling en nog niet voldoende get\hich\af2\dbch\af31505\loch\f2 +est om te gebruiken anders dan voor kennisname van haar functionaliteiten. Ieder ander gebruik wordt ten stelligste afgeraden door Deltares. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid16073068 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid15600639 {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \par \hich\af2\dbch\af31505\loch\f2 2. }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 Copyright}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid3020322 \hich\af2\dbch\af31505\loch\f2 \hich\f2 \'a9}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 @@ -356,10 +353,11 @@ \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 Alle rechten voorbehouden. \par \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \hich\af2\dbch\af31505\loch\f2 3}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 -\hich\af2\dbch\af31505\loch\f2 . U mag het programma }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 zelf verder verspreiden}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 -\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 en/of aanpassen }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid1010843 \hich\af2\dbch\af31505\loch\f2 -overeenkomstig }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 de }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 -\hich\af2\dbch\af31505\loch\f2 GNU }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 General Public License versie 3. +\hich\af2\dbch\af31505\loch\f2 . U mag het programma }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 zelf verder versprei\hich\af2\dbch\af31505\loch\f2 den}{\rtlch\fcs1 +\af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 en/of aanpassen }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid1010843 +\hich\af2\dbch\af31505\loch\f2 overeenkomstig }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 de }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 GNU }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 +General Public License versie 3. \par \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \hich\af2\dbch\af31505\loch\f2 4}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 . Het programma wordt verspreid in de hoop dat het van nut is, maar ZONDER ENIGE GA}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 RANTIE}{ @@ -369,15 +367,15 @@ voor meer details. \par \par }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15549573 \hich\af2\dbch\af31505\loch\f2 5}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 -\hich\af2\dbch\af31505\loch\f2 . De tekst van de GNU General Public License }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid11875882 \hich\af2\dbch\af31505\loch\f2 versie \hich\af2\dbch\af31505\loch\f2 3 }{\rtlch\fcs1 -\af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 wordt gezamenlijk met de Software}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 +\hich\af2\dbch\af31505\loch\f2 . De tekst van de GNU General Public License }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid11875882 \hich\af2\dbch\af31505\loch\f2 versie 3 }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +\f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 wordt gezamenlijk met de Software}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 geleverd}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid14624369 \hich\af2\dbch\af31505\loch\f2 . }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 \hich\af2\dbch\af31505\loch\f2 Zo niet, zie dan }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid4150084 \hich\af2\dbch\af31505\loch\f2 <} {\field\fldedit{\*\fldinst {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 HYPERLINK "}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid3686156 \hich\af2\dbch\af31505\loch\f2 http://www.gnu.org/licenses/gpl-3.0.en.html}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 " }{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7000000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f00670070006c002d0033002e0030002e0065006e002e0068007400 -6d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000000477d4c0000945e0000000065002f30000060b30004000000000000000000d8003500000000000000e5ff1f006000000052000041ec000000650000160072}}}{\fldrslt {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 +6d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000000477d4c0000945e0000000065002f30000060b30004000000000000000000d8003500000000000000e5ff1f006000000052000041ec00000065000016007206}}}{\fldrslt {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \cs15\f2\fs21\ul\cf17\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid9534683 \hich\af2\dbch\af31505\loch\f2 http://www.gnu.org/licenses/gpl-3.0.en.html}}}\sectd \ltrsect\linex0\headery708\footery708\colsx708\sectdefaultcl\sftnbj {\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid4150084 \hich\af2\dbch\af31505\loch\f2 >}{\rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639 \hich\af2\dbch\af31505\loch\f2 voor de tekst}{ \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\lang1043\langfe2052\langnp1043\insrsid15600639\charrsid5593428 . @@ -495,18 +493,18 @@ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000a045 -6a724907d2010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff020000000000000000000000000000000000000000000000a0456a724907d201 -a0456a724907d201000000000000000000000000cd00c5004600cc004f00d200d400cd0057005500d200d800d700d3004b00dc0052004e00cc004900dc00d0003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000a0456a724907 -d201a0456a724907d2010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000707f +fbad5907d2010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff020000000000000000000000000000000000000000000000707ffbad5907d201 +707ffbad5907d201000000000000000000000000c500c000dd00de00c100c50058005600dc004500d600de00da00d000cf00df00c5005300d3005800d000c0003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000707ffbad5907 +d201707ffbad5907d2010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 00000000000000000000000000000000d800000000000000010000000200000003000000feffffff0500000006000000070000000800000009000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267 2f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f623a536f75726365733e00000000 -0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b33423643 -353142362d324432442d344335392d423844462d3332424334344442303846337d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c +0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b38363745 +304639362d443535352d344446302d424545422d3042464639353243443743327d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c 64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000 0000000000000000000000000000000000000000000000000000000000000400000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000 Index: Core/Common/src/Core.Common.Base/IO/FileImporterBase.cs =================================================================== diff -u -r1dddcf22e6d496a00dcfe85cf8d1302a8df121cd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Core/Common/src/Core.Common.Base/IO/FileImporterBase.cs (.../FileImporterBase.cs) (revision 1dddcf22e6d496a00dcfe85cf8d1302a8df121cd) +++ Core/Common/src/Core.Common.Base/IO/FileImporterBase.cs (.../FileImporterBase.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -30,16 +30,15 @@ /// during the import. /// /// Object type that is the target for this importer. - /// public abstract class FileImporterBase : IFileImporter { /// /// Initializes a new instance of the class. /// /// The path to the file to import from. /// The import target. - /// Thrown when is null. - /// When is null. + /// Thrown when or + /// is null. protected FileImporterBase(string filePath, T importTarget) { if (filePath == null) Index: Core/Common/test/Core.Common.TestUtil.Test/TestHelperTest.cs =================================================================== diff -u -r24da3aa72ccc0776599628c9f971081694048d9a -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Core/Common/test/Core.Common.TestUtil.Test/TestHelperTest.cs (.../TestHelperTest.cs) (revision 24da3aa72ccc0776599628c9f971081694048d9a) +++ Core/Common/test/Core.Common.TestUtil.Test/TestHelperTest.cs (.../TestHelperTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -107,8 +107,6 @@ path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin); Assert.IsTrue(Directory.Exists(path)); - path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO); - Assert.IsTrue(Directory.Exists(path)); path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.Integration); Assert.IsTrue(Directory.Exists(path)); Index: Core/Common/test/Core.Common.TestUtil/TestDataPath.cs =================================================================== diff -u -r3d53c0f0b1a88c65b24a20f0add0ead3d796f0ca -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Core/Common/test/Core.Common.TestUtil/TestDataPath.cs (.../TestDataPath.cs) (revision 3d53c0f0b1a88c65b24a20f0add0ead3d796f0ca) +++ Core/Common/test/Core.Common.TestUtil/TestDataPath.cs (.../TestDataPath.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -71,7 +71,6 @@ public static class GrassCoverErosionInwards { - public static readonly TestDataPath IO = System.IO.Path.Combine("Ringtoets", "GrassCoverErosionInwards", "test", "Ringtoets.GrassCoverErosionInwards.IO.Test"); public static readonly TestDataPath Integration = System.IO.Path.Combine("Ringtoets", "GrassCoverErosionInwards", "test", "Ringtoets.GrassCoverErosionInwards.Integration.Test"); } Index: Ringtoets.sln =================================================================== diff -u -rac3874de50137d233d2549e0bba66c7e9adeb33b -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets.sln (.../Ringtoets.sln) (revision ac3874de50137d233d2549e0bba66c7e9adeb33b) +++ Ringtoets.sln (.../Ringtoets.sln) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -51,7 +51,6 @@ {888D4097-8BC2-4703-9FB1-8744C94D525E} = {888D4097-8BC2-4703-9FB1-8744C94D525E} {CF6B8598-2993-4A8E-801D-121CC0EF358E} = {CF6B8598-2993-4A8E-801D-121CC0EF358E} {610E0A9C-1997-4C43-A10E-39D4C66ADA93} = {610E0A9C-1997-4C43-A10E-39D4C66ADA93} - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E} = {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E} {70F8CC9C-5BC8-4FB2-B201-EAE7FA8088C2} = {70F8CC9C-5BC8-4FB2-B201-EAE7FA8088C2} {2465CCA1-C505-4827-9454-4FD5FD9194CD} = {2465CCA1-C505-4827-9454-4FD5FD9194CD} {DADAA0A5-288C-49CB-9F08-337F16832C86} = {DADAA0A5-288C-49CB-9F08-337F16832C86} @@ -558,11 +557,6 @@ {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ringtoets.GrassCoverErosionInwards.IO", "Ringtoets\GrassCoverErosionInwards\src\Ringtoets.GrassCoverErosionInwards.IO\Ringtoets.GrassCoverErosionInwards.IO.csproj", "{F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}" - ProjectSection(ProjectDependencies) = postProject - {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ringtoets.GrassCoverErosionInwards.Plugin", "Ringtoets\GrassCoverErosionInwards\src\Ringtoets.GrassCoverErosionInwards.Plugin\Ringtoets.GrassCoverErosionInwards.Plugin.csproj", "{20955E2A-8CEB-46B0-ADC4-A97D4C6BBDF5}" ProjectSection(ProjectDependencies) = postProject {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} @@ -578,11 +572,6 @@ {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ringtoets.GrassCoverErosionInwards.IO.Test", "Ringtoets\GrassCoverErosionInwards\test\Ringtoets.GrassCoverErosionInwards.IO.Test\Ringtoets.GrassCoverErosionInwards.IO.Test.csproj", "{3E4EE2CC-FD79-42BB-AA40-44F10709108D}" - ProjectSection(ProjectDependencies) = postProject - {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ringtoets.GrassCoverErosionInwards.Plugin.Test", "Ringtoets\GrassCoverErosionInwards\test\Ringtoets.GrassCoverErosionInwards.Plugin.Test\Ringtoets.GrassCoverErosionInwards.Plugin.Test.csproj", "{632403D0-E54F-4718-A694-8AD47C4CB301}" ProjectSection(ProjectDependencies) = postProject {C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC} @@ -1754,16 +1743,6 @@ {C540E627-B95B-4CC0-A1B6-A0BDF74936C7}.Release|x86.Build.0 = Release|x86 {C540E627-B95B-4CC0-A1B6-A0BDF74936C7}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 {C540E627-B95B-4CC0-A1B6-A0BDF74936C7}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.CreateInstaller|x86.ActiveCfg = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.CreateInstaller|x86.Build.0 = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.CreateInstallerWithDemoProject|x86.ActiveCfg = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.CreateInstallerWithDemoProject|x86.Build.0 = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.Debug|x86.ActiveCfg = Debug|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.Debug|x86.Build.0 = Debug|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.Release|x86.ActiveCfg = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.Release|x86.Build.0 = Release|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 {20955E2A-8CEB-46B0-ADC4-A97D4C6BBDF5}.CreateInstaller|x86.ActiveCfg = Release|x86 {20955E2A-8CEB-46B0-ADC4-A97D4C6BBDF5}.CreateInstaller|x86.Build.0 = Release|x86 {20955E2A-8CEB-46B0-ADC4-A97D4C6BBDF5}.CreateInstallerWithDemoProject|x86.ActiveCfg = Release|x86 @@ -1790,14 +1769,6 @@ {BB42D568-A8FE-490C-B676-7E84EB91EE45}.Release|x86.Build.0 = Release|x86 {BB42D568-A8FE-490C-B676-7E84EB91EE45}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 {BB42D568-A8FE-490C-B676-7E84EB91EE45}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.CreateInstaller|x86.ActiveCfg = Release|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.CreateInstallerWithDemoProject|x86.ActiveCfg = Release|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.Debug|x86.ActiveCfg = Debug|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.Debug|x86.Build.0 = Debug|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.Release|x86.ActiveCfg = Release|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.Release|x86.Build.0 = Release|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 - {3E4EE2CC-FD79-42BB-AA40-44F10709108D}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 {632403D0-E54F-4718-A694-8AD47C4CB301}.CreateInstaller|x86.ActiveCfg = Release|x86 {632403D0-E54F-4718-A694-8AD47C4CB301}.CreateInstallerWithDemoProject|x86.ActiveCfg = Release|x86 {632403D0-E54F-4718-A694-8AD47C4CB301}.Debug|x86.ActiveCfg = Debug|x86 @@ -2559,13 +2530,11 @@ {1C1E8754-CF61-4858-9CEE-3E5DE344474F} = {A5D1FA5A-7168-46DE-B3F0-D3FE6AC26601} {90DE728E-48EF-4665-AB38-3D88E41D9F4D} = {79419C3E-046C-4DC1-8C69-F14911F22C75} {C540E627-B95B-4CC0-A1B6-A0BDF74936C7} = {79419C3E-046C-4DC1-8C69-F14911F22C75} - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E} = {79419C3E-046C-4DC1-8C69-F14911F22C75} {20955E2A-8CEB-46B0-ADC4-A97D4C6BBDF5} = {79419C3E-046C-4DC1-8C69-F14911F22C75} {5D158D8E-A5EB-489C-A885-87E13BC0D3B3} = {79419C3E-046C-4DC1-8C69-F14911F22C75} {99573570-EE00-4264-8147-26A1B25DB23F} = {79419C3E-046C-4DC1-8C69-F14911F22C75} {8E37F9DA-8FA8-4DF0-A639-47A7B44F2ECA} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} {BB42D568-A8FE-490C-B676-7E84EB91EE45} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} - {3E4EE2CC-FD79-42BB-AA40-44F10709108D} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} {632403D0-E54F-4718-A694-8AD47C4CB301} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} {BB9D13C5-2672-4F61-93B3-8EA361399BDD} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} {D7801688-3DD7-407F-9302-F4FD82B1F499} = {1C1E8754-CF61-4858-9CEE-3E5DE344474F} Index: Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/DikeProfile.cs =================================================================== diff -u -re7e22e69b16b23c89c063f18444c82aa818dc176 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/DikeProfile.cs (.../DikeProfile.cs) (revision e7e22e69b16b23c89c063f18444c82aa818dc176) +++ Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/DikeProfile.cs (.../DikeProfile.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -47,7 +47,7 @@ /// is null. /// Thrown when any element of /// or is null. - public DikeProfile(Point2D worldCoordinate, RoughnessPoint[] dikeGeometry, Point2D[] foreshoreGeometry, + public DikeProfile(Point2D worldCoordinate, IEnumerable dikeGeometry, IEnumerable foreshoreGeometry, BreakWater breakWater, ConstructionProperties properties) { if (properties == null) @@ -145,7 +145,7 @@ { get { - return ForeshoreProfile.ForeshoreGeometry; + return ForeshoreProfile.Geometry; } } @@ -211,6 +211,8 @@ /// /// Gets or sets the value for . /// + /// will be rounded to the + /// of . public double DikeHeight { get; set; } } } Index: Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/ForeshoreProfile.cs =================================================================== diff -u -rb34f55ea9331b4e253fb9f0d19a11a9e48768f03 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/ForeshoreProfile.cs (.../ForeshoreProfile.cs) (revision b34f55ea9331b4e253fb9f0d19a11a9e48768f03) +++ Ringtoets/Common/src/Ringtoets.Common.Data/DikeProfiles/ForeshoreProfile.cs (.../ForeshoreProfile.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -38,30 +38,30 @@ /// Creates a new instance of the class. /// /// worldCoordinate">The value for . - /// The geometry of the foreshore. + /// The geometry of the foreshore. /// The break water definition (can be null). /// The property values required to create an instance of . - /// Thrown when either , + /// Thrown when either , /// or is null. /// Thrown when any element of - /// is null. - public ForeshoreProfile(Point2D worldCoordinate, Point2D[] foreshoreGeometry, + /// is null. + public ForeshoreProfile(Point2D worldCoordinate, IEnumerable geometry, BreakWater breakWater, ConstructionProperties properties) { if (worldCoordinate == null) { throw new ArgumentNullException("worldCoordinate"); } - if (foreshoreGeometry == null) + if (geometry == null) { - throw new ArgumentNullException("foreshoreGeometry"); + throw new ArgumentNullException("geometry"); } if (properties == null) { throw new ArgumentNullException("properties"); } - SetForeshoreGeometry(foreshoreGeometry); + SetGeometry(geometry); Orientation = new RoundedDouble(2, properties.Orientation); @@ -72,7 +72,7 @@ } /// - /// Gets or sets the name of the foreshore profile. + /// Gets the name of the foreshore profile. /// public string Name { get; private set; } @@ -82,18 +82,18 @@ public Point2D WorldReferencePoint { get; private set; } /// - /// Gets or sets the local x-coordinate corresponding to the world reference point . + /// Gets the local x-coordinate corresponding to the world reference point . /// public double X0 { get; private set; } /// - /// Gets or sets the orientation of the foreshore profile geometry with respect to North + /// Gets the orientation of the foreshore profile geometry with respect to North /// in degrees. A positive value equals a clockwise rotation. /// public RoundedDouble Orientation { get; private set; } /// - /// Indicates if there is a break water object available for this instance or not. + /// Gets a value indicating if there is a break water object available. /// public bool HasBreakWater { @@ -104,14 +104,14 @@ } /// - /// Gets or sets the break water object of the foreshore profile, if any. + /// Gets the break water object of the foreshore profile, if any. /// public BreakWater BreakWater { get; private set; } /// - /// Gets the geometry of the foreshore. + /// Gets the geometry of the foreshore profile. /// - public RoundedPoint2DCollection ForeshoreGeometry { get; private set; } + public RoundedPoint2DCollection Geometry { get; private set; } public long StorageId { get; set; } @@ -120,15 +120,15 @@ return Name; } - private void SetForeshoreGeometry(IEnumerable points) + private void SetGeometry(IEnumerable points) { var foreshorePoints = points.ToArray(); if (foreshorePoints.Any(p => p == null)) { - throw new ArgumentException(Resources.ForeshoreProfile_SetForeshoreGeometry_A_point_in_the_collection_is_null); + throw new ArgumentException(Resources.ForeshoreProfile_SetGeometry_A_point_in_the_collection_is_null); } - ForeshoreGeometry = new RoundedPoint2DCollection(2, foreshorePoints); + Geometry = new RoundedPoint2DCollection(2, foreshorePoints); } /// @@ -149,6 +149,8 @@ /// /// Gets or sets the value for . /// + /// will be rounded to the + /// of . public double Orientation { get; set; } } } Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs =================================================================== diff -u -rd6cea50606db045ee68e37f6cf98682f7ff7649e -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d6cea50606db045ee68e37f6cf98682f7ff7649e) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -267,9 +267,9 @@ /// /// Looks up a localized string similar to Een punt in de geometrie voor het voorland heeft geen waarde.. /// - public static string ForeshoreProfile_SetForeshoreGeometry_A_point_in_the_collection_is_null { + public static string ForeshoreProfile_SetGeometry_A_point_in_the_collection_is_null { get { - return ResourceManager.GetString("ForeshoreProfile_SetForeshoreGeometry_A_point_in_the_collection_is_null", resourceCulture); + return ResourceManager.GetString("ForeshoreProfile_SetGeometry_A_point_in_the_collection_is_null", resourceCulture); } } Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx =================================================================== diff -u -rb34f55ea9331b4e253fb9f0d19a11a9e48768f03 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision b34f55ea9331b4e253fb9f0d19a11a9e48768f03) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -192,7 +192,7 @@ De verschuiving mag niet groter zijn dan de verwachtingswaarde. - + Een punt in de geometrie voor het voorland heeft geen waarde. Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ForeshoreProfilesContext.cs =================================================================== diff -u -r1dddcf22e6d496a00dcfe85cf8d1302a8df121cd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ForeshoreProfilesContext.cs (.../ForeshoreProfilesContext.cs) (revision 1dddcf22e6d496a00dcfe85cf8d1302a8df121cd) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ForeshoreProfilesContext.cs (.../ForeshoreProfilesContext.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -36,12 +36,12 @@ /// /// Initializes a new instance of the class. /// - /// The observable list of objects. + /// The observable list of objects. /// The parent assessment section. - /// When either + /// When either /// or is null. - public ForeshoreProfilesContext(ObservableList foreshores, IAssessmentSection parentAssessmentSection) - : base(foreshores) + public ForeshoreProfilesContext(ObservableList foreshoreProfiles, IAssessmentSection parentAssessmentSection) + : base(foreshoreProfiles) { if (parentAssessmentSection == null) { Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/ForeshoreGeometryProperties.cs =================================================================== diff -u -r3e5a3e2990566fe86caaaa87136d0f57543a9666 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/ForeshoreGeometryProperties.cs (.../ForeshoreGeometryProperties.cs) (revision 3e5a3e2990566fe86caaaa87136d0f57543a9666) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/ForeshoreGeometryProperties.cs (.../ForeshoreGeometryProperties.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -31,7 +31,7 @@ namespace Ringtoets.Common.Forms.PropertyClasses { /// - /// ViewModel of for properties panel. + /// ViewModel of for properties panel. /// public class ForeshoreGeometryProperties : ObjectProperties { @@ -42,7 +42,7 @@ { get { - return data.ForeshoreGeometry.ToArray(); + return data.Geometry.ToArray(); } } Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DamType.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DamType.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DamType.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,49 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// Specifies the type of dam at the offshore side of a dike profile. + /// + public enum DamType + { + /// + /// Indicates there is not dam at the offshore side. + /// + None = 0, + + /// + /// Indicates there is a caisson-shaped dam at the offshore side. + /// + Caisson = 1, + + /// + /// Indicates there is a vertical structure-shaped dam at the offshore side. + /// + Vertical = 2, + + /// + /// Indicates there is a harbor dam at the offshore side. + /// + HarborDam = 3 + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileData.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileData.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileData.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,90 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using Ringtoets.Common.Data.DikeProfiles; + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// Represents the data read from a *.prfl file read by . + /// + public class DikeProfileData + { + /// + /// Initializes a new instance of the class. + /// + public DikeProfileData() + { + Orientation = double.NaN; + DamHeight = double.NaN; + DikeHeight = double.NaN; + ForeshoreGeometry = new RoughnessPoint[0]; + DikeGeometry = new RoughnessPoint[0]; + } + + /// + /// Gets or sets the identifier used for the dike profile data. + /// + public string Id { get; set; } + + /// + /// Gets or sets the orientation w.r.t. North of the dike profile. + /// + public double Orientation { get; set; } + + /// + /// Gets or sets the descriptor value for the dam at the offshore side. + /// + public DamType DamType { get; set; } + + /// + /// Gets or sets the height of the dam. + /// + public double DamHeight { get; set; } + + /// + /// Gets or sets the descriptor value of how the profile can be characterized. + /// + public SheetPileType SheetPileType { get; set; } + + /// + /// Gets or sets the height of the dike profile at the crest. + /// + public double DikeHeight { get; set; } + + /// + /// Gets or sets the notes supplied in the file for this dike profile. + /// + public string Memo { get; set; } + + /// + /// Gets or sets the foreshore geometry in local coordinates with their respective + /// roughness values. + /// + public RoughnessPoint[] ForeshoreGeometry { get; set; } + + /// + /// Gets or sets the dike geometry in local coordinates with their respective + /// roughness values. + /// + public RoughnessPoint[] DikeGeometry { get; set; } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileDataReader.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileDataReader.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/DikeProfileDataReader.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,1067 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Core.Common.Base.Geometry; +using Core.Common.IO.Exceptions; +using Core.Common.Utils; +using Core.Common.Utils.Builders; +using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.IO.Properties; +using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; +using UtilsResources = Core.Common.Utils.Properties.Resources; + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// Reader responsible for reading the data for a dike profile from a .prfl file. + /// + public class DikeProfileDataReader + { + [Flags] + private enum Keywords + { + None = 0, + VERSIE = 1, + ID = 2, + RICHTING = 4, + DAM = 8, + DAMHOOGTE = 16, + VOORLAND = 32, + DAMWAND = 64, + KRUINHOOGTE = 128, + DIJK = 256, + MEMO = 512, + } + + private string fileBeingRead; + private Keywords readKeywords; + + /// + /// Reads a *.prfl file containing dike profile data. + /// + /// The file path. + /// The read . + /// When is invalid. + /// When an error occurs like: + /// + /// refers to a file that doesn't exist. + /// A piece of text from the file cannot be converted into the expected variable type. + /// An critical I/O exception occurred while attempting to read a line in the file. + /// A converted value is invalid. + /// The file is incomplete. + /// A keyword is defined more then once. + /// The geometry points for either the dike or foreshore do not have monotonically + /// increasing X-coordinates. + /// An unexpected piece of text has been encountered in the file. + /// + public DikeProfileData ReadDikeProfileData(string filePath) + { + FileUtils.ValidateFilePath(filePath); + if (!File.Exists(filePath)) + { + string message = new FileReaderErrorMessageBuilder(filePath) + .Build(CoreCommonUtilsResources.Error_File_does_not_exist); + throw new CriticalFileReadException(message); + } + + var data = new DikeProfileData(); + readKeywords = Keywords.None; + using (var reader = new StreamReader(filePath)) + { + fileBeingRead = filePath; + string text; + int lineNumber = 0; + while ((text = ReadLineAndHandleIOExceptions(reader, ++lineNumber)) != null) + { + if (string.IsNullOrWhiteSpace(text)) + { + continue; + } + + if (TryReadVersion(text, lineNumber)) + { + continue; + } + + if (TryReadId(text, data, lineNumber)) + { + continue; + } + + if (TryReadOrientation(text, data, lineNumber)) + { + continue; + } + + if (TryReadDamType(text, data, lineNumber)) + { + continue; + } + + if (TryReadSheetPileType(text, data, lineNumber)) + { + continue; + } + + if (TryReadDamHeight(text, data, lineNumber)) + { + continue; + } + + if (TryReadDikeHeight(text, data, lineNumber)) + { + continue; + } + + if (TryReadDikeRoughnessPoints(text, data, reader, ref lineNumber)) + { + continue; + } + + if (TryReadForeshoreRoughnessPoints(text, data, reader, ref lineNumber)) + { + continue; + } + + if (TryReadMemo(text, data, reader)) + { + continue; + } + + HandleUnexpectedText(text, lineNumber); + } + } + + ValidateNoMissingKeywords(); + + return data; + } + + /// + /// Attempts to match the given text to a VERSIE key-value pair. If a match is found, + /// the value is parsed and validated. + /// + /// The text. + /// The line number. + /// True if the text matches a VERSIE key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the VERSIE key does + /// not represent a valid version code or has already been defined or the version + /// is not supported by this reader. + private bool TryReadVersion(string text, int lineNumber) + { + Match versionMatch = new Regex(@"^VERSIE(\s+(?.+?)?)?\s*$").Match(text); + if (versionMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.VERSIE, lineNumber); + + string readVersionText = versionMatch.Groups["version"].Value; + Version fileVersion = ParseVersion(lineNumber, readVersionText); + + ValidateVersion(fileVersion, lineNumber); + + readKeywords |= Keywords.VERSIE; + return true; + } + return false; + } + + /// + /// Parses the version code from a piece of text. + /// + /// The line number. + /// The text to parse. + /// The read version code. + /// When + /// does not represent a valid version code. + private Version ParseVersion(int lineNumber, string readVersionText) + { + try + { + return new Version(readVersionText); + } + catch (FormatException e) + { + var message = Resources.DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported; + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + var message = Resources.DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported; + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (ArgumentException e) + { + var message = Resources.DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported; + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Validates the version. + /// + /// The file version. + /// The line number. + /// When + /// is not supported by this reader. + private void ValidateVersion(Version fileVersion, int lineNumber) + { + if (!fileVersion.Equals(new Version(4, 0))) + { + string message = Resources.DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported; + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Attempts to match the given text to an ID key-value pair. If a match is found, + /// the value is parsed and validated. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches an ID key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the ID key does + /// not represent an id or has already been defined. + private bool TryReadId(string text, DikeProfileData data, int lineNumber) + { + Match idMatch = new Regex(@"^ID(\s+(?.+?)?)?\s*$").Match(text); + if (idMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.ID, lineNumber); + + string readIdText = idMatch.Groups["id"].Value; + ValidateId(readIdText, lineNumber); + + data.Id = readIdText; + readKeywords |= Keywords.ID; + return true; + } + return false; + } + + /// + /// Validates the identifier. + /// + /// The id. + /// The line number. + /// When is not + /// present or has a whitespace. + private void ValidateId(string id, int lineNumber) + { + if (string.IsNullOrWhiteSpace(id)) + { + string message = string.Format(Resources.DikeProfileDataReader_ValidateId_Id_0_not_valid, + id); + throw CreateCriticalFileReadException(lineNumber, message); + } + + if (id.Any(char.IsWhiteSpace)) + { + string message = string.Format(Resources.DikeProfileDataReader_ValidateId_Id_0_has_unsupported_white_space, + id); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Attempts to match the given text to a RICHTING key-value pair. If a match is + /// found, the value is parsed and validated. If valid, the value is stored. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches a RICHTING key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the RICHTING key does + /// not represent a valid number or has already been defined or the orientation value + /// is not in the range [0, 360]. + private bool TryReadOrientation(string text, DikeProfileData data, int lineNumber) + { + Match orientationMatch = new Regex(@"^RICHTING(\s+(?.+?)?)?\s*$").Match(text); + if (orientationMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.RICHTING, lineNumber); + + string readOrientationText = orientationMatch.Groups["orientation"].Value; + double orientation = ParseOrientation(lineNumber, readOrientationText); + + ValidateOrientation(orientation, lineNumber); + + data.Orientation = orientation; + readKeywords |= Keywords.RICHTING; + return true; + } + return false; + } + + /// + /// Parses the orientation from a piece of text. + /// + /// The line number. + /// The text. + /// The value corresponding to the RICHTING key. + /// When + /// does not represent a valid number. + private double ParseOrientation(int lineNumber, string readOrientationText) + { + try + { + return double.Parse(readOrientationText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + var message = string.Format(Resources.DikeProfileDataReader_ParseOrientation_Orientation_0_not_double, + readOrientationText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + var message = string.Format(Resources.DikeProfileDataReader_ParseOrientation_Orientation_0_overflows, + readOrientationText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Validates the orientation. + /// + /// The orientation. + /// The line number. + /// When + /// is outside the [0, 360] range. + private void ValidateOrientation(double orientation, int lineNumber) + { + if (orientation < 0.0 || orientation > 360.0) + { + string message = string.Format(Resources.DikeProfileDataReader_ValidateOrientation_Orientation_0_must_be_in_range, + orientation); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Attempts to match the given text to a DAM key-value pair. If a match is found, + /// the value is parsed and validated. If valid, the value is stored. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches a DAM key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the DAM key does + /// not represent a valid value or has already been defined. + private bool TryReadDamType(string text, DikeProfileData data, int lineNumber) + { + Match damTypeMatch = new Regex(@"^DAM(\s+(?.+?)?)?\s*$").Match(text); + if (damTypeMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.DAM, lineNumber); + + string readDamTypeText = damTypeMatch.Groups["damtype"].Value; + DamType damType = ParseDamType(lineNumber, readDamTypeText); + + data.DamType = damType; + readKeywords |= Keywords.DAM; + return true; + } + return false; + } + + /// + /// Parses the dam-type from a piece of text. + /// + /// The line number. + /// The text. + /// The read dam-type. + /// When + /// does not represent a . + private DamType ParseDamType(int lineNumber, string readDamTypeText) + { + int damTypeValue; + try + { + damTypeValue = int.Parse(readDamTypeText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + var message = string.Format(Resources.DikeProfileDataReader_ParseDamType_DamType_0_must_be_in_range, + readDamTypeText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + var message = string.Format(Resources.DikeProfileDataReader_ParseDamType_DamType_0_must_be_in_range, + readDamTypeText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + + if (!CanSafelyCastToEnum(damTypeValue)) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseDamType_DamType_0_must_be_in_range, + damTypeValue); + throw CreateCriticalFileReadException(lineNumber, message); + } + return (DamType) damTypeValue; + } + + /// + /// Attempts to match the given text to a DAMWAND key-value pair. If a match is + /// found, the value is parsed and validated. If valid, the value is stored. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches a DAMWAND key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the DAMWAND key + /// does not represent a valid value or has already been defined. + private bool TryReadSheetPileType(string text, DikeProfileData data, int lineNumber) + { + Match profileTypeMatch = new Regex(@"^DAMWAND(\s+(?.+?)?)?\s*$").Match(text); + if (profileTypeMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.DAMWAND, lineNumber); + + string readSheetPileTypeText = profileTypeMatch.Groups["sheetpiletype"].Value; + SheetPileType sheetPileType = ParseSheetPileType(lineNumber, readSheetPileTypeText); + + data.SheetPileType = sheetPileType; + readKeywords |= Keywords.DAMWAND; + return true; + } + return false; + } + + /// + /// Parses the sheet piling type from a piece of text. + /// + /// The line number. + /// The text. + /// The read sheet piling type. + /// When + /// does not represent a . + private SheetPileType ParseSheetPileType(int lineNumber, string readSheetPileTypeText) + { + int sheetPileTypeValue; + try + { + sheetPileTypeValue = int.Parse(readSheetPileTypeText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseSheetPileType_SheetPileType_0_must_be_in_range, + readSheetPileTypeText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseSheetPileType_SheetPileType_0_must_be_in_range, + readSheetPileTypeText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + + if (!CanSafelyCastToEnum(sheetPileTypeValue)) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseSheetPileType_SheetPileType_0_must_be_in_range, + sheetPileTypeValue); + throw CreateCriticalFileReadException(lineNumber, message); + } + return (SheetPileType) sheetPileTypeValue; + } + + /// + /// Attempts to match the given text to a DAMHOOGTE key-value pair. If a match is + /// found, the value is parsed. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches a DAMHOOGTE key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the DAMHOOGTE key + /// does not represent a valid number or has already been defined. + private bool TryReadDamHeight(string text, DikeProfileData data, int lineNumber) + { + Match damHeightMatch = new Regex(@"^DAMHOOGTE(\s+(?.+?)?)?\s*$").Match(text); + if (damHeightMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.DAMHOOGTE, lineNumber); + + string readDamHeightText = damHeightMatch.Groups["damheight"].Value; + var damHeight = ParseDamHeight(readDamHeightText, lineNumber); + + data.DamHeight = damHeight; + readKeywords |= Keywords.DAMHOOGTE; + return true; + } + return false; + } + + /// + /// Parses the height of the dam from a piece of text. + /// + /// The line number. + /// The text. + /// The height of the dam. + /// When + /// does not represent a number. + private double ParseDamHeight(string readDamHeightText, int lineNumber) + { + try + { + return double.Parse(readDamHeightText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseDamHeight_DamHeight_0_not_number, + readDamHeightText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseDamHeight_DamHeight_0_overflows, + readDamHeightText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Attempts to match the given text to a KRUINHOOGTE key-value pair. If a match is + /// found, the value is parsed. + /// + /// The text. + /// The data to be updated. + /// The line number. + /// True if the text matches a KRUINHOOGTE key-value pair and has been + /// validated successfully; false otherwise. + /// The value after the KRUINHOOGTE key + /// does not represent a valid number or has already been defined. + private bool TryReadDikeHeight(string text, DikeProfileData data, int lineNumber) + { + Match crestLevelMatch = new Regex(@"^KRUINHOOGTE(\s+(?.+?)?)?\s*$").Match(text); + if (crestLevelMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.KRUINHOOGTE, lineNumber); + + string readDikeHeightText = crestLevelMatch.Groups["dikeheight"].Value; + double crestLevel = ParseDikeHeight(lineNumber, readDikeHeightText); + + data.DikeHeight = crestLevel; + readKeywords |= Keywords.KRUINHOOGTE; + return true; + } + return false; + } + + /// + /// Parses the height of the dike from a piece of text. + /// + /// The line number. + /// The text. + /// The height of the dike. + /// When + /// does not represent a number. + private double ParseDikeHeight(int lineNumber, string readDikeHeightText) + { + try + { + return double.Parse(readDikeHeightText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_not_number, + readDikeHeightText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_overflows, + readDikeHeightText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Attempts to match the given text to a DIJK key-value pair. If a match is + /// found, the data block is being read. If valid, the value is stored. + /// + /// The text of the DIJK key-value pair. + /// The data to be updated. + /// The reader of the file. + /// The line number. + /// True if the text matches a DIJK key-value pair and has been + /// validated successfully; false otherwise. + /// When + /// + /// The value after the DIJK key does not represent a valid number. + /// Any of read the parameters in the following data block is invalid. + /// The keyword has already been defined. + /// The X-coordinates of the dike are not monotonically increasing. + /// + private bool TryReadDikeRoughnessPoints(string text, DikeProfileData data, TextReader reader, ref int lineNumber) + { + Match dikeGeometryMatch = new Regex(@"^DIJK(\s+(?.+?)?)?\s*$").Match(text); + if (dikeGeometryMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.DIJK, lineNumber); + + string readDikeGeometryCountText = dikeGeometryMatch.Groups["dikegeometry"].Value; + int numberOfPoints = ParseNumberOfDikePoints(lineNumber, readDikeGeometryCountText); + + ValidateDikePointCount(numberOfPoints, lineNumber); + + if (numberOfPoints == 0) + { + readKeywords |= Keywords.DIJK; + return true; + } + + data.DikeGeometry = new RoughnessPoint[numberOfPoints]; + for (int i = 0; i < numberOfPoints; i++) + { + lineNumber++; + text = ReadLineAndHandleIOExceptions(reader, lineNumber); + if (string.IsNullOrWhiteSpace(text)) + { + string message = string.Format(Resources.DikeProfileDataReader_TryReadDikeRoughnessPoints_DikeCount_0_does_not_correspond_ExpectedCount_1_, + i, numberOfPoints); + throw CreateCriticalFileReadException(lineNumber, message); + } + + RoughnessPoint roughnessPoint = ReadRoughnessPoint(text, lineNumber); + data.DikeGeometry[i] = roughnessPoint; + + if (i > 0) + { + ValidateDikePointsAreMonotonicallyIncreasing(roughnessPoint.Point, + data.DikeGeometry[i - 1].Point, + lineNumber); + } + } + + readKeywords |= Keywords.DIJK; + return true; + } + return false; + } + + /// + /// Parses the number of dike roughness points from a piece of text representing + /// a DIJK key-value pair. + /// + /// The line number. + /// The DIJK key-value pair text. + /// The number of dike roughness points. + /// When + /// does not represent a number. + private int ParseNumberOfDikePoints(int lineNumber, string readDikeGeometryCountText) + { + try + { + return int.Parse(readDikeGeometryCountText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseNumberOfDikeElements_DijkCount_0_not_integer, + readDikeGeometryCountText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseNumberOfDikeElements_DikeCount_0_overflows, + readDikeGeometryCountText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Validates the number of dike points to be read from file. + /// + /// The number of elements. + /// The line number. + /// When + /// is negative. + private void ValidateDikePointCount(int numberOfElements, int lineNumber) + { + if (numberOfElements < 0) + { + string message = string.Format(Resources.DikeProfileDataReader_ReadDikeProfileData_DikeCount_cannot_be_negative, + numberOfElements); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Matches the given text to a value triplet representing a roughness point. If + /// a match is found, the values are parsed and validated. If valid, the resulting + /// based on the values will be returned. + /// + /// The text. + /// The line number. + /// A instance built using data in . + /// Any parameter value in the roughness + /// point triplet does not represent a valid number or the roughness parameter is + /// not valid. + private RoughnessPoint ReadRoughnessPoint(string text, int lineNumber) + { + Match roughnessSectionDataMatch = new Regex(@"^(\s*)?(?\S+)\s+(?\S+)\s+(?\S+)\s*$").Match(text); + if (!roughnessSectionDataMatch.Success) + { + string message = string.Format(Resources.DikeProfileDataReader_ReadRoughnessPoint_Line_0_not_x_y_roughness_definition, + text); + throw CreateCriticalFileReadException(lineNumber, message); + } + + string readLocalXText = roughnessSectionDataMatch.Groups["localx"].Value; + double localX = ParseRoughnessPointParameter(readLocalXText, + Resources.DikeProfileDataReader_ReadRoughnessPoint_X_DisplayName, + lineNumber); + + string readLocalZText = roughnessSectionDataMatch.Groups["localz"].Value; + double localZ = ParseRoughnessPointParameter(readLocalZText, + Resources.DikeProfileDataReader_ReadRoughnessPoint_Z_DisplayName, + lineNumber); + + string readRoughnessText = roughnessSectionDataMatch.Groups["roughness"].Value; + double roughness = ParseRoughnessPointParameter(readRoughnessText, + Resources.DikeProfileDataReader_ReadRoughnessPoint_Roughness_DisplayName, + lineNumber); + + ValidateRoughness(roughness, lineNumber); + + return new RoughnessPoint(new Point2D(localX, localZ), roughness); + } + + /// + /// Parses some double parameter from a piece of text. + /// + /// The name of the parameter as shown to the user. + /// The line number. + /// The value text to be parsed. + /// The parameter value. + /// When + /// does not represent a number. + private double ParseRoughnessPointParameter(string readParameterText, string parameterName, int lineNumber) + { + try + { + return double.Parse(readParameterText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_not_number, + parameterName, readParameterText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_overflows, + parameterName, readParameterText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Validates the roughness. + /// + /// The roughness. + /// The line number. + /// When + /// is outside the range [0.5, 1]. + private void ValidateRoughness(double roughness, int lineNumber) + { + if (roughness < 0.5 || roughness > 1.0) + { + string message = string.Format(Resources.DikeProfileDataReader_ReadRoughnessPoint_Roughness_0_must_be_in_range_LowerLimit_1_, + roughness, 0.5); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Validates that two dike points are monotonically increasing. + /// + /// The current point. + /// The previous point. + /// The line number. + /// When + /// has an X-coordinate before or equal to that of . + private void ValidateDikePointsAreMonotonicallyIncreasing(Point2D currentPoint, Point2D previousPoint, int lineNumber) + { + if (currentPoint.X <= previousPoint.X) + { + throw CreateCriticalFileReadException(lineNumber, Resources.DikeProfileDataReader_ValidateDikePointsAreMonotonicallyIncreasing_Error_message); + } + } + + /// + /// Attempts to match the given text to a VOORLAND key-value pair. If a match is + /// found, the data block is being read. If valid, the value is stored. + /// + /// The text of the VOORLAND key-value pair. + /// The data to be updated. + /// The reader of the file. + /// The line number. + /// When + /// + /// The value after the VOORLAND key does not represent a valid number. + /// Any of read the parameters in the following data block is invalid. + /// The keyword has already been defined. + /// The X-coordinates of the foreshore are not monotonically increasing. + /// + private bool TryReadForeshoreRoughnessPoints(string text, DikeProfileData data, TextReader reader, ref int lineNumber) + { + Match foreshoreGeometryMatch = new Regex(@"^VOORLAND(\s+(?.+?)?)?\s*$").Match(text); + if (foreshoreGeometryMatch.Success) + { + ValidateNoPriorParameterDefinition(Keywords.VOORLAND, lineNumber); + + string readForeshoreCountText = foreshoreGeometryMatch.Groups["foreshoregeometry"].Value; + var numberOfElements = ParseNumberOfForeshoreElements(readForeshoreCountText, lineNumber); + + ValidateForeshorePointCount(numberOfElements, lineNumber); + + if (numberOfElements == 0) + { + readKeywords |= Keywords.VOORLAND; + return true; + } + + data.ForeshoreGeometry = new RoughnessPoint[numberOfElements]; + for (int i = 0; i < numberOfElements; i++) + { + lineNumber++; + text = ReadLineAndHandleIOExceptions(reader, lineNumber); + if (text == null) + { + string message = string.Format(Resources.DikeProfileDataReader_TryReadForeshoreRoughnessPoints_ForeshoreCount_0_does_not_correspond_ExpectedCount_1_, + i, numberOfElements); + throw CreateCriticalFileReadException(lineNumber, message); + } + + RoughnessPoint roughnessPoint = ReadRoughnessPoint(text, lineNumber); + data.ForeshoreGeometry[i] = roughnessPoint; + + if (i > 0) + { + ValidateForeshorePointsAreMonotonicallyIncreasing(roughnessPoint.Point, + data.ForeshoreGeometry[i - 1].Point, + lineNumber); + } + } + readKeywords |= Keywords.VOORLAND; + return true; + } + return false; + } + + /// + /// Parses the number of foreshore roughness points from a piece of text. + /// + /// The line number. + /// The text. + /// The number of foreshore roughness points. + /// When + /// does not represent a number. + private int ParseNumberOfForeshoreElements(string readForeshoreCountText, int lineNumber) + { + try + { + return int.Parse(readForeshoreCountText, CultureInfo.InvariantCulture); + } + catch (FormatException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_not_integer, + readForeshoreCountText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + catch (OverflowException e) + { + string message = string.Format(Resources.DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_overflows, + readForeshoreCountText); + throw CreateCriticalFileReadException(lineNumber, message, e); + } + } + + /// + /// Validates the number of foreshore points. + /// + /// The number of elements. + /// The line number. + /// When + /// is negative. + private void ValidateForeshorePointCount(int numberOfElements, int lineNumber) + { + if (numberOfElements < 0) + { + string message = string.Format(Resources.DikeProfileDataReader_ReadDikeProfileData_ForeshoreCount_0_cannot_be_negative, + numberOfElements); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + /// + /// Validates that two foreshore points are monotonically increasing. + /// + /// The current point. + /// The previous point. + /// The line number. + /// When + /// has an X-coordinate before or equal to that of . + private void ValidateForeshorePointsAreMonotonicallyIncreasing(Point2D currentPoint, Point2D previousPoint, int lineNumber) + { + if (currentPoint.X <= previousPoint.X) + { + throw CreateCriticalFileReadException(lineNumber, Resources.DikeProfileDataReader_ValidateForeshorePointsAreMonotonicallyIncreasing_Error_message); + } + } + + private bool TryReadMemo(string text, DikeProfileData data, StreamReader reader) + { + Match memoMatch = new Regex(@"^MEMO\s*$").Match(text); + if (memoMatch.Success) + { + data.Memo = reader.ReadToEnd(); + readKeywords |= Keywords.MEMO; + return true; + } + return false; + } + + /// + /// Validates that there is no prior parameter definition of a given parameter. + /// + /// The parameter. + /// The line number. + /// When + /// already has been defined in the file at a line prior to . + private void ValidateNoPriorParameterDefinition(Keywords parameter, int lineNumber) + { + if (readKeywords.HasFlag(parameter)) + { + string message = string.Format(Resources.DikeProfileDataReader_ValidateNoPriorParameterDefinition_Parameter_0_already_defined, + parameter); + throw CreateCriticalFileReadException(lineNumber, message); + } + } + + private static bool CanSafelyCastToEnum(int parameterValue) where TEnum : struct, IConvertible, IComparable, IFormattable + { + return Enum.GetValues(typeof(TEnum)) + .OfType() + .Select(dt => Convert.ToInt32(dt)) + .Any(i => i.Equals(parameterValue)); + } + + /// + /// Reads the next line and handles I/O exceptions. + /// + /// The opened text file reader. + /// Row number for error messaging. + /// The read line, or null when at the end of the file. + /// An critical I/O exception occurred. + private string ReadLineAndHandleIOExceptions(TextReader reader, int currentLine) + { + try + { + return reader.ReadLine(); + } + catch (OutOfMemoryException e) + { + throw CreateCriticalFileReadException(currentLine, UtilsResources.Error_Line_too_big_for_RAM, e); + } + catch (IOException e) + { + var message = new FileReaderErrorMessageBuilder(fileBeingRead).Build(string.Format(UtilsResources.Error_General_IO_ErrorMessage_0_, e.Message)); + throw new CriticalFileReadException(message, e); + } + } + + /// + /// Returns a configured instance of . + /// + /// The line number being read. + /// The critical error message. + /// Optional: exception that caused this exception to be thrown. + /// New with message and inner exception set. + private CriticalFileReadException CreateCriticalFileReadException(int currentLine, string criticalErrorMessage, Exception innerException = null) + { + string locationDescription = string.Format(UtilsResources.TextFile_On_LineNumber_0_, currentLine); + var message = new FileReaderErrorMessageBuilder(fileBeingRead).WithLocation(locationDescription) + .Build(criticalErrorMessage); + return new CriticalFileReadException(message, innerException); + } + + /// + /// Handles the error-case that the file has unexpected text. + /// + /// The unexpected text. + /// The line number. + /// When calling this method, due to + /// having read an unexpected piece of text from the file. + private void HandleUnexpectedText(string text, int lineNumber) + { + string message = string.Format(Resources.DikeProfileDataReader_HandleUnexpectedText_Line_0_is_invalid, + text); + throw CreateCriticalFileReadException(lineNumber, message); + } + + private void ValidateNoMissingKeywords() + { + string[] missingKeywords = GetMissingKeywords(); + if (missingKeywords.Any()) + { + string criticalErrorMessage = string.Format(Resources.DikeProfileDataReader_ValidateNoMissingKeywords_List_mising_keywords_0_, + string.Join(", ", missingKeywords)); + var message = new FileReaderErrorMessageBuilder(fileBeingRead) + .Build(criticalErrorMessage); + throw new CriticalFileReadException(message); + } + } + + private string[] GetMissingKeywords() + { + var requiredKeywords = new[] + { + Keywords.VERSIE, + Keywords.ID, + Keywords.RICHTING, + Keywords.DAM, + Keywords.DAMHOOGTE, + Keywords.VOORLAND, + Keywords.DAMWAND, + Keywords.KRUINHOOGTE, + Keywords.DIJK, + Keywords.MEMO + }; + return requiredKeywords.Where(z => !readKeywords.HasFlag(z)) + .Select(z => z.ToString()) + .ToArray(); + } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocation.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocation.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocation.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,90 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Linq; +using Core.Common.Base.Geometry; +using Ringtoets.Common.IO.Properties; + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// Representation of a profile location as read from a shapefile. + /// + public class ProfileLocation + { + /// + /// Creates a new instance of . + /// + /// The identifier for this + /// The name of this + /// The coordinate offset in the local coordinate system for this + /// The coordinates of the location as a . + /// + /// The Id parameter is null. + /// The Id parameter contains illegal characters. + /// The Point parameter is null. + /// + public ProfileLocation(string id, string name, double offset, Point2D point) + { + if (id == null) + { + throw new ArgumentException(Resources.ProfileLocation_ProfileLocation_Id_is_null); + } + if (!id.All(char.IsLetterOrDigit)) + { + throw new ArgumentException(Resources.ProfileLocation_ProfileLocation_Id_is_invalid); + } + if (double.IsNaN(offset) || double.IsInfinity(offset)) + { + throw new ArgumentException(Resources.ProfileLocation_ProfileLocation_X0_is_invalid); + } + if (point == null) + { + throw new ArgumentException(Resources.ProfileLocation_ProfileLocation_Point_is_null); + } + Id = id; + Name = name; + Offset = offset; + Point = point; + } + + /// + /// Gets the identifier for this . + /// + public string Id { get; private set; } + + /// + /// Gets the name of this . + /// + public string Name { get; private set; } + + /// + /// Gets the coordinate offset in the local coordinate system for this . + /// + public double Offset { get; private set; } + + /// + /// Gets the actual location of this . + /// + public Point2D Point { get; private set; } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocationReader.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocationReader.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/ProfileLocationReader.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,179 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Core.Common.Base.Geometry; +using Core.Common.IO.Exceptions; +using Core.Common.Utils; +using Core.Common.Utils.Builders; +using Core.Components.Gis.Data; +using Core.Components.Gis.IO.Readers; +using Ringtoets.Common.IO.Properties; +using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// This class is responsible for reading map locations for instances. + /// + public class ProfileLocationReader : IDisposable + { + private const string idAttributeName = "ID"; + private const string nameAttributeName = "Naam"; + private const string offsetAttributeName = "X0"; + private readonly PointShapeFileReader pointsShapeFileReader; + + /// + /// Initializes a new instance of the class. + /// + /// The shape file path. + /// is invalid. + /// + /// points to a file that does not exist. + /// does not only contain point features. + /// does not contain all of the required attributes. + /// + public ProfileLocationReader(string shapeFilePath) + { + FileUtils.ValidateFilePath(shapeFilePath); + if (!File.Exists(shapeFilePath)) + { + string message = new FileReaderErrorMessageBuilder(shapeFilePath) + .Build(CoreCommonUtilsResources.Error_File_does_not_exist); + throw new CriticalFileReadException(message); + } + + pointsShapeFileReader = OpenPointsShapeFile(shapeFilePath); + + CheckRequiredAttributePresence(); + } + + /// + /// Gets the number of profile locations present in the shapefile. + /// + public int GetLocationCount + { + get + { + return pointsShapeFileReader.GetNumberOfFeatures(); + } + } + + /// + /// Retrieve a based on the next point feature in the shapefile. + /// + /// Thrown when either: + /// + /// The shapefile misses a value for a required attribute. + /// The shapefile has an attribute whose type is incorrect. + /// + /// A based on the next point feature in the shapefile. + public ProfileLocation GetNextProfileLocation() + { + MapPointData mapPointData = (MapPointData) pointsShapeFileReader.ReadFeature(); + + IDictionary attributes = mapPointData.Features.First().MetaData; + + var attributeIdValue = GetIdAttributeValue(attributes); + var attributeNameValue = GetNameAttributeValue(attributes); + var attributeX0Value = GetOffsetAttributeValue(attributes); + + Point2D point = mapPointData.Features.First().MapGeometries.First().PointCollections.First().First(); + try + { + return new ProfileLocation(attributeIdValue, attributeNameValue, attributeX0Value, point); + } + catch (ArgumentException exception) + { + throw new LineParseException(exception.Message); + } + } + + public void Dispose() + { + pointsShapeFileReader.Dispose(); + } + + /// + /// Open a shapefile containing dike locations as point features. + /// + /// Shape file path. + /// Thrown when is invalid. + /// Shapefile does not only contain point features. + /// Return an instance of . + private static PointShapeFileReader OpenPointsShapeFile(string shapeFilePath) + { + try + { + return new PointShapeFileReader(shapeFilePath); + } + catch (CriticalFileReadException e) + { + string message = new FileReaderErrorMessageBuilder(shapeFilePath) + .Build(Resources.ProfileLocationReader_OpenPointsShapeFile_File_can_only_contain_points); + throw new CriticalFileReadException(message, e); + } + } + + private static double GetOffsetAttributeValue(IDictionary attributes) + { + var attributeX0Value = attributes[offsetAttributeName] as double?; + if (attributeX0Value == null) + { + throw new LineParseException(Resources.ProfileLocationReader_GetProfileLocations_Invalid_X0); + } + return attributeX0Value.Value; + } + + private static string GetNameAttributeValue(IDictionary attributes) + { + var attributeNameValue = attributes[nameAttributeName] as string; + return attributeNameValue; + } + + private static string GetIdAttributeValue(IDictionary attributes) + { + var attributeIdValue = attributes[idAttributeName] as string; + return attributeIdValue; + } + + private void CheckRequiredAttributePresence() + { + IEnumerable requiredAttributes = new[] + { + idAttributeName, + nameAttributeName, + offsetAttributeName + }; + foreach (string attribute in requiredAttributes) + { + if (!pointsShapeFileReader.HasAttribute(attribute)) + { + throw new CriticalFileReadException( + string.Format(Resources.ProfileLocationReader_CheckRequiredAttributePresence_Missing_attribute_0_, attribute)); + } + } + } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/SheetPileType.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/SheetPileType.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/DikeProfiles/SheetPileType.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,44 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +namespace Ringtoets.Common.IO.DikeProfiles +{ + /// + /// Specifies how a dike profile can be characterized. + /// + public enum SheetPileType + { + /// + /// Indicates that the dike profile is characterized using coordinates. + /// + Coordinates = 0, + + /// + /// Indicates that the dike profile is characterized by a sheet pile. + /// + SheetPile = 1, + + /// + /// Indicates that the dike profile is characterized by a sheet pile with a nose construction. + /// + SheetPileWithNoseConstruction = 2 + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs =================================================================== diff -u -rf45ee8cd668d63bb8bc52c7cbeb1b68a44daaaf6 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision f45ee8cd668d63bb8bc52c7cbeb1b68a44daaaf6) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -91,6 +91,302 @@ } /// + /// Looks up a localized string similar to De regel ('{0}') bevat ongeldige tekst.. + /// + public static string DikeProfileDataReader_HandleUnexpectedText_Line_0_is_invalid { + get { + return ResourceManager.GetString("DikeProfileDataReader_HandleUnexpectedText_Line_0_is_invalid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen damhoogte ('{0}') is geen getal.. + /// + public static string DikeProfileDataReader_ParseDamHeight_DamHeight_0_not_number { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseDamHeight_DamHeight_0_not_number", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen damhoogte ('{0}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseDamHeight_DamHeight_0_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseDamHeight_DamHeight_0_overflows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen damtype ('{0}') moet 0, 1, 2 of 3 zijn.. + /// + public static string DikeProfileDataReader_ParseDamType_DamType_0_must_be_in_range { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseDamType_DamType_0_must_be_in_range", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen dijkhoogte ('{0}') is geen getal.. + /// + public static string DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_not_number { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_not_number", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen dijkhoogte ('{0}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseDikeHeight_DikeHeight_0_overflows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten dijk ('{0}') is geen geheel getal.. + /// + public static string DikeProfileDataReader_ParseNumberOfDikeElements_DijkCount_0_not_integer { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseNumberOfDikeElements_DijkCount_0_not_integer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten dijk ('{0}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseNumberOfDikeElements_DikeCount_0_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseNumberOfDikeElements_DikeCount_0_overflows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten voorland ('{0}') is geen geheel getal.. + /// + public static string DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_not_integer { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_not_integer" + + "", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten voorland ('{0}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseNumberOfForeshoreElements_ForeshoreCount_0_overflows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen oriëntatie ('{0}') is geen getal.. + /// + public static string DikeProfileDataReader_ParseOrientation_Orientation_0_not_double { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseOrientation_Orientation_0_not_double", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen oriëntatie ('{0}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseOrientation_Orientation_0_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseOrientation_Orientation_0_overflows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen {0} ('{1}') is geen getal.. + /// + public static string DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_not_number { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_not_nu" + + "mber", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen {0} ('{1}') is te groot of te klein om ingelezen te worden.. + /// + public static string DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_overflows { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseRoughnessPointParameter_ParameterName_0_Value_1_overfl" + + "ows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen damwandtype ('{0}') moet 0, 1 of 2 zijn.. + /// + public static string DikeProfileDataReader_ParseSheetPileType_SheetPileType_0_must_be_in_range { + get { + return ResourceManager.GetString("DikeProfileDataReader_ParseSheetPileType_SheetPileType_0_must_be_in_range", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten dijk ('{0}') mag niet negatief zijn.. + /// + public static string DikeProfileDataReader_ReadDikeProfileData_DikeCount_cannot_be_negative { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadDikeProfileData_DikeCount_cannot_be_negative", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het ingelezen aantal geometriepunten voorland ('{0}') mag niet negatief zijn.. + /// + public static string DikeProfileDataReader_ReadDikeProfileData_ForeshoreCount_0_cannot_be_negative { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadDikeProfileData_ForeshoreCount_0_cannot_be_negative", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen regel ('{0}') is geen 'X Y ruwheid' definitie.. + /// + public static string DikeProfileDataReader_ReadRoughnessPoint_Line_0_not_x_y_roughness_definition { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadRoughnessPoint_Line_0_not_x_y_roughness_definition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen ruwheid ('{0}') moet binnen het bereik [{1}, 1] vallen.. + /// + public static string DikeProfileDataReader_ReadRoughnessPoint_Roughness_0_must_be_in_range_LowerLimit_1_ { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadRoughnessPoint_Roughness_0_must_be_in_range_LowerLimit_" + + "1_", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ruwheid. + /// + public static string DikeProfileDataReader_ReadRoughnessPoint_Roughness_DisplayName { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadRoughnessPoint_Roughness_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to X-coördinaat. + /// + public static string DikeProfileDataReader_ReadRoughnessPoint_X_DisplayName { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadRoughnessPoint_X_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Z-coördinaat. + /// + public static string DikeProfileDataReader_ReadRoughnessPoint_Z_DisplayName { + get { + return ResourceManager.GetString("DikeProfileDataReader_ReadRoughnessPoint_Z_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het aantal dijkpunten gevonden in het bestand ('{0}') komt niet overeen met de daarin aangegeven hoeveelheid ('{1}').. + /// + public static string DikeProfileDataReader_TryReadDikeRoughnessPoints_DikeCount_0_does_not_correspond_ExpectedCount_1_ { + get { + return ResourceManager.GetString("DikeProfileDataReader_TryReadDikeRoughnessPoints_DikeCount_0_does_not_correspond_" + + "ExpectedCount_1_", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het aantal voorlandpunten gevonden in het bestand ('{0}') komt niet overeen met de daarin aangegeven hoeveelheid ('{1}').. + /// + public static string DikeProfileDataReader_TryReadForeshoreRoughnessPoints_ForeshoreCount_0_does_not_correspond_ExpectedCount_1_ { + get { + return ResourceManager.GetString("DikeProfileDataReader_TryReadForeshoreRoughnessPoints_ForeshoreCount_0_does_not_c" + + "orrespond_ExpectedCount_1_", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De X-coördinaten van de dijkgeometrie punten moeten strikt toenemend zijn.. + /// + public static string DikeProfileDataReader_ValidateDikePointsAreMonotonicallyIncreasing_Error_message { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateDikePointsAreMonotonicallyIncreasing_Error_message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De X-coördinaten van de voorlandgeometrie punten moeten strikt toenemend zijn.. + /// + public static string DikeProfileDataReader_ValidateForeshorePointsAreMonotonicallyIncreasing_Error_message { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateForeshorePointsAreMonotonicallyIncreasing_Error_mes" + + "sage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen ID ('{0}') bevat spaties. Spaties zijn niet toegestaan.. + /// + public static string DikeProfileDataReader_ValidateId_Id_0_has_unsupported_white_space { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateId_Id_0_has_unsupported_white_space", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen ID ('{0}') is ongeldig.. + /// + public static string DikeProfileDataReader_ValidateId_Id_0_not_valid { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateId_Id_0_not_valid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De volgende parameters zijn niet aanwezig in het bestand: {0}. + /// + public static string DikeProfileDataReader_ValidateNoMissingKeywords_List_mising_keywords_0_ { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateNoMissingKeywords_List_mising_keywords_0_", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De parameter {0} is al eerder in het bestand gedefinieerd.. + /// + public static string DikeProfileDataReader_ValidateNoPriorParameterDefinition_Parameter_0_already_defined { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateNoPriorParameterDefinition_Parameter_0_already_defi" + + "ned", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De ingelezen oriëntatie waarde ('{0}') moet binnen het bereik [0, 360] vallen.. + /// + public static string DikeProfileDataReader_ValidateOrientation_Orientation_0_must_be_in_range { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateOrientation_Orientation_0_must_be_in_range", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enkel bestanden van versie '4.0' worden ondersteund.. + /// + public static string DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported { + get { + return ResourceManager.GetString("DikeProfileDataReader_ValidateVersion_Only_version_four_zero_supported", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Het bestand bevat een of meerdere multi-polylijnen. Multi-polylijnen worden niet ondersteund.. /// public static string FailureMechanismSectionReader_File_has_unsupported_multiPolyline { @@ -190,6 +486,69 @@ } /// + /// Looks up a localized string similar to De locatie parameter 'ID' mag uitsluitend uit letters en cijfers bestaan.. + /// + public static string ProfileLocation_ProfileLocation_Id_is_invalid { + get { + return ResourceManager.GetString("ProfileLocation_ProfileLocation_Id_is_invalid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De locatie parameter 'ID' heeft geen waarde.. + /// + public static string ProfileLocation_ProfileLocation_Id_is_null { + get { + return ResourceManager.GetString("ProfileLocation_ProfileLocation_Id_is_null", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De locatie heeft geen coördinaten.. + /// + public static string ProfileLocation_ProfileLocation_Point_is_null { + get { + return ResourceManager.GetString("ProfileLocation_ProfileLocation_Point_is_null", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to De locatie parameter 'X0' bevat een ongeldig getal.. + /// + public static string ProfileLocation_ProfileLocation_X0_is_invalid { + get { + return ResourceManager.GetString("ProfileLocation_ProfileLocation_X0_is_invalid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het bestand heeft geen attribuut '{0}'. Dit attribuut is vereist.. + /// + public static string ProfileLocationReader_CheckRequiredAttributePresence_Missing_attribute_0_ { + get { + return ResourceManager.GetString("ProfileLocationReader_CheckRequiredAttributePresence_Missing_attribute_0_", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het profiel heeft geen geldige waarde voor attribuut 'X0'.. + /// + public static string ProfileLocationReader_GetProfileLocations_Invalid_X0 { + get { + return ResourceManager.GetString("ProfileLocationReader_GetProfileLocations_Invalid_X0", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Het bestand mag uitsluitend punten bevatten.. + /// + public static string ProfileLocationReader_OpenPointsShapeFile_File_can_only_contain_points { + get { + return ResourceManager.GetString("ProfileLocationReader_OpenPointsShapeFile_File_can_only_contain_points", resourceCulture); + } + } + + /// /// Looks up a localized string similar to {0} ///Er is geen referentielijn geëxporteerd.. /// Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx =================================================================== diff -u -rf45ee8cd668d63bb8bc52c7cbeb1b68a44daaaf6 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision f45ee8cd668d63bb8bc52c7cbeb1b68a44daaaf6) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -191,4 +191,121 @@ Traject id mag niet leeg zijn. + + De regel ('{0}') bevat ongeldige tekst. + + + De ingelezen damhoogte ('{0}') is geen getal. + + + De ingelezen damhoogte ('{0}') is te groot of te klein om ingelezen te worden. + + + Het ingelezen damtype ('{0}') moet 0, 1, 2 of 3 zijn. + + + De ingelezen dijkhoogte ('{0}') is geen getal. + + + De ingelezen dijkhoogte ('{0}') is te groot of te klein om ingelezen te worden. + + + Het ingelezen aantal geometriepunten dijk ('{0}') is geen geheel getal. + + + Het ingelezen aantal geometriepunten dijk ('{0}') is te groot of te klein om ingelezen te worden. + + + Het ingelezen aantal geometriepunten voorland ('{0}') is geen geheel getal. + + + Het ingelezen aantal geometriepunten voorland ('{0}') is te groot of te klein om ingelezen te worden. + + + De ingelezen oriëntatie ('{0}') is geen getal. + + + De ingelezen oriëntatie ('{0}') is te groot of te klein om ingelezen te worden. + + + De ingelezen {0} ('{1}') is geen getal. + + + De ingelezen {0} ('{1}') is te groot of te klein om ingelezen te worden. + + + Het ingelezen damwandtype ('{0}') moet 0, 1 of 2 zijn. + + + Het ingelezen aantal geometriepunten dijk ('{0}') mag niet negatief zijn. + + + Het ingelezen aantal geometriepunten voorland ('{0}') mag niet negatief zijn. + + + De ingelezen regel ('{0}') is geen 'X Y ruwheid' definitie. + + + De ingelezen ruwheid ('{0}') moet binnen het bereik [{1}, 1] vallen. + + + ruwheid + + + X-coördinaat + + + Z-coördinaat + + + Het aantal dijkpunten gevonden in het bestand ('{0}') komt niet overeen met de daarin aangegeven hoeveelheid ('{1}'). + + + Het aantal voorlandpunten gevonden in het bestand ('{0}') komt niet overeen met de daarin aangegeven hoeveelheid ('{1}'). + + + De X-coördinaten van de dijkgeometrie punten moeten strikt toenemend zijn. + + + De X-coördinaten van de voorlandgeometrie punten moeten strikt toenemend zijn. + + + De ingelezen ID ('{0}') bevat spaties. Spaties zijn niet toegestaan. + + + De ingelezen ID ('{0}') is ongeldig. + + + De volgende parameters zijn niet aanwezig in het bestand: {0} + + + De parameter {0} is al eerder in het bestand gedefinieerd. + + + De ingelezen oriëntatie waarde ('{0}') moet binnen het bereik [0, 360] vallen. + + + Enkel bestanden van versie '4.0' worden ondersteund. + + + Het bestand heeft geen attribuut '{0}'. Dit attribuut is vereist. + + + Het profiel heeft geen geldige waarde voor attribuut 'X0'. + + + Het bestand mag uitsluitend punten bevatten. + + + De locatie parameter 'ID' mag uitsluitend uit letters en cijfers bestaan. + + + De locatie parameter 'ID' heeft geen waarde. + + + De locatie heeft geen coördinaten. + + + De locatie parameter 'X0' bevat een ongeldig getal. + \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj =================================================================== diff -u -r3865311e0dac61da3aa9ca1b4645c16b90290f1e -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision 3865311e0dac61da3aa9ca1b4645c16b90290f1e) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -49,6 +49,12 @@ + + + + + + Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/DikeProfileTest.cs =================================================================== diff -u -rb34f55ea9331b4e253fb9f0d19a11a9e48768f03 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/DikeProfileTest.cs (.../DikeProfileTest.cs) (revision b34f55ea9331b4e253fb9f0d19a11a9e48768f03) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/DikeProfileTest.cs (.../DikeProfileTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -26,15 +26,14 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.Common.Data.Properties; namespace Ringtoets.Common.Data.Test.DikeProfiles { [TestFixture] public class DikeProfileTest { [Test] - public void Constructor_Valid() + public void Constructor_ValidParameters_ExpectedValues() { // Setup var worldCoordinate = new Point2D(1.1, 2.2); @@ -125,7 +124,7 @@ // Assert string paramName = Assert.Throws(call).ParamName; - Assert.AreEqual("foreshoreGeometry", paramName); + Assert.AreEqual("geometry", paramName); } [Test] Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/ForeshoreProfileTest.cs =================================================================== diff -u -rb34f55ea9331b4e253fb9f0d19a11a9e48768f03 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/ForeshoreProfileTest.cs (.../ForeshoreProfileTest.cs) (revision b34f55ea9331b4e253fb9f0d19a11a9e48768f03) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/ForeshoreProfileTest.cs (.../ForeshoreProfileTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -26,14 +26,13 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.Common.Data.Properties; namespace Ringtoets.Common.Data.Test.DikeProfiles { public class ForeshoreProfileTest { [Test] - public void Constructor_Valid() + public void Constructor_ValidParameters_ExpectedValues() { // Setup var worldCoordinate = new Point2D(1.1, 2.2); @@ -60,8 +59,8 @@ Assert.AreEqual(0.0, foreshoreProfile.Orientation.Value); Assert.AreEqual(2, foreshoreProfile.Orientation.NumberOfDecimalPlaces); Assert.IsNull(foreshoreProfile.BreakWater); - CollectionAssert.AreEqual(foreshoreGeometry, foreshoreProfile.ForeshoreGeometry); - Assert.AreEqual(2, foreshoreProfile.ForeshoreGeometry.NumberOfDecimalPlaces); + CollectionAssert.AreEqual(foreshoreGeometry, foreshoreProfile.Geometry); + Assert.AreEqual(2, foreshoreProfile.Geometry.NumberOfDecimalPlaces); } [Test] @@ -83,7 +82,7 @@ // Assert string paramName = Assert.Throws(call).ParamName; - Assert.AreEqual("foreshoreGeometry", paramName); + Assert.AreEqual("geometry", paramName); } [Test] Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataReaderTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataReaderTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataReaderTest.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,721 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.IO; +using Core.Common.Base.Geometry; +using Core.Common.IO.Exceptions; +using Core.Common.TestUtil; +using NUnit.Framework; +using Ringtoets.Common.IO.DikeProfiles; + +namespace Ringtoets.Common.IO.Test.DikeProfiles +{ + [TestFixture] + public class DikeProfileDataReaderTest + { + [Test] + [TestCase("")] + [TestCase(" ")] + [TestCase(null)] + public void ReadDikeProfileData_NoFilePath_ThrowArgumentException(string invalidFilePath) + { + // Setup + var reader = new DikeProfileDataReader(); + + // Call + TestDelegate call = () => reader.ReadDikeProfileData(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet leeg of ongedefinieerd zijn.", + invalidFilePath); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void ReadReferenceLine_FilePathHasInvalidPathCharacter_ThrowArgumentException() + { + // Setup + char[] invalidFileNameChars = Path.GetInvalidFileNameChars(); + + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "profiel001 - Ringtoets.prfl")); + string invalidFilePath = validFilePath.Replace("-", invalidFileNameChars[3].ToString()); + + var reader = new DikeProfileDataReader(); + + // Call + TestDelegate call = () => reader.ReadDikeProfileData(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet de volgende tekens bevatten: {1}", + invalidFilePath, string.Join(", ", invalidFileNameChars)); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void ReadReferenceLine_FilePathIsActuallyDirectoryPath_ThrowArgumentException() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.DirectorySeparatorChar.ToString()); + + var reader = new DikeProfileDataReader(); + + // Call + TestDelegate call = () => reader.ReadDikeProfileData(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet verwijzen naar een lege bestandsnaam.", + invalidFilePath); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void ReadReferenceLine_ShapefileDoesntExist_ThrowCriticalFileReadException() + { + string expectedMessage = "Het bestand bestaat niet."; + ReadFileAndExpectCriticalFileReadException("I_do_not_exist.shp", expectedMessage); + } + + [Test] + [TestCase("profiel001 - Ringtoets.prfl")] + [TestCase("profiel001 - Ringtoets_WithWhiteSpaceAfterValues.prfl")] + public void ReadDikeProfileData_ValidFilePath1_ReturnDikeProfileData( + string validFileName) + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", validFileName)); + + var reader = new DikeProfileDataReader(); + + // Call + DikeProfileData result = reader.ReadDikeProfileData(validFilePath); + + // Assert + Assert.AreEqual("profiel001", result.Id); + Assert.AreEqual(330.0, result.Orientation); + Assert.AreEqual(DamType.None, result.DamType); + Assert.AreEqual(SheetPileType.Coordinates, result.SheetPileType); + Assert.AreEqual(0.0, result.DamHeight); + CollectionAssert.IsEmpty(result.ForeshoreGeometry); + Assert.AreEqual(6.0, result.DikeHeight); + Assert.AreEqual(2, result.DikeGeometry.Length); + Assert.AreEqual(new Point2D(0.0, 0.0), result.DikeGeometry[0].Point); + Assert.AreEqual(1.0, result.DikeGeometry[0].Roughness.Value); + Assert.AreEqual(new Point2D(18.0, 6.0), result.DikeGeometry[1].Point); + Assert.AreEqual(1.0, result.DikeGeometry[1].Roughness.Value); + var expectedMemo = + "Verkenning prfl format:" + Environment.NewLine + + "Basis:" + Environment.NewLine + + "geen dam" + Environment.NewLine + + "geen voorland" + Environment.NewLine + + "recht talud" + Environment.NewLine; + Assert.AreEqual(expectedMemo, result.Memo); + } + + [Test] + public void ReadDikeProfileData_ValidFilePath2_ReturnDikeProfileData() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "profiel004 - Ringtoets.prfl")); + + var reader = new DikeProfileDataReader(); + + // Call + DikeProfileData result = reader.ReadDikeProfileData(validFilePath); + + // Assert + Assert.AreEqual("profiel004", result.Id); + Assert.AreEqual(330.0, result.Orientation); + Assert.AreEqual(DamType.None, result.DamType); + Assert.AreEqual(SheetPileType.Coordinates, result.SheetPileType); + Assert.AreEqual(0.5, result.DamHeight); + Assert.AreEqual(3, result.ForeshoreGeometry.Length); + Assert.AreEqual(new Point2D(-150.0, -9.0), result.ForeshoreGeometry[0].Point); + Assert.AreEqual(1.0, result.ForeshoreGeometry[0].Roughness.Value); + Assert.AreEqual(new Point2D(-100.0, -6.0), result.ForeshoreGeometry[1].Point); + Assert.AreEqual(1.0, result.ForeshoreGeometry[1].Roughness.Value); + Assert.AreEqual(new Point2D(-18.0, -6.0), result.ForeshoreGeometry[2].Point); + Assert.AreEqual(1.0, result.ForeshoreGeometry[2].Roughness.Value); + + Assert.AreEqual(6.0, result.DikeHeight); + Assert.AreEqual(4, result.DikeGeometry.Length); + Assert.AreEqual(new Point2D(-18.0, -6.0), result.DikeGeometry[0].Point); + Assert.AreEqual(1.0, result.DikeGeometry[0].Roughness.Value); + Assert.AreEqual(new Point2D(-2.0, -0.1), result.DikeGeometry[1].Point); + Assert.AreEqual(0.5, result.DikeGeometry[1].Roughness.Value); + Assert.AreEqual(new Point2D(2.0, 0.1), result.DikeGeometry[2].Point); + Assert.AreEqual(1.0, result.DikeGeometry[2].Roughness.Value); + Assert.AreEqual(new Point2D(18.0, 6.0), result.DikeGeometry[3].Point); + Assert.AreEqual(1.0, result.DikeGeometry[3].Roughness.Value); + var expectedMemo = + "Verkenning prfl format:" + Environment.NewLine + + "geen dam" + Environment.NewLine + + "voorland" + Environment.NewLine + + "talud met (ruwe) berm" + Environment.NewLine; + Assert.AreEqual(expectedMemo, result.Memo); + } + + [Test] + public void ReadDikeProfileData_ValidFilePath3_ReturnDikeProfileData() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "profiel001_DifferentDamAndDamwand.prfl")); + + var reader = new DikeProfileDataReader(); + + // Call + DikeProfileData result = reader.ReadDikeProfileData(validFilePath); + + // Assert + Assert.AreEqual("profiel001", result.Id); + Assert.AreEqual(330.0, result.Orientation); + Assert.AreEqual(DamType.HarborDam, result.DamType); + Assert.AreEqual(SheetPileType.SheetPileWithNoseConstruction, result.SheetPileType); + Assert.AreEqual(0.0, result.DamHeight); + CollectionAssert.IsEmpty(result.ForeshoreGeometry); + Assert.AreEqual(6.0, result.DikeHeight); + Assert.AreEqual(2, result.DikeGeometry.Length); + Assert.AreEqual(new Point2D(0.0, 0.0), result.DikeGeometry[0].Point); + Assert.AreEqual(1.0, result.DikeGeometry[0].Roughness.Value); + Assert.AreEqual(new Point2D(18.0, 6.0), result.DikeGeometry[1].Point); + Assert.AreEqual(1.0, result.DikeGeometry[1].Roughness.Value); + var expectedMemo = + "Verkenning prfl format:" + Environment.NewLine + + "Basis:" + Environment.NewLine + + "geen dam" + Environment.NewLine + + "geen voorland" + Environment.NewLine + + "recht talud" + Environment.NewLine; + Assert.AreEqual(expectedMemo, result.Memo); + } + + [Test] + public void ReadDikeProfileData_ValidFilePath4_ReturnDikeProfileData() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "fileWithEmptyDikeAndForeshore.prfl")); + + var reader = new DikeProfileDataReader(); + + // Call + DikeProfileData result = reader.ReadDikeProfileData(validFilePath); + + // Assert + Assert.AreEqual("ikBenBestWaardeloos", result.Id); + Assert.AreEqual(123.456, result.Orientation); + Assert.AreEqual(DamType.None, result.DamType); + Assert.AreEqual(SheetPileType.Coordinates, result.SheetPileType); + Assert.AreEqual(0.0, result.DamHeight); + CollectionAssert.IsEmpty(result.ForeshoreGeometry); + Assert.AreEqual(6.0, result.DikeHeight); + CollectionAssert.IsEmpty(result.DikeGeometry); + var expectedMemo = + "Verkenning prfl format:" + Environment.NewLine + + "Basis:" + Environment.NewLine + + "geen dam" + Environment.NewLine + + "geen voorland" + Environment.NewLine + + "geen dijk" + Environment.NewLine + + "recht talud" + Environment.NewLine; + Assert.AreEqual(expectedMemo, result.Memo); + } + + [Test] + [TestCase("faulty_noId.prfl", "ID")] + [TestCase("faulty_emptyFile.prfl", "VERSIE, ID, RICHTING, DAM, DAMHOOGTE, VOORLAND, DAMWAND, KRUINHOOGTE, DIJK, MEMO")] + [TestCase("faulty_noDam.prfl", "DAM")] + [TestCase("faulty_noDamHoogte.prfl", "DAMHOOGTE")] + [TestCase("faulty_noDamWand.prfl", "DAMWAND")] + [TestCase("faulty_noDijk.prfl", "DIJK")] + [TestCase("faulty_noKruinHoogte.prfl", "KRUINHOOGTE")] + [TestCase("faulty_NoMemo.prfl", "MEMO")] + [TestCase("faulty_noRichting.prfl", "RICHTING")] + [TestCase("faulty_noVersie.prfl", "VERSIE")] + [TestCase("faulty_noVoorland.prfl", "VOORLAND")] + public void ReadDikeProfileData_FilesWithMissingParameters_ThrowCriticalFileReadException( + string faultyFileName, string missingParameterNames) + { + string expectedMessage = string.Format("De volgende parameters zijn niet aanwezig in het bestand: {0}", + missingParameterNames); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedMessage); + } + + [Test] + [TestCase("faulty_incorrectVersion1.prfl")] + [TestCase("faulty_incorrectVersion2.prfl")] + public void ReadDikeProfileData_FileWithUnsupportedVersion_ThrowCriticalFileReadException( + string faultyFileName) + { + string expectedMessage = @"Enkel bestanden van versie '4.0' worden ondersteund."; + ReadFileAndExpectCriticalFileReadException(faultyFileName, 1, expectedMessage); + } + + [Test] + [TestCase("faulty_richtingTooBig.prfl", 360.5)] + [TestCase("faulty_richtingTooSmall.prfl", -12.36)] + public void ReadDikeProfileData_FileWithOrientationOutOfRange_ThrowCriticalFileReadException( + string faultyFileName, double expectedOrientationInFile) + { + string expectedMessage = string.Format("De ingelezen oriëntatie waarde ('{0}') moet binnen het bereik [0, 360] vallen.", + expectedOrientationInFile); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 4, expectedMessage); + } + + [Test] + [TestCase("faulty_damTooBig.prfl", 4)] + [TestCase("faulty_damTooSmall.prfl", -1)] + public void ReadDikeProfileData_FileWithDamTypeOutOfRange_ThrowCriticalFileReadException( + string faultyFileName, int expectedDamInFile) + { + string expectedMessage = string.Format("Het ingelezen damtype ('{0}') moet 0, 1, 2 of 3 zijn.", + expectedDamInFile); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 6, expectedMessage); + } + + [Test] + [TestCase("faulty_damwandTooBig.prfl", 3)] + [TestCase("faulty_damwandTooSmall.prfl", -1)] + public void ReadDikeProfileData_FileWithProfileTypeOutOfRange_ThrowCriticalFileReadException( + string faultyFileName, int expectedDamInFile) + { + string expectedMessage = string.Format("Het ingelezen damwandtype ('{0}') moet 0, 1 of 2 zijn.", + expectedDamInFile); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 11, expectedMessage); + } + + [Test] + public void ReadDikeProfileData_FileWithNegativeForeshorePointCount_ThrowCriticalFileReadException() + { + string expectedMessage = "Het ingelezen aantal geometriepunten voorland ('-1') mag niet negatief zijn."; + ReadFileAndExpectCriticalFileReadException("faulty_voorlandCountNegative.prfl", 9, expectedMessage); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase("faulty_voorlandHasRoughnessTooBig.prfl", 1.234, 11)] + [TestCase("faulty_dijkHasRoughnessTooBig.prfl", 1.321, 15)] + public void ReadDikeProfileData_FileWithRoughnessOutOfRange_ThrowCriticalFileReadException_nl_NL( + string faultyFileName, double expectedFaultyRoughness, int expectedLineNumber) + { + ReadDikeProfileData_FileWithRoughnessOutOfRange_ThrowsCriticalFileReadException( + faultyFileName, expectedFaultyRoughness, expectedLineNumber, "0,5"); + } + + [Test] + [SetCulture("en-US")] + [TestCase("faulty_voorlandHasRoughnessTooSmall.prfl", -0.943, 10)] + [TestCase("faulty_dijkHasRoughnessTooSmall.prfl", -0.123, 14)] + public void ReadDikeProfileData_FileWithRoughnessOutOfRange_ThrowCriticalFileReadException_en_US( + string faultyFileName, double expectedFaultyRoughness, int expectedLineNumber) + { + ReadDikeProfileData_FileWithRoughnessOutOfRange_ThrowsCriticalFileReadException( + faultyFileName, expectedFaultyRoughness, expectedLineNumber, "0.5"); + } + + [Test] + [TestCase("faulty_unparsableVersie.prfl", "syudrj iowydlklk")] + [TestCase("faulty_unparsableVersie_noValue1.prfl", "")] + [TestCase("faulty_unparsableVersie_noValue2.prfl", "")] + [TestCase("faulty_unparsableVersie_IncorrectCharacter.prfl", "4.q")] + [TestCase("faulty_unparsableVersie_NegativeNumber.prfl", "-4.-0")] + public void ReadDikeProfileData_FileWithUnparsableVersion_ThrowCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = @"Enkel bestanden van versie '4.0' worden ondersteund."; + ReadFileAndExpectCriticalFileReadException(faultyFileName, 1, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableId_noValue1.prfl", "")] + [TestCase("faulty_unparsableId_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableId_ThrowCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen ID ('{0}') is ongeldig.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 2, expectedMessage); + } + + [Test] + public void ReadDikeProfileData_FileWithInvalidId_ThrowCriticalFileReadException() + { + string expectedMessage = @"De ingelezen ID ('Id's are not allowed to have any white spaces!') bevat spaties. Spaties zijn niet toegestaan."; + ReadFileAndExpectCriticalFileReadException("faulty_invalidId.prfl", 2, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableVersie_Overflow.prfl", "44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444.0")] + public void ReadDikeProfileData_FileWithOverflowVersion_ThrowCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = @"Enkel bestanden van versie '4.0' worden ondersteund."; + ReadFileAndExpectCriticalFileReadException(faultyFileName, 1, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableRichting.prfl", "d;apwiorqu ihk dfh")] + [TestCase("faulty_unparsableRichting_noValue1.prfl", "")] + [TestCase("faulty_unparsableRichting_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableOrientation_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen oriëntatie ('{0}') is geen getal.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 4, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableRichting_Overflow1.prfl", "-22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222.2")] + [TestCase("faulty_unparsableRichting_Overflow2.prfl", "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222.2")] + public void ReadDikeProfileData_FileWithOverflowOrientation_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen oriëntatie ('{0}') is te groot of te klein om ingelezen te worden.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 4, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDam.prfl", "309845poevotiuwe985v le09b 38- 35thp9 -")] + [TestCase("faulty_unparsableDam_noValue1.prfl", "")] + [TestCase("faulty_unparsableDam_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableDamType_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen damtype ('{0}') moet 0, 1, 2 of 3 zijn.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 6, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDam_Overflow1.prfl", "-55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555")] + [TestCase("faulty_unparsableDam_Overflow2.prfl", "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")] + public void ReadDikeProfileData_FileWithOverflowDamType_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen damtype ('{0}') moet 0, 1, 2 of 3 zijn.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 6, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDamwand.prfl", "0v9 5y8w o8p 38uy-9863")] + [TestCase("faulty_unparsableDamwand_noValue1.prfl", "")] + [TestCase("faulty_unparsableDamwand_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableProfileType_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen damwandtype ('{0}') moet 0, 1 of 2 zijn.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 11, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDamwand_Overflow1.prfl", "-55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555")] + [TestCase("faulty_unparsableDamwand_Overflow2.prfl", "33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + public void ReadDikeProfileData_FileWithOverflowProfileType_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen damwandtype ('{0}') moet 0, 1 of 2 zijn.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 11, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDamhoogte.prfl", "-0 6u498y4")] + [TestCase("faulty_unparsableDamhoogte_noValue1.prfl", "")] + [TestCase("faulty_unparsableDamhoogte_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableDamHeight_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen damhoogte ('{0}') is geen getal.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 7, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDamhoogte_Overflow1.prfl", "-11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")] + [TestCase("faulty_unparsableDamhoogte_Overflow2.prfl", "33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + public void ReadDikeProfileData_FileWithOverflowDamHeight_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen damhoogte ('{0}') is te groot of te klein om ingelezen te worden.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 7, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableKruinhoogte.prfl", "- 8ykultow9yowl;i 3-9854")] + [TestCase("faulty_unparsableKruinhoogte_noValue1.prfl", "")] + [TestCase("faulty_unparsableKruinhoogte_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableDikeHeight_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen dijkhoogte ('{0}') is geen getal.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 12, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableKruinhoogte_Overflow1.prfl", "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")] + [TestCase("faulty_unparsableKruinhoogte_Overflow2.prfl", "-33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + public void ReadDikeProfileData_FileWithOverflowDikeHeight_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen dijkhoogte ('{0}') is te groot of te klein om ingelezen te worden.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 12, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk.prfl", "069xf837 uo uyhtwuht098y hb3loiu43597")] + [TestCase("faulty_unparsableDijk_noValue1.prfl", "")] + [TestCase("faulty_unparsableDijk_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableDikeCount_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen aantal geometriepunten dijk ('{0}') is geen geheel getal.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 16, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk_Overflow1.prfl", "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")] + [TestCase("faulty_unparsableDijk_Overflow2.prfl", "-22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")] + public void ReadDikeProfileData_FileWithOverflowDijkCount_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen aantal geometriepunten dijk ('{0}') is te groot of te klein om ingelezen te worden.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 16, expectedMessage); + } + + [Test] + public void ReadDikeFileName_FileWithNegativeDikeCount_ThrowsCriticalFileReadException() + { + string expectedMessage = "Het ingelezen aantal geometriepunten dijk ('-1') mag niet negatief zijn."; + ReadFileAndExpectCriticalFileReadException("faulty_dijkCountNegative.prfl", 13, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk_X.prfl", 18, "X-coördinaat", "suhf")] + [TestCase("faulty_unparsableDijk_Z.prfl", 20, "Z-coördinaat", "o;jfhe;lhtvwposiu")] + [TestCase("faulty_unparsableDijk_Roughness.prfl", 17, "ruwheid", "dr;tjn")] + [TestCase("faulty_unparsableVoorland_X.prfl", 10, "X-coördinaat", "glkjdhflgkjhsk")] + [TestCase("faulty_unparsableVoorland_Z.prfl", 12, "Z-coördinaat", "lijfhsliufghkj")] + [TestCase("faulty_unparsableVoorland_Roughness.prfl", 10, "ruwheid", ";lsduglkwab")] + public void ReadDikeProfileData_UnparsableRoughnessPoints_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedParameterName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen {0} ('{1}') is geen getal.", + expectedParameterName, expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk_Z_noValue1.prfl", 20, "18.000\t\t\t")] + [TestCase("faulty_unparsableDijk_Z_noValue2.prfl", 20, "18.000")] + [TestCase("faulty_unparsableDijk_Roughness_noValue1.prfl", 17, "-18.000\t-6.000\t\t\t")] + [TestCase("faulty_unparsableDijk_Roughness_noValue2.prfl", 17, "-18.000\t-6.000")] + [TestCase("faulty_unparsableDijk_tooManyValues.prfl", 14, "0.000\t0.000\t1.000\t12.34")] + [TestCase("faulty_unparsableVoorland_X_noValue1.prfl", 11, "\t\t\t\t\t")] + [TestCase("faulty_unparsableVoorland_X_noValue2.prfl", 12, "")] + [TestCase("faulty_unparsableVoorland_Z_noValue1.prfl", 10, "-150.000\t\t\t\t")] + [TestCase("faulty_unparsableVoorland_Z_noValue2.prfl", 11, "-100.000")] + [TestCase("faulty_unparsableVoorland_Roughness_noValue1.prfl", 11, "-100.000\t-6.000\t\t\t\t")] + [TestCase("faulty_unparsableVoorland_Roughness_noValue2.prfl", 12, "-18.000\t-6.000")] + [TestCase("faulty_unparsableVoorland_tooManyValues.prfl", 11, "18.000\t6.000\t1.000\t985.345")] + public void ReadDikeProfileData_NoRoughnessPointDefinition_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen regel ('{0}') is geen 'X Y ruwheid' definitie.", expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk_X_Overflow1.prfl", 18, "X-coördinaat", "99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999")] + [TestCase("faulty_unparsableDijk_X_Overflow2.prfl", 18, "X-coördinaat", "-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444")] + [TestCase("faulty_unparsableDijk_Z_Overflow1.prfl", 19, "Z-coördinaat", "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888.8")] + [TestCase("faulty_unparsableDijk_Z_Overflow2.prfl", 20, "Z-coördinaat", "-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444.4")] + [TestCase("faulty_unparsableDijk_Roughness_Overflow1.prfl", 17, "ruwheid", "-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444.4")] + [TestCase("faulty_unparsableDijk_Roughness_Overflow2.prfl", 17, "ruwheid", "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888.8")] + [TestCase("faulty_unparsableVoorland_X_Overflow1.prfl", 11, "X-coördinaat", "55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555")] + [TestCase("faulty_unparsableVoorland_X_Overflow2.prfl", 12, "X-coördinaat", "-33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + [TestCase("faulty_unparsableVoorland_Z_Overflow1.prfl", 11, "Z-coördinaat", "77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777.7")] + [TestCase("faulty_unparsableVoorland_Z_Overflow2.prfl", 10, "Z-coördinaat", "-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444.4")] + [TestCase("faulty_unparsableVoorland_Roughness_Overflow1.prfl", 10, "ruwheid", "-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444.4")] + [TestCase("faulty_unparsableVoorland_Roughness_Overflow2.prfl", 11, "ruwheid", "-33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + public void ReadDikeProfileData_OverflowRoughnessPoints_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedParameterName, string expectedReadText) + { + string expectedMessage = string.Format("De ingelezen {0} ('{1}') is te groot of te klein om ingelezen te worden.", + expectedParameterName, expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableDijk_missingElements.prfl", 19, 2, 4)] + [TestCase("faulty_unparsableDijk_X_noValue1.prfl", 18, 1, 4)] + [TestCase("faulty_unparsableDijk_X_noValue2.prfl", 18, 1, 4)] + public void ReadDikeProfileData_FileWithMissingDikePoints_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, int actualCount, int expectedCount) + { + string expectedMessage = string.Format("Het aantal dijkpunten gevonden in het bestand ('{0}') komt niet overeen met de daarin aangegeven hoeveelheid ('{1}').", + actualCount, expectedCount); + ReadFileAndExpectCriticalFileReadException(faultyFileName, + expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_dijkNotMonotonicallyIncreasingX_1.prfl", 20, "dijk")] + [TestCase("faulty_dijkNotMonotonicallyIncreasingX_2.prfl", 18, "dijk")] + [TestCase("faulty_voorlandNotMonotonicallyIncreasingX_1.prfl", 12, "voorland")] + [TestCase("faulty_voorlandNotMonotonicallyIncreasingX_2.prfl", 11, "voorland")] + public void ReadDikeProfileData_IncorrectOrderingX_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedTypePrefix) + { + string expectedMessage = string.Format("De X-coördinaten van de {0}geometrie punten moeten strikt toenemend zijn.", + expectedTypePrefix); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableVoorland.prfl", "oidushp9t8w uyp394hp 983 94")] + [TestCase("faulty_unparsableVoorland_noValue1.prfl", "")] + [TestCase("faulty_unparsableVoorland_noValue2.prfl", "")] + public void ReadDikeProfileData_FileWithUnparsableForeshoreCount_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen aantal geometriepunten voorland ('{0}') is geen geheel getal.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 9, expectedMessage); + } + + [Test] + [TestCase("faulty_unparsableVoorland_Overflow1.prfl", "33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")] + [TestCase("faulty_unparsableVoorland_Overflow2.prfl", "-55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555")] + public void ReadDikeProfileData_FileWithOverflowForeshoreCount_ThrowsCriticalFileReadException( + string faultyFileName, string expectedReadText) + { + string expectedMessage = string.Format("Het ingelezen aantal geometriepunten voorland ('{0}') is te groot of te klein om ingelezen te worden.", + expectedReadText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, 9, expectedMessage); + } + + [Test] + public void ReadDikeProfileData_FileWithNegativeForeshoreCount_ThrowsCriticalFileReadException() + { + string expectedMessage = "Het ingelezen aantal geometriepunten voorland ('-1') mag niet negatief zijn."; + ReadFileAndExpectCriticalFileReadException("faulty_voorlandCountNegative.prfl", + 9, expectedMessage); + } + + [Test] + public void ReadDikeProfileData_FileWithMissingForeshorePoints_ThrowsCriticalFileReadException() + { + string expectedMessage = "Het aantal voorlandpunten gevonden in het bestand ('1') komt niet overeen met de daarin aangegeven hoeveelheid ('3')."; + ReadFileAndExpectCriticalFileReadException("faulty_unparsableVoorland_missingElements.prfl", + 11, expectedMessage); + } + + [Test] + [TestCase("faulty_doubleVersie.prfl", 2, "VERSIE")] + [TestCase("faulty_doubleId.prfl", 4, "ID")] + [TestCase("faulty_doubleRichting.prfl", 7, "RICHTING")] + [TestCase("faulty_doubleDam.prfl", 7, "DAM")] + [TestCase("faulty_doubleDamhoogte.prfl", 10, "DAMHOOGTE")] + [TestCase("faulty_doubleVoorland.prfl", 10, "VOORLAND")] + [TestCase("faulty_doubleDamwand.prfl", 12, "DAMWAND")] + [TestCase("faulty_doubleKruinhoogte.prfl", 14, "KRUINHOOGTE")] + [TestCase("faulty_doubleDijk.prfl", 18, "DIJK")] + public void ReadDikeProfileData_FileWithDoubleParameter_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedKeyword) + { + string expectedMessage = string.Format("De parameter {0} is al eerder in het bestand gedefinieerd.", + expectedKeyword); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + [Test] + [TestCase("faulty_unexpectedText1.prfl", 5, "Nobody expects the Spanish inquisition!")] + [TestCase("faulty_unexpectedText2.prfl", 10, "0.000\t0.000\t1.000")] + [TestCase("faulty_unexpectedText3.prfl", 11, "18.000\t6.000\t1.000")] + [TestCase("faulty_unexpectedText4.prfl", 17, "-18.000\t-6.000\t1.000")] + [TestCase("faulty_unexpectedText5.prfl", 20, "18.000\t6.000\t1.000")] + [TestCase("faulty_unexpectedText6.prfl", 16, "haha hihi hoho hehe")] + [TestCase("faulty_unexpectedText7.prfl", 13, "Niemand weet, wat repelsteeltje eet!")] + public void ReadDikeProfileData_FileWithUnexpectedText_ThrowsCriticalFileReadException( + string faultyFileName, int expectedLineNumber, string expectedText) + { + string expectedMessage = string.Format("De regel ('{0}') bevat ongeldige tekst.", + expectedText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + + private void ReadFileAndExpectCriticalFileReadException(string fileName, int lineNumber, string errorMessage) + { + // Setup + string faultyFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", fileName)); + + var reader = new DikeProfileDataReader(); + + // Call + TestDelegate call = () => reader.ReadDikeProfileData(faultyFilePath); + + // Assert + string message = Assert.Throws(call).Message; + string expectedMessage = string.Format("Fout bij het lezen van bestand '{0}' op regel {1}: {2}", + faultyFilePath, lineNumber, errorMessage); + Assert.AreEqual(expectedMessage, message); + } + + private void ReadFileAndExpectCriticalFileReadException(string fileName, string errorMessage) + { + // Setup + string faultyFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", fileName)); + + var reader = new DikeProfileDataReader(); + + // Call + TestDelegate call = () => reader.ReadDikeProfileData(faultyFilePath); + + // Assert + string message = Assert.Throws(call).Message; + string expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': {1}", + faultyFilePath, errorMessage); + Assert.AreEqual(expectedMessage, message); + } + + private void ReadDikeProfileData_FileWithRoughnessOutOfRange_ThrowsCriticalFileReadException( + string faultyFileName, double expectedFaultyRoughness, int expectedLineNumber, string expectedLowerLimitText) + { + string expectedMessage = string.Format("De ingelezen ruwheid ('{0}') moet binnen het bereik [{1}, 1] vallen.", + expectedFaultyRoughness, expectedLowerLimitText); + ReadFileAndExpectCriticalFileReadException(faultyFileName, expectedLineNumber, expectedMessage); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/DikeProfileDataTest.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,194 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Linq; +using Core.Common.Base.Geometry; +using NUnit.Framework; +using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.IO.DikeProfiles; + +namespace Ringtoets.Common.IO.Test.DikeProfiles +{ + [TestFixture] + public class DikeProfileDataTest + { + [Test] + public void Constructor_ExpectedValues() + { + // Call + var dikeProfileData = new DikeProfileData(); + + // Assert + Assert.IsNull(dikeProfileData.Id); + Assert.IsNaN(dikeProfileData.Orientation); + Assert.AreEqual(DamType.None, dikeProfileData.DamType); + Assert.IsNaN(dikeProfileData.DamHeight); + Assert.IsNaN(dikeProfileData.DikeHeight); + Assert.AreEqual(SheetPileType.Coordinates, dikeProfileData.SheetPileType); + Assert.IsNull(dikeProfileData.Memo); + CollectionAssert.IsEmpty(dikeProfileData.ForeshoreGeometry); + CollectionAssert.IsEmpty(dikeProfileData.DikeGeometry); + } + + [Test] + public void Id_SetNewValue_GetNewlySetValue() + { + // Setup + var dikeProfileData = new DikeProfileData(); + + string coolText = "haha"; + + // Call + dikeProfileData.Id = coolText; + + // Assert + Assert.AreEqual(coolText, dikeProfileData.Id); + } + + [Test] + public void Orientation_SetNewValue_GetNewlySetValue() + { + // Setup + var newValue = new Random(21).NextDouble()*360; + var dikeProfileData = new DikeProfileData(); + + // Call + dikeProfileData.Orientation = newValue; + + // Assert + Assert.AreEqual(newValue, dikeProfileData.Orientation); + } + + [Test] + public void DamType_SetNewValue_GetsNewlySetValue() + { + // Setup + var index = new Random(21).Next(0, 3); + var dikeProfileData = new DikeProfileData(); + + DamType newValue = Enum.GetValues(typeof(DamType)).OfType().ElementAt(index); + + // Call + dikeProfileData.DamType = newValue; + + // Assert + Assert.AreEqual(newValue, dikeProfileData.DamType); + } + + [Test] + public void DamHeight_SetNewValue_GetNewlySetValue() + { + // Setup + var newValue = new Random(21).NextDouble(); + var dikeProfileData = new DikeProfileData(); + + // Call + dikeProfileData.DamHeight = newValue; + + // Assert + Assert.AreEqual(newValue, dikeProfileData.DamHeight); + } + + [Test] + public void DikeHeight_SetNewValue_GetNewlySetValue() + { + // Setup + var newValue = new Random(21).NextDouble(); + var dikeProfileData = new DikeProfileData(); + + // Call + dikeProfileData.DikeHeight = newValue; + + // Assert + Assert.AreEqual(newValue, dikeProfileData.DikeHeight); + } + + [Test] + public void SheetPilingType_SetNewValue_GetsNewlySetValue() + { + // Setup + var index = new Random(21).Next(0, 3); + var dikeProfileData = new DikeProfileData(); + + SheetPileType newValue = Enum.GetValues(typeof(SheetPileType)).OfType().ElementAt(index); + + // Call + dikeProfileData.SheetPileType = newValue; + + // Assert + Assert.AreEqual(newValue, dikeProfileData.SheetPileType); + } + + [Test] + public void Memo_SetNewValue_GetNewlySetValue() + { + // Setup + var dikeProfileData = new DikeProfileData(); + + string coolText = "hihi"; + + // Call + dikeProfileData.Memo = coolText; + + // Assert + Assert.AreEqual(coolText, dikeProfileData.Memo); + } + + [Test] + public void ForeshoreGeometry_SetNewArray_GetsNewlySetArray() + { + // Setup + var dikeProfileData = new DikeProfileData(); + + var newValue = new[] + { + new RoughnessPoint(new Point2D(0, 0), 1.0), + new RoughnessPoint(new Point2D(1, 1), 0.9) + }; + + // Call + dikeProfileData.ForeshoreGeometry = newValue; + + // Assert + Assert.AreSame(newValue, dikeProfileData.ForeshoreGeometry); + } + + [Test] + public void DikeGeometry_SetNewArray_GetsNewlySetArray() + { + // Setup + var dikeProfileData = new DikeProfileData(); + + var newValue = new[] + { + new RoughnessPoint(new Point2D(1, 1), 1.0), + new RoughnessPoint(new Point2D(3, 3), 0.9) + }; + + // Call + dikeProfileData.DikeGeometry = newValue; + + // Assert + Assert.AreSame(newValue, dikeProfileData.DikeGeometry); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationReaderTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationReaderTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationReaderTest.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,381 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using Core.Common.Base.Geometry; +using Core.Common.IO.Exceptions; +using Core.Common.TestUtil; +using NUnit.Framework; +using Ringtoets.Common.IO.DikeProfiles; + +namespace Ringtoets.Common.IO.Test.DikeProfiles +{ + [TestFixture] + public class ProfileLocationReaderTest + { + [Test] + public void Constructor_ValidFilePath_ExpectedValues() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + + // Call + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Assert + Assert.IsInstanceOf(reader); + } + } + + [Test] + [TestCase("")] + [TestCase(" ")] + [TestCase(null)] + public void Constructor_NoFilePath_ThrowArgumentException(string invalidFilePath) + { + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet leeg of ongedefinieerd zijn.", + invalidFilePath); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void Constructor_FilePathHasInvalidPathCharacter_ThrowArgumentException() + { + // Setup + char[] invalidFileNameChars = Path.GetInvalidFileNameChars(); + + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + string invalidFilePath = validFilePath.Replace("1", invalidFileNameChars[1].ToString()); + + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet de volgende tekens bevatten: {1}", + invalidFilePath, string.Join(", ", invalidFileNameChars)); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void Constructor_FilePathIsActuallyDirectoryPath_ThrowArgumentException() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.DirectorySeparatorChar.ToString()); + + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet verwijzen naar een lege bestandsnaam.", + invalidFilePath); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void Constructor_ShapefileDoesntExist_ThrowCriticalFileReadException() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + "I_do_not_exist.shp"); + + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Het bestand bestaat niet.", + invalidFilePath); + var message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [TestCase("Multiple_Polygon_with_ID.shp")] + [TestCase("Multiple_PolyLine_with_ID.shp")] + [TestCase("Single_Multi-Polygon_with_ID.shp")] + [TestCase("Single_Multi-PolyLine_with_ID.shp")] + [TestCase("Single_Polygon_with_ID.shp")] + [TestCase("Single_PolyLine_with_ID.shp")] + public void Constructor_ShapefileDoesNotHavePointFeatures_ThrowCriticalFileReadException(string shapeFileName) + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Core.Components.Gis.IO, + shapeFileName); + + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Het bestand mag uitsluitend punten bevatten.", + invalidFilePath); + var message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [TestCase("Voorlanden_12-2_WithoutId.shp", "ID")] + [TestCase("Voorlanden_12-2_WithoutName.shp", "Naam")] + [TestCase("Voorlanden_12-2_WithoutX0.shp", "X0")] + public void Constructor_FileMissingAttributeColumn_ThrowCriticalFileReadException( + string fileName, string missingColumnName) + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", fileName)); + + // Call + TestDelegate call = () => new ProfileLocationReader(invalidFilePath); + + // Assert + var expectedMessage = string.Format("Het bestand heeft geen attribuut '{0}'. Dit attribuut is vereist.", + missingColumnName); + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + public void GetLocationCount_FileWithFivePoints_GetFive() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Call + int count = reader.GetLocationCount; + + // Assert + Assert.AreEqual(5, count); + } + } + + [Test] + [TestCase("Voorlanden 12-2.shp", 5)] + [TestCase("Voorlanden_12-2_Alternative.shp", 9)] + public void GetDikeProfileLocation_FileWithNLocations_GetNDikeProfileLocations( + string fileName, int expectedNumberOfDikeProfileLocations) + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", fileName)); + IList dikeProfileLocations = new List(); + + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Call + int count = reader.GetLocationCount; + for (int i = 0; i < count; i++) + { + dikeProfileLocations.Add(reader.GetNextProfileLocation()); + } + + // Assert + Assert.AreEqual(expectedNumberOfDikeProfileLocations, dikeProfileLocations.Count); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithNullId_ThrowCriticalFileReadException() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden_12-2_EmptyId.shp")); + + using (var reader = new ProfileLocationReader(invalidFilePath)) + { + // Call + TestDelegate call = () => reader.GetNextProfileLocation(); + + // Assert + var expectedMessage = "De locatie parameter 'ID' heeft geen waarde."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithNullX0_ThrowCriticalFileReadException() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden_12-2_EmptyX0.shp")); + + using (var reader = new ProfileLocationReader(invalidFilePath)) + { + // Call + TestDelegate call = () => reader.GetNextProfileLocation(); + + // Assert + var expectedMessage = "Het profiel heeft geen geldige waarde voor attribuut 'X0'."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + } + + [Test] + [TestCase("Voorlanden_12-2_IdWithSymbol.shp")] + [TestCase("Voorlanden_12-2_IdWithWhitespace.shp")] + public void GetDikeProfileLocation_FileWithIllegalCharactersInId_ThrowCriticalFileReadException(string fileName) + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", fileName)); + + using (var reader = new ProfileLocationReader(invalidFilePath)) + { + // Call + TestDelegate call = () => reader.GetNextProfileLocation(); + + // Assert + var expectedMessage = "De locatie parameter 'ID' mag uitsluitend uit letters en cijfers bestaan."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithNullAsNameAttribute_GetLocations() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden_12-2_EmptyName.shp")); + IList dikeProfileLocations = new List(); + + using (var reader = new ProfileLocationReader(invalidFilePath)) + { + // Call + int count = reader.GetLocationCount; + for (int i = 0; i < count; i++) + { + dikeProfileLocations.Add(reader.GetNextProfileLocation()); + } + + // Assert + Assert.AreEqual(5, dikeProfileLocations.Count); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithFivePoints_GetFiveLocationsWithCorrectAtrributes() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + IList dikeProfileLocations = new List(); + + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Call + int count = reader.GetLocationCount; + for (int i = 0; i < count; i++) + { + dikeProfileLocations.Add(reader.GetNextProfileLocation()); + } + + // Assert + Assert.AreEqual("profiel001", dikeProfileLocations[0].Id); + Assert.AreEqual("profiel002", dikeProfileLocations[1].Id); + Assert.AreEqual("profiel003", dikeProfileLocations[2].Id); + Assert.AreEqual("profiel004", dikeProfileLocations[3].Id); + Assert.AreEqual("profiel005", dikeProfileLocations[4].Id); + + Assert.AreEqual("profiel001", dikeProfileLocations[0].Name); + Assert.AreEqual("profiel002", dikeProfileLocations[1].Name); + Assert.AreEqual("profiel003", dikeProfileLocations[2].Name); + Assert.AreEqual("profiel004", dikeProfileLocations[3].Name); + Assert.AreEqual("profiel005", dikeProfileLocations[4].Name); + + Assert.AreEqual(-10.61273321, dikeProfileLocations[0].Offset); + Assert.AreEqual(-9.4408575, dikeProfileLocations[1].Offset); + Assert.AreEqual(8.25860742, dikeProfileLocations[2].Offset); + Assert.AreEqual(-17.93475471, dikeProfileLocations[3].Offset); + Assert.AreEqual(15.56165507, dikeProfileLocations[4].Offset); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithFivePoints_GetFiveLocationsWithPoint2D() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + IList dikeProfileLocations = new List(); + + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Call + int count = reader.GetLocationCount; + for (int i = 0; i < count; i++) + { + dikeProfileLocations.Add(reader.GetNextProfileLocation()); + } + + // Assert + Assert.IsInstanceOf(typeof(Point2D), dikeProfileLocations[0].Point); + Assert.IsInstanceOf(typeof(Point2D), dikeProfileLocations[1].Point); + Assert.IsInstanceOf(typeof(Point2D), dikeProfileLocations[2].Point); + Assert.IsInstanceOf(typeof(Point2D), dikeProfileLocations[3].Point); + Assert.IsInstanceOf(typeof(Point2D), dikeProfileLocations[4].Point); + } + } + + [Test] + public void GetDikeProfileLocation_FileWithFivePoints_GetFivePoint2DsWithCorrectCoordinates() + { + // Setup + string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "Voorlanden 12-2.shp")); + IList dikeProfileLocations = new List(); + + using (var reader = new ProfileLocationReader(validFilePath)) + { + // Call + int count = reader.GetLocationCount; + for (int i = 0; i < count; i++) + { + dikeProfileLocations.Add(reader.GetNextProfileLocation()); + } + + // Assert + Assert.AreEqual(131223.21400000341, dikeProfileLocations[0].Point.X); + Assert.AreEqual(133854.31200000079, dikeProfileLocations[1].Point.X); + Assert.AreEqual(135561.0960000027, dikeProfileLocations[2].Point.X); + Assert.AreEqual(136432.12250000238, dikeProfileLocations[3].Point.X); + Assert.AreEqual(136039.49100000039, dikeProfileLocations[4].Point.X); + + Assert.AreEqual(548393.43800000288, dikeProfileLocations[0].Point.Y); + Assert.AreEqual(545323.13749999879, dikeProfileLocations[1].Point.Y); + Assert.AreEqual(541920.34149999847, dikeProfileLocations[2].Point.Y); + Assert.AreEqual(538235.26300000318, dikeProfileLocations[3].Point.Y); + Assert.AreEqual(533920.28050000477, dikeProfileLocations[4].Point.Y); + } + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/DikeProfiles/ProfileLocationTest.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,124 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Common.Base.Geometry; +using NUnit.Framework; +using Ringtoets.Common.IO.DikeProfiles; + +namespace Ringtoets.Common.IO.Test.DikeProfiles +{ + [TestFixture] + public class ProfileLocationTest + { + [Test] + public void Constructor_InitializedWithValidValues_CorrectProperties() + { + // Setup + var referencePoint = new Point2D(2.2, 3.3); + ProfileLocation profileLocation = new ProfileLocation("id", "name", 1.1, referencePoint); + + // Assert + Assert.AreEqual("id", profileLocation.Id); + Assert.AreEqual("name", profileLocation.Name); + Assert.AreEqual(1.1, profileLocation.Offset); + Assert.AreEqual(referencePoint, profileLocation.Point); + } + + [Test] + public void Constructor_InitializedWithValidValues_CorrectPropertyTypes() + { + // Setup + var referencePoint = new Point2D(2.2, 3.3); + ProfileLocation profileLocation = new ProfileLocation("id", null, 1.1, referencePoint); + + // Assert + Assert.IsInstanceOf(typeof(string), profileLocation.Id); + Assert.IsNull(profileLocation.Name); + Assert.IsInstanceOf(typeof(double), profileLocation.Offset); + Assert.IsInstanceOf(typeof(Point2D), profileLocation.Point); + } + + [Test] + public void Constructor_InitializedWithNullId_ThrownArgumentException() + { + // Setup + var referencePoint = new Point2D(2.2, 3.3); + + // Call + TestDelegate call = () => new ProfileLocation(null, "aNAME", 1.1, referencePoint); + + // Assert + var expectedMessage = "De locatie parameter 'ID' heeft geen waarde."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + public void Constructor_InitializedWithNullPoint_ThrownArgumentException() + { + // Call + TestDelegate call = () => new ProfileLocation("anID", "aNAME", 1.1, null); + + // Assert + var expectedMessage = "De locatie heeft geen coördinaten."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [TestCase("a 1")] + [TestCase("a#1")] + [TestCase(" ")] + [TestCase("*&(%&$")] + public void Constructor_InitializedWithInvalidId_ThrownArgumentException(string id) + { + // Setup + var referencePoint = new Point2D(2.2, 3.3); + + // Call + TestDelegate call = () => new ProfileLocation(id, "aNAME", 1.1, referencePoint); + + // Assert + var expectedMessage = "De locatie parameter 'ID' mag uitsluitend uit letters en cijfers bestaan."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [TestCase(double.NaN)] + [TestCase(double.PositiveInfinity)] + [TestCase(double.NegativeInfinity)] + public void Constructor_InitializedWithInvalidId_ThrownArgumentException(double x0) + { + // Setup + var referencePoint = new Point2D(2.2, 3.3); + + // Call + TestDelegate call = () => new ProfileLocation("anID", "aNAME", x0, referencePoint); + + // Assert + var expectedMessage = "De locatie parameter 'X0' bevat een ongeldig getal."; + string message = Assert.Throws(call).Message; + Assert.AreEqual(expectedMessage, message); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj =================================================================== diff -u -r3865311e0dac61da3aa9ca1b4645c16b90290f1e -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision 3865311e0dac61da3aa9ca1b4645c16b90290f1e) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -54,6 +54,10 @@ + + + + @@ -105,6 +109,7 @@ + + + \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/DikeProfilesImporter.cs =================================================================== diff -u -rfdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/DikeProfilesImporter.cs (.../DikeProfilesImporter.cs) (revision fdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/DikeProfilesImporter.cs (.../DikeProfilesImporter.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -26,7 +26,7 @@ using Core.Common.IO.Readers; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.GrassCoverErosionInwards.IO.DikeProfiles; +using Ringtoets.Common.IO.DikeProfiles; using Ringtoets.Integration.Plugin.Properties; using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; @@ -57,10 +57,10 @@ this.importTarget = importTarget; } - protected override void CreateProfiles(ReadResult importDikeProfilesResult, + protected override void CreateProfiles(ReadResult importProfileLocationResult, ReadResult importDikeProfileDataResult) { - IEnumerable importedDikeProfiles = CreateDikeProfiles(importDikeProfilesResult.ImportedItems, + IEnumerable importedDikeProfiles = CreateDikeProfiles(importProfileLocationResult.ImportedItems, importDikeProfileDataResult.ImportedItems); foreach (DikeProfile dikeProfile in importedDikeProfiles) @@ -72,14 +72,14 @@ protected override void HandleUserCancellingImport() { log.Info(Resources.DikeProfilesImporter_HandleUserCancellingImport_dikeprofile_import_aborted); - Canceled = false; + base.HandleUserCancellingImport(); } - private IEnumerable CreateDikeProfiles(IEnumerable dikeProfileLocationCollection, + private IEnumerable CreateDikeProfiles(IEnumerable dikeProfileLocationCollection, ICollection dikeProfileDataCollection) { var dikeProfiles = new List(); - foreach (DikeProfileLocation dikeProfileLocation in dikeProfileLocationCollection) + foreach (ProfileLocation dikeProfileLocation in dikeProfileLocationCollection) { string id = dikeProfileLocation.Id; @@ -97,7 +97,7 @@ return dikeProfiles; } - private static DikeProfile CreateDikeProfile(DikeProfileLocation dikeProfileLocation, DikeProfileData dikeProfileData) + private static DikeProfile CreateDikeProfile(ProfileLocation dikeProfileLocation, DikeProfileData dikeProfileData) { var dikeProfile = new DikeProfile(dikeProfileLocation.Point, dikeProfileData.DikeGeometry, dikeProfileData.ForeshoreGeometry.Select(fg => fg.Point).ToArray(), Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ForeshoreProfilesImporter.cs =================================================================== diff -u -rfdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ForeshoreProfilesImporter.cs (.../ForeshoreProfilesImporter.cs) (revision fdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ForeshoreProfilesImporter.cs (.../ForeshoreProfilesImporter.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -26,7 +26,7 @@ using Core.Common.IO.Readers; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.GrassCoverErosionInwards.IO.DikeProfiles; +using Ringtoets.Common.IO.DikeProfiles; using Ringtoets.Integration.Plugin.Properties; using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; @@ -55,23 +55,23 @@ this.importTarget = importTarget; } - protected override void CreateProfiles(ReadResult importDikeProfilesResult, + protected override void CreateProfiles(ReadResult importProfileLocationResult, ReadResult importDikeProfileDataResult) { IEnumerable importedForeshoreProfiles = - CreateForeshoreProfiles(importDikeProfilesResult.ImportedItems, importDikeProfileDataResult.ImportedItems); + CreateForeshoreProfiles(importProfileLocationResult.ImportedItems, importDikeProfileDataResult.ImportedItems); foreach (ForeshoreProfile foreshoreProfile in importedForeshoreProfiles) { importTarget.Add(foreshoreProfile); } } - private IEnumerable CreateForeshoreProfiles(ICollection dikeProfileLocationCollection, + private IEnumerable CreateForeshoreProfiles(ICollection dikeProfileLocationCollection, ICollection dikeProfileDataCollection) { var foreshoreProfiles = new List(); - foreach (DikeProfileLocation dikeProfileLocation in dikeProfileLocationCollection) + foreach (ProfileLocation dikeProfileLocation in dikeProfileLocationCollection) { string id = dikeProfileLocation.Id; @@ -89,7 +89,7 @@ return foreshoreProfiles; } - private static ForeshoreProfile CreateForeshoreProfile(DikeProfileLocation dikeProfileLocation, DikeProfileData dikeProfileData) + private static ForeshoreProfile CreateForeshoreProfile(ProfileLocation dikeProfileLocation, DikeProfileData dikeProfileData) { var foreshoreProfile = new ForeshoreProfile(dikeProfileLocation.Point, dikeProfileData.ForeshoreGeometry.Select(fg => fg.Point).ToArray(), @@ -106,7 +106,7 @@ protected override void HandleUserCancellingImport() { log.Info(Resources.ForeshoreProfilesImporter_HandleUserCancellingImport_foreshoreprofile_import_aborted); - Canceled = false; + base.HandleUserCancellingImport(); } } } \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ProfilesImporter.cs =================================================================== diff -u -rfdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ProfilesImporter.cs (.../ProfilesImporter.cs) (revision fdb3a9b9fb6e78d48d47b6fb1abe5db45f80b6dd) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ProfilesImporter.cs (.../ProfilesImporter.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -31,7 +31,7 @@ using log4net; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.GrassCoverErosionInwards.IO.DikeProfiles; +using Ringtoets.Common.IO.DikeProfiles; using Ringtoets.Integration.Plugin.Properties; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; @@ -68,7 +68,7 @@ public override bool Import() { - ReadResult importDikeProfilesResult = ReadDikeProfileLocations(); + ReadResult importDikeProfilesResult = ReadProfileLocations(); if (importDikeProfilesResult.CriticalErrorOccurred) { return false; @@ -101,9 +101,9 @@ /// /// Create profile objects from location and geometry data. /// - /// The read dike profile locations. + /// The read profile locations. /// The read dike profile geometries. - protected abstract void CreateProfiles(ReadResult importDikeProfilesResult, + protected abstract void CreateProfiles(ReadResult importProfileLocationResult, ReadResult importDikeProfileDataResult); /// @@ -125,14 +125,33 @@ return null; } - private ReadResult ReadDikeProfileLocations() + /// + /// Obtain the dike profile geometry object matching a given . + /// + /// The available dike profile geometry objects. + /// The id on which to match. + /// The matching . + protected static DikeProfileData GetMatchingDikeProfileData(IEnumerable dikeProfileDataCollection, string id) { + return dikeProfileDataCollection.FirstOrDefault(d => d.Id.Equals(id)); + } + + /// + /// Act upon the user cancelling the import operation. + /// + protected virtual void HandleUserCancellingImport() + { + Canceled = false; + } + + private ReadResult ReadProfileLocations() + { NotifyProgress(Resources.ProfilesImporter_ReadProfileLocations_reading_profilelocations, 1, 1); try { - using (var dikeProfileLocationReader = new DikeProfileLocationReader(FilePath)) + using (var profileLocationReader = new ProfileLocationReader(FilePath)) { - return GetDikeProfileLocationReadResult(dikeProfileLocationReader); + return GetProfileLocationReadResult(profileLocationReader); } } catch (CriticalFileReadException exception) @@ -143,71 +162,71 @@ { log.Error(exception.Message); } - return new ReadResult(true); + return new ReadResult(true); } - private ReadResult GetDikeProfileLocationReadResult(DikeProfileLocationReader dikeProfileLocationReader) + private ReadResult GetProfileLocationReadResult(ProfileLocationReader profileLocationReader) { - var dikeProfileLocations = new Collection(); + var profileLocations = new Collection(); - int totalNumberOfSteps = dikeProfileLocationReader.GetLocationCount; + int totalNumberOfSteps = profileLocationReader.GetLocationCount; for (int i = 0; i < totalNumberOfSteps; i++) { if (Canceled) { - return new ReadResult(false); + return new ReadResult(false); } try { - NotifyProgress(Resources.ProfilesImporter_GetDikeProfileLocationReadResult_reading_profilelocation, i + 1, totalNumberOfSteps); - AddNextDikeProfileLocation(dikeProfileLocationReader, dikeProfileLocations); + NotifyProgress(Resources.ProfilesImporter_GetProfileLocationReadResult_reading_profilelocation, i + 1, totalNumberOfSteps); + AddNextProfileLocation(profileLocationReader, profileLocations); } catch (LineParseException exception) { - var message = String.Format( - Resources.ProfilesImporter_GetDikeProfileLocationReadResult_Error_reading_Profile_LineNumber_0_Error_1_The_Profile_is_skipped, + var message = string.Format( + Resources.ProfilesImporter_GetProfileLocationReadResult_Error_reading_Profile_LineNumber_0_Error_1_The_Profile_is_skipped, i + 1, exception.Message); log.Warn(message); } catch (CriticalFileReadException exception) { log.Error(exception.Message); - return new ReadResult(true); + return new ReadResult(true); } } - return new ReadResult(false) + return new ReadResult(false) { - ImportedItems = dikeProfileLocations + ImportedItems = profileLocations }; } /// - /// Get the next from - /// and add to in case it is close enough to the . + /// Get the next from + /// and add to in case it is close enough to the . /// - /// Reader reading objects from a shapefile. - /// Collection of objects - /// to which the new is to be added. + /// Reader reading objects from a shapefile. + /// Collection of objects + /// to which the new is to be added. /// /// The shapefile misses a value for a required attribute. /// The shapefile has an attribute whose type is incorrect. /// - private void AddNextDikeProfileLocation(DikeProfileLocationReader dikeProfileLocationReader, ICollection dikeProfileLocations) + private void AddNextProfileLocation(ProfileLocationReader profileLocationReader, ICollection profileLocations) { - DikeProfileLocation dikeProfileLocation = dikeProfileLocationReader.GetNextDikeProfileLocation(); - double distanceToReferenceLine = GetDistanceToReferenceLine(dikeProfileLocation.Point); + ProfileLocation profileLocation = profileLocationReader.GetNextProfileLocation(); + double distanceToReferenceLine = GetDistanceToReferenceLine(profileLocation.Point); if (distanceToReferenceLine > 1.0) { - log.ErrorFormat(Resources.ProfilesImporter_AddNextDikeProfileLocation_0_skipping_location_outside_referenceline, dikeProfileLocation.Id); + log.ErrorFormat(Resources.ProfilesImporter_AddNextProfileLocation_0_skipping_location_outside_referenceline, profileLocation.Id); return; } - if (dikeProfileLocations.Any(dpl => dpl.Id.Equals(dikeProfileLocation.Id))) + if (profileLocations.Any(dpl => dpl.Id.Equals(profileLocation.Id))) { - log.WarnFormat(Resources.ProfilesImporter_AddNextDikeProfileLocation_Location_with_id_0_already_read, dikeProfileLocation.Id); + log.WarnFormat(Resources.ProfilesImporter_AddNextProfileLocation_Location_with_id_0_already_read, profileLocation.Id); } - dikeProfileLocations.Add(dikeProfileLocation); + profileLocations.Add(profileLocation); } private ReadResult ReadDikeProfileData(string folderPath) @@ -264,17 +283,6 @@ }; } - /// - /// Obtain the dike profile geometry object matching a given id. - /// - /// The available dike profile geometry objects. - /// The id on which to match. - /// The matching . - protected static DikeProfileData GetMatchingDikeProfileData(IEnumerable dikeProfileDataCollection, string id) - { - return dikeProfileDataCollection.FirstOrDefault(d => d.Id.Equals(id)); - } - private void LogDuplicate(DikeProfileData data, string prflFilePath) { var message = String.Format( @@ -284,11 +292,6 @@ log.Error(message); } - /// - /// Act upon the user cancelling the import operation. - /// - protected abstract void HandleUserCancellingImport(); - private double GetDistanceToReferenceLine(Point2D point) { return GetLineSegments(referenceLine.Points).Min(segment => segment.GetEuclideanDistanceToPoint(point)); Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.Designer.cs =================================================================== diff -u -r3865311e0dac61da3aa9ca1b4645c16b90290f1e -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 3865311e0dac61da3aa9ca1b4645c16b90290f1e) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -352,38 +352,38 @@ /// /// Looks up a localized string similar to Een profiel locatie met ID '{0}' ligt niet op de referentielijn. Locatie wordt overgeslagen.. /// - public static string ProfilesImporter_AddNextDikeProfileLocation_0_skipping_location_outside_referenceline { + public static string ProfilesImporter_AddNextProfileLocation_0_skipping_location_outside_referenceline { get { - return ResourceManager.GetString("ProfilesImporter_AddNextDikeProfileLocation_0_skipping_location_outside_reference" + - "line", resourceCulture); + return ResourceManager.GetString("ProfilesImporter_AddNextProfileLocation_0_skipping_location_outside_referenceline" + + "", resourceCulture); } } /// /// Looks up a localized string similar to Profiel locatie met ID '{0}' is opnieuw ingelezen.. /// - public static string ProfilesImporter_AddNextDikeProfileLocation_Location_with_id_0_already_read { + public static string ProfilesImporter_AddNextProfileLocation_Location_with_id_0_already_read { get { - return ResourceManager.GetString("ProfilesImporter_AddNextDikeProfileLocation_Location_with_id_0_already_read", resourceCulture); + return ResourceManager.GetString("ProfilesImporter_AddNextProfileLocation_Location_with_id_0_already_read", resourceCulture); } } /// /// Looks up a localized string similar to Fout bij het lezen van profiel op regel {0}. {1} Dit profiel wordt overgeslagen.. /// - public static string ProfilesImporter_GetDikeProfileLocationReadResult_Error_reading_Profile_LineNumber_0_Error_1_The_Profile_is_skipped { + public static string ProfilesImporter_GetProfileLocationReadResult_Error_reading_Profile_LineNumber_0_Error_1_The_Profile_is_skipped { get { - return ResourceManager.GetString("ProfilesImporter_GetDikeProfileLocationReadResult_Error_reading_Profile_LineNumbe" + - "r_0_Error_1_The_Profile_is_skipped", resourceCulture); + return ResourceManager.GetString("ProfilesImporter_GetProfileLocationReadResult_Error_reading_Profile_LineNumber_0_" + + "Error_1_The_Profile_is_skipped", resourceCulture); } } /// /// Looks up a localized string similar to Inlezen van profiel locatie.. /// - public static string ProfilesImporter_GetDikeProfileLocationReadResult_reading_profilelocation { + public static string ProfilesImporter_GetProfileLocationReadResult_reading_profilelocation { get { - return ResourceManager.GetString("ProfilesImporter_GetDikeProfileLocationReadResult_reading_profilelocation", resourceCulture); + return ResourceManager.GetString("ProfilesImporter_GetProfileLocationReadResult_reading_profilelocation", resourceCulture); } } Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.resx =================================================================== diff -u -r3865311e0dac61da3aa9ca1b4645c16b90290f1e -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.resx (.../Resources.resx) (revision 3865311e0dac61da3aa9ca1b4645c16b90290f1e) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Properties/Resources.resx (.../Resources.resx) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -167,19 +167,19 @@ ..\Resources\Foreshore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + Een profiel locatie met ID '{0}' ligt niet op de referentielijn. Locatie wordt overgeslagen. - + Profiel locatie met ID '{0}' is opnieuw ingelezen. Dijkprofiel locaties - + Fout bij het lezen van profiel op regel {0}. {1} Dit profiel wordt overgeslagen. - + Inlezen van profiel locatie. Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Ringtoets.Integration.Plugin.csproj =================================================================== diff -u -r944d2501b3f780d208e00015a1b850afad4c3aa8 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Ringtoets.Integration.Plugin.csproj (.../Ringtoets.Integration.Plugin.csproj) (revision 944d2501b3f780d208e00015a1b850afad4c3aa8) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Ringtoets.Integration.Plugin.csproj (.../Ringtoets.Integration.Plugin.csproj) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -148,11 +148,6 @@ Ringtoets.GrassCoverErosionInwards.Forms False - - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E} - Ringtoets.GrassCoverErosionInwards.IO - False - {E7225477-577F-4A17-B7EC-6721158E1543} Ringtoets.GrassCoverErosionOutwards.Data Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs =================================================================== diff -u -r944d2501b3f780d208e00015a1b850afad4c3aa8 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision 944d2501b3f780d208e00015a1b850afad4c3aa8) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -407,6 +407,18 @@ FileFilter = RingtoetsCommonIOResources.DataTypeDisplayName_shape_file_filter, IsEnabled = context => context.ParentAssessmentSection.ReferenceLine != null }; + + yield return new ImportInfo + { + CreateFileImporter = (context, filePath) => new DikeProfilesImporter(context.WrappedData, + context.ParentAssessmentSection.ReferenceLine, + filePath), + Name = RingtoetsIntegrationPluginResources.DikeProfilesImporter_DisplayName, + Category = RingtoetsCommonFormsResources.Ringtoets_Category, + Image = RingtoetsCommonFormsResources.DikeProfile, + FileFilter = RingtoetsCommonIOResources.DataTypeDisplayName_shape_file_filter, + IsEnabled = context => context.ParentAssessmentSection.ReferenceLine != null + }; } public override IEnumerable GetExportInfos() @@ -564,6 +576,15 @@ .Build() }; + yield return new TreeNodeInfo + { + Text = dikeProfile => dikeProfile.Name, + Image = context => RingtoetsCommonFormsResources.DikeProfile, + ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) + .AddPropertiesItem() + .Build() + }; + yield return new TreeNodeInfo { Text = foreshoreProfile => foreshoreProfile.Name, Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/ForeshoreProfileContextTreeNodeInfoTest.cs =================================================================== diff -u -rff8a088931e6af2e46f6f4f09b633bcdd0b84ecd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/ForeshoreProfileContextTreeNodeInfoTest.cs (.../ForeshoreProfileContextTreeNodeInfoTest.cs) (revision ff8a088931e6af2e46f6f4f09b633bcdd0b84ecd) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/ForeshoreProfileContextTreeNodeInfoTest.cs (.../ForeshoreProfileContextTreeNodeInfoTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -21,7 +21,6 @@ using System.Drawing; using System.Linq; -using System.Windows.Forms; using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Common.Controls.TreeView; Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/DikeProfilesImporterTest.cs =================================================================== diff -u -r8d6dc1b515f16b85b465b2686ea109f27c599c4b -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/DikeProfilesImporterTest.cs (.../DikeProfilesImporterTest.cs) (revision 8d6dc1b515f16b85b465b2686ea109f27c599c4b) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/DikeProfilesImporterTest.cs (.../DikeProfilesImporterTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -39,7 +39,7 @@ public class DikeProfilesImporterTest { [Test] - public void ParameterdConstructor_ExpectedValues() + public void Constructor_WithValidParameters_ReturnsNewInstance() { // Setup var importTarget = new ObservableList(); @@ -53,7 +53,7 @@ } [Test] - public void ParameterdConstructor_ImportTargetNull_ThrowArgumentNullException() + public void Constructor_ImportTargetNull_ThrowArgumentNullException() { // Call TestDelegate call = () => new DikeProfilesImporter(null, new ReferenceLine(), ""); @@ -64,7 +64,7 @@ } [Test] - public void ParameterdConstructor_ReferenceLineNull_ThrowArgumentNullException() + public void Constructor_ReferenceLineNull_ThrowArgumentNullException() { // Call TestDelegate call = () => new DikeProfilesImporter(new ObservableList(), null, ""); @@ -75,7 +75,7 @@ } [Test] - public void ParameterdConstructor_FilePathNull_ThrowArgumentNullException() + public void Constructor_FilePathNull_ThrowArgumentNullException() { // Call TestDelegate call = () => new DikeProfilesImporter(new ObservableList(), new ReferenceLine(), null); @@ -89,18 +89,16 @@ public void Import_FromFileWithUnmatchableId_TrueAndLogError() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "IpflWithUnmatchableId", "Voorlanden_12-2_UnmatchableId.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var dikeProfilesImporter = new DikeProfilesImporter(failureMechanism.DikeProfiles, referenceLine, filePath); - //Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = dikeProfilesImporter.Import(); // Assert @@ -117,7 +115,7 @@ public void Import_OneDikeProfileLocationNotCloseEnoughToReferenceLine_TrueAndLogErrorAndFourDikeProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); @@ -134,10 +132,8 @@ var dikeProfilesImporter = new DikeProfilesImporter(failureMechanism.DikeProfiles, referenceLine, filePath); - //Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = dikeProfilesImporter.Import(); // Assert @@ -150,7 +146,7 @@ public void Import_AllOkTestData_TrueAndLogMessagesAndFiveDikeProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -189,7 +185,7 @@ public void Import_AllOkTestData_CorrectDikeProfileProperties() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -214,7 +210,7 @@ public void Import_AllDamTypes_TrueAndLogMessagesAndFiveDikeProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllDamTypes", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -254,7 +250,7 @@ public void Import_CancelOfImportToValidTargetWithValidFile_CancelImportAndLog() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -264,9 +260,9 @@ // Precondition dikeProfilesImporter.Cancel(); - bool importResult = true; // Call + bool importResult = true; Action call = () => importResult = dikeProfilesImporter.Import(); // Assert @@ -278,7 +274,7 @@ public void Import_ReuseOfCancelledImportToValidTargetWithValidFile_TrueAndLogMessagesAndFiveDikeProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ForeshoreProfilesImporterTest.cs =================================================================== diff -u -r944d2501b3f780d208e00015a1b850afad4c3aa8 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ForeshoreProfilesImporterTest.cs (.../ForeshoreProfilesImporterTest.cs) (revision 944d2501b3f780d208e00015a1b850afad4c3aa8) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ForeshoreProfilesImporterTest.cs (.../ForeshoreProfilesImporterTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -99,7 +99,7 @@ public void Import_FromFileWithUnmatchableId_TrueAndLogError() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "IpflWithUnmatchableId", "Voorlanden_12-2_UnmatchableId.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -111,10 +111,8 @@ var foreshoreProfilesImporter = new ForeshoreProfilesImporter(failureMechanism.ForeshoreProfiles, referenceLine, filePath); - //Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = foreshoreProfilesImporter.Import(); // Assert @@ -132,7 +130,7 @@ public void Import_OneDikeProfileLocationNotCloseEnoughToReferenceLine_TrueAndLogErrorAndFourForeshoreProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); @@ -153,23 +151,22 @@ var foreshoreProfilesImporter = new ForeshoreProfilesImporter(failureMechanism.ForeshoreProfiles, referenceLine, filePath); - //Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = foreshoreProfilesImporter.Import(); // Assert string expectedMessage = "Een profiel locatie met ID 'profiel005' ligt niet op de referentielijn. Locatie wordt overgeslagen."; TestHelper.AssertLogMessageIsGenerated(call, expectedMessage); Assert.IsTrue(importResult); + Assert.AreEqual(4, failureMechanism.ForeshoreProfiles.Count); } [Test] public void Import_AllOkTestData_TrueAndLogMessagesAndFiveForeshoreProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -205,14 +202,15 @@ new ProgressNotification("Inlezen van profieldata.", 5, 5) }; ValidateProgressMessages(expectedProgressMessages, progressChangeNotifications); + Assert.AreEqual(5, failureMechanism.ForeshoreProfiles.Count); mockRepository.VerifyAll(); // 'observer' should not be notified } [Test] public void Import_AllOkTestData_CorrectForeshoreProfileProperties() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); var observer = mockRepository.StrictMock(); @@ -229,9 +227,9 @@ // Call foreshoreProfilesImporter.Import(); - ForeshoreProfile foreshoreProfile = targetContext.WrappedData[4]; // Assert + ForeshoreProfile foreshoreProfile = targetContext.WrappedData[4]; Assert.AreEqual(new Point2D(136039.49100000039, 533920.28050000477), foreshoreProfile.WorldReferencePoint); Assert.AreEqual("profiel005", foreshoreProfile.Name); Assert.AreEqual(15.56165507, foreshoreProfile.X0); @@ -244,7 +242,7 @@ public void Import_AllDamTypes_TrueAndLogMessagesAndFiveForeshoreProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllDamTypes", "Voorlanden 12-2.shp")); var observer = mockRepository.StrictMock(); @@ -292,7 +290,7 @@ public void Import_CancelOfImportToValidTargetWithValidFile_CancelImportAndLog() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); @@ -305,9 +303,9 @@ // Precondition foreshoreProfilesImporter.Cancel(); - bool importResult = true; // Call + var importResult = true; Action call = () => importResult = foreshoreProfilesImporter.Import(); // Assert @@ -320,7 +318,7 @@ public void Import_ReuseOfCancelledImportToValidTargetWithValidFile_TrueAndLogMessagesAndFiveForeshoreProfiles() { // Setup - string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionInwards.IO, + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); ReferenceLine referenceLine = CreateMatchingReferenceLine(); Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs =================================================================== diff -u -r1dddcf22e6d496a00dcfe85cf8d1302a8df121cd -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs (.../ProfilesImporterTest.cs) (revision 1dddcf22e6d496a00dcfe85cf8d1302a8df121cd) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs (.../ProfilesImporterTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -31,7 +31,7 @@ using Core.Common.Utils.Builders; using NUnit.Framework; using Ringtoets.Common.Data.AssessmentSection; -using Ringtoets.GrassCoverErosionInwards.IO.DikeProfiles; +using Ringtoets.Common.IO.DikeProfiles; using Ringtoets.Integration.Plugin.FileImporters; using RingtoetsCommonIoResources = Ringtoets.Common.IO.Properties.Resources; using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; @@ -45,7 +45,7 @@ public void ParameterdConstructor_ExpectedValues() { // Setup - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); // Call var importer = new TestProfilesImporter(new ObservableList(), referenceLine, ""); @@ -93,7 +93,7 @@ public void Import_FromInvalidEmptyPath_FalseAndLogError(string filePath) { // Setup - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); // Precondition @@ -122,13 +122,11 @@ var invalidFileNameChars = Path.GetInvalidFileNameChars(); var invalidPath = filePath.Replace('_', invalidFileNameChars[0]); - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, invalidPath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -148,13 +146,11 @@ // Setup string folderPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin) + Path.DirectorySeparatorChar; - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, folderPath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -181,13 +177,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Core.Components.Gis.IO, shapeFileName); - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -212,13 +206,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", shapeFileName)); - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -241,13 +233,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", fileName)); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -267,13 +257,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "Voorlanden_12-2_EmptyId.shp")); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -297,13 +285,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "Voorlanden_12-2_EmptyX0.shp")); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -331,14 +317,12 @@ new Point2D(146432.1, 538235.2), new Point2D(146039.4, 533920.2) }; - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); referenceLine.SetGeometry(referencePoints); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -354,13 +338,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "InvalidDamType", "Voorlanden 12-2.shp")); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -385,14 +367,12 @@ new Point2D(130074.3, 543717.4), new Point2D(130084.3, 543727.4) }; - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); referenceLine.SetGeometry(referencePoints); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -414,13 +394,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "Voorlanden_12-2_same_id_3_times.shp")); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -441,13 +419,11 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "PrflWithProfileNotZero", "Voorland_12-2.shp")); - var referenceLine = CreateMatchingReferenceLine(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -472,14 +448,12 @@ new Point2D(130074.3, 543717.4), new Point2D(130084.3, 543727.4) }; - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); referenceLine.SetGeometry(referencePoints); var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -492,9 +466,62 @@ Assert.IsTrue(importResult); } + [Test] + public void Import_CancelOfImportToValidTargetWithValidFile_CancelImport() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, + Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); + + var referencePoints = new List + { + new Point2D(130074.3, 543717.4), + new Point2D(130084.3, 543727.4) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + + // Precondition + testProfilesImporter.Cancel(); + + // Call + bool importResult = testProfilesImporter.Import(); + + // Assert + Assert.IsFalse(importResult); + } + + [Test] + public void Import_ReuseOfCancelledImportToValidTargetWithValidFile_True() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); + + var referencePoints = new List + { + new Point2D(130074.3, 543717.4), + new Point2D(130084.3, 543727.4) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + + testProfilesImporter.Cancel(); + bool importResult = testProfilesImporter.Import(); + Assert.IsFalse(importResult); + + // Call + importResult = testProfilesImporter.Import(); + + // Assert + Assert.IsTrue(importResult); + } + private ReferenceLine CreateMatchingReferenceLine() { - var referenceLine = new ReferenceLine(); + ReferenceLine referenceLine = new ReferenceLine(); referenceLine.SetGeometry(new[] { new Point2D(131223.2, 548393.4), @@ -511,12 +538,7 @@ public TestProfilesImporter(ObservableList importTarget, ReferenceLine referenceLine, string filePath) : base(referenceLine, filePath, importTarget) {} - protected override void CreateProfiles(ReadResult importDikeProfilesResult, ReadResult importDikeProfileDataResult) {} - - protected override void HandleUserCancellingImport() - { - throw new NotImplementedException(); - } + protected override void CreateProfiles(ReadResult importProfileLocationResult, ReadResult importDikeProfileDataResult) {} } private class TestProfile {}; Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ImportInfos/DikeProfilesContextImportInfoTest.cs =================================================================== diff -u --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ImportInfos/DikeProfilesContextImportInfoTest.cs (revision 0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ImportInfos/DikeProfilesContextImportInfoTest.cs (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -0,0 +1,159 @@ +using System.Drawing; +using System.IO; +using System.Linq; +using Core.Common.Base; +using Core.Common.Base.Geometry; +using Core.Common.Base.IO; +using Core.Common.Gui.Plugin; +using Core.Common.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; + +namespace Ringtoets.Integration.Plugin.Test.ImportInfos +{ + [TestFixture] + public class DikeProfilesContextImportInfoTest + { + private ImportInfo importInfo; + private RingtoetsPlugin plugin; + + [SetUp] + public void SetUp() + { + plugin = new RingtoetsPlugin(); + importInfo = plugin.GetImportInfos().First(i => i.DataType == typeof(DikeProfilesContext)); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Name_Always_ReturnExpectedName() + { + // Call + string name = importInfo.Name; + + // Assert + Assert.AreEqual("Dijkprofiel locaties", name); + } + + [Test] + public void Category_Always_ReturnExpectedCategory() + { + // Call + string category = importInfo.Category; + + // Assert + Assert.AreEqual("Algemeen", category); + } + + [Test] + public void Image_Always_ReturnExpectedIcon() + { + // Call + Image image = importInfo.Image; + + // Assert + TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.DikeProfile, image); + } + + [Test] + public void IsEnabled_ReferenceLineSet_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + assessmentSection.ReferenceLine = new ReferenceLine(); + mocks.ReplayAll(); + + var list = new ObservableList(); + + var context = new DikeProfilesContext(list, assessmentSection); + + // Call + bool isEnabled = importInfo.IsEnabled(context); + + // Assert + Assert.IsTrue(isEnabled); + mocks.VerifyAll(); + } + + [Test] + public void IsEnabled_ReferenceLineNotSet_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + assessmentSection.ReferenceLine = null; + mocks.ReplayAll(); + + var list = new ObservableList(); + + var context = new DikeProfilesContext(list, assessmentSection); + + // Call + bool isEnabled = importInfo.IsEnabled(context); + + // Assert + Assert.IsFalse(isEnabled); + mocks.VerifyAll(); + } + + [Test] + public void FileFilter_Always_ReturnExpectedFileFilter() + { + // Call + string fileFilter = importInfo.FileFilter; + + // Assert + Assert.AreEqual("Shapebestand (*.shp)|*.shp", fileFilter); + } + + [Test] + public void CreateFileImporter_ValidInput_SuccessfulImport() + { + // Setup + var mocks = new MockRepository(); + ReferenceLine referenceLine = CreateMatchingReferenceLine(); + var assessmentSection = mocks.Stub(); + assessmentSection.ReferenceLine = referenceLine; + mocks.ReplayAll(); + + var list = new ObservableList(); + + string path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); + + var importTarget = new DikeProfilesContext(list, assessmentSection); + + // Call + IFileImporter importer = importInfo.CreateFileImporter(importTarget, path); + + // Assert + Assert.IsTrue(importer.Import()); + + mocks.VerifyAll(); + } + + private ReferenceLine CreateMatchingReferenceLine() + { + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(new[] + { + new Point2D(131223.2, 548393.4), + new Point2D(133854.3, 545323.1), + new Point2D(135561.0, 541920.3), + new Point2D(136432.1, 538235.2), + new Point2D(136039.4, 533920.2) + }); + return referenceLine; + } + } +} \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj =================================================================== diff -u -r944d2501b3f780d208e00015a1b850afad4c3aa8 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj (.../Ringtoets.Integration.Plugin.Test.csproj) (revision 944d2501b3f780d208e00015a1b850afad4c3aa8) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj (.../Ringtoets.Integration.Plugin.Test.csproj) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -73,6 +73,7 @@ + @@ -170,10 +171,6 @@ {C540E627-B95B-4CC0-A1B6-A0BDF74936C7} Ringtoets.GrassCoverErosionInwards.Forms - - {F55CCA9C-3B25-417D-9AF4-797D1F5EB95E} - Ringtoets.GrassCoverErosionInwards.IO - {70f8cc9c-5bc8-4fb2-b201-eae7fa8088c2} Ringtoets.HydraRing.Data Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs =================================================================== diff -u -r275811c8e133cba03f636224f40a9536a733fb1f -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision 275811c8e133cba03f636224f40a9536a733fb1f) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -28,7 +28,6 @@ using Core.Common.Base.Storage; using Core.Common.Controls.TreeView; using Core.Common.Gui; -using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Forms.ViewHost; using Core.Common.Gui.Plugin; @@ -48,6 +47,7 @@ using Ringtoets.Common.Forms.PropertyClasses; using Ringtoets.Common.Forms.Views; using Ringtoets.Common.Service.Properties; +using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Data.StandAlone.SectionResults; @@ -401,7 +401,7 @@ TreeNodeInfo[] treeNodeInfos = plugin.GetTreeNodeInfos().ToArray(); // Assert - Assert.AreEqual(26, treeNodeInfos.Length); + Assert.AreEqual(27, treeNodeInfos.Length); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(AssessmentSection))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(ReferenceLineContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(FailureMechanismContext))); @@ -412,6 +412,7 @@ Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(DesignWaterLevelLocationsContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(WaveHeightLocationsContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(ForeshoreProfilesContext))); + Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(DikeProfile))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(ForeshoreProfile))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(FailureMechanismSectionResultContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(FailureMechanismSectionResultContext))); @@ -497,10 +498,11 @@ ImportInfo[] importInfos = plugin.GetImportInfos().ToArray(); // Assert - Assert.AreEqual(3, importInfos.Length); + Assert.AreEqual(4, importInfos.Length); Assert.IsTrue(importInfos.Any(i => i.DataType == typeof(ReferenceLineContext))); Assert.IsTrue(importInfos.Any(i => i.DataType == typeof(FailureMechanismSectionsContext))); Assert.IsTrue(importInfos.Any(i => i.DataType == typeof(ForeshoreProfilesContext))); + Assert.IsTrue(importInfos.Any(i => i.DataType == typeof(DikeProfilesContext))); } } Index: Ringtoets/Revetment/src/Ringtoets.Revetment.Data/WaveConditionsInput.cs =================================================================== diff -u -r98462a1dbe77bcebe9a38ec2b2e1c0eaf94c2534 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Revetment/src/Ringtoets.Revetment.Data/WaveConditionsInput.cs (.../WaveConditionsInput.cs) (revision 98462a1dbe77bcebe9a38ec2b2e1c0eaf94c2534) +++ Ringtoets/Revetment/src/Ringtoets.Revetment.Data/WaveConditionsInput.cs (.../WaveConditionsInput.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -104,7 +104,7 @@ get { return foreshoreProfile != null - ? foreshoreProfile.ForeshoreGeometry + ? foreshoreProfile.Geometry : new RoundedPoint2DCollection(2, Enumerable.Empty()); } } @@ -312,7 +312,7 @@ } else { - UseForeshore = foreshoreProfile.ForeshoreGeometry.Count() > 1; + UseForeshore = foreshoreProfile.Geometry.Count() > 1; UseBreakWater = foreshoreProfile.HasBreakWater; BreakWater = foreshoreProfile.HasBreakWater ? new BreakWater(foreshoreProfile.BreakWater.Type, foreshoreProfile.BreakWater.Height) Index: Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputTest.cs =================================================================== diff -u -r752b8000ca808d85710d985c6c9b69dee1a05ae0 -rd2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6 --- Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputTest.cs (.../WaveConditionsInputTest.cs) (revision 752b8000ca808d85710d985c6c9b69dee1a05ae0) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputTest.cs (.../WaveConditionsInputTest.cs) (revision d2b9feaf8aceaa9a96d0e6e19fd6fbbee8987ca6) @@ -172,7 +172,7 @@ Assert.AreEqual(withBreakWater ? foreshoreProfile.BreakWater.Type : originalBreakWaterType, input.BreakWater.Type); Assert.AreEqual(withBreakWater ? foreshoreProfile.BreakWater.Height : originalBreakWaterHeight, input.BreakWater.Height); Assert.AreEqual(withValidForeshore, input.UseForeshore); - CollectionAssert.AreEqual(foreshoreProfile.ForeshoreGeometry, input.ForeshoreGeometry); + CollectionAssert.AreEqual(foreshoreProfile.Geometry, input.ForeshoreGeometry); Assert.AreEqual(originalHydraulicBoundaryLocation, input.HydraulicBoundaryLocation); }