From: <ale...@us...> - 2009-06-26 11:45:31
|
Revision: 273 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=273&view=rev Author: alexloewen Date: 2009-06-26 11:45:27 +0000 (Fri, 26 Jun 2009) Log Message: ----------- Added some documentation, deleted some unneeded if statements from OutboundClientAdapter and added Fault for unknown Operation. Modified Paths: -------------- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCategory.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCourse.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCategory.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCourse.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/OutboundClientAdapter.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCategory.bpel trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCourse.bpel Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCategory.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCategory.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCategory.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -45,6 +45,7 @@ <sequence> <scope name="AddCategoryScope"> <faultHandlers> + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence > <assign name="prepareSystemFaultReply"> @@ -73,6 +74,8 @@ </catch> <catchAll> + + <!--Handling unspecific Faults --> <sequence> <assign name="prepareUnknownFaultReply"> <!-- Set Fault Data--> @@ -99,10 +102,12 @@ </sequence> </catchAll> </faultHandlers> + <sequence> <receive name="start" createInstance="yes" partnerLink="IliasAdapter" operation="addCategory" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/AddCategory" portType="tns:AddCategoryPortType" variable="AddCategoryIn"/> + <!--Set Data for AddCategory Invoke --> <assign name="prepareAddCategory"> <copy> <from>$AddCategoryIn.SID</from> @@ -124,18 +129,24 @@ <to variable="CategoryXML"/> </copy> </assign> + + <!-- Copy the Title from incoming Message --> <assign name="CopyTheTitle"> <copy> <from>$AddCategoryIn.category/dt:attribute[dt:name = 'name']/dt:value</from> <to>$CategoryXML/il_objs:Title/text()</to> </copy> </assign> + + <!-- Render XML to String and copy it for Sending to Ilias --> <assign name="marshalCategoryXMLToString"> <copy> <from>sxxf:doMarshal($CategoryXML)</from> <to>$AddObjectIn.object_xml</to> </copy> </assign> + + <!--Invoke Ilias with addObject --> <invoke name="addCategory" partnerLink="ILIAS" operation="addObject" xmlns:tns="urn:ilUserAdministration" portType="tns:ILIASSoapWebservicePortType" inputVariable="AddObjectIn" @@ -146,9 +157,12 @@ </sxt:log> </sxt:trace> </invoke> + + <!-- Check if returned Reference Id is valid --> <if name="IfRefIdIsOk" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/AddCategory"> <condition>0 <= $AddObjectOut.ref_id</condition> - <sequence name="Sequence1"> + <!--Sending a normal Reply --> + <sequence> <assign name="prepareReply"> <copy> <from>$AddObjectOut.ref_id</from> @@ -160,6 +174,7 @@ variable="AddCategoryOut"/> </sequence> <else> + <!--Handling IliasFault, sending a Faultreply --> <sequence> <assign name="prepareIliasFaultReply"> <!-- Set Fault Data--> @@ -182,10 +197,5 @@ </if> </sequence> </scope> - -<!-- Copy the actial Title! .category/dt:attribute[dt:name = 'name']/dt:value!--> - - - <!-- Render XML to string --> </sequence> </process> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCourse.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCourse.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/AddCourse.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -56,8 +56,8 @@ <!-- Course description in Ilias-Format --> <variable name="CourseXML" element="il_crs:Course"/> - <!--FaultHandling Variables --> + <!--FaultHandling Variables --> <variable name="SystemFault" messageType="fltns:systemFaultMessage"/> <variable name="UnknownFault" messageType="fltns:unknownFaultMessage"/> <variable name="IliasFault" messageType="fltns:iliasFaultMessage"/> @@ -69,6 +69,8 @@ <!-- Init variables --> <scope name="AddCourseScope"> <faultHandlers> + + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence> <!-- Set Fault Data--> @@ -94,7 +96,9 @@ <reply name="ReplyWithSystemFault" partnerLink="IliasAdapter" operation="addCourse" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/AddCourse" portType="tns:AddCoursePortType" faultName="tns:SystemFault" variable="SystemFault"/> </sequence> </catch> + <catchAll> + <!--Handling unspecific Faults --> <sequence> <!-- Set Fault Data--> <assign name="prepareUnknownFaultReply"> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCategory.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCategory.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCategory.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -41,6 +41,7 @@ <sequence> <scope name="DeleteCategoryScope" xmlns:tns="urn:ilUserAdministration"> <faultHandlers> + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence > <!-- Set Fault Data--> @@ -73,6 +74,7 @@ </sequence> </catch> + <!--Handling unspecific Faults --> <catchAll> <sequence> <assign name="prepareUnknownFaultReply"> @@ -106,6 +108,7 @@ xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/DeleteCategory" portType="tns:DeleteCategoryPortType" variable="DeleteCategoryIn"/> + <!--Fake refId TODO --> <assign name="prepareForDeleteCategory"> <copy> <from variable="DeleteCategoryIn" part="SID"/> @@ -123,6 +126,8 @@ inputVariable="DeleteObjectIn" outputVariable="DeleteObjectOut"> </invoke> + + <!--If DeleteObject succeed by Ilias send a normal Reply, otherwise handle an IliasFault --> <if name="IfDeleteObjectSucceed"> <condition>$DeleteObjectOut.success</condition> <sequence> @@ -142,6 +147,7 @@ portType="tns:DeleteCategoryPortType" variable="DeleteCategoryOut"/> </sequence> + <!--Reply with an IliasFault --> <else> <sequence> <assign name="prepareIliasFaultReply"> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCourse.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCourse.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/DeleteCourse.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -38,6 +38,7 @@ <sequence> <scope name="deleteCourseScope"> <faultHandlers> + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence> <assign name="prepareSystemFaultReply"> @@ -67,7 +68,10 @@ <reply name="ReplyWithSystemFault" partnerLink="IliasAdapter" operation="deleteCourse" portType="ns0:DeleteCoursePortType" faultName="ns0:SystemFault" variable="SystemFault"/> </sequence> </catch> + + <!--Handling unspecific Faults --> <catchAll> + <sequence> <assign name="prepareUnknownFaultReply"> <!-- Set Fault Data--> @@ -97,12 +101,14 @@ </sequence> </catchAll> </faultHandlers> + <sequence> <receive name="start" createInstance="yes" partnerLink="IliasAdapter" operation="deleteCourse" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/DeleteCourse" portType="tns:DeleteCoursePortType" variable="DeleteCourseOperationIn"/> - <assign name="prepareForDeleteCourse"> + <!-- TODO set the course Id--> + <assign name="prepareForDeleteCourse"> <copy> <from variable="DeleteCourseOperationIn" part="SID"/> <to variable="DeleteCourseIn" part="sid"/> @@ -117,6 +123,7 @@ portType="tns:ILIASSoapWebservicePortType" inputVariable="DeleteCourseIn" outputVariable="DeleteCourseOut"/> + <!--Send a normal Reply if DeleteCourse succeed, otherwise reply with an Ilias Fault --> <if name="IfDeleteCourseSucceed"> <condition>$DeleteCourseOut.success</condition> <sequence name="Sequence1"> @@ -130,7 +137,9 @@ portType="ns0:DeleteCoursePortType" variable="DeleteCourseOperationOut"/> </sequence> + <else> + <!--Reply with an Ilias Fault --> <sequence> <!-- Set Fault Data--> <assign name="prepareIliasFaultReply"> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/OutboundClientAdapter.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/OutboundClientAdapter.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/OutboundClientAdapter.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -96,16 +96,23 @@ <!-- For testing --> <variable name="ReplyXML" type="xsd:string"/> + <!--Fault Variable, if Operation from inkoming msg is not supportet --> + + <variable name="SystemFaultOperationNotFounded" messageType="fltns:systemFaultMessage"/> + + </variables> <sequence> <scope name="MainScope"> <faultHandlers> + + <!--Handling SystemFault --> <catch faultVariable="Fault" faultMessageType="fltns:systemFaultMessage"> <assign> <sxt:trace> <sxt:log level="info" location="onStart"> - <from>concat('*** Handling SystemFault from: ',$Fault.process,' ,Fault cause:' , $Fault.cause,' ,Fault context: ' , $Fault.context)</from> + <from>concat('*** Handling SystemFault from: ', $Fault.process, ' ,Fault cause:', $Fault.cause, ' ,Fault context: ', $Fault.context)</from> </sxt:log> </sxt:trace> <copy> @@ -114,11 +121,13 @@ </copy> </assign> </catch> + + <!--Handling UnknownFault --> <catch faultVariable="Fault" faultMessageType="fltns:unknownFaultMessage"> <assign> <sxt:trace> <sxt:log level="info" location="onStart"> - <from>concat('*** Handling UnknownFault from: ',$Fault.process,' ,Fault cause:' , $Fault.cause,' ,Fault context: ' , $Fault.context)</from> + <from>concat('*** Handling UnknownFault from: ', $Fault.process, ' ,Fault cause:', $Fault.cause, ' ,Fault context: ', $Fault.context)</from> </sxt:log> </sxt:trace> <copy> @@ -128,11 +137,12 @@ </assign> </catch> + <!--Handling IliasFault --> <catch faultVariable="Fault" faultMessageType="fltns:iliasFaultMessage"> <assign> <sxt:trace> <sxt:log level="info" location="onStart"> - <from>concat('*** Handling IliasFault from: ',$Fault.process,' ,Fault cause:' , $Fault.cause,' ,Fault context: ' , $Fault.context)</from> + <from>concat('*** Handling IliasFault from: ', $Fault.process, ' ,Fault cause:', $Fault.cause, ' ,Fault context: ', $Fault.context)</from> </sxt:log> </sxt:trace> <copy> @@ -141,6 +151,8 @@ </copy> </assign> </catch> + + <!--Handling unspecific Faults --> <catchAll> <assign> <sxt:trace> @@ -162,7 +174,7 @@ portType="tns:ILIASClientAdapterPortType" variable="ProcessCourseOperationIn"> - <scope name="CourseScope"> + <scope name="CourseScope"> <sequence> <assign name="prepareLoginForCourses"> <copy> @@ -234,23 +246,12 @@ <to>$ObjectClientId</to> </copy> </assign> - <if> - <condition>$AddCourseOut.courseId != 0</condition> - <assign name="addCourseSuccess"> - <copy> + <assign name="addCourseSuccess"> + <copy> <from>$STATUS_SUCCESS</from> - <to>$ReplyStatus</to> + <to>$ReplyStatus</to> </copy> - </assign> - <else> - <assign name="addCourseFailure"> - <copy> - <from>$STATUS_FAILURE</from> - <to>$ReplyStatus</to> - </copy> - </assign> - </else> - </if> + </assign> </sequence> <elseif> <!-- Event == "UPDATE" --> @@ -276,23 +277,12 @@ portType="tns:UpdateCoursePortType" inputVariable="UpdateCourseIn" outputVariable="UpdateCourseOut"/> - <if> - <condition>$UpdateCourseOut.success</condition> - <assign name="updateCourseSuccess"> - <copy> + <assign name="updateCourseSuccess"> + <copy> <from>$STATUS_SUCCESS</from> - <to>$ReplyStatus</to> + <to>$ReplyStatus</to> </copy> - </assign> - <else> - <assign name="updateCourseFailure"> - <copy> - <from>$STATUS_FAILURE</from> - <to>$ReplyStatus</to> - </copy> - </assign> - </else> - </if> + </assign> </sequence> </elseif> <elseif> @@ -331,14 +321,31 @@ </sequence> </elseif> <else> - <!-- Unrecognized Operation: throw fault? --> - <empty> - <sxt:trace> - <sxt:log level="info" location="onStart"> - <from>concat('*** Unknown event!', '')</from> - </sxt:log> - </sxt:trace> - </empty> + <!-- Unrecognized Operation: throw fault! --> + <sequence > + + <!--Set Fault Data --> + <assign name="PrepareForThrowFaultOperationNotFounded"> + <sxt:trace> + <sxt:log level="info" location="onStart"> + <from>concat('*** Unknown event!', '')</from> + </sxt:log> + </sxt:trace> + <copy> + <from>concat('This Operation is unknown: ',$ProcessCourseOperationIn.courseMessage/dt:event)</from> + <to variable="SystemFaultOperationNotFounded" part="cause"/> + </copy> + <copy> + <from>'OutboundClientAdapter.bpel, CourseScope'</from> + <to variable="SystemFaultOperationNotFounded" part="process"/> + </copy> + <copy> + <from>sxxf:doMarshal($ProcessCourseOperationIn.courseMessage)</from> + <to variable="SystemFaultOperationNotFounded" part="context"/> + </copy> + </assign> + <throw name="ThrowFaultOperationNotFounded" faultVariable="SystemFaultOperationNotFounded" faultName="sxeh:systemFault"/> + </sequence> </else> </if> </sequence> @@ -420,23 +427,12 @@ <to>$ObjectClientId</to> </copy> </assign> - <if> - <condition>$AddCategoryOut.categoryId != 0</condition> - <assign name="addCategorySuccess"> - <copy> + <assign name="addCategorySuccess"> + <copy> <from>$STATUS_SUCCESS</from> - <to>$ReplyStatus</to> + <to>$ReplyStatus</to> </copy> - </assign> - <else> - <assign name="addCategoryFailure"> - <copy> - <from>$STATUS_FAILURE</from> - <to>$ReplyStatus</to> - </copy> - </assign> - </else> - </if> + </assign> </sequence> <elseif> <!-- Event == "UPDATE" --> @@ -462,23 +458,12 @@ portType="tns:UpdateCategoryPortType" inputVariable="UpdateCategoryIn" outputVariable="UpdateCategoryOut"/> - <if> - <condition>$UpdateCategoryOut.success</condition> - <assign name="updateCategorySuccess"> - <copy> + <assign name="updateCategorySuccess"> + <copy> <from>$STATUS_SUCCESS</from> - <to>$ReplyStatus</to> + <to>$ReplyStatus</to> </copy> - </assign> - <else> - <assign name="updateCategoryFailure"> - <copy> - <from>$STATUS_FAILURE</from> - <to>$ReplyStatus</to> - </copy> - </assign> - </else> - </if> + </assign> </sequence> </elseif> <elseif> @@ -516,14 +501,30 @@ </sequence> </elseif> <else> - <!-- Unrecognized Operation: throw fault? --> - <empty> - <sxt:trace> - <sxt:log level="info" location="onStart"> - <from>concat('*** Unknown event!', '')</from> - </sxt:log> - </sxt:trace> - </empty> + <!-- Unrecognized Operation: throw fault! --> + <sequence > + <!--Set Fault Data --> + <assign name="PrepareForThrowFaultOperationNotFounded"> + <sxt:trace> + <sxt:log level="info" location="onStart"> + <from>concat('*** Unknown event!', '')</from> + </sxt:log> + </sxt:trace> + <copy> + <from>concat('This Operation is unknown: ',$ProcessCategoryOperationIn.categoryMessage/dt:event)</from> + <to variable="SystemFaultOperationNotFounded" part="cause"/> + </copy> + <copy> + <from>'OutboundClientAdapter.bpel, CategoryScope'</from> + <to variable="SystemFaultOperationNotFounded" part="process"/> + </copy> + <copy> + <from>sxxf:doMarshal($ProcessCategoryOperationIn.categoryMessage)</from> + <to variable="SystemFaultOperationNotFounded" part="context"/> + </copy> + </assign> + <throw name="ThrowFaultOperationNotFounded" faultVariable="SystemFaultOperationNotFounded" faultName="sxeh:systemFault"/> + </sequence> </else> </if> </sequence> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCategory.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCategory.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCategory.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -47,6 +47,7 @@ <sequence> <scope name="UpdateCategoryScope"> <faultHandlers> + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence > <assign name="prepareSystemFaultReply"> @@ -73,7 +74,8 @@ <reply name="ReplyWithSystemFault" partnerLink="IliasAdpater" operation="updateCategory" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/UpdateCategory" portType="tns:UpdateCategoryPortType" faultName="tns:SystemFault" variable="SystemFault"/> </sequence> </catch> - + + <!--Handling unspecific Faults --> <catchAll> <sequence> <assign name="prepareUnknownFaultReply"> @@ -101,6 +103,7 @@ </sequence> </catchAll> </faultHandlers> + <sequence> <receive name="start" createInstance="yes" partnerLink="IliasAdpater" operation="updateCategory" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/UpdateCategory" @@ -111,6 +114,7 @@ <from variable="UpdateCategoryIn" part="SID"/> <to variable="GetObjectsByTitleIn" part="sid"/> </copy> + <!-- TODO set the RefId , not by looking for Title. Evtl there are more Categories with same Title --> <copy> <from>'test12'</from> <to variable="GetObjectsByTitleIn" part="title"/> @@ -204,6 +208,7 @@ variable="UpdateCategoryOut"/> </sequence> <else> + <!--Reply IliasFault --> <sequence> <assign name="PrepareForReplyWithIliasFault1"> <sxt:trace> @@ -230,6 +235,8 @@ </if> </sequence> <else> + <!--Reply IliasFault, because Category with such Title was not founded --> + <!--TODO when real RefId is set, handle fault: "Ilias doesnt find Object with such refId" --> <sequence> <assign name="prepareForReplyWithIliasFaultNoCategoryFound"> <sxt:trace> Modified: trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCourse.bpel =================================================================== --- trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCourse.bpel 2009-06-25 14:03:46 UTC (rev 272) +++ trunk/sandbox/lsf-adapter-demo/ILIASClientAdapter/src/UpdateCourse.bpel 2009-06-26 11:45:27 UTC (rev 273) @@ -45,6 +45,7 @@ <sequence> <scope name="UpdateCourseScope"> <faultHandlers> + <!--Handling SystemFault --> <catch faultName="sxeh:systemFault"> <sequence> <!-- Set Fault Data--> @@ -70,6 +71,8 @@ <reply name="ReplyWithSystemFault" partnerLink="IliasAdapter" operation="updateCourse" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/UpdateCourse" portType="tns:UpdateCoursePortType" faultName="tns:SystemFault" variable="SystemFault"/> </sequence> </catch> + + <!--Handling unspecific Fault --> <catchAll> <sequence> <!-- Set Fault Data--> @@ -104,38 +107,7 @@ xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/UpdateCourse" portType="tns:UpdateCoursePortType" variable="UpdateCourseIn"/> - <!-- Set CourseId and Session ID--> - <!-- Initialize course xml skeleton - <assign name="initializeCourseXML"> - <copy> - <from> - <literal> - <Course xmlns="http://cse.campussource.de/schema/ilias/course"> - <MetaData xmlns="http://cse.campussource.de/schema/ilias/course"> - <General> - <Title Language="en">testcourseE</Title> - <Language Language="en">deutschFalsch</Language> - <Description Language="en">bpel test war falsch</Description> - </General> - </MetaData> - </Course> - </literal> - </from> - <to variable="CourseXML"/> - </copy> - </assign> --> - <!--delete Namespaces bevor XSLT Transformation !--> - <!-- - <assign name="copyTheActualDataToCourseXML"> - <copy> - <from>ns0:doXslTransform('urn:stylesheets:updateCourseXSLT.xsl', ns0:doXslTransform('urn:stylesheets:deleteObjectsNS.xsl', $UpdateCourseIn.course))</from> - <to variable="CourseXML"/> - </copy> - - </assign> - --> - - <!-- Set the Actual Data to CourseXML --> + <!-- Initialize course xml skeleton --> <assign name="initializeCourseXML"> <copy> @@ -213,7 +185,8 @@ </copy> </assign> <invoke name="UpdateLectureInvoke" partnerLink="ILIAS" operation="updateCourse" xmlns:tns="urn:ilUserAdministration" portType="tns:ILIASSoapWebservicePortType" inputVariable="UpdateILIASCourseIn" outputVariable="UpdateILIASCourseOut"/> - <if name="If1"> + <!-- Normal reply if Update course succeed, otherwise reply with IliasFault --> + <if> <condition>$UpdateILIASCourseOut.success</condition> <sequence> <assign name="prepareReply"> @@ -222,11 +195,13 @@ <to variable="UpdateCourseOut" part="success"/> </copy> </assign> + <!-- normal Reply --> <reply name="replySuccess" partnerLink="IliasAdapter" operation="updateCourse" xmlns:tns="http://cse.campussource.de/wsdl/ILIASClientAdapter/UpdateCourse" portType="tns:UpdateCoursePortType" variable="UpdateCourseOut"/> </sequence> <else> + <!--Reply wtih IliasFault--> <sequence> <assign name="prepareToReplyWithIliasFault"> <sxt:trace> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |