From 30770532606619275bb1ae81657e927ecdae4a54 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 29 Mar 2015 13:31:25 +0000 Subject: [PATCH] work in progress.. --- Stundensheet.xlsx | Bin 11925 -> 12155 bytes nsw/Herberg/WSAPIFormData.wsdl | 364 ++++++++ nsw/Herberg/auth.xsd | 45 + nsw/Herberg/device.xsd | 89 ++ nsw/Herberg/geoarea.xsd | 200 ++++ nsw/Herberg/inlandPosition.xsd | 231 +++++ nsw/Herberg/position.xsd | 127 +++ nsw/Herberg/route.xsd | 97 ++ nsw/Herberg/schedule.xsd | 600 ++++++++++++ nsw/Herberg/ship.xsd | 127 +++ nsw/Herberg/shipParams.xsd | 95 ++ nsw/Herberg/target.xsd | 59 ++ ...chnittstelle Meldetypen und Attribute.xlsx | Bin 387320 -> 387628 bytes .../SendNSWMessageService/NSWSendService.cs | 20 +- .../SendNSWMessageService.csproj | 4 +- nsw/Source/bsmd.database/DBManager.cs | 115 ++- nsw/Source/bsmd.database/DatabaseEntity.cs | 5 +- nsw/Source/bsmd.database/IMessageClass.cs | 13 + nsw/Source/bsmd.database/MDH.cs | 210 +++++ nsw/Source/bsmd.database/Message.cs | 4 +- nsw/Source/bsmd.database/NOA_NOD.cs | 132 +++ nsw/Source/bsmd.database/POBA.cs | 76 ++ nsw/Source/bsmd.database/POBD.cs | 75 ++ .../bsmd.database/PortOfCallLast30Days.cs | 106 +++ .../PortOfCallLast30DaysCrewJoinedShip.cs | 95 ++ nsw/Source/bsmd.database/STAT.cs | 66 +- nsw/Source/bsmd.database/Util.cs | 30 + nsw/Source/bsmd.database/bsmd.database.csproj | 8 + nsw/Source/bsmd.dbh.ResponseService.v12.suo | Bin 75776 -> 89600 bytes .../{IService1.cs => IResponseService.cs} | 10 +- .../{Service1.svc => ResponseService.svc} | 2 +- ...Service1.svc.cs => ResponseService.svc.cs} | 19 +- .../bsmd.dbh.ResponseService.csproj | 16 +- .../bsmd.dbh.ResponseService/packages.config | 4 + nsw/Source/bsmd.dbh/Request.cs | 1 + nsw/Source/bsmd.dbh/Response.cs | 26 + nsw/Source/bsmd.herberg.FormService.sln | 28 + .../bsmd.herberg.FormService/App.config | 51 + .../FormService.Designer.cs | 37 + .../bsmd.herberg.FormService/FormService.cs | 140 +++ .../bsmd.herberg.FormService/Program.cs | 38 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/Settings.Designer.cs | 50 + .../Properties/Settings.settings | 12 + .../ServiceReferenceHerberg/Reference.cs | 880 ++++++++++++++++++ .../ServiceReferenceHerberg/Reference.svcmap | 40 + .../WSAPIFormData.wsdl | 289 ++++++ .../ServiceReferenceHerberg/auth.xsd | 35 + ...erg.GetFormDataInfoListResponse.datasource | 10 + ...GetFormDataInfoListResponseData.datasource | 10 + ...enceHerberg.GetFormDataResponse.datasource | 10 + ...Herberg.GetFormDataResponseData.datasource | 10 + .../configuration.svcinfo | 10 + .../configuration91.svcinfo | 201 ++++ .../ServiceReferenceHerberg/device.xsd | 77 ++ .../ServiceReferenceHerberg/geoarea.xsd | 167 ++++ .../inlandPosition.xsd | 183 ++++ .../ServiceReferenceHerberg/position.xsd | 102 ++ .../ServiceReferenceHerberg/route.xsd | 88 ++ .../ServiceReferenceHerberg/ship.xsd | 117 +++ .../ServiceReferenceHerberg/shipParams.xsd | 80 ++ .../ServiceReferenceHerberg/target.xsd | 44 + .../bsmd.herberg.FormService.csproj | 149 +++ .../bsmd.herberg.FormService/packages.config | 4 + nsw/Source/packages/repositories.config | 2 + nsw/dbh/answ-osis-extern.wsdl | 51 + 66 files changed, 5971 insertions(+), 51 deletions(-) create mode 100644 nsw/Herberg/WSAPIFormData.wsdl create mode 100644 nsw/Herberg/auth.xsd create mode 100644 nsw/Herberg/device.xsd create mode 100644 nsw/Herberg/geoarea.xsd create mode 100644 nsw/Herberg/inlandPosition.xsd create mode 100644 nsw/Herberg/position.xsd create mode 100644 nsw/Herberg/route.xsd create mode 100644 nsw/Herberg/schedule.xsd create mode 100644 nsw/Herberg/ship.xsd create mode 100644 nsw/Herberg/shipParams.xsd create mode 100644 nsw/Herberg/target.xsd create mode 100644 nsw/Source/bsmd.database/IMessageClass.cs create mode 100644 nsw/Source/bsmd.database/MDH.cs create mode 100644 nsw/Source/bsmd.database/NOA_NOD.cs create mode 100644 nsw/Source/bsmd.database/POBA.cs create mode 100644 nsw/Source/bsmd.database/POBD.cs create mode 100644 nsw/Source/bsmd.database/PortOfCallLast30Days.cs create mode 100644 nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs create mode 100644 nsw/Source/bsmd.database/Util.cs rename nsw/Source/bsmd.dbh.ResponseService/{IService1.cs => IResponseService.cs} (71%) rename nsw/Source/bsmd.dbh.ResponseService/{Service1.svc => ResponseService.svc} (50%) rename nsw/Source/bsmd.dbh.ResponseService/{Service1.svc.cs => ResponseService.svc.cs} (62%) create mode 100644 nsw/Source/bsmd.dbh.ResponseService/packages.config create mode 100644 nsw/Source/bsmd.herberg.FormService.sln create mode 100644 nsw/Source/bsmd.herberg.FormService/App.config create mode 100644 nsw/Source/bsmd.herberg.FormService/FormService.Designer.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/FormService.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/Program.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/Properties/AssemblyInfo.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/Properties/Settings.Designer.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/Properties/Settings.settings create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.cs create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.svcmap create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/WSAPIFormData.wsdl create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/auth.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse.datasource create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData.datasource create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse.datasource create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData.datasource create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration.svcinfo create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration91.svcinfo create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/device.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/geoarea.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/inlandPosition.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/position.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/route.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/ship.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/shipParams.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/target.xsd create mode 100644 nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj create mode 100644 nsw/Source/bsmd.herberg.FormService/packages.config create mode 100644 nsw/dbh/answ-osis-extern.wsdl diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index a58adaa0f8906d4d67582c7326ce3b2db36839e0..71549f7ad470a6cc5022c1bb5ced7ae017bc4adc 100644 GIT binary patch delta 2596 zcmV+<3fuLSUHe|JgBJ?GHk%vn1ONbb5tC388GkV@cx`NqSlf=s0lsweB z*j`^?JFv_R8lVA+Zqq(%ZQ2$hi>k!6lYV_?I5a6ylGAmw%QSi0@o!9<{&CfrrZld~HpE;Kvcqr<% ze}9&;Tn0hCKl4jkk3`7}cybigC6(~CIt6uE@${gKE_o1#;Ztx)v%)72%j*C55XWP- z=S=M1F1(QBq~duhfq#9@%G%$o4jDW{L0-j=YkwOppX1mMHY>IDUm3sEjnAG;Utf66 z_mUqV0=_3j`5QmV9nW(x9{V0jeHG#>T7P~5ObC0_$^!RD_cFV3LgPMO{g2vK?-`g) zH!J)3PT->o&+nD@n$~MG)7d2X@9^(0UVvrZRncRbmtB!_6J3@(uJkp>cMnmlQU>eY096e;SfkP=8*^uu_By6FbyCP?y%`t4@kh{xKl|C zSJyr^(sA?d<;&-HEMBtN`}eEhi1TyaDBM;+7Jc5fxC#M*Gstv(?6$qeK=~Mq?O*DC zg6Qst!Q=K8J=fiD>b}JfIe&EJZq;&oEOiKK44j$63^m43d~(vxG=MnTl(jkHNzzHl z7N;a{x?j zOhtL!*i)$;J3Ikw?A-G+q64B8Lua}rh#4kH4h+ee<)Jdb^bQn5n}7W_Nu2VQEUqhi5|`D7QIgN05hCga$xAq9dRrofNqb0`GRBjP7VjNs)}ty)A%ttzzmZk2bP?j z9lGuapi?_Qt~u))~*BLAX(2*NVEY9zq*wI*jOb;-_^vHpw z=kyJW2=Fkmar5A?u~WxN>^xU3R8~?Cp)h)K0TD9y%&q+>#m|=R(nXz!{mgyb(+kb*?&vbz-(-Z%kR;R3} zy&NvO-A5f4=T|lZ(NK&PB zOQE!&IuPKtw#W8jdu?WSo5J_>8#r;xk1^|n0Bbl!nVp$8^XAQXa&+6&aD${}tER!@ z{eu8drEMlvF%8}=&K^ArKpUYlQMU@G!B^D5(d_=ciPi=}BNUk~5lvHvPYwk@s`@pSQ!wiz#0p)2Qku(Oi_cd z8kTYNn$Z=KL^3c^mViTUCF%jfRlM{;e>0)WT%-su6_Z%k!Z6J}0usbsy?y>)m~W3P zrKO+*r9lOZ2T@zu2D!6sQa@szXd|1(ssch-aEE#O55_oKB2=Xf*~)N-9j$-lIB-0b zY6I@lohl>ES2!cl;Hss{M}E~N8Rk;SzU4@4F$lX_RvR8hC6fvX3Cqe+u#yCge>4zF z{!1k{39%8z>hPp=cYv zj=1z*Ci(gY4|Ss+xJKQzN~0fodIr7U5}EN8s*JfD14_j*;jZDm#1;R1vki|+bF)W& zhR8R(Nt}YQ*XxHk+R2scvMTE-f9>h-9T-1BuAr`m^IZ_;Ja#yzeR#p4dl1bp-ozi_ zTr`QL!Uz7-zo%pmvZRD#LYAcOoC_x{w?+O7D`{mZhn+@tIvj0Q#Bqu=n0ka-7K(L! z!F!~+?hxjRk5Fy3?hCmTUB`FK$Ga4=W;45=^mooJlJB!yT-H2q5Ei;>e^o9EOTBdW zU?CE890F3YzEj@@UAgVtieU_|MaHf-y!+c>4d}VXOcJIBmZyvBmoYqgP?+ZsUvip* z$4(ywpCCSgH~@-{Ax=x)GsAM>lEyneE~9fkXN&p5@6OfsOQ2(T-||HvUboGaxMCsp zP>w?{(p~(q?)aij13u~6Ck-Z;{c&X6{711_e|H0O2WKC=6tlmIg>!V^1)TBMLjQIR z`SUXSlQ9z&vm76S1q7PMZaA}|BqsrXT}#6-6o&5w|3k@rntm{uq3u9rR}KU#igzJ7 z+ltKxNwnL)H*L4t!SM2&_sw(Ob4al|$Ts=`>l&>}l*S2)KyfV^wJXtEy~axvInR_} ztyWN?BRI6GZf^>1DAyKVtTteM11<_Aw?(!i<$e)sr&GYN9DsEJND-NhC1gG2r^V(JgnHS-3EpvVo zZoF+kJRF05r6>3hcZ7h5LI65D#yuZa6{#002<}000pH000000000000000b|sT8Eig9?0zFnU_45 zd=C*|ffV&`{2+I{EWvop0+jk9#8(a_Gpy_?vdrPxNt(_K0*7B+E(uwnoZYB z`~6DbqYBUOP4JSnd?(7ki@iJn3rNGBAF|g{{vqCe<;C$NVRecka#4ac{146rri=yW z?3?<0Bjd?rG)bnjd7Ml!ci&4$+k^%AYb(Y1x`FmYK0u@Lfm$_zxbGuzY`~+kfq&0C zHY)5PQC5LSGnuWIjd%+n-N3!AGc2BXF@>P!xVXX96$36H8Pj=LN6YX6(aSYrO9=RH z5MvjyBLwI-h}cD>gm~y65*P8*^`A`5!w|?D1&N~|z$}fiJV*&X1#MkN6XQogwi*H- zhN<03L3SE4R-u^0k8{sQssR%P@PBkZxz5{UPWT;Qsz9>eazn3I5Ro~&zP zPS%MbK6h=^is0HsSiB}A_;<;T zdoL>8r(S?|+JPnKl}D-py84EC7%Ti1J(}!Y0%K48_I`7a153{i_w4~O%O z=+Vq}==GupnBmlt14D1_iA!Sw==KViAv9OR^}hgm_I9BPgml;zJ zeP1s#EQQ{$YE*yxl2lX*!@rdJx+WB{&Jaym_-_V-_kJm)@?cq6Wyan+hP6umwm91u z-oEiBBP}N*Gg$}?DJNcLX5^d6$ZyPlpOkWKfv`xu?6qq@uav>NPKs-)eqnAvs1yrK zO&>y}Te(CH!fIHA!3Co$B#C68rz`=7+)30OgfHR31&x1&&JwXiI8#hwQ3%5{w+KiO z*2VVue_^gYu(ZqsMJNp_U_1z_+?L3lZIikY(?}axmR6jkckr)CR&GsPg)Lp<)HNKrhM8;l zDRL}^FpctJ{YYGTE0bjX#6#Vv2X0W;mD1>j9-lz#w?Jlmg(_w)hk#PCOt@?KCUM1| z2V3&EG&g(bW(ZuvRn#aLTfKe{gPmNtF00~}(w2Yz)`9UO9Dt1k%m*G z&eQ|cGF7bWbKWD(b^9gD};3 zr4mV*T56@+hq;Kb;SiA0^`m;|bk%I#9cQh$aL@phY7qz01*CxsDeoa-M6+>qbM4j^NO$xV_1QVWP3{VjBb2SKy*R(vAs} zqrLZrVeG^n6n9B*=pb$ztGEw;rQKn}#TVZJP6@fk3OtwGbKC)AGZN7WDaD91-?r`n zQedb-f%Xp5gyKK12dmuG2fZ?Js>&Zt*y$8^%9dgfNB6;1qp@weTM0l#CIu4~xNmHc;b{>LS99k#;l|qvNNOYBAv%%7Sm;!Qbv~SZayKN0YmP~Pf+{< zld&Wev;8Mf1qw;3KWt_M003VOlUFS~8_hJ^ipv530Kx?T02BZK00000000000000H zlddg60S=S!Ejj|oA(MeFB$H4sF9KI0lYuT%0?{Lr)-EC(BeO-sLID5(Q33z}5dZ)H g00000000000059AlN2vK0SS{*FCzx&DF6Tf0C#z7O8@`> diff --git a/nsw/Herberg/WSAPIFormData.wsdl b/nsw/Herberg/WSAPIFormData.wsdl new file mode 100644 index 00000000..10d96a00 --- /dev/null +++ b/nsw/Herberg/WSAPIFormData.wsdl @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The GUID of the folder template + + + + + + The GUID of the form template + + + + + + The GUID of the folder + + + + + The GUID of the form + + + + + The IMO number this form belongs to. + + + + + + The date of the latest revision. + + + + + + + + + + + + The value + + + + + + The optional unit + + + + + + The widget name this cell belongs to. + + + + + + The widget id the value belongs to. Note + that this entry is the id within the form template but NOT the database id of the widget! + + + + + + The optional row number. This is set if we + have a widget that is part of a table. + + + + + + + + + + + + + The date of the revision. + + + + + + The begin of the period this dataset is valid + for. + + + + + + The end of the period this row is valid for. + If startPeriod is not given, the endPeriod contains the sample + timestamp. + + + + + + + The values. + + + + + + + + + + + + + The reporting or requesting party. + + + + + + The optional time frame. If not set then all entries are returned. + + + + + + This is the Fleetform form template name (see + FolderTemplate.Template.TemplateName). + You have to either set + this or ffFolderTemplateTypeTag. + + + + + + This is the Fleetform folder template typeTag, + e.g. CREWLIST, PERFORMANCEREPORT, SHIPDETAILS, etc. See + FolderTemplate in fleetform.xsd + for possible values. + + + + + + + + + + + The request + + + + + A set of form data found in the database. + + + + + + + This flag is set to true if the route was + successfully stored. + Otherwise, result contains the error + message. + + + + + + + + + + + + + The reporting or requesting party. + + + + + + The GUID of the form. + + + + + + + + + + + + + The request belonging to this response. + + + + + + The IMO number of the vessel this form belongs + to. + + + + + + + The requested data. If not found then this + entry is null. Note that we may have several entries for one + form here since one form may contain several entries. + + + + + + + + + This flag is set to true if the route was + successfully stored. + Otherwise, result contains the error + message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nsw/Herberg/auth.xsd b/nsw/Herberg/auth.xsd new file mode 100644 index 00000000..930d3e42 --- /dev/null +++ b/nsw/Herberg/auth.xsd @@ -0,0 +1,45 @@ + + + + + + This is the identifier the client has to report. + + + + + + The unique id of the company. This is a unique + GUID identifying the + company using the API. Only if the company is registered, they may use + the API. + + + + + + The unique id of the client. This is a unique + GUID identifying the + individual sender. E.g. each boat may have a unique id. + + + + + + The optional name of the sending client. This is only for helping us identifying the sending + party. + + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/device.xsd b/nsw/Herberg/device.xsd new file mode 100644 index 00000000..8828701d --- /dev/null +++ b/nsw/Herberg/device.xsd @@ -0,0 +1,89 @@ + + + + + + This is the device ID. + + + + + The bearer key reference. We have several ways + to identify the device. + E.g. for inmarsatc, we use fleetID and vesselID (and mobile number, if + available). + For D+, we use the vesselID. Daily Report uses the IMO number. + + + + + + + + + + + + The callsign. For instance, Globewireless uses this. + + + + + + The Globalstar device id. Example: 0-545312 + + + + + + + The vesselID contains a unique GUID identifying the device. We use this e.g. for the API. + + + + + + IMEI - International Mobile Equipment Identity (e.g. BGAN) + + + + + + + + + + The inmarsat C mobile number. + + + + + This is the DNID for INMARSATC. + + + + + + This is the terminal, member number, GUID, MMSI, etc. + + + + + + This is the IMO number. + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/geoarea.xsd b/nsw/Herberg/geoarea.xsd new file mode 100644 index 00000000..ac6d885f --- /dev/null +++ b/nsw/Herberg/geoarea.xsd @@ -0,0 +1,200 @@ + + + + + + + + This is a geographical area. It can be a polygon + or a bounding box. + + + + + + Geographical coverages of this area + + + + + + DB Area ID + + + + + + DB Area list ID + + + + + + DB Area name + + + + + + + + + + + This is a geographical coverage belonging to an area. + + + + + + Geographical positions + + + + + + The type of this coverage. Bounding boxes are + between the first 2 positions. + + + + + + + + + + + + DB Area coverage ID + + + + + + DB Area Coverage name + + + + + + + + + This is an event related to an area. + + + + + + Geographical position when the event happened. + + + + + + DB Area coverage ID + + + + + + + DB Area ID + + + + + + DB Area list ID + + + + + + DB Area name + + + + + + DB Area Coverage name + + + + + + This flag indicates that the event has been generated but + not yet been proven. Example: It is proven if the vessel is within the areas more than 1 minute. + + + + + + This flag indicates that the event has been reported ashore. + + + + + + The type of this event. + + + + + + + The vessel has entered the area + + + + + + The vessel has left the area + + + + + + The vessel has stopped in the area + + + + + + The vessel has started moving within the area + + + + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/inlandPosition.xsd b/nsw/Herberg/inlandPosition.xsd new file mode 100644 index 00000000..4bb2acf3 --- /dev/null +++ b/nsw/Herberg/inlandPosition.xsd @@ -0,0 +1,231 @@ + + + + + + + + + This is the distance on a river. + + + + + This is the current value in the given unit. + + + + + + + + + + + + + + + + + + + This is the speed of a target. + + + + + This is the current value in the given unit. + + + + + + + + + + + + + + + + + + + This represents a river. + + + + + This is the river name. + + + + + + This is the river abbreviation. + + + + + + + + + This represents a miles marker entry. + + + + + + This is the river mile or kilometer. + + + + + + This is the unit of the miles. + + + + + + + + + + + + This is the river. + + + + + + + + + This represents a miles marker entry with a + geographic position. + + + + + + + + The geographic position of this miles marker + + + + + + + + + + + This represents a set of miles marker entry with a + geographic position. + + + + + + A set of miles marker entries with positions. + + + + + + + + + This represents a no passing zone. + + + + + + The mandatory unique id + + + + + + The optional name for identification. + + + + + + The begin of the no passing zone. This is always + the lower mile marker. + + + + + + The end of the no passing zone. This is always + the higher mile marker. + + + + + + + + + This represents a set of no passing zones + + + + + + A set of NoPassingZone objects. + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/position.xsd b/nsw/Herberg/position.xsd new file mode 100644 index 00000000..cf35dfe6 --- /dev/null +++ b/nsw/Herberg/position.xsd @@ -0,0 +1,127 @@ + + + + + + This is a geographical position. + + + + + + Latitude in degrees x 60000, North > 0 + + + + + + Latitude in degrees x 60000, East > 0 + + + + + + + + + + + This is a geographical position with a timestamp. + + + + + + + + Timestamp when the position was made + + + + + + + + + + + This is a geographical position of a pasttrack. + + + + + + + + The order number of the pastttack. The + higher + the number, the older the position. + + + + + Rate of turn in deg/s, right > 0, left < + 0) + + + + + Speed over ground in knots + + + + + + Course over ground in degrees + + + + + + Heading in degrees + + + + + + ETA to next port + + + + + + ETB to next port + + + + + + Next port + + + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/route.xsd b/nsw/Herberg/route.xsd new file mode 100644 index 00000000..6f900156 --- /dev/null +++ b/nsw/Herberg/route.xsd @@ -0,0 +1,97 @@ + + + + + + This represents a waypoint of a planned route. + + + + + This is a unique id of the waypoint within the route. + + + + + + This is an optional name of this waypoint. + + + + + + This is the unique id of the NEXT + waypoint within the route. This element is not set + for the last waypoint. + + + + + This is the latitude of this waypoint in minutes x 1000 (= degrees x 60000). + Positive = North, Negative = South. + Example: 12 deg 23.4 min North = (12 * 60 + 23.4) * 1000 = 743400 + + + + + + This is the longitude of this waypoint in minutes x 1000 (= degrees x 60000). + Positive = East, Negative = West. + Example: 122 deg 23.4 min West = -(122 * 60 + 23.4) * 1000 = -7343400 + + + + + + This is the planned speed over ground (SOG) in knots TO this waypoint. + So the ship will calculate to go from the previous waypoint to this + waypoint at this speed. + + + + + + + + + + This represents the planned ship route. + + + + + This is a unique id of the route. The ID has to be unique + for the vessel. + + + + + + This is the IMO number of the vessel this route belongs to. + + + + + This is the timestamp in UTC when the route has been created. + + + + + This is the ETA in local time when the ship is calculated to + reach the final waypoint of this route. + + + + + This is the list of waypoints. + + + + + \ No newline at end of file diff --git a/nsw/Herberg/schedule.xsd b/nsw/Herberg/schedule.xsd new file mode 100644 index 00000000..ce801948 --- /dev/null +++ b/nsw/Herberg/schedule.xsd @@ -0,0 +1,600 @@ + + + + + + + + + The type of agent. + + + + + + + This is the default agent, also called the Charterers agent. + + + + + + + This is the crewing agent. + + + + + + + This is the purchasing agent. + + + + + + + This is the owners agent. + + + + + + + + + + The destination type of the schedule entry. + + + + + + + This is a port where the ship can berth. + + + + + + + This is an anchorage area. + + + + + + + This is a drifting time. + + + + + + + This is a canal that the vessel may pass. + + + + + + + This is a range indicating a general direction. + + + + + + + + + + The type of a remark that may be attached to a schedule entry. + + + + + + + + + + + + + + + + + + This type is for all future arrivals of all + vessels to the same + destination. + + + + + + + + This type is for all future arrivals of the + specified vessel to the + same destination. + + + + + + + + This type is for the specified destination only. + + + + + + + + + + + + + + + + + + This is a destination remark. It refers either to + a particular + destination or a fixed object (i.e. a port). + + + + + + This is the date when the remark was created. + + + + + + + + + This is the optional remark type for user + remarks. If the + type is USER_REMARK then this entry defines how the + user remark should be displayed. + + + + + + + This is the optional user name who entered the + remarks. + + + + + + + This is the optional message (the remark). + + + + + + + + + + + + This id is given by the Daily Report. This is + NOT the database id. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The entry was created at this time + in UTC. + + + + + + The entry was removed at this time + in UTC. + + + + + + + Indicates that this entry should not be used any more. Added 01/2015. + + + + + + + This is the unique GUID of this entry. Added 01/2015. + + + + + + + + + + This is a destination remark. It refers either to + a particular + destination or a fixed object (i.e. a port). + + + + + + + + This is the unique identifier (ident) created by + the Daily Report + tool. for historical reasons, this is + an integer + created based on the time stamp. The id is unique within + the + schedule. + + + + + + + This is the optional voyage number this + destination belongs to. It is + normally entered on board and is a + number or string. + + + + + + + + The name of the schedule entry. This may be the port name (e.g. Hamburg), the anchorage name etc. + + + + + + + + The type of this schedule entry. + + + + + + + + The state code (for US ports) + + + + + + + + The unique UN location code (3 letters, e.g. HAM for Hamburg) + + + + + + + + The ISO country code (e.g. DE for Germany, US for USA). + + + + + + + + This is the optional country name. + + + + + + + + This is the optional geographic position of + the + destination. + + + + + + + + The expected time of arrival (local time). + + + + + + + The expected time of departure (local time). + + + + + + + The expected time of berth (local time). + + + + + + + This is the optional arrival at pilot + station (local time). + + + + + + + This is the optional Finished with Engine (local time). + Only + if arrived. + + + + + + + This is the optional End of Sea Passage (local time). + Only + if + arrived. + + + + + + + This is the optional Actual time of Berth (local time). + Only if arrived. + Note: This is deprecated! + + + + + + + This is the optional Stand by Engine (local time). + Only if + departed. + + + + + + + This is the optional Actual time of + Departure (local time). + Only if departed. + Note: This is deprecated! + + + + + + + This is the optional Begin of Sea Passage. + Only + if departed. + + + + + + + If true, the vessel arrived at the destination. + + + + + + + If true, the vessel departed from the destination. + + + + + + + If true, this destination was canceled. + + + + + + + + Some remarks by the author responsible for the schedule. + + + + + + + + The port activity. This may be a set of the + following operations. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This optional value indicates that the + destination is preliminary. + + + + + + + + + + The agents responsible for the vessel at the destination. + + + + + + + + A set of remarks related to the destination. + + + + + + + + + + + + + An identifier for the schedule (not the database id). Note that several vessels may have schedules with identical SCHEDULE_IDs. + + + + + + + + Last modification time of the schedule. + + + + + + + This is the author, normally the captains name. + + + + + + + This is the optional chief engineers name. + + + + + + optional Chief officer name + + + + + + + The destinations of this schedule. These are the schedule entries. + + + + + + diff --git a/nsw/Herberg/ship.xsd b/nsw/Herberg/ship.xsd new file mode 100644 index 00000000..fec8224b --- /dev/null +++ b/nsw/Herberg/ship.xsd @@ -0,0 +1,127 @@ + + + + + + + + + This is how the ship is displayed. + + + + + This is the color for not selected ship. + + + + + + This is the color for selected ship. + + + + + + + + + This is the ship category. + + + + + This is the ship category number. + + + + + + The name of the category. + + + + + + + + + This is the abstract ship. + + + + + Database id + + + + + Ship name + + + + + Charter ship name + + + + + The past positions of the ship including the latest position. + + + + + + Optional ULR to photo image. + + + + + + This is the ship category. This attribute is used to group a fleet + into several parts. + + + + + + This contains optional individual settings for the ship appearence. + + + + + + + + + This is a Fleettracker Ship. + + + + + + + The IMO number of the ship. + + + + + The optional set of devices. + + + + + The optional route. + + + + + + + \ No newline at end of file diff --git a/nsw/Herberg/shipParams.xsd b/nsw/Herberg/shipParams.xsd new file mode 100644 index 00000000..282425db --- /dev/null +++ b/nsw/Herberg/shipParams.xsd @@ -0,0 +1,95 @@ + + + + + + The own ship parameter used for speed calculation. + + + + + + + This is the MMSI of the own ship. + + + + + + + + Minimal own speed we can achieve. + Unit: Meter per + second + + + + + + + Minimal own speed we can achieve. + Unit: Meter per + second + + + + + + + Optimal speed we would like to go. + Unit: Meter + per second + + + + + + + The maximal positive accelaration we can + achieve. + Unit: Meter per second^2 + + + + + + + The minimal negative accelaration we can + achieve. + Unit: Meter per second^2 + + + + + + + The optimal accelaration we would like to use if + we + want to go from current speed to optimal speed. This will be + applied + if we do not have any targets. + Example: We run 5 mph, our + optimal speed is 8 mph, then we use this + acceleration + to go from 5 + to 8. + Unit: Meter per second^2 + + + + + + + diff --git a/nsw/Herberg/target.xsd b/nsw/Herberg/target.xsd new file mode 100644 index 00000000..c19bba39 --- /dev/null +++ b/nsw/Herberg/target.xsd @@ -0,0 +1,59 @@ + + + + + + + + This represents a river. + + + + + This is the current miles marker + + + + + + + + + + + + + + + This is the current miles marker + + + + + + This is the name of the target + + + + + + This is the current speed + + + + + + \ No newline at end of file diff --git a/nsw/NSW Schnittstelle Meldetypen und Attribute.xlsx b/nsw/NSW Schnittstelle Meldetypen und Attribute.xlsx index 8cc45b9a42814937861415fe7ab1c1b790e2b026..67f77c3ce4a5662210862a3b736ec52c2fc4af1d 100644 GIT binary patch delta 102902 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

^4Cx#+VZ#meL&BecU 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

QiO2D}OL)wCc1%J_a7 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 delta 102535 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

f@@iEH6bQfN@dWCQzOhiA#i3S@zE^fyChu# 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
= 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ȸ>_G{Ko6f#YEMh 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 diff --git a/nsw/Source/SendNSWMessageService/NSWSendService.cs b/nsw/Source/SendNSWMessageService/NSWSendService.cs index 00054eff..35cbe981 100644 --- a/nsw/Source/SendNSWMessageService/NSWSendService.cs +++ b/nsw/Source/SendNSWMessageService/NSWSendService.cs @@ -76,30 +76,30 @@ namespace SendNSWMessageService _log.InfoFormat("Sending CORE message for {0} application to {1}", message.MessageCore.IsTransit ? "TRANSIT" : "VISIT", message.MessageCore.InitialHIS.ToString()); + bool sendSucceeded = false; // switch über passendes HIS / Schnittstelle switch (message.MessageCore.InitialHIS) { case Message.NSWProvider.DBH: - bsmd.dbh.Request.SendMessage(message); - + sendSucceeded = bsmd.dbh.Request.SendMessage(message); break; case Message.NSWProvider.DAKOSY: - + _log.Warn("Cannot send via DAKOSY yet"); break; case Message.NSWProvider.DUDR: - + _log.Warn("Cannot send via Daten und Dienste HRO yet"); break; default: - + _log.WarnFormat("Initial HIS not specified for message {0}", message.Id); break; - - } - // senden - - // .. + if (sendSucceeded) + { + message.InternalStatus = Message.BSMDStatus.SENT; + DBManager.Instance.Save(message); + } } catch (Exception ex) diff --git a/nsw/Source/SendNSWMessageService/SendNSWMessageService.csproj b/nsw/Source/SendNSWMessageService/SendNSWMessageService.csproj index fbf29867..f201e0cf 100644 --- a/nsw/Source/SendNSWMessageService/SendNSWMessageService.csproj +++ b/nsw/Source/SendNSWMessageService/SendNSWMessageService.csproj @@ -68,7 +68,9 @@ - + + Designer + SettingsSingleFileGenerator diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index cb29dc35..ebd6c593 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -112,6 +112,24 @@ namespace bsmd.database return result; } + public void Save(Message message) + { + SqlCommand cmd = new SqlCommand(); + message.PrepareSave(cmd); + int queryResult = this.PerformNonQuery(cmd); + switch(queryResult) + { + case 1: + _log.InfoFormat("Message {0} saved", message.Id); break; + case 0: + _log.WarnFormat("Message {0} save affected no rows", message.Id); break; + case -1: + _log.WarnFormat("Message {0} save: error occurred", message.Id); break; + default: + _log.WarnFormat("Message {0} save affected {1} rows", message.Id, queryResult); break; + } + } + #endregion #region internal/private funcs @@ -132,24 +150,75 @@ namespace bsmd.database SqlCommand cmd = new SqlCommand(); - switch(message.MessageNotificationClass) - { - case Message.NotificationClass.STAT: - STAT stat = new STAT(); - stat.PrepareLoadCommand(cmd, Message.LoadFilter.MESSAGEHEADER, message.Id); - SqlDataReader reader = this.PerformCommand(cmd); - List statList = stat.LoadList(reader); - if (statList.Count > 0) - message.DerivedMessage = statList[0]; - ((STAT)statList[0]).MessageHeader = message; - break; - default: - break; + DatabaseEntity msgClass = DBManager.CreateMessage(message.MessageNotificationClass); + if (msgClass != null) + { + msgClass.PrepareLoadCommand(cmd, Message.LoadFilter.MESSAGEHEADER, message.Id); + SqlDataReader reader = this.PerformCommand(cmd); + List statList = msgClass.LoadList(reader); + if (statList.Count > 0) message.DerivedMessage = statList[0]; + ((IMessageClass)msgClass).MessageHeader = message; + } + else + { + _log.ErrorFormat("cannot create a message class for notification type {0}", message.MessageNotificationClass); } - } - + this.LoadDependingLists(message); + + } + } + + ///

+ /// factory method for messages by type + /// + internal static DatabaseEntity CreateMessage(Message.NotificationClass notificationClass) + { + DatabaseEntity result = null; + switch (notificationClass) + { + case Message.NotificationClass.STAT: result = new STAT(); break; + case Message.NotificationClass.NOA_NOD: result = new NOA_NOD(); break; + case Message.NotificationClass.MDH: result = new MDH(); break; + default: break; + } + return result; + } + + /// + /// Loads inner lists / collections + /// + internal void LoadDependingLists(DatabaseEntity databaseEntity) + { + SqlCommand cmd = new SqlCommand(); + + if(databaseEntity.GetType().IsAssignableFrom(typeof(MDH))) + { + MDH mdh = databaseEntity as MDH; + mdh.PrepareLoadCommand(cmd, Message.LoadFilter.MDH_ID); + SqlDataReader reader = this.PerformCommand(cmd); + List poc30s = mdh.LoadList(reader); + foreach (PortOfCallLast30Days poc30 in poc30s) + { + mdh.PortOfCallLast30Days.Add(poc30); + poc30.MDH = mdh; + this.LoadDependingLists(poc30); + } + } + + if(databaseEntity.GetType().IsAssignableFrom(typeof(PortOfCallLast30Days))) + { + PortOfCallLast30Days poc30 = databaseEntity as PortOfCallLast30Days; + poc30.PrepareLoadCommand(cmd, Message.LoadFilter.POC30_ID); + SqlDataReader reader = this.PerformCommand(cmd); + List poc30Names = poc30.LoadList(reader); + foreach (PortOfCallLast30DaysCrewJoinedShip poc30Name in poc30Names) + { + poc30.CrewJoinedShip.Add(poc30Name); + poc30Name.PortOfCallLast30Days = poc30; + } + } } internal void LoadErrorList(Message message) @@ -191,6 +260,22 @@ namespace bsmd.database } } + internal int PerformNonQuery(SqlCommand cmd) + { + try + { + cmd.Connection = this._con; + return cmd.ExecuteNonQuery(); + } + catch (SqlException ex) + { + System.Diagnostics.Trace.WriteLine("SQL Exception:" + ex.Message); + _log.Error("Error performing command", ex); + return -1; + } + } + + #endregion } diff --git a/nsw/Source/bsmd.database/DatabaseEntity.cs b/nsw/Source/bsmd.database/DatabaseEntity.cs index ba23c187..ced5ec69 100644 --- a/nsw/Source/bsmd.database/DatabaseEntity.cs +++ b/nsw/Source/bsmd.database/DatabaseEntity.cs @@ -36,7 +36,7 @@ namespace bsmd.database /// public bool IsNew { get { return !this.id.HasValue; } } - public virtual void PrepareSave(IDbCommand cmd) { } + public abstract void PrepareSave(IDbCommand cmd); public virtual void PrepareDelete(IDbCommand cmd) { @@ -47,6 +47,7 @@ namespace bsmd.database public abstract void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria); - public abstract List LoadList(IDataReader reader); + public abstract List LoadList(IDataReader reader); + } } diff --git a/nsw/Source/bsmd.database/IMessageClass.cs b/nsw/Source/bsmd.database/IMessageClass.cs new file mode 100644 index 00000000..ab1b13cb --- /dev/null +++ b/nsw/Source/bsmd.database/IMessageClass.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace bsmd.database +{ + interface IMessageClass + { + Message MessageHeader { get; set; } + } +} diff --git a/nsw/Source/bsmd.database/MDH.cs b/nsw/Source/bsmd.database/MDH.cs new file mode 100644 index 00000000..a43a06dc --- /dev/null +++ b/nsw/Source/bsmd.database/MDH.cs @@ -0,0 +1,210 @@ +// +// Class: MDH +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/21/2015 10:56:30 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class MDH : DatabaseEntity, IMessageClass + { + + private List portOfCallLast30Days = new List(); + + public MDH() + { + this.tablename = "[dbo].[MDH]"; + } + + #region Properties + + public Message MessageHeader { get; set; } + + public List PortOfCallLast30Days { get { return this.portOfCallLast30Days; } } + + public string MDHSimplification { get; set; } + + public string PortOfCallWhereCompleteMDHNotified { get; set; } + + public bool? NonAccidentalDeathsDuringVoyage { get; set; } + + public int? NonAccidentalDeathsDuringVoyageCount { get; set; } + + public bool? SuspisionInfectiousNature { get; set; } + + public bool? NumberOfIllPersonsHigherThanExpected { get; set; } + + public int? NumberOfIllPersons { get; set; } + + public bool? SickPersonsOnBoard { get; set; } + + public bool? MedicalConsulted { get; set; } + + public bool? AwareOfFurtherInfections { get; set; } + + public bool? SanitaryMeasuresApplied { get; set; } + + public string SanitaryMeasuresType { get; set; } + + public string SanitaryMeasuresLocation { get; set; } + + public DateTime? SanitaryMeasuresDate { get; set; } + + public bool? StowawaysDetected { get; set; } + + public string StowawaysJoiningLocation { get; set; } + + public bool? SickAnimalOrPetOnBoard { get; set; } + + public bool? ValidSanitaryControlExemptionOrCertificateOnBoard { get; set; } + + public string PlaceOfIssue { get; set; } + + public DateTime? DateOfIssue { get; set; } + + public bool? SanitaryControlReinspectionRequired { get; set; } + + public bool? InfectedAreaVisited { get; set; } + + public string InfectedAreaPort { get; set; } + + public DateTime? InfectedAreaDate { get; set; } + + #endregion + + #region abstract method implementation + + public override void PrepareSave(System.Data.IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithNullableValue("@P1", this.MessageHeader.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.MDHSimplification); + scmd.Parameters.AddWithNullableValue("@P3", this.PortOfCallWhereCompleteMDHNotified); + scmd.Parameters.AddWithNullableValue("@P4", this.NonAccidentalDeathsDuringVoyage); + scmd.Parameters.AddWithNullableValue("@P5", this.NonAccidentalDeathsDuringVoyageCount); + scmd.Parameters.AddWithNullableValue("@P6", this.SuspisionInfectiousNature); + scmd.Parameters.AddWithNullableValue("@P7", this.NumberOfIllPersonsHigherThanExpected); + scmd.Parameters.AddWithNullableValue("@P8", this.NumberOfIllPersons); + scmd.Parameters.AddWithNullableValue("@P9", this.SickPersonsOnBoard); + scmd.Parameters.AddWithNullableValue("@P10", this.MedicalConsulted); + scmd.Parameters.AddWithNullableValue("@P11", this.AwareOfFurtherInfections); + scmd.Parameters.AddWithNullableValue("@P12", this.SanitaryMeasuresApplied); + scmd.Parameters.AddWithNullableValue("@P13", this.SanitaryMeasuresType); + scmd.Parameters.AddWithNullableValue("@P14", this.SanitaryMeasuresLocation); + scmd.Parameters.AddWithNullableValue("@P15", this.SanitaryMeasuresDate); + scmd.Parameters.AddWithNullableValue("@P16", this.StowawaysDetected); + scmd.Parameters.AddWithNullableValue("@P17", this.StowawaysJoiningLocation); + scmd.Parameters.AddWithNullableValue("@P18", this.SickAnimalOrPetOnBoard); + scmd.Parameters.AddWithNullableValue("@P19", this.ValidSanitaryControlExemptionOrCertificateOnBoard); + scmd.Parameters.AddWithNullableValue("@P20", this.PlaceOfIssue); + scmd.Parameters.AddWithNullableValue("@P21", this.DateOfIssue); + scmd.Parameters.AddWithNullableValue("@P22", this.SanitaryControlReinspectionRequired); + scmd.Parameters.AddWithNullableValue("@P23", this.InfectedAreaVisited); + scmd.Parameters.AddWithNullableValue("@P24", this.InfectedAreaPort); + scmd.Parameters.AddWithNullableValue("@P25", this.InfectedAreaDate); + + + if (this.IsNew) + { + scmd.CommandText = string.Format("INSERT INTO {0} MessageHeaderId, MDHSimplification, PortOfCallWhereCompleteMDHNotified, " + + "NonAccidentalDeathsDuringVoyage, NonAccidentalDeathsDuringVoyageCount, SuspisionInfectiousNature, NumberOfIllPersonsHigherThanExpected, " + + "NumberOfIllPersons, SickPersonsOnBoard, MedicalConsulted, AwareOfFurtherInfections, SanitaryMeasuresApplied, SanitaryMeasuresType, " + + "SanitaryMeasuresLocation, SanitaryMeasuresDate, StowawaysDetected, StowawaysJoiningLocation, SickAnimalOrPetOnBoard, " + + "ValidSanitaryControlExemptionOrCertificateOnBoard, PlaceOfIssue, DateOfIssue, SanitaryControlReinspectionRequired, " + + "InfectedAreaVisited, InfectedAreaPort, InfectedAreaDate) VALUES (@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, " + + "@P13, @P14, @P15, @P16, @P17, @P18, @P19, @P20, @P21, @P22, @P23, @P24, @P25)", this.Tablename); + } + else + { + scmd.CommandText = string.Format("UPDATE {0} SET MDHSimplification = @P2, PortOfCallWhereCompleteMDHNotified = @P3, " + + "NonAccidentalDeathsDuringVoyage = @P4, NonAccidentalDeathsDuringVoyageCount = @P5, SuspisionInfectiousNature = @P6, " + + "NumberOfIllPersonsHigherThanExpected = @P7, NumberOfIllPersons = @P8, SickPersonsOnBoard = @P9, MedicalConsulted = @P10, " + + "AwareOfFurtherInfections = @P11, SanitaryMeasuresApplied = @P12, SanitaryMeasuresType = @P13, SanitaryMeasuresLocation = @P14, " + + "SanitaryMeasuresDate = @P15, StowawaysDetected = @P16, StowawaysJoiningLocation = @P17, SickAnimalOrPetOnBoard = @P18, " + + "ValidSanitaryControlExemptionOrCertificateOnBoard = @P19, PlaceofIssue = @P20, DateOfIssue = @P21, SanitaryControlReinspectionRequired = @P22, " + + "InfectedAreaVisited = @P23, InfectedAreaPort = @P24, InfectedAreaDate = @P25", this.Tablename); + scmd.Parameters.AddWithValue("@ID", this.Id); + } + } + + public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + string query = string.Format("SELECT Id, MDHSimplification, PortOfCallWhereCompleteMDHNotified, " + + "NonAccidentalDeathsDuringVoyage, NonAccidentalDeathsDuringVoyageCount, SuspisionInfectiousNature, " + + "NumberOfIllPersonsHigherThanExpected, NumberOfIllPersons, SickPersonsOnBoard, MedicalConsulted, AwareOfFurtherInfections, " + + "SanitaryMeasuresApplied, SanitaryMeasuresType, SanitaryMeasuresLocation, SanitaryMeasuresDate, StowawaysDetected, " + + "StowawaysJoiningLocation, SickAnimalOrPetOnBoard, ValidSanitaryControlExemptionOrCertificateOnBoard, " + + "PlaceOfIssue, DateOfIssue, SanitaryControlReinspectionRequired, InfectedAreaVisited, InfectedAreaPort, InfectedAreaDate " + + "FROM {0}", this.Tablename); + + switch (filter) + { + case Message.LoadFilter.MESSAGEHEADER: + query += "WHERE MessageHeaderId = @MHID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + break; + case Message.LoadFilter.ALL: + default: + + break; + } + cmd.CommandText = query; + } + + public override List LoadList(System.Data.IDataReader reader) + { + List result = new List(); + + while (reader.Read()) + { + MDH mdh = new MDH(); + + mdh.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) mdh.MDHSimplification = reader.GetString(1); + + this.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) mdh.MDHSimplification = reader.GetString(1); + if (!reader.IsDBNull(2)) mdh.PortOfCallWhereCompleteMDHNotified = reader.GetString(2); + if (!reader.IsDBNull(3)) mdh.NonAccidentalDeathsDuringVoyage = reader.GetBoolean(3); + if (!reader.IsDBNull(4)) mdh.NonAccidentalDeathsDuringVoyageCount = reader.GetInt32(4); + if (!reader.IsDBNull(5)) mdh.SuspisionInfectiousNature = reader.GetBoolean(5); + if (!reader.IsDBNull(6)) mdh.NumberOfIllPersonsHigherThanExpected = reader.GetBoolean(6); + if (!reader.IsDBNull(7)) mdh.NumberOfIllPersons = reader.GetInt32(7); + if (!reader.IsDBNull(8)) mdh.SickPersonsOnBoard = reader.GetBoolean(8); + if (!reader.IsDBNull(9)) mdh.MedicalConsulted = reader.GetBoolean(9); + if (!reader.IsDBNull(10)) mdh.AwareOfFurtherInfections = reader.GetBoolean(10); + if (!reader.IsDBNull(11)) mdh.SanitaryMeasuresApplied = reader.GetBoolean(11); + if (!reader.IsDBNull(12)) mdh.SanitaryMeasuresType = reader.GetString(12); + if (!reader.IsDBNull(13)) mdh.SanitaryMeasuresLocation = reader.GetString(13); + if (!reader.IsDBNull(14)) mdh.SanitaryMeasuresDate = reader.GetDateTime(14); + if (!reader.IsDBNull(15)) mdh.StowawaysDetected = reader.GetBoolean(15); + if (!reader.IsDBNull(16)) mdh.StowawaysJoiningLocation = reader.GetString(16); + if (!reader.IsDBNull(17)) mdh.SickAnimalOrPetOnBoard = reader.GetBoolean(17); + if (!reader.IsDBNull(18)) mdh.ValidSanitaryControlExemptionOrCertificateOnBoard = reader.GetBoolean(18); + if (!reader.IsDBNull(19)) mdh.PlaceOfIssue = reader.GetString(19); + if (!reader.IsDBNull(20)) mdh.DateOfIssue = reader.GetDateTime(20); + if (!reader.IsDBNull(21)) mdh.SanitaryControlReinspectionRequired = reader.GetBoolean(21); + if (!reader.IsDBNull(22)) mdh.InfectedAreaVisited = reader.GetBoolean(22); + if (!reader.IsDBNull(23)) mdh.InfectedAreaPort = reader.GetString(23); + if (!reader.IsDBNull(24)) mdh.InfectedAreaDate = reader.GetDateTime(24); + + result.Add(mdh); + } + + reader.Close(); + return result; + } + + #endregion + + } +} diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 9de76727..74948672 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -46,7 +46,9 @@ namespace bsmd.database REPORTINGPARTY, MESSAGEHEADER, BSMDSTATUS, - WETRIS_SHIP_ID + WETRIS_SHIP_ID, + MDH_ID, + POC30_ID } /// diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs new file mode 100644 index 00000000..85e8bba5 --- /dev/null +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -0,0 +1,132 @@ +// +// Class: NOA_NOD +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/21/2015 8:56:24 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class NOA_NOD : DatabaseEntity, IMessageClass + { + + public NOA_NOD() + { + this.tablename = "[dbo].[NOA_NOD]"; + } + + #region Properties + + public Message MessageHeader { get; set; } + + public DateTime? ETAToPortOfCall { get; set; } + + public DateTime? ETDFromPortOfCall { get; set; } + + public int? CallPurposeCode { get; set; } + + public string CallPurposeDescription { get; set; } + + public DateTime? ETAToKielCanal { get; set; } + + public DateTime? ETDFromKielCanal { get; set; } + + public string LastPort { get; set; } + + public DateTime? ETDFromLastPort { get; set; } + + public string NextPort { get; set; } + + public DateTime? ETAToNextPort { get; set; } + + #endregion + + #region abstract class implementation + + public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + string query = string.Format("SELECT Id, ETAToPortOfCall, ETDFromPortOfCall, CallPurposeCode, CallPurposeDescription, " + + "ETAToKielCanal, ETDFromKielCanal, LastPort, ETDFromLastPort, NextPort, ETAToNextPort FROM {0}", this.Tablename); + + switch (filter) + { + case Message.LoadFilter.MESSAGEHEADER: + query += "WHERE MessageHeaderId = @MHID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + break; + case Message.LoadFilter.ALL: + default: + + break; + } + + cmd.CommandText = query; + } + + public override List LoadList(System.Data.IDataReader reader) + { + List result = new List(); + while(reader.Read()) + { + NOA_NOD nn = new NOA_NOD(); + nn.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) nn.ETAToPortOfCall = reader.GetDateTime(1); + if (!reader.IsDBNull(2)) nn.ETDFromPortOfCall = reader.GetDateTime(2); + if (!reader.IsDBNull(3)) nn.CallPurposeCode = reader.GetInt32(3); + if (!reader.IsDBNull(4)) nn.CallPurposeDescription = reader.GetString(4); + if (!reader.IsDBNull(5)) nn.ETAToKielCanal = reader.GetDateTime(5); + if (!reader.IsDBNull(6)) nn.ETDFromKielCanal = reader.GetDateTime(6); + if (!reader.IsDBNull(7)) nn.LastPort = reader.GetString(7); + if (!reader.IsDBNull(8)) nn.ETDFromLastPort = reader.GetDateTime(8); + if (!reader.IsDBNull(9)) nn.NextPort = reader.GetString(9); + if (!reader.IsDBNull(10)) nn.ETAToNextPort = reader.GetDateTime(10); + result.Add(nn); + } + reader.Close(); + return result; + } + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithNullableValue("@P1", this.MessageHeader.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.ETAToPortOfCall); + scmd.Parameters.AddWithNullableValue("@P3", this.ETDFromPortOfCall); + scmd.Parameters.AddWithNullableValue("@P4", this.CallPurposeCode.Value); + scmd.Parameters.AddWithNullableValue("@P5", this.CallPurposeDescription); + scmd.Parameters.AddWithNullableValue("@P6", this.ETAToKielCanal); + scmd.Parameters.AddWithNullableValue("@P7", this.ETDFromKielCanal); + scmd.Parameters.AddWithNullableValue("@P8", this.LastPort); + scmd.Parameters.AddWithNullableValue("@P9", this.ETDFromLastPort); + scmd.Parameters.AddWithNullableValue("@P10", this.NextPort); + scmd.Parameters.AddWithNullableValue("@P11", this.ETAToNextPort); + + if (this.IsNew) + { + cmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, ETAToPortOfCall, ETDFromPortOfCall, " + + "CallPurposeCode, CallPurposeDescription, ETAToKielCanal, ETDFromKielCanal, LastPort, ETDFromLastPort, " + + "NextPort, ETAToNextPort) VALUES (@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11) ", this.Tablename); + } + else + { + ((SqlCommand)cmd).Parameters.AddWithValue("@ID", this.Id); + + cmd.CommandText = string.Format("UPDATE {0} SET ETAToPortOfCall = @P2, ETDFromPortOfCall = @P3, CallPurposeCode = @P4, " + + "CallPurposeDescription = @P5, ETAToKielCanal = @P6, ETDFromKielCanal = @P7, LastPort = @P8, ETDFromLastPort = @P9, " + + "NextPort = @P10, ETAToNextPort = @P11 WHERE Id = @ID", this.Tablename); + + } + } + + #endregion + + } +} diff --git a/nsw/Source/bsmd.database/POBA.cs b/nsw/Source/bsmd.database/POBA.cs new file mode 100644 index 00000000..4e2403ce --- /dev/null +++ b/nsw/Source/bsmd.database/POBA.cs @@ -0,0 +1,76 @@ +// +// Class: POBA - Personen an Bord beim Anlaufen +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/25/2015 7:19:35 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class POBA : DatabaseEntity, IMessageClass + { + + public POBA() + { + this.tablename = "[dbo].[POBA]"; + } + + #region Properties + + public Message MessageHeader { get; set; } + + public int? TotalPersonsOnBoardUponArrival { get; set; } + + public int? TotalCrewMembersOnBoardUponArrival { get; set; } + + public int? TotalPassengersOnBoardUponArrival { get; set; } + + public int? TotalStowawaysOnBoardUponArrival { get; set; } + + #endregion + + public override void PrepareSave(System.Data.IDbCommand cmd) + { + + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.TotalPersonsOnBoardUponArrival); + scmd.Parameters.AddWithNullableValue("@P3", this.TotalCrewMembersOnBoardUponArrival); + scmd.Parameters.AddWithNullableValue("@P4", this.TotalPassengersOnBoardUponArrival); + scmd.Parameters.AddWithNullableValue("@P5", this.TotalStowawaysOnBoardUponArrival); + + if (this.IsNew) + { + scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, TotalPersonsOnBoardUponArrival, " + + "TotalCrewMembersonBoardUponArrival, TotalPassengersOnBoardUponArrival, " + + "TotalStowawaysOnBoardUponArrival) VALUES (@P1, @P2, @P3, @P4, @P5)", this.Tablename); + } + else + { + scmd.Parameters.AddWithValue(@"ID", this.Id); + scmd.CommandText = string.Format("UPDATE {0} SET TotalPersonsOnBoardUponArrival = @P2, " + + "TotalCrewMembersOnBoardUponArrival = @P3, TotalPassengersOnBoardUponArrival = @P4" + + "TotalStowawaysOnBoardUponArrival = @P5 WHERE Id = @ID", this.Tablename); + } + + } + + public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + throw new NotImplementedException(); + } + + public override List LoadList(System.Data.IDataReader reader) + { + throw new NotImplementedException(); + } + } +} diff --git a/nsw/Source/bsmd.database/POBD.cs b/nsw/Source/bsmd.database/POBD.cs new file mode 100644 index 00000000..3aa66950 --- /dev/null +++ b/nsw/Source/bsmd.database/POBD.cs @@ -0,0 +1,75 @@ +// +// Class: POBD - Personen an Bord beim Auslaufen +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/25/2015 7:19:51 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class POBD : DatabaseEntity, IMessageClass + { + + public POBD() + { + this.tablename = "[dbo].[POBD]"; + } + + #region Properties + + public Message MessageHeader { get; set; } + + public int? TotalPersonsOnBoardUponDeparture { get; set; } + + public int? TotalCrewMembersOnBoardUponDeparture { get; set; } + + public int? TotalPassengersOnBoardUponDeparture { get; set; } + + public int? TotalStowawaysOnBoardUponDeparture { get; set; } + + #endregion + + public override void PrepareSave(System.Data.IDbCommand cmd) + { + + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.TotalPersonsOnBoardUponDeparture); + scmd.Parameters.AddWithNullableValue("@P3", this.TotalCrewMembersOnBoardUponDeparture); + scmd.Parameters.AddWithNullableValue("@P4", this.TotalPassengersOnBoardUponDeparture); + scmd.Parameters.AddWithNullableValue("@P5", this.TotalStowawaysOnBoardUponDeparture); + + if (this.IsNew) + { + scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, TotalPersonsOnBoardUponDeparture, " + + "TotalCrewMembersonBoardUponDeparture, TotalPassengersOnBoardUponDeparture, " + + "TotalStowawaysOnBoardUponDeparture) VALUES (@P1, @P2, @P3, @P4, @P5)", this.Tablename); + } + else + { + scmd.Parameters.AddWithValue(@"ID", this.Id); + scmd.CommandText = string.Format("UPDATE {0} SET TotalPersonsOnBoardUponDeparture = @P2, " + + "TotalCrewMembersOnBoardUponDeparture = @P3, TotalPassengersOnBoardUponDeparture = @P4" + + "TotalStowawaysOnBoardUponDeparture = @P5 WHERE Id = @ID", this.Tablename); + } + } + + public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + throw new NotImplementedException(); + } + + public override List LoadList(System.Data.IDataReader reader) + { + throw new NotImplementedException(); + } + } +} diff --git a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs new file mode 100644 index 00000000..1340e2d9 --- /dev/null +++ b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs @@ -0,0 +1,106 @@ +// +// Class: PortOfCallLast30Days +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/22/2015 8:29:02 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class PortOfCallLast30Days : DatabaseEntity + { + + private List poc30Crew = new List(); + + public PortOfCallLast30Days() + { + this.tablename = "[dbo].[PortOfCallLast30Days]"; + } + + #region Properties + + public MDH MDH { get; set; } + + public List CrewJoinedShip { get { return this.poc30Crew; } } + + public string PortOfCallLast30DaysLocode { get; set; } + + public DateTime? PortOfCallLast30DaysDateOfDeparture { get; set; } + + public bool? PortOfCallLast30DaysCrewMembersJoined { get; set; } + + #endregion + + #region abstract class implementation + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithNullableValue("@P1", this.MDH.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.PortOfCallLast30DaysLocode); + scmd.Parameters.AddWithNullableValue("@P3", this.PortOfCallLast30DaysDateOfDeparture); + scmd.Parameters.AddWithNullableValue("@P4", this.PortOfCallLast30DaysCrewMembersJoined); + + if (this.IsNew) + { + scmd.CommandText = string.Format("INSERT INTO {0} (MDH_Id, PortOfCallLast30DaysLocode, PortOfCallLast30DaysDateOfDeparture, " + + "PortOfCallLast30DaysCrewMembersJoined) VALUES (@P1, @P2, @P3, @P4)", this.Tablename); + } + else + { + scmd.CommandText = string.Format("UPDATE {0} SET PortOfCallLast30DaysLocode = @P2, PortOfCallLast30DaysDateOfDeparture = @P3, " + + "PortOfCallLast30DaysCrewMembersJoined = @P4 WHERE Id = @ID", this.Tablename); + scmd.Parameters.AddWithNullableValue("@ID", this.Id); + } + } + + public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + + string query = string.Format("SELECT Id, PortOfCallLast30DaysLocode, PortOfCallLast30DaysDateOfDeparture, " + + "PortOfCallLast30DaysCrewMembersJoined FROM {0}", this.Tablename); + + switch (filter) + { + case Message.LoadFilter.MDH_ID: + query += "WHERE MDH_Id = @MDHID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + break; + case Message.LoadFilter.ALL: + default: + + break; + } + cmd.CommandText = query; + } + + public override List LoadList(IDataReader reader) + { + List result = new List(); + + while (reader.Read()) + { + PortOfCallLast30Days poc = new PortOfCallLast30Days(); + poc.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) poc.PortOfCallLast30DaysLocode = reader.GetString(1); + if (!reader.IsDBNull(2)) poc.PortOfCallLast30DaysDateOfDeparture = reader.GetDateTime(2); + if (!reader.IsDBNull(3)) poc.PortOfCallLast30DaysCrewMembersJoined = reader.GetBoolean(3); + result.Add(poc); + } + + reader.Close(); + return result; + } + + #endregion + + } +} diff --git a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs new file mode 100644 index 00000000..d98b5f49 --- /dev/null +++ b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs @@ -0,0 +1,95 @@ +// +// Class: PortOfCallLast30DaysCrewJoinedShip +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/22/2015 8:53:43 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public class PortOfCallLast30DaysCrewJoinedShip : DatabaseEntity + { + + public PortOfCallLast30DaysCrewJoinedShip() + { + this.tablename = "[dbo].[PortOfCallLast30DaysCrewJoinedShip]"; + } + + #region Properties + + public PortOfCallLast30Days PortOfCallLast30Days { get; set; } + + public string PortOfCallLast30DaysCrewJoinedShipName { get; set; } + + #endregion + + #region abstract class implementation + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithValue("@P1", this.PortOfCallLast30Days.Id); + scmd.Parameters.AddWithNullableValue("@P2", this.PortOfCallLast30DaysCrewJoinedShipName); + + if (this.IsNew) + { + cmd.CommandText = string.Format("INSERT INTO {0} (PortOfCallLast30DaysId = @P1, PortOfCallLast30DaysCrewJoinedShipName = @P2", + this.Tablename); + } + else + { + cmd.CommandText = string.Format("UPDATE {0} SET PortOfCallLast30DaysCrewJoinedShipName = @P2 WHERE Id = @ID", this.Tablename); + scmd.Parameters.AddWithValue("@ID", this.Id); + } + + } + + public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + + string query = string.Format("SELECT Id, PortOfCallLast30DaysCrewJoinedShipName FROM {0}"); + + switch (filter) + { + case Message.LoadFilter.POC30_ID: + query += "WHERE MDH_Id = @MDHID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]); + break; + case Message.LoadFilter.ALL: + default: + + break; + } + + cmd.CommandText = query; + } + + public override List LoadList(IDataReader reader) + { + List result = new List(); + + while(reader.Read()) + { + PortOfCallLast30DaysCrewJoinedShip poc30 = new PortOfCallLast30DaysCrewJoinedShip(); + poc30.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) poc30.PortOfCallLast30DaysCrewJoinedShipName = reader.GetString(1); + result.Add(poc30); + } + + reader.Close(); + return result; + + } + + #endregion + + } +} diff --git a/nsw/Source/bsmd.database/STAT.cs b/nsw/Source/bsmd.database/STAT.cs index 5447ed5b..c5082298 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; namespace bsmd.database { - public class STAT : DatabaseEntity + public class STAT : DatabaseEntity, IMessageClass { public STAT() @@ -60,7 +60,9 @@ namespace bsmd.database #endregion - public void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + #region abstract class implementation + + public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) { string query = string.Format("SELECT Id, ShipName, Callsign, MMSINumber, Flag, LengthOverall_MTR, Beam_MTR, " + "GrossTonnage, PortOfRegistry, InmarsatCallNumber, ShipType, ISMCompanyName, ISMCompanyId, ISMCompanyStreetAndNumber, " + @@ -112,5 +114,65 @@ namespace bsmd.database reader.Close(); return result; } + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithValue("@P1", this.MessageHeader.Id); + if (this.ShipName != null) scmd.Parameters.AddWithValue("@P2", this.ShipName); + else scmd.Parameters.AddWithValue("@P2", DBNull.Value); + if (this.CallSign != null) scmd.Parameters.AddWithValue("@P3", DBNull.Value); + else scmd.Parameters.AddWithValue("@P3", DBNull.Value); + if (this.MMSINumber != null) scmd.Parameters.AddWithValue("@P4", this.MMSINumber); + else scmd.Parameters.AddWithValue("@P4", DBNull.Value); + if (this.Flag != null) scmd.Parameters.AddWithValue("@P5", this.Flag); + else scmd.Parameters.AddWithValue("@P5", DBNull.Value); + if (this.LengthOverall_MTR.HasValue) scmd.Parameters.AddWithValue("@P6", this.LengthOverall_MTR.Value); + else scmd.Parameters.AddWithValue("@P6", DBNull.Value); + if (this.Beam_MTR.HasValue) scmd.Parameters.AddWithValue("@P7", this.Beam_MTR.Value); + else scmd.Parameters.AddWithValue("@P7", DBNull.Value); + if (this.GrossTonnage.HasValue) scmd.Parameters.AddWithValue("@P8", this.GrossTonnage.Value); + else scmd.Parameters.AddWithValue("@P8", DBNull.Value); + if (this.PortOfRegistry != null) scmd.Parameters.AddWithValue("@P9", this.PortOfRegistry); + else scmd.Parameters.AddWithValue("@P9", DBNull.Value); + if (this.InmarsatCallNumber != null) scmd.Parameters.AddWithValue("@P10", this.InmarsatCallNumber); + else scmd.Parameters.AddWithValue("@P10", DBNull.Value); + if (this.ShipType != null) scmd.Parameters.AddWithValue("@P11", this.ShipType); + else scmd.Parameters.AddWithValue("@P11", DBNull.Value); + if (this.ISMCompanyName != null) scmd.Parameters.AddWithValue("@P12", this.ISMCompanyName); + else scmd.Parameters.AddWithValue("@P12", DBNull.Value); + if (this.ISMCompanyId != null) scmd.Parameters.AddWithValue("@P13", this.ISMCompanyId); + else scmd.Parameters.AddWithValue("@P13", DBNull.Value); + if (this.ISMCompanyStreetAndNumber != null) scmd.Parameters.AddWithValue("@P14", this.ISMCompanyStreetAndNumber); + else scmd.Parameters.AddWithValue("@P14", DBNull.Value); + if (this.ISMCompanyPostalCode != null) scmd.Parameters.AddWithValue("@P15", this.ISMCompanyPostalCode); + else scmd.Parameters.AddWithValue("@P15", DBNull.Value); + if (this.ISMCompanyCity != null) scmd.Parameters.AddWithValue("@P16", this.ISMCompanyCity); + else scmd.Parameters.AddWithValue("@P16", DBNull.Value); + if (this.ISMCompanyCountry != null) scmd.Parameters.AddWithValue("@P17", this.ISMCompanyCountry); + else scmd.Parameters.AddWithValue("@P17", DBNull.Value); + + if (this.IsNew) + { + cmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, ShipName, CallSign, MMSINumber, " + + "Flag, LengthOverall_MTR, Beam_MTR, GrossTonnage, PortOfRegistry, InmarsatCallNumber, ShiptType, " + + "ISMCompanyName, ISMCompanyId, ISMCompanyStreetAndNumber, ISMCompanyPostalAddress, ISMCompanyCity, " + + "ISMCompanyCountry) VALUES (@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, " + + "@P15, @P16, @P17)", this.Tablename); + } + else + { + cmd.CommandText = string.Format("UPDATE {0} SET ShipName = @P2, CallSign = @P3, MMSINumber = @P4, Flag = @P5, " + + "LengthOverall_MTR = @P6, Beam_MTR = @P7, GrossTonnage = @P8, PortOfRegistry = @P9, InmarsatCallNumber = @P10, " + + "ShipType = @P11, ISMCompanyName = @P12, ISMCompanyId = @P13, ISMCompanyStreetAndNumber = @P14, " + + "ISMCompanyPostalAddress = @P15, ISMCompanyCity = @P16, ISMCompanyCountry = @P17 WHERE Id = @ID", this.Tablename); + scmd.Parameters.AddWithValue("@ID", this.Id); + } + + } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/Util.cs b/nsw/Source/bsmd.database/Util.cs new file mode 100644 index 00000000..55b327d5 --- /dev/null +++ b/nsw/Source/bsmd.database/Util.cs @@ -0,0 +1,30 @@ +// +// Class: Util +// Current CLR: 4.0.30319.34209 +// System: Microsoft Visual Studio 10.0 +// Author: dani +// Created: 3/21/2015 10:36:56 AM +// +// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. + +using System; +using System.Data.SqlClient; +using System.Collections.Generic; + +namespace bsmd.database +{ + public static class Util + { + /// + /// Extension helper to add values that can be null: + /// http://stackoverflow.com/questions/13451085/exception-when-addwithvalue-parameter-is-null + /// + public static SqlParameter AddWithNullableValue(this SqlParameterCollection collection, string parameterName, object value) + { + if (value == null) + return collection.AddWithValue(parameterName, DBNull.Value); + else + return collection.AddWithValue(parameterName, value); + } + } +} diff --git a/nsw/Source/bsmd.database/bsmd.database.csproj b/nsw/Source/bsmd.database/bsmd.database.csproj index 20a2404b..7c545cf9 100644 --- a/nsw/Source/bsmd.database/bsmd.database.csproj +++ b/nsw/Source/bsmd.database/bsmd.database.csproj @@ -47,13 +47,21 @@ + + + + + + + + diff --git a/nsw/Source/bsmd.dbh.ResponseService.v12.suo b/nsw/Source/bsmd.dbh.ResponseService.v12.suo index 0180dbeaee63254e89de54d31fa1d6a91ffaf7d6..44ba1f920c77ac78ed6e9571d0d46e0192df3311 100644 GIT binary patch literal 89600 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 diff --git a/nsw/Source/bsmd.dbh.ResponseService/IService1.cs b/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs similarity index 71% rename from nsw/Source/bsmd.dbh.ResponseService/IService1.cs rename to nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs index 04848399..7a9f7f77 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/IService1.cs +++ b/nsw/Source/bsmd.dbh.ResponseService/IResponseService.cs @@ -10,16 +10,18 @@ namespace bsmd.dbh.ResponseService { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. [ServiceContract] - public interface IService1 + public interface IResponseService { [OperationContract] string GetData(int value); + ///

+ /// Da die Schnittstelle nur mit einem .xsd definiert war ist die Signatur der Methode fraglich + /// Sicher ist Void, weniger sicher der Namen und der Name des Parameters. Dessen Type allerdings schon. + /// [OperationContract] - CompositeType GetDataUsingDataContract(CompositeType composite); - - // TODO: Add your service operations here + void NSWResponse(bsmd.dbh.response.Root root); } diff --git a/nsw/Source/bsmd.dbh.ResponseService/Service1.svc b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc similarity index 50% rename from nsw/Source/bsmd.dbh.ResponseService/Service1.svc rename to nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc index 56d80ca2..1d8674d0 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/Service1.svc +++ b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc @@ -1 +1 @@ -<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.dbh.ResponseService.Service1" CodeBehind="Service1.svc.cs" %> \ No newline at end of file +<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.dbh.ResponseService.ResponseService" CodeBehind="Service1.svc.cs" %> \ No newline at end of file diff --git a/nsw/Source/bsmd.dbh.ResponseService/Service1.svc.cs b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs similarity index 62% rename from nsw/Source/bsmd.dbh.ResponseService/Service1.svc.cs rename to nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs index 3042f57b..b5ca7f4a 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/Service1.svc.cs +++ b/nsw/Source/bsmd.dbh.ResponseService/ResponseService.svc.cs @@ -5,29 +5,26 @@ using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; +using log4net; namespace bsmd.dbh.ResponseService { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together. // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging. - public class Service1 : IService1 + public class ResponseService : IResponseService { + private ILog _log = LogManager.GetLogger("dbh ResponseService"); + public string GetData(int value) { return string.Format("You entered: {0}", value); } - public CompositeType GetDataUsingDataContract(CompositeType composite) + public void NSWResponse(bsmd.dbh.response.Root root) { - if (composite == null) - { - throw new ArgumentNullException("composite"); - } - if (composite.BoolValue) - { - composite.StringValue += "Suffix"; - } - return composite; + _log.Info("response received!"); + Response.ProcessResponse(root); } + } } diff --git a/nsw/Source/bsmd.dbh.ResponseService/bsmd.dbh.ResponseService.csproj b/nsw/Source/bsmd.dbh.ResponseService/bsmd.dbh.ResponseService.csproj index ff8e72c5..62150741 100644 --- a/nsw/Source/bsmd.dbh.ResponseService/bsmd.dbh.ResponseService.csproj +++ b/nsw/Source/bsmd.dbh.ResponseService/bsmd.dbh.ResponseService.csproj @@ -39,6 +39,9 @@ 4 + + ..\packages\log4net.2.0.3\lib\net40-full\log4net.dll + @@ -59,20 +62,21 @@ - + - - Service1.svc + + ResponseService.svc - + + Web.config @@ -81,6 +85,10 @@ + + {19945af2-379b-46a5-b27a-303b5ec1d557} + bsmd.database + {df625ff0-2265-4686-9cb6-2a8511cb3b9d} bsmd.dbh diff --git a/nsw/Source/bsmd.dbh.ResponseService/packages.config b/nsw/Source/bsmd.dbh.ResponseService/packages.config new file mode 100644 index 00000000..981a91a1 --- /dev/null +++ b/nsw/Source/bsmd.dbh.ResponseService/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.dbh/Request.cs b/nsw/Source/bsmd.dbh/Request.cs index 4b2a333f..1cb48750 100644 --- a/nsw/Source/bsmd.dbh/Request.cs +++ b/nsw/Source/bsmd.dbh/Request.cs @@ -84,6 +84,7 @@ namespace bsmd.dbh break; case Message.NotificationClass.STAT: + break; diff --git a/nsw/Source/bsmd.dbh/Response.cs b/nsw/Source/bsmd.dbh/Response.cs index ec51bd3a..bd0faa62 100644 --- a/nsw/Source/bsmd.dbh/Response.cs +++ b/nsw/Source/bsmd.dbh/Response.cs @@ -9,10 +9,36 @@ using System; using System.Collections.Generic; +using bsmd.database; namespace bsmd.dbh { public class Response { + + public static void ProcessResponse(response.Root response) + { + + switch(response.Type) + { + case dbh.response.RootType.VISIT: + + break; + case dbh.response.RootType.TRANSIT: + + break; + case dbh.response.RootType.CANCEL: + + break; + case dbh.response.RootType.RESET: + + break; + case dbh.response.RootType.DATA: + + break; + } + + } + } } diff --git a/nsw/Source/bsmd.herberg.FormService.sln b/nsw/Source/bsmd.herberg.FormService.sln new file mode 100644 index 00000000..2cc72784 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bsmd.herberg.FormService", "bsmd.herberg.FormService\bsmd.herberg.FormService.csproj", "{FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bsmd.database", "bsmd.database\bsmd.database.csproj", "{19945AF2-379B-46A5-B27A-303B5EC1D557}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03}.Release|Any CPU.Build.0 = Release|Any CPU + {19945AF2-379B-46A5-B27A-303B5EC1D557}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19945AF2-379B-46A5-B27A-303B5EC1D557}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19945AF2-379B-46A5-B27A-303B5EC1D557}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19945AF2-379B-46A5-B27A-303B5EC1D557}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/nsw/Source/bsmd.herberg.FormService/App.config b/nsw/Source/bsmd.herberg.FormService/App.config new file mode 100644 index 00000000..9532b204 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/App.config @@ -0,0 +1,51 @@ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + replace me! + + + https://www.fleettracker.de/api/1.0/WSAPIFormData.php + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/FormService.Designer.cs b/nsw/Source/bsmd.herberg.FormService/FormService.Designer.cs new file mode 100644 index 00000000..b7053bbd --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/FormService.Designer.cs @@ -0,0 +1,37 @@ +namespace bsmd.herberg.FormService +{ + partial class FormService + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.ServiceName = "Service1"; + } + + #endregion + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/FormService.cs b/nsw/Source/bsmd.herberg.FormService/FormService.cs new file mode 100644 index 00000000..4ad6e5bc --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/FormService.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.IO; +using System.ServiceProcess; +using System.Text; +using System.Timers; +using System.Threading.Tasks; + +using log4net; +using bsmd.database; +using bsmd.herberg.FormService.ServiceReferenceHerberg; + +namespace bsmd.herberg.FormService +{ + public partial class FormService : ServiceBase + { + private Timer _timer; + private object _timerlock = new object(); + private bool processRunning = false; + private ILog _log = LogManager.GetLogger(typeof(FormService)); + + public FormService() + { + Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); + InitializeComponent(); + } + + protected override void OnStart(string[] args) + { + this.EventLog.Source = this.ServiceName; + this.EventLog.Log = "Application"; + this.EventLog.BeginInit(); + if (!EventLog.SourceExists(this.EventLog.Source, this.EventLog.Log)) + EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log); + this.EventLog.EndInit(); + + this.Init(args); + + this.EventLog.WriteEntry("NSW Send Service started.", EventLogEntryType.Information); + } + + public void Init(string[] args) + { + this._timer = new Timer(); + this._timer.Interval = 5000; // 5 sec + this._timer.Elapsed += _timer_Elapsed; + this._timer.Enabled = true; + + } + + protected override void OnStop() + { + } + + void _timer_Elapsed(object sender, ElapsedEventArgs e) + { + lock (this._timerlock) + { + if (this.processRunning) return; + else this.processRunning = true; + } + + if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) + { + + try + { + WSAPIFormDataPortTypeClient client = new WSAPIFormDataPortTypeClient(); + client.Endpoint.Address = new System.ServiceModel.EndpointAddress(Properties.Settings.Default.ServerAddress); + // client.Endpoint.Name = "Fleettracker Forms"; // TODO + + // Verbindung zu Herberg's Service aufnehmen und Formulare abfragen + GetFormDataInfoListRequestData body = new GetFormDataInfoListRequestData(); + body.apiIdentifier = new APIIdentifier(); + body.apiIdentifier.companyGuid = Guid.NewGuid().ToString(); // TODO + body.apiIdentifier.clientGuid = Guid.NewGuid().ToString(); // TODO + + body.ffFolderTemplateTypeTag = "NSWAP"; + body.timeFrameRequestFilter = new TimeFrameRequestFilter(); + body.timeFrameRequestFilter.startDate = DateTime.Now; // TODO + body.timeFrameRequestFilter.startDateSpecified = true; + + // Liste der verfügbaren Formulare abholen + GetFormDataInfoListResponseData listReponse = client.GetFormDataInfoList(body); + + if (listReponse.success) + { + for (int i = 0; i < listReponse.formDataInfoDatasets.Length; i++) + { + FormDataInfoDataset dataSet = listReponse.formDataInfoDatasets[i]; + + // prüfen, ob ich das Formular schon habe? -> RS Jan + + // Formular abholen + GetFormDataRequestData formBody = new GetFormDataRequestData(); + formBody.apiIdentifier = new APIIdentifier(); + formBody.apiIdentifier.companyGuid = Guid.NewGuid().ToString(); // TODO + formBody.apiIdentifier.clientGuid = Guid.NewGuid().ToString(); // TODO + + formBody.formGuid = dataSet.formGuid; + + GetFormDataResponseData formResponse = client.GetFormData(formBody); + if (formResponse.success) + { + // abgefragtes Formular in die DB speichern + + } + else + { + _log.ErrorFormat("Request of form {0} failed", dataSet.formGuid); + } + } + } + else + { + _log.Error("Request of form list failed"); + } + } + catch (Exception ex) + { + _log.ErrorFormat("Exception occurred: {0}", ex.ToString()); + } + } + else + { + this.EventLog.WriteEntry("FormService stopped: DB connection failed", EventLogEntryType.Error); + this.Stop(); + } + + lock (this._timerlock) + { + this.processRunning = false; + } + } + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/Program.cs b/nsw/Source/bsmd.herberg.FormService/Program.cs new file mode 100644 index 00000000..ae5f7e85 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Program.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.ServiceProcess; +using System.Text; +using System.Threading.Tasks; + +namespace bsmd.herberg.FormService +{ + static class Program + { + /// + /// The main entry point for the application. + /// + static void Main() + { + ServiceBase[] ServicesToRun; + + log4net.Config.XmlConfigurator.Configure(); + + ServicesToRun = new ServiceBase[] + { + new FormService() + }; + + if (Debugger.IsAttached) + { + ((FormService)ServicesToRun[0]).Init(null); + while (true) ; + } + else + { + ServiceBase.Run(ServicesToRun); + } + } + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/Properties/AssemblyInfo.cs b/nsw/Source/bsmd.herberg.FormService/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..4ff0d72e --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("bsmd.herberg.FormService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("bsmd.herberg.FormService")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("663d14d2-42ce-4efd-9915-82254b211d81")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/nsw/Source/bsmd.herberg.FormService/Properties/Settings.Designer.cs b/nsw/Source/bsmd.herberg.FormService/Properties/Settings.Designer.cs new file mode 100644 index 00000000..d0a86941 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Properties/Settings.Designer.cs @@ -0,0 +1,50 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34209 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace bsmd.herberg.FormService.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("replace me!")] + public string ConnectionString { + get { + return ((string)(this["ConnectionString"])); + } + set { + this["ConnectionString"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("https://www.fleettracker.de/api/1.0/WSAPIFormData.php")] + public string ServerAddress { + get { + return ((string)(this["ServerAddress"])); + } + set { + this["ServerAddress"] = value; + } + } + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/Properties/Settings.settings b/nsw/Source/bsmd.herberg.FormService/Properties/Settings.settings new file mode 100644 index 00000000..0982edc7 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Properties/Settings.settings @@ -0,0 +1,12 @@ + + + + + + replace me! + + + https://www.fleettracker.de/api/1.0/WSAPIFormData.php + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.cs b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.cs new file mode 100644 index 00000000..24ccd2c5 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.cs @@ -0,0 +1,880 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34209 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace bsmd.herberg.FormService.ServiceReferenceHerberg { + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.fleettracker.de/api/1.0", ConfigurationName="ServiceReferenceHerberg.WSAPIFormDataPortType")] + public interface WSAPIFormDataPortType { + + [System.ServiceModel.OperationContractAttribute(Action="http://www.fleettracker.de/GetFormDataInfoList", ReplyAction="*")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)] + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse GetFormDataInfoList(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest request); + + // CODEGEN: Generating message contract since the operation has multiple return values. + [System.ServiceModel.OperationContractAttribute(Action="http://www.fleettracker.de/GetFormDataInfoList", ReplyAction="*")] + System.Threading.Tasks.Task GetFormDataInfoListAsync(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest request); + + [System.ServiceModel.OperationContractAttribute(Action="http://www.fleettracker.de/GetFormData", ReplyAction="*")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)] + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse GetFormData(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest request); + + // CODEGEN: Generating message contract since the operation has multiple return values. + [System.ServiceModel.OperationContractAttribute(Action="http://www.fleettracker.de/GetFormData", ReplyAction="*")] + System.Threading.Tasks.Task GetFormDataAsync(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest request); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class GetFormDataInfoListRequestData : object, System.ComponentModel.INotifyPropertyChanged { + + private APIIdentifier apiIdentifierField; + + private TimeFrameRequestFilter timeFrameRequestFilterField; + + private string ffTemplateNameField; + + private string ffFolderTemplateTypeTagField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public APIIdentifier apiIdentifier { + get { + return this.apiIdentifierField; + } + set { + this.apiIdentifierField = value; + this.RaisePropertyChanged("apiIdentifier"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public TimeFrameRequestFilter timeFrameRequestFilter { + get { + return this.timeFrameRequestFilterField; + } + set { + this.timeFrameRequestFilterField = value; + this.RaisePropertyChanged("timeFrameRequestFilter"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public string ffTemplateName { + get { + return this.ffTemplateNameField; + } + set { + this.ffTemplateNameField = value; + this.RaisePropertyChanged("ffTemplateName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public string ffFolderTemplateTypeTag { + get { + return this.ffFolderTemplateTypeTagField; + } + set { + this.ffFolderTemplateTypeTagField = value; + this.RaisePropertyChanged("ffFolderTemplateTypeTag"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class APIIdentifier : object, System.ComponentModel.INotifyPropertyChanged { + + private string companyGuidField; + + private string clientGuidField; + + private string clientNameField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string companyGuid { + get { + return this.companyGuidField; + } + set { + this.companyGuidField = value; + this.RaisePropertyChanged("companyGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string clientGuid { + get { + return this.clientGuidField; + } + set { + this.clientGuidField = value; + this.RaisePropertyChanged("clientGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string clientName { + get { + return this.clientNameField; + } + set { + this.clientNameField = value; + this.RaisePropertyChanged("clientName"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class FormData : object, System.ComponentModel.INotifyPropertyChanged { + + private string valueField; + + private string unitField; + + private string nameField; + + private int widget_idField; + + private int rowNoField; + + private bool rowNoFieldSpecified; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public string unit { + get { + return this.unitField; + } + set { + this.unitField = value; + this.RaisePropertyChanged("unit"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public int widget_id { + get { + return this.widget_idField; + } + set { + this.widget_idField = value; + this.RaisePropertyChanged("widget_id"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)] + public int rowNo { + get { + return this.rowNoField; + } + set { + this.rowNoField = value; + this.RaisePropertyChanged("rowNo"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool rowNoSpecified { + get { + return this.rowNoFieldSpecified; + } + set { + this.rowNoFieldSpecified = value; + this.RaisePropertyChanged("rowNoSpecified"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class FormDataset : object, System.ComponentModel.INotifyPropertyChanged { + + private System.DateTime revisionDateField; + + private System.DateTime startPeriodField; + + private bool startPeriodFieldSpecified; + + private System.DateTime endPeriodField; + + private bool endPeriodFieldSpecified; + + private FormData[] formDataField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public System.DateTime revisionDate { + get { + return this.revisionDateField; + } + set { + this.revisionDateField = value; + this.RaisePropertyChanged("revisionDate"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public System.DateTime startPeriod { + get { + return this.startPeriodField; + } + set { + this.startPeriodField = value; + this.RaisePropertyChanged("startPeriod"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool startPeriodSpecified { + get { + return this.startPeriodFieldSpecified; + } + set { + this.startPeriodFieldSpecified = value; + this.RaisePropertyChanged("startPeriodSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public System.DateTime endPeriod { + get { + return this.endPeriodField; + } + set { + this.endPeriodField = value; + this.RaisePropertyChanged("endPeriod"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool endPeriodSpecified { + get { + return this.endPeriodFieldSpecified; + } + set { + this.endPeriodFieldSpecified = value; + this.RaisePropertyChanged("endPeriodSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("formData", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public FormData[] formData { + get { + return this.formDataField; + } + set { + this.formDataField = value; + this.RaisePropertyChanged("formData"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class GetFormDataResponseData : object, System.ComponentModel.INotifyPropertyChanged { + + private GetFormDataRequestData requestField; + + private int imoNumberField; + + private FormDataset[] formDatasetsField; + + private string resultField; + + private bool successField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public GetFormDataRequestData request { + get { + return this.requestField; + } + set { + this.requestField = value; + this.RaisePropertyChanged("request"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public int imoNumber { + get { + return this.imoNumberField; + } + set { + this.imoNumberField = value; + this.RaisePropertyChanged("imoNumber"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("formDatasets", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public FormDataset[] formDatasets { + get { + return this.formDatasetsField; + } + set { + this.formDatasetsField = value; + this.RaisePropertyChanged("formDatasets"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public string result { + get { + return this.resultField; + } + set { + this.resultField = value; + this.RaisePropertyChanged("result"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)] + public bool success { + get { + return this.successField; + } + set { + this.successField = value; + this.RaisePropertyChanged("success"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class GetFormDataRequestData : object, System.ComponentModel.INotifyPropertyChanged { + + private APIIdentifier apiIdentifierField; + + private string formGuidField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public APIIdentifier apiIdentifier { + get { + return this.apiIdentifierField; + } + set { + this.apiIdentifierField = value; + this.RaisePropertyChanged("apiIdentifier"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public string formGuid { + get { + return this.formGuidField; + } + set { + this.formGuidField = value; + this.RaisePropertyChanged("formGuid"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class FormDataInfoDataset : object, System.ComponentModel.INotifyPropertyChanged { + + private string folderTemplateGuidField; + + private string formTemplateGuidField; + + private string folderGuidField; + + private string formGuidField; + + private int imoNumberField; + + private System.DateTime lastRevisionDateField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public string folderTemplateGuid { + get { + return this.folderTemplateGuidField; + } + set { + this.folderTemplateGuidField = value; + this.RaisePropertyChanged("folderTemplateGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public string formTemplateGuid { + get { + return this.formTemplateGuidField; + } + set { + this.formTemplateGuidField = value; + this.RaisePropertyChanged("formTemplateGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public string folderGuid { + get { + return this.folderGuidField; + } + set { + this.folderGuidField = value; + this.RaisePropertyChanged("folderGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public string formGuid { + get { + return this.formGuidField; + } + set { + this.formGuidField = value; + this.RaisePropertyChanged("formGuid"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)] + public int imoNumber { + get { + return this.imoNumberField; + } + set { + this.imoNumberField = value; + this.RaisePropertyChanged("imoNumber"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=5)] + public System.DateTime lastRevisionDate { + get { + return this.lastRevisionDateField; + } + set { + this.lastRevisionDateField = value; + this.RaisePropertyChanged("lastRevisionDate"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class GetFormDataInfoListResponseData : object, System.ComponentModel.INotifyPropertyChanged { + + private GetFormDataInfoListRequestData requestField; + + private FormDataInfoDataset[] formDataInfoDatasetsField; + + private string resultField; + + private bool successField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public GetFormDataInfoListRequestData request { + get { + return this.requestField; + } + set { + this.requestField = value; + this.RaisePropertyChanged("request"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("formDataInfoDatasets", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public FormDataInfoDataset[] formDataInfoDatasets { + get { + return this.formDataInfoDatasetsField; + } + set { + this.formDataInfoDatasetsField = value; + this.RaisePropertyChanged("formDataInfoDatasets"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)] + public string result { + get { + return this.resultField; + } + set { + this.resultField = value; + this.RaisePropertyChanged("result"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] + public bool success { + get { + return this.successField; + } + set { + this.successField = value; + this.RaisePropertyChanged("success"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.fleettracker.de/api/1.0")] + public partial class TimeFrameRequestFilter : object, System.ComponentModel.INotifyPropertyChanged { + + private System.DateTime startDateField; + + private bool startDateFieldSpecified; + + private System.DateTime endDateField; + + private bool endDateFieldSpecified; + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)] + public System.DateTime startDate { + get { + return this.startDateField; + } + set { + this.startDateField = value; + this.RaisePropertyChanged("startDate"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool startDateSpecified { + get { + return this.startDateFieldSpecified; + } + set { + this.startDateFieldSpecified = value; + this.RaisePropertyChanged("startDateSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)] + public System.DateTime endDate { + get { + return this.endDateField; + } + set { + this.endDateField = value; + this.RaisePropertyChanged("endDate"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool endDateSpecified { + get { + return this.endDateFieldSpecified; + } + set { + this.endDateFieldSpecified = value; + this.RaisePropertyChanged("endDateSpecified"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="GetFormDataInfoList", WrapperNamespace="http://www.fleettracker.de/api/1.0", IsWrapped=true)] + public partial class GetFormDataInfoListRequest { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequestData body; + + public GetFormDataInfoListRequest() { + } + + public GetFormDataInfoListRequest(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequestData body) { + this.body = body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="GetFormDataInfoListResponse", WrapperNamespace="http://www.fleettracker.de/api/1.0", IsWrapped=true)] + public partial class GetFormDataInfoListResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData body; + + public GetFormDataInfoListResponse() { + } + + public GetFormDataInfoListResponse(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData body) { + this.body = body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="GetFormData", WrapperNamespace="http://www.fleettracker.de/api/1.0", IsWrapped=true)] + public partial class GetFormDataRequest { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequestData body; + + public GetFormDataRequest() { + } + + public GetFormDataRequest(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequestData body) { + this.body = body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="GetFormDataResponse", WrapperNamespace="http://www.fleettracker.de/api/1.0", IsWrapped=true)] + public partial class GetFormDataResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData body; + + public GetFormDataResponse() { + } + + public GetFormDataResponse(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData body) { + this.body = body; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public interface WSAPIFormDataPortTypeChannel : bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public partial class WSAPIFormDataPortTypeClient : System.ServiceModel.ClientBase, bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType { + + public WSAPIFormDataPortTypeClient() { + } + + public WSAPIFormDataPortTypeClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public WSAPIFormDataPortTypeClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public WSAPIFormDataPortTypeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public WSAPIFormDataPortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType.GetFormDataInfoList(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest request) { + return base.Channel.GetFormDataInfoList(request); + } + + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData GetFormDataInfoList(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequestData body) { + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest inValue = new bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest(); + inValue.body = body; + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse retVal = ((bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType)(this)).GetFormDataInfoList(inValue); + return retVal.body; + } + + public System.Threading.Tasks.Task GetFormDataInfoListAsync(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListRequest request) { + return base.Channel.GetFormDataInfoListAsync(request); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType.GetFormData(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest request) { + return base.Channel.GetFormData(request); + } + + public bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData GetFormData(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequestData body) { + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest inValue = new bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest(); + inValue.body = body; + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse retVal = ((bsmd.herberg.FormService.ServiceReferenceHerberg.WSAPIFormDataPortType)(this)).GetFormData(inValue); + return retVal.body; + } + + public System.Threading.Tasks.Task GetFormDataAsync(bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataRequest request) { + return base.Channel.GetFormDataAsync(request); + } + } +} diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.svcmap b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.svcmap new file mode 100644 index 00000000..3155ea34 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/Reference.svcmap @@ -0,0 +1,40 @@ + + + + false + true + true + + false + false + false + + + true + Auto + true + true + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/WSAPIFormData.wsdl b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/WSAPIFormData.wsdl new file mode 100644 index 00000000..f2e270ad --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/WSAPIFormData.wsdl @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + The GUID of the folder template + + + + + + The GUID of the form template + + + + + + The GUID of the folder + + + + + The GUID of the form + + + + + The IMO number this form belongs to. + + + + + + The date of the latest revision. + + + + + + + + + + The value + + + + + + The optional unit + + + + + + The widget name this cell belongs to. + + + + + + The widget id the value belongs to. Note + that this entry is the id within the form template but NOT the database id of the widget! + + + + + + The optional row number. This is set if we + have a widget that is part of a table. + + + + + + + + + + The date of the revision. + + + + + + The begin of the period this dataset is valid + for. + + + + + + The end of the period this row is valid for. + If startPeriod is not given, the endPeriod contains the sample + timestamp. + + + + + + The values. + + + + + + + + + + + The reporting or requesting party. + + + + + + The optional time frame. If not set then all entries are returned. + + + + + + This is the Fleetform form template name (see + FolderTemplate.Template.TemplateName). + You have to either set + this or ffFolderTemplateTypeTag. + + + + + + This is the Fleetform folder template typeTag, + e.g. CREWLIST, PERFORMANCEREPORT, SHIPDETAILS, etc. See + FolderTemplate in fleetform.xsd + for possible values. + + + + + + + + + + The request + + + + + A set of form data found in the database. + + + + + + + This flag is set to true if the route was + successfully stored. + Otherwise, result contains the error + message. + + + + + + + + + + + The reporting or requesting party. + + + + + + The GUID of the form. + + + + + + + + + + The request belonging to this response. + + + + + + The IMO number of the vessel this form belongs + to. + + + + + + + The requested data. If not found then this + entry is null. Note that we may have several entries for one + form here since one form may contain several entries. + + + + + + + + This flag is set to true if the route was + successfully stored. + Otherwise, result contains the error + message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/auth.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/auth.xsd new file mode 100644 index 00000000..cc5d2155 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/auth.xsd @@ -0,0 +1,35 @@ + + + + + This is the identifier the client has to report. + + + + + + The unique id of the company. This is a unique + GUID identifying the + company using the API. Only if the company is registered, they may use + the API. + + + + + + The unique id of the client. This is a unique + GUID identifying the + individual sender. E.g. each boat may have a unique id. + + + + + + The optional name of the sending client. This is only for helping us identifying the sending + party. + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse.datasource b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse.datasource new file mode 100644 index 00000000..ea1d54cc --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse.datasource @@ -0,0 +1,10 @@ + + + + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponse, Service References.ServiceReferenceHerberg.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData.datasource b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData.datasource new file mode 100644 index 00000000..c72ef981 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData.datasource @@ -0,0 +1,10 @@ + + + + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataInfoListResponseData, Service References.ServiceReferenceHerberg.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse.datasource b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse.datasource new file mode 100644 index 00000000..24025642 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse.datasource @@ -0,0 +1,10 @@ + + + + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponse, Service References.ServiceReferenceHerberg.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData.datasource b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData.datasource new file mode 100644 index 00000000..780d914f --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData.datasource @@ -0,0 +1,10 @@ + + + + bsmd.herberg.FormService.ServiceReferenceHerberg.GetFormDataResponseData, Service References.ServiceReferenceHerberg.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration.svcinfo b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration.svcinfo new file mode 100644 index 00000000..e47f3248 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration.svcinfo @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration91.svcinfo b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration91.svcinfo new file mode 100644 index 00000000..494237db --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/configuration91.svcinfo @@ -0,0 +1,201 @@ + + + + + + + WSAPIFormDataBinding + + + + + + + + + + + + + + + + + + + + + StrongWildcard + + + + + + 65536 + + + + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + System.Text.UTF8Encoding + + + Buffered + + + + + + Text + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement + + + Never + + + TransportSelected + + + (Collection) + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Default + + + + + + + + + http://www.fleettracker.de/api/1.0/WSAPIFormData.php + + + + + + basicHttpBinding + + + WSAPIFormDataBinding + + + ServiceReferenceHerberg.WSAPIFormDataPortType + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + WSAPIFormDataPort + + + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/device.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/device.xsd new file mode 100644 index 00000000..ba1ea8ee --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/device.xsd @@ -0,0 +1,77 @@ + + + + + This is the device ID. + + + + + The bearer key reference. We have several ways + to identify the device. + E.g. for inmarsatc, we use fleetID and vesselID (and mobile number, if + available). + For D+, we use the vesselID. Daily Report uses the IMO number. + + + + + + + + + + + + The callsign. For instance, Globewireless uses this. + + + + + + The Globalstar device id. Example: 0-545312 + + + + + + + The vesselID contains a unique GUID identifying the device. We use this e.g. for the API. + + + + + + IMEI - International Mobile Equipment Identity (e.g. BGAN) + + + + + + + + + The inmarsat C mobile number. + + + + + This is the DNID for INMARSATC. + + + + + + This is the terminal, member number, GUID, MMSI, etc. + + + + + + This is the IMO number. + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/geoarea.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/geoarea.xsd new file mode 100644 index 00000000..10751204 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/geoarea.xsd @@ -0,0 +1,167 @@ + + + + + + This is a geographical area. It can be a polygon + or a bounding box. + + + + + + Geographical coverages of this area + + + + + + DB Area ID + + + + + + DB Area list ID + + + + + + DB Area name + + + + + + + + This is a geographical coverage belonging to an area. + + + + + + Geographical positions + + + + + + The type of this coverage. Bounding boxes are + between the first 2 positions. + + + + + + + + + + + + DB Area coverage ID + + + + + + DB Area Coverage name + + + + + + + + This is an event related to an area. + + + + + + Geographical position when the event happened. + + + + + + DB Area coverage ID + + + + + + DB Area ID + + + + + + DB Area list ID + + + + + + DB Area name + + + + + + DB Area Coverage name + + + + + + This flag indicates that the event has been generated but + not yet been proven. Example: It is proven if the vessel is within the areas more than 1 minute. + + + + + + This flag indicates that the event has been reported ashore. + + + + + + The type of this event. + + + + + + + The vessel has entered the area + + + + + + The vessel has left the area + + + + + + The vessel has stopped in the area + + + + + + The vessel has started moving within the area + + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/inlandPosition.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/inlandPosition.xsd new file mode 100644 index 00000000..697caf27 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/inlandPosition.xsd @@ -0,0 +1,183 @@ + + + + + + This is the distance on a river. + + + + + This is the current value in the given unit. + + + + + + + + + + + + + + + + + + This is the speed of a target. + + + + + This is the current value in the given unit. + + + + + + + + + + + + + + + + + + This represents a river. + + + + + This is the river name. + + + + + + This is the river abbreviation. + + + + + + + + This represents a miles marker entry. + + + + + + This is the river mile or kilometer. + + + + + + This is the unit of the miles. + + + + + + + + + + + + This is the river. + + + + + + + + This represents a miles marker entry with a + geographic position. + + + + + + + + The geographic position of this miles marker + + + + + + + + + + This represents a set of miles marker entry with a + geographic position. + + + + + + A set of miles marker entries with positions. + + + + + + + + This represents a no passing zone. + + + + + + The mandatory unique id + + + + + + The optional name for identification. + + + + + + The begin of the no passing zone. This is always + the lower mile marker. + + + + + + The end of the no passing zone. This is always + the higher mile marker. + + + + + + + + This represents a set of no passing zones + + + + + + A set of NoPassingZone objects. + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/position.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/position.xsd new file mode 100644 index 00000000..72f72cae --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/position.xsd @@ -0,0 +1,102 @@ + + + + + This is a geographical position. + + + + + + Latitude in degrees x 60000, North > 0 + + + + + + Latitude in degrees x 60000, East > 0 + + + + + + + + This is a geographical position with a timestamp. + + + + + + + + Timestamp when the position was made + + + + + + + + + + This is a geographical position of a pasttrack. + + + + + + + + The order number of the pastttack. The + higher + the number, the older the position. + + + + + Rate of turn in deg/s, right > 0, left < + 0) + + + + + Speed over ground in knots + + + + + + Course over ground in degrees + + + + + + Heading in degrees + + + + + + ETA to next port + + + + + + ETB to next port + + + + + + Next port + + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/route.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/route.xsd new file mode 100644 index 00000000..b5f33747 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/route.xsd @@ -0,0 +1,88 @@ + + + + + This represents a waypoint of a planned route. + + + + + This is a unique id of the waypoint within the route. + + + + + + This is an optional name of this waypoint. + + + + + + This is the unique id of the NEXT + waypoint within the route. This element is not set + for the last waypoint. + + + + + This is the latitude of this waypoint in minutes x 1000 (= degrees x 60000). + Positive = North, Negative = South. + Example: 12 deg 23.4 min North = (12 * 60 + 23.4) * 1000 = 743400 + + + + + + This is the longitude of this waypoint in minutes x 1000 (= degrees x 60000). + Positive = East, Negative = West. + Example: 122 deg 23.4 min West = -(122 * 60 + 23.4) * 1000 = -7343400 + + + + + + This is the planned speed over ground (SOG) in knots TO this waypoint. + So the ship will calculate to go from the previous waypoint to this + waypoint at this speed. + + + + + + + + This represents the planned ship route. + + + + + This is a unique id of the route. The ID has to be unique + for the vessel. + + + + + + This is the IMO number of the vessel this route belongs to. + + + + + This is the timestamp in UTC when the route has been created. + + + + + This is the ETA in local time when the ship is calculated to + reach the final waypoint of this route. + + + + + This is the list of waypoints. + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/ship.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/ship.xsd new file mode 100644 index 00000000..7c018b3f --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/ship.xsd @@ -0,0 +1,117 @@ + + + + + + + + This is how the ship is displayed. + + + + + This is the color for not selected ship. + + + + + + This is the color for selected ship. + + + + + + + + This is the ship category. + + + + + This is the ship category number. + + + + + + The name of the category. + + + + + + + + This is the abstract ship. + + + + + Database id + + + + + Ship name + + + + + Charter ship name + + + + + The past positions of the ship including the latest position. + + + + + + Optional ULR to photo image. + + + + + + This is the ship category. This attribute is used to group a fleet + into several parts. + + + + + + This contains optional individual settings for the ship appearence. + + + + + + + + This is a Fleettracker Ship. + + + + + + + The IMO number of the ship. + + + + + The optional set of devices. + + + + + The optional route. + + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/shipParams.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/shipParams.xsd new file mode 100644 index 00000000..ea1de506 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/shipParams.xsd @@ -0,0 +1,80 @@ + + + + + The own ship parameter used for speed calculation. + + + + + + + This is the MMSI of the own ship. + + + + + + + Minimal own speed we can achieve. + Unit: Meter per + second + + + + + + + Minimal own speed we can achieve. + Unit: Meter per + second + + + + + + + Optimal speed we would like to go. + Unit: Meter + per second + + + + + + + The maximal positive accelaration we can + achieve. + Unit: Meter per second^2 + + + + + + + The minimal negative accelaration we can + achieve. + Unit: Meter per second^2 + + + + + + + The optimal accelaration we would like to use if + we + want to go from current speed to optimal speed. This will be + applied + if we do not have any targets. + Example: We run 5 mph, our + optimal speed is 8 mph, then we use this + acceleration + to go from 5 + to 8. + Unit: Meter per second^2 + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/target.xsd b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/target.xsd new file mode 100644 index 00000000..65030d67 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/Service References/ServiceReferenceHerberg/target.xsd @@ -0,0 +1,44 @@ + + + + + + This represents a river. + + + + + This is the current miles marker + + + + + + + + + + + + + + + This is the current miles marker + + + + + + This is the name of the target + + + + + + This is the current speed + + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj b/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj new file mode 100644 index 00000000..d6004c91 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/bsmd.herberg.FormService.csproj @@ -0,0 +1,149 @@ + + + + + Debug + AnyCPU + {FD0E59E4-58C9-4DAF-8024-D6F67E6ECC03} + WinExe + Properties + bsmd.herberg.FormService + bsmd.herberg.FormService + v4.5 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\log4net.2.0.3\lib\net40-full\log4net.dll + + + + + + + + + + + + + + + Component + + + FormService.cs + + + + + True + True + Settings.settings + + + True + True + Reference.svcmap + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + Designer + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + + + + {19945af2-379b-46a5-b27a-303b5ec1d557} + bsmd.database + + + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + + + \ No newline at end of file diff --git a/nsw/Source/bsmd.herberg.FormService/packages.config b/nsw/Source/bsmd.herberg.FormService/packages.config new file mode 100644 index 00000000..981a91a1 --- /dev/null +++ b/nsw/Source/bsmd.herberg.FormService/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/nsw/Source/packages/repositories.config b/nsw/Source/packages/repositories.config index f16003ee..d51a64ba 100644 --- a/nsw/Source/packages/repositories.config +++ b/nsw/Source/packages/repositories.config @@ -2,6 +2,8 @@ + + \ No newline at end of file diff --git a/nsw/dbh/answ-osis-extern.wsdl b/nsw/dbh/answ-osis-extern.wsdl new file mode 100644 index 00000000..c40ba53c --- /dev/null +++ b/nsw/dbh/answ-osis-extern.wsdl @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Submit a new NSW Request (only one NSWRequest per Submit!) to DBH ANSW OSIS, giving the senderID, messageID, messageType, the message. The method returns the OsisOrderNr (Unique message identifier generated by OSIS). + + + + + + + + + + + + + + + + + + Dbh_Osis_Answ_Ws is used to send Message to the DBH ANSW OSIS Application. Message format is XML. + + + + +