<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
-->

<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://web.resource.org/cc/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="744.09448819"
   height="1052.3622047"
   id="svg3168"
   sodipodi:version="0.32"
   inkscape:version="0.44"
   sodipodi:docbase="C:\simon\Projects\Tuscany\java\java-head\sca\itest\databindings"
   sodipodi:docname="config.svg">
  <defs
     id="defs3170" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     gridtolerance="10000"
     guidetolerance="10"
     objecttolerance="10"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.7"
     inkscape:cx="375"
     inkscape:cy="748.57143"
     inkscape:document-units="px"
     inkscape:current-layer="layer1"
     inkscape:window-width="990"
     inkscape:window-height="664"
     inkscape:window-x="103"
     inkscape:window-y="84" />
  <metadata
     id="metadata3173">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
    <flowRoot
       xml:space="preserve"
       id="flowRoot3194"
       inkscape:export-xdpi="52.84"
       inkscape:export-ydpi="52.84"><flowRegion
         id="flowRegion3196"><rect
           id="rect3198"
           width="505.71429"
           height="531.42859"
           x="94.285713"
           y="83.790756" /></flowRegion><flowPara
         id="flowPara3200">&lt;tns:Generate ...&gt;</flowPara><flowPara
         id="flowPara3202">  &lt;Template&gt;</flowPara><flowPara
         id="flowPara3204">    &lt;TemplateName&gt;greeter.composite.vm&lt;/TemplateName&gt;</flowPara><flowPara
         id="flowPara3206">    &lt;TemplateTargetDir&gt;classes&lt;/TemplateTargetDir&gt;</flowPara><flowPara
         id="flowPara3208">  &lt;/Template&gt;</flowPara><flowPara
         id="flowPara3210">  ...</flowPara><flowPara
         id="flowPara3212">             </flowPara><flowPara
         id="flowPara3214">  &lt;InputFile&gt;</flowPara><flowPara
         id="flowPara3216">    &lt;FileName&gt;Person.xsd&lt;/FileName&gt;</flowPara><flowPara
         id="flowPara3218">    &lt;FilePath&gt;xsd&lt;/FilePath&gt;</flowPara><flowPara
         id="flowPara3220">    &lt;JavaPackage&gt;org.apache.tuscany.sca.itest.databinding.types&lt;/JavaPackage&gt;</flowPara><flowPara
         id="flowPara3222">    &lt;Factory&gt;TypesFactory&lt;/Factory&gt;</flowPara><flowPara
         id="flowPara3224">    &lt;Namespace&gt;http://apache.org/tuscany/sca/itest/databinding/types&lt;/Namespace&gt;</flowPara><flowPara
         id="flowPara3226">    &lt;Prefix&gt;p&lt;/Prefix&gt;</flowPara><flowPara
         id="flowPara3228">    &lt;Type&gt;</flowPara><flowPara
         id="flowPara3230">      &lt;TypeName&gt;PersonType&lt;/TypeName&gt;</flowPara><flowPara
         id="flowPara3232">      &lt;CreateTypeCode&gt;</flowPara><flowPara
         id="flowPara3234">        TypesFactory factory = TypesFactory.INSTANCE;</flowPara><flowPara
         id="flowPara3236">        param = factory.createPersonType();</flowPara><flowPara
         id="flowPara3238">        param.setFirstName(&quot;George&quot;);</flowPara><flowPara
         id="flowPara3240">        param.setLastName(&quot;Doors&quot;);</flowPara><flowPara
         id="flowPara3242">      &lt;/CreateTypeCode&gt;</flowPara><flowPara
         id="flowPara3244">      &lt;ModifyTypeCode&gt;</flowPara><flowPara
         id="flowPara3246">        param.setGreeting(&quot;Hello&quot;);</flowPara><flowPara
         id="flowPara3248">      &lt;/ModifyTypeCode&gt;</flowPara><flowPara
         id="flowPara3250">      &lt;ResultComparison&gt;</flowPara><flowPara
         id="flowPara3252">        assertNotSame(&quot;greetedPerson.getGreeting() not set&quot;, &quot;&quot;, result.getGreeting());</flowPara><flowPara
         id="flowPara3254">      &lt;/ResultComparison&gt;</flowPara><flowPara
         id="flowPara3256">    &lt;/Type&gt;</flowPara><flowPara
         id="flowPara3258">  &lt;/InputFile&gt;</flowPara><flowPara
         id="flowPara3260">  ...</flowPara><flowPara
         id="flowPara3262"></flowPara><flowPara
         id="flowPara3264">&lt;/tns:Generate&gt;</flowPara></flowRoot>  </g>
</svg>
