adding solution 13
authorjapod@localhost
Tue, 30 Sep 2008 13:42:03 +0200
changeset 23f4b4f95ae1bd
parent 22 5e73778cc1f1
child 24 b4c6b18eaf3f
adding solution 13
task1/solution13/build.xml
task1/solution13/nbproject/build-impl.xml
task1/solution13/nbproject/genfiles.properties
task1/solution13/nbproject/project.properties
task1/solution13/nbproject/project.xml
task1/solution13/src/org/apidesign/apifest08/currency/ConversionResult.java
task1/solution13/src/org/apidesign/apifest08/currency/Convertor.java
task1/solution13/src/org/apidesign/apifest08/currency/ConvertorCurrency.java
task1/solution13/src/org/apidesign/apifest08/currency/ExchangeRate.java
task1/solution13/src/org/apidesign/apifest08/currency/ExchangeRateProvider.java
task1/solution13/test/org/apidesign/apifest08/test/Task1Test.java
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/task1/solution13/build.xml	Tue Sep 30 13:42:03 2008 +0200
     1.3 @@ -0,0 +1,69 @@
     1.4 +<?xml version="1.0" encoding="UTF-8"?>
     1.5 +<!-- You may freely edit this file. See commented blocks below for -->
     1.6 +<!-- some examples of how to customize the build. -->
     1.7 +<!-- (If you delete it and reopen the project it will be recreated.) -->
     1.8 +<project name="currency" default="default" basedir=".">
     1.9 +    <description>Builds, tests, and runs the project.</description>
    1.10 +    <import file="nbproject/build-impl.xml"/>
    1.11 +    <!--
    1.12 +
    1.13 +    There exist several targets which are by default empty and which can be 
    1.14 +    used for execution of your tasks. These targets are usually executed 
    1.15 +    before and after some main targets. They are: 
    1.16 +
    1.17 +      -pre-init:                 called before initialization of project properties
    1.18 +      -post-init:                called after initialization of project properties
    1.19 +      -pre-compile:              called before javac compilation
    1.20 +      -post-compile:             called after javac compilation
    1.21 +      -pre-compile-single:       called before javac compilation of single file
    1.22 +      -post-compile-single:      called after javac compilation of single file
    1.23 +      -pre-compile-test:         called before javac compilation of JUnit tests
    1.24 +      -post-compile-test:        called after javac compilation of JUnit tests
    1.25 +      -pre-compile-test-single:  called before javac compilation of single JUnit test
    1.26 +      -post-compile-test-single: called after javac compilation of single JUunit test
    1.27 +      -pre-jar:                  called before JAR building
    1.28 +      -post-jar:                 called after JAR building
    1.29 +      -post-clean:               called after cleaning build products
    1.30 +
    1.31 +    (Targets beginning with '-' are not intended to be called on their own.)
    1.32 +
    1.33 +    Example of inserting an obfuscator after compilation could look like this:
    1.34 +
    1.35 +        <target name="-post-compile">
    1.36 +            <obfuscate>
    1.37 +                <fileset dir="${build.classes.dir}"/>
    1.38 +            </obfuscate>
    1.39 +        </target>
    1.40 +
    1.41 +    For list of available properties check the imported 
    1.42 +    nbproject/build-impl.xml file. 
    1.43 +
    1.44 +
    1.45 +    Another way to customize the build is by overriding existing main targets.
    1.46 +    The targets of interest are: 
    1.47 +
    1.48 +      -init-macrodef-javac:     defines macro for javac compilation
    1.49 +      -init-macrodef-junit:     defines macro for junit execution
    1.50 +      -init-macrodef-debug:     defines macro for class debugging
    1.51 +      -init-macrodef-java:      defines macro for class execution
    1.52 +      -do-jar-with-manifest:    JAR building (if you are using a manifest)
    1.53 +      -do-jar-without-manifest: JAR building (if you are not using a manifest)
    1.54 +      run:                      execution of project 
    1.55 +      -javadoc-build:           Javadoc generation
    1.56 +      test-report:              JUnit report generation
    1.57 +
    1.58 +    An example of overriding the target for project execution could look like this:
    1.59 +
    1.60 +        <target name="run" depends="currency-impl.jar">
    1.61 +            <exec dir="bin" executable="launcher.exe">
    1.62 +                <arg file="${dist.jar}"/>
    1.63 +            </exec>
    1.64 +        </target>
    1.65 +
    1.66 +    Notice that the overridden target depends on the jar target and not only on 
    1.67 +    the compile target as the regular run target does. Again, for a list of available 
    1.68 +    properties which you can use, check the target you are overriding in the
    1.69 +    nbproject/build-impl.xml file. 
    1.70 +
    1.71 +    -->
    1.72 +</project>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/task1/solution13/nbproject/build-impl.xml	Tue Sep 30 13:42:03 2008 +0200
     2.3 @@ -0,0 +1,642 @@
     2.4 +<?xml version="1.0" encoding="UTF-8"?>
     2.5 +<!--
     2.6 +*** GENERATED FROM project.xml - DO NOT EDIT  ***
     2.7 +***         EDIT ../build.xml INSTEAD         ***
     2.8 +
     2.9 +For the purpose of easier reading the script
    2.10 +is divided into following sections:
    2.11 +
    2.12 +  - initialization
    2.13 +  - compilation
    2.14 +  - jar
    2.15 +  - execution
    2.16 +  - debugging
    2.17 +  - javadoc
    2.18 +  - junit compilation
    2.19 +  - junit execution
    2.20 +  - junit debugging
    2.21 +  - applet
    2.22 +  - cleanup
    2.23 +
    2.24 +        -->
    2.25 +<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="Currency_Convertor_Solution_13-impl">
    2.26 +    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
    2.27 +    <!-- 
    2.28 +                ======================
    2.29 +                INITIALIZATION SECTION 
    2.30 +                ======================
    2.31 +            -->
    2.32 +    <target name="-pre-init">
    2.33 +        <!-- Empty placeholder for easier customization. -->
    2.34 +        <!-- You can override this target in the ../build.xml file. -->
    2.35 +    </target>
    2.36 +    <target depends="-pre-init" name="-init-private">
    2.37 +        <property file="nbproject/private/config.properties"/>
    2.38 +        <property file="nbproject/private/configs/${config}.properties"/>
    2.39 +        <property file="nbproject/private/private.properties"/>
    2.40 +    </target>
    2.41 +    <target depends="-pre-init,-init-private" name="-init-user">
    2.42 +        <property file="${user.properties.file}"/>
    2.43 +        <!-- The two properties below are usually overridden -->
    2.44 +        <!-- by the active platform. Just a fallback. -->
    2.45 +        <property name="default.javac.source" value="1.4"/>
    2.46 +        <property name="default.javac.target" value="1.4"/>
    2.47 +    </target>
    2.48 +    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
    2.49 +        <property file="nbproject/configs/${config}.properties"/>
    2.50 +        <property file="nbproject/project.properties"/>
    2.51 +    </target>
    2.52 +    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
    2.53 +        <available file="${manifest.file}" property="manifest.available"/>
    2.54 +        <condition property="manifest.available+main.class">
    2.55 +            <and>
    2.56 +                <isset property="manifest.available"/>
    2.57 +                <isset property="main.class"/>
    2.58 +                <not>
    2.59 +                    <equals arg1="${main.class}" arg2="" trim="true"/>
    2.60 +                </not>
    2.61 +            </and>
    2.62 +        </condition>
    2.63 +        <condition property="manifest.available+main.class+mkdist.available">
    2.64 +            <and>
    2.65 +                <istrue value="${manifest.available+main.class}"/>
    2.66 +                <isset property="libs.CopyLibs.classpath"/>
    2.67 +            </and>
    2.68 +        </condition>
    2.69 +        <condition property="have.tests">
    2.70 +            <or>
    2.71 +                <available file="${test.src.dir}"/>
    2.72 +            </or>
    2.73 +        </condition>
    2.74 +        <condition property="have.sources">
    2.75 +            <or>
    2.76 +                <available file="${src.dir}"/>
    2.77 +            </or>
    2.78 +        </condition>
    2.79 +        <condition property="netbeans.home+have.tests">
    2.80 +            <and>
    2.81 +                <isset property="netbeans.home"/>
    2.82 +                <isset property="have.tests"/>
    2.83 +            </and>
    2.84 +        </condition>
    2.85 +        <condition property="no.javadoc.preview">
    2.86 +            <and>
    2.87 +                <isset property="javadoc.preview"/>
    2.88 +                <isfalse value="${javadoc.preview}"/>
    2.89 +            </and>
    2.90 +        </condition>
    2.91 +        <property name="run.jvmargs" value=""/>
    2.92 +        <property name="javac.compilerargs" value=""/>
    2.93 +        <property name="work.dir" value="${basedir}"/>
    2.94 +        <condition property="no.deps">
    2.95 +            <and>
    2.96 +                <istrue value="${no.dependencies}"/>
    2.97 +            </and>
    2.98 +        </condition>
    2.99 +        <property name="javac.debug" value="true"/>
   2.100 +        <property name="javadoc.preview" value="true"/>
   2.101 +        <property name="application.args" value=""/>
   2.102 +        <property name="source.encoding" value="${file.encoding}"/>
   2.103 +        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
   2.104 +            <and>
   2.105 +                <isset property="javadoc.encoding"/>
   2.106 +                <not>
   2.107 +                    <equals arg1="${javadoc.encoding}" arg2=""/>
   2.108 +                </not>
   2.109 +            </and>
   2.110 +        </condition>
   2.111 +        <property name="javadoc.encoding.used" value="${source.encoding}"/>
   2.112 +        <property name="includes" value="**"/>
   2.113 +        <property name="excludes" value=""/>
   2.114 +        <property name="do.depend" value="false"/>
   2.115 +        <condition property="do.depend.true">
   2.116 +            <istrue value="${do.depend}"/>
   2.117 +        </condition>
   2.118 +        <condition else="" property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'">
   2.119 +            <and>
   2.120 +                <isset property="jaxws.endorsed.dir"/>
   2.121 +                <available file="nbproject/jaxws-build.xml"/>
   2.122 +            </and>
   2.123 +        </condition>
   2.124 +    </target>
   2.125 +    <target name="-post-init">
   2.126 +        <!-- Empty placeholder for easier customization. -->
   2.127 +        <!-- You can override this target in the ../build.xml file. -->
   2.128 +    </target>
   2.129 +    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
   2.130 +        <fail unless="src.dir">Must set src.dir</fail>
   2.131 +        <fail unless="test.src.dir">Must set test.src.dir</fail>
   2.132 +        <fail unless="build.dir">Must set build.dir</fail>
   2.133 +        <fail unless="dist.dir">Must set dist.dir</fail>
   2.134 +        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
   2.135 +        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
   2.136 +        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
   2.137 +        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
   2.138 +        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
   2.139 +        <fail unless="dist.jar">Must set dist.jar</fail>
   2.140 +    </target>
   2.141 +    <target name="-init-macrodef-property">
   2.142 +        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
   2.143 +            <attribute name="name"/>
   2.144 +            <attribute name="value"/>
   2.145 +            <sequential>
   2.146 +                <property name="@{name}" value="${@{value}}"/>
   2.147 +            </sequential>
   2.148 +        </macrodef>
   2.149 +    </target>
   2.150 +    <target name="-init-macrodef-javac">
   2.151 +        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
   2.152 +            <attribute default="${src.dir}" name="srcdir"/>
   2.153 +            <attribute default="${build.classes.dir}" name="destdir"/>
   2.154 +            <attribute default="${javac.classpath}" name="classpath"/>
   2.155 +            <attribute default="${includes}" name="includes"/>
   2.156 +            <attribute default="${excludes}" name="excludes"/>
   2.157 +            <attribute default="${javac.debug}" name="debug"/>
   2.158 +            <attribute default="" name="sourcepath"/>
   2.159 +            <element name="customize" optional="true"/>
   2.160 +            <sequential>
   2.161 +                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}">
   2.162 +                    <classpath>
   2.163 +                        <path path="@{classpath}"/>
   2.164 +                    </classpath>
   2.165 +                    <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>
   2.166 +                    <customize/>
   2.167 +                </javac>
   2.168 +            </sequential>
   2.169 +        </macrodef>
   2.170 +        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
   2.171 +            <attribute default="${src.dir}" name="srcdir"/>
   2.172 +            <attribute default="${build.classes.dir}" name="destdir"/>
   2.173 +            <attribute default="${javac.classpath}" name="classpath"/>
   2.174 +            <sequential>
   2.175 +                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
   2.176 +                    <classpath>
   2.177 +                        <path path="@{classpath}"/>
   2.178 +                    </classpath>
   2.179 +                </depend>
   2.180 +            </sequential>
   2.181 +        </macrodef>
   2.182 +        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
   2.183 +            <attribute default="${build.classes.dir}" name="destdir"/>
   2.184 +            <sequential>
   2.185 +                <fail unless="javac.includes">Must set javac.includes</fail>
   2.186 +                <pathconvert pathsep="," property="javac.includes.binary">
   2.187 +                    <path>
   2.188 +                        <filelist dir="@{destdir}" files="${javac.includes}"/>
   2.189 +                    </path>
   2.190 +                    <globmapper from="*.java" to="*.class"/>
   2.191 +                </pathconvert>
   2.192 +                <delete>
   2.193 +                    <files includes="${javac.includes.binary}"/>
   2.194 +                </delete>
   2.195 +            </sequential>
   2.196 +        </macrodef>
   2.197 +    </target>
   2.198 +    <target name="-init-macrodef-junit">
   2.199 +        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
   2.200 +            <attribute default="${includes}" name="includes"/>
   2.201 +            <attribute default="${excludes}" name="excludes"/>
   2.202 +            <attribute default="**" name="testincludes"/>
   2.203 +            <sequential>
   2.204 +                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
   2.205 +                    <batchtest todir="${build.test.results.dir}">
   2.206 +                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
   2.207 +                            <filename name="@{testincludes}"/>
   2.208 +                        </fileset>
   2.209 +                    </batchtest>
   2.210 +                    <classpath>
   2.211 +                        <path path="${run.test.classpath}"/>
   2.212 +                    </classpath>
   2.213 +                    <syspropertyset>
   2.214 +                        <propertyref prefix="test-sys-prop."/>
   2.215 +                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
   2.216 +                    </syspropertyset>
   2.217 +                    <formatter type="brief" usefile="false"/>
   2.218 +                    <formatter type="xml"/>
   2.219 +                    <jvmarg line="${run.jvmargs}"/>
   2.220 +                </junit>
   2.221 +            </sequential>
   2.222 +        </macrodef>
   2.223 +    </target>
   2.224 +    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
   2.225 +        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
   2.226 +            <attribute default="${main.class}" name="name"/>
   2.227 +            <attribute default="${debug.classpath}" name="classpath"/>
   2.228 +            <attribute default="" name="stopclassname"/>
   2.229 +            <sequential>
   2.230 +                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
   2.231 +                    <classpath>
   2.232 +                        <path path="@{classpath}"/>
   2.233 +                    </classpath>
   2.234 +                </nbjpdastart>
   2.235 +            </sequential>
   2.236 +        </macrodef>
   2.237 +        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
   2.238 +            <attribute default="${build.classes.dir}" name="dir"/>
   2.239 +            <sequential>
   2.240 +                <nbjpdareload>
   2.241 +                    <fileset dir="@{dir}" includes="${fix.classes}">
   2.242 +                        <include name="${fix.includes}*.class"/>
   2.243 +                    </fileset>
   2.244 +                </nbjpdareload>
   2.245 +            </sequential>
   2.246 +        </macrodef>
   2.247 +    </target>
   2.248 +    <target name="-init-debug-args">
   2.249 +        <property name="version-output" value="java version &quot;${ant.java.version}"/>
   2.250 +        <condition property="have-jdk-older-than-1.4">
   2.251 +            <or>
   2.252 +                <contains string="${version-output}" substring="java version &quot;1.0"/>
   2.253 +                <contains string="${version-output}" substring="java version &quot;1.1"/>
   2.254 +                <contains string="${version-output}" substring="java version &quot;1.2"/>
   2.255 +                <contains string="${version-output}" substring="java version &quot;1.3"/>
   2.256 +            </or>
   2.257 +        </condition>
   2.258 +        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
   2.259 +            <istrue value="${have-jdk-older-than-1.4}"/>
   2.260 +        </condition>
   2.261 +        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
   2.262 +            <os family="windows"/>
   2.263 +        </condition>
   2.264 +        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
   2.265 +            <isset property="debug.transport"/>
   2.266 +        </condition>
   2.267 +    </target>
   2.268 +    <target depends="-init-debug-args" name="-init-macrodef-debug">
   2.269 +        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
   2.270 +            <attribute default="${main.class}" name="classname"/>
   2.271 +            <attribute default="${debug.classpath}" name="classpath"/>
   2.272 +            <element name="customize" optional="true"/>
   2.273 +            <sequential>
   2.274 +                <java classname="@{classname}" dir="${work.dir}" fork="true">
   2.275 +                    <jvmarg line="${debug-args-line}"/>
   2.276 +                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
   2.277 +                    <jvmarg line="${run.jvmargs}"/>
   2.278 +                    <classpath>
   2.279 +                        <path path="@{classpath}"/>
   2.280 +                    </classpath>
   2.281 +                    <syspropertyset>
   2.282 +                        <propertyref prefix="run-sys-prop."/>
   2.283 +                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
   2.284 +                    </syspropertyset>
   2.285 +                    <customize/>
   2.286 +                </java>
   2.287 +            </sequential>
   2.288 +        </macrodef>
   2.289 +    </target>
   2.290 +    <target name="-init-macrodef-java">
   2.291 +        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
   2.292 +            <attribute default="${main.class}" name="classname"/>
   2.293 +            <element name="customize" optional="true"/>
   2.294 +            <sequential>
   2.295 +                <java classname="@{classname}" dir="${work.dir}" fork="true">
   2.296 +                    <jvmarg line="${run.jvmargs}"/>
   2.297 +                    <classpath>
   2.298 +                        <path path="${run.classpath}"/>
   2.299 +                    </classpath>
   2.300 +                    <syspropertyset>
   2.301 +                        <propertyref prefix="run-sys-prop."/>
   2.302 +                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
   2.303 +                    </syspropertyset>
   2.304 +                    <customize/>
   2.305 +                </java>
   2.306 +            </sequential>
   2.307 +        </macrodef>
   2.308 +    </target>
   2.309 +    <target name="-init-presetdef-jar">
   2.310 +        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
   2.311 +            <jar compress="${jar.compress}" jarfile="${dist.jar}">
   2.312 +                <j2seproject1:fileset dir="${build.classes.dir}"/>
   2.313 +            </jar>
   2.314 +        </presetdef>
   2.315 +    </target>
   2.316 +    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/>
   2.317 +    <!--
   2.318 +                ===================
   2.319 +                COMPILATION SECTION
   2.320 +                ===================
   2.321 +            -->
   2.322 +    <target depends="init" name="deps-jar" unless="no.deps"/>
   2.323 +    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
   2.324 +    <target depends="init" name="-check-automatic-build">
   2.325 +        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
   2.326 +    </target>
   2.327 +    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
   2.328 +        <antcall target="clean"/>
   2.329 +    </target>
   2.330 +    <target depends="init,deps-jar" name="-pre-pre-compile">
   2.331 +        <mkdir dir="${build.classes.dir}"/>
   2.332 +    </target>
   2.333 +    <target name="-pre-compile">
   2.334 +        <!-- Empty placeholder for easier customization. -->
   2.335 +        <!-- You can override this target in the ../build.xml file. -->
   2.336 +    </target>
   2.337 +    <target if="do.depend.true" name="-compile-depend">
   2.338 +        <j2seproject3:depend/>
   2.339 +    </target>
   2.340 +    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile">
   2.341 +        <j2seproject3:javac/>
   2.342 +        <copy todir="${build.classes.dir}">
   2.343 +            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
   2.344 +        </copy>
   2.345 +    </target>
   2.346 +    <target name="-post-compile">
   2.347 +        <!-- Empty placeholder for easier customization. -->
   2.348 +        <!-- You can override this target in the ../build.xml file. -->
   2.349 +    </target>
   2.350 +    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
   2.351 +    <target name="-pre-compile-single">
   2.352 +        <!-- Empty placeholder for easier customization. -->
   2.353 +        <!-- You can override this target in the ../build.xml file. -->
   2.354 +    </target>
   2.355 +    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
   2.356 +        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
   2.357 +        <j2seproject3:force-recompile/>
   2.358 +        <j2seproject3:javac excludes="" includes="${javac.includes}" sourcepath="${src.dir}"/>
   2.359 +    </target>
   2.360 +    <target name="-post-compile-single">
   2.361 +        <!-- Empty placeholder for easier customization. -->
   2.362 +        <!-- You can override this target in the ../build.xml file. -->
   2.363 +    </target>
   2.364 +    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
   2.365 +    <!--
   2.366 +                ====================
   2.367 +                JAR BUILDING SECTION
   2.368 +                ====================
   2.369 +            -->
   2.370 +    <target depends="init" name="-pre-pre-jar">
   2.371 +        <dirname file="${dist.jar}" property="dist.jar.dir"/>
   2.372 +        <mkdir dir="${dist.jar.dir}"/>
   2.373 +    </target>
   2.374 +    <target name="-pre-jar">
   2.375 +        <!-- Empty placeholder for easier customization. -->
   2.376 +        <!-- You can override this target in the ../build.xml file. -->
   2.377 +    </target>
   2.378 +    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available">
   2.379 +        <j2seproject1:jar/>
   2.380 +    </target>
   2.381 +    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">
   2.382 +        <j2seproject1:jar manifest="${manifest.file}"/>
   2.383 +    </target>
   2.384 +    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
   2.385 +        <j2seproject1:jar manifest="${manifest.file}">
   2.386 +            <j2seproject1:manifest>
   2.387 +                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
   2.388 +            </j2seproject1:manifest>
   2.389 +        </j2seproject1:jar>
   2.390 +        <echo>To run this application from the command line without Ant, try:</echo>
   2.391 +        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
   2.392 +        <property location="${dist.jar}" name="dist.jar.resolved"/>
   2.393 +        <pathconvert property="run.classpath.with.dist.jar">
   2.394 +            <path path="${run.classpath}"/>
   2.395 +            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
   2.396 +        </pathconvert>
   2.397 +        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
   2.398 +    </target>
   2.399 +    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries">
   2.400 +        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
   2.401 +        <pathconvert property="run.classpath.without.build.classes.dir">
   2.402 +            <path path="${run.classpath}"/>
   2.403 +            <map from="${build.classes.dir.resolved}" to=""/>
   2.404 +        </pathconvert>
   2.405 +        <pathconvert pathsep=" " property="jar.classpath">
   2.406 +            <path path="${run.classpath.without.build.classes.dir}"/>
   2.407 +            <chainedmapper>
   2.408 +                <flattenmapper/>
   2.409 +                <globmapper from="*" to="lib/*"/>
   2.410 +            </chainedmapper>
   2.411 +        </pathconvert>
   2.412 +        <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
   2.413 +        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
   2.414 +            <fileset dir="${build.classes.dir}"/>
   2.415 +            <manifest>
   2.416 +                <attribute name="Main-Class" value="${main.class}"/>
   2.417 +                <attribute name="Class-Path" value="${jar.classpath}"/>
   2.418 +            </manifest>
   2.419 +        </copylibs>
   2.420 +        <echo>To run this application from the command line without Ant, try:</echo>
   2.421 +        <property location="${dist.jar}" name="dist.jar.resolved"/>
   2.422 +        <echo>java -jar "${dist.jar.resolved}"</echo>
   2.423 +    </target>
   2.424 +    <target name="-post-jar">
   2.425 +        <!-- Empty placeholder for easier customization. -->
   2.426 +        <!-- You can override this target in the ../build.xml file. -->
   2.427 +    </target>
   2.428 +    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
   2.429 +    <!--
   2.430 +                =================
   2.431 +                EXECUTION SECTION
   2.432 +                =================
   2.433 +            -->
   2.434 +    <target depends="init,compile" description="Run a main class." name="run">
   2.435 +        <j2seproject1:java>
   2.436 +            <customize>
   2.437 +                <arg line="${application.args}"/>
   2.438 +            </customize>
   2.439 +        </j2seproject1:java>
   2.440 +    </target>
   2.441 +    <target name="-do-not-recompile">
   2.442 +        <property name="javac.includes.binary" value=""/>
   2.443 +    </target>
   2.444 +    <target depends="init,-do-not-recompile,compile-single" name="run-single">
   2.445 +        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
   2.446 +        <j2seproject1:java classname="${run.class}"/>
   2.447 +    </target>
   2.448 +    <!--
   2.449 +                =================
   2.450 +                DEBUGGING SECTION
   2.451 +                =================
   2.452 +            -->
   2.453 +    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
   2.454 +        <j2seproject1:nbjpdastart name="${debug.class}"/>
   2.455 +    </target>
   2.456 +    <target depends="init,compile" name="-debug-start-debuggee">
   2.457 +        <j2seproject3:debug>
   2.458 +            <customize>
   2.459 +                <arg line="${application.args}"/>
   2.460 +            </customize>
   2.461 +        </j2seproject3:debug>
   2.462 +    </target>
   2.463 +    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
   2.464 +    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
   2.465 +        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
   2.466 +    </target>
   2.467 +    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
   2.468 +    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
   2.469 +        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
   2.470 +        <j2seproject3:debug classname="${debug.class}"/>
   2.471 +    </target>
   2.472 +    <target depends="init,-do-not-recompile,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
   2.473 +    <target depends="init" name="-pre-debug-fix">
   2.474 +        <fail unless="fix.includes">Must set fix.includes</fail>
   2.475 +        <property name="javac.includes" value="${fix.includes}.java"/>
   2.476 +    </target>
   2.477 +    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
   2.478 +        <j2seproject1:nbjpdareload/>
   2.479 +    </target>
   2.480 +    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
   2.481 +    <!--
   2.482 +                ===============
   2.483 +                JAVADOC SECTION
   2.484 +                ===============
   2.485 +            -->
   2.486 +    <target depends="init" name="-javadoc-build">
   2.487 +        <mkdir dir="${dist.javadoc.dir}"/>
   2.488 +        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
   2.489 +            <classpath>
   2.490 +                <path path="${javac.classpath}"/>
   2.491 +            </classpath>
   2.492 +            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
   2.493 +                <filename name="**/*.java"/>
   2.494 +            </fileset>
   2.495 +        </javadoc>
   2.496 +    </target>
   2.497 +    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
   2.498 +        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
   2.499 +    </target>
   2.500 +    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
   2.501 +    <!--
   2.502 +                =========================
   2.503 +                JUNIT COMPILATION SECTION
   2.504 +                =========================
   2.505 +            -->
   2.506 +    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
   2.507 +        <mkdir dir="${build.test.classes.dir}"/>
   2.508 +    </target>
   2.509 +    <target name="-pre-compile-test">
   2.510 +        <!-- Empty placeholder for easier customization. -->
   2.511 +        <!-- You can override this target in the ../build.xml file. -->
   2.512 +    </target>
   2.513 +    <target if="do.depend.true" name="-compile-test-depend">
   2.514 +        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
   2.515 +    </target>
   2.516 +    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
   2.517 +        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
   2.518 +        <copy todir="${build.test.classes.dir}">
   2.519 +            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
   2.520 +        </copy>
   2.521 +    </target>
   2.522 +    <target name="-post-compile-test">
   2.523 +        <!-- Empty placeholder for easier customization. -->
   2.524 +        <!-- You can override this target in the ../build.xml file. -->
   2.525 +    </target>
   2.526 +    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
   2.527 +    <target name="-pre-compile-test-single">
   2.528 +        <!-- Empty placeholder for easier customization. -->
   2.529 +        <!-- You can override this target in the ../build.xml file. -->
   2.530 +    </target>
   2.531 +    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
   2.532 +        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
   2.533 +        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
   2.534 +        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
   2.535 +        <copy todir="${build.test.classes.dir}">
   2.536 +            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
   2.537 +        </copy>
   2.538 +    </target>
   2.539 +    <target name="-post-compile-test-single">
   2.540 +        <!-- Empty placeholder for easier customization. -->
   2.541 +        <!-- You can override this target in the ../build.xml file. -->
   2.542 +    </target>
   2.543 +    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
   2.544 +    <!--
   2.545 +                =======================
   2.546 +                JUNIT EXECUTION SECTION
   2.547 +                =======================
   2.548 +            -->
   2.549 +    <target depends="init" if="have.tests" name="-pre-test-run">
   2.550 +        <mkdir dir="${build.test.results.dir}"/>
   2.551 +    </target>
   2.552 +    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
   2.553 +        <j2seproject3:junit testincludes="**/*Test.java"/>
   2.554 +    </target>
   2.555 +    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
   2.556 +        <fail if="tests.failed">Some tests failed; see details above.</fail>
   2.557 +    </target>
   2.558 +    <target depends="init" if="have.tests" name="test-report"/>
   2.559 +    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
   2.560 +    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
   2.561 +    <target depends="init" if="have.tests" name="-pre-test-run-single">
   2.562 +        <mkdir dir="${build.test.results.dir}"/>
   2.563 +    </target>
   2.564 +    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
   2.565 +        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
   2.566 +        <j2seproject3:junit excludes="" includes="${test.includes}"/>
   2.567 +    </target>
   2.568 +    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
   2.569 +        <fail if="tests.failed">Some tests failed; see details above.</fail>
   2.570 +    </target>
   2.571 +    <target depends="init,-do-not-recompile,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
   2.572 +    <!--
   2.573 +                =======================
   2.574 +                JUNIT DEBUGGING SECTION
   2.575 +                =======================
   2.576 +            -->
   2.577 +    <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
   2.578 +        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
   2.579 +        <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
   2.580 +        <delete file="${test.report.file}"/>
   2.581 +        <mkdir dir="${build.test.results.dir}"/>
   2.582 +        <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
   2.583 +            <customize>
   2.584 +                <syspropertyset>
   2.585 +                    <propertyref prefix="test-sys-prop."/>
   2.586 +                    <mapper from="test-sys-prop.*" to="*" type="glob"/>
   2.587 +                </syspropertyset>
   2.588 +                <arg value="${test.class}"/>
   2.589 +                <arg value="showoutput=true"/>
   2.590 +                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
   2.591 +                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
   2.592 +            </customize>
   2.593 +        </j2seproject3:debug>
   2.594 +    </target>
   2.595 +    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
   2.596 +        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
   2.597 +    </target>
   2.598 +    <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
   2.599 +    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
   2.600 +        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
   2.601 +    </target>
   2.602 +    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
   2.603 +    <!--
   2.604 +                =========================
   2.605 +                APPLET EXECUTION SECTION
   2.606 +                =========================
   2.607 +            -->
   2.608 +    <target depends="init,compile-single" name="run-applet">
   2.609 +        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
   2.610 +        <j2seproject1:java classname="sun.applet.AppletViewer">
   2.611 +            <customize>
   2.612 +                <arg value="${applet.url}"/>
   2.613 +            </customize>
   2.614 +        </j2seproject1:java>
   2.615 +    </target>
   2.616 +    <!--
   2.617 +                =========================
   2.618 +                APPLET DEBUGGING  SECTION
   2.619 +                =========================
   2.620 +            -->
   2.621 +    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
   2.622 +        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
   2.623 +        <j2seproject3:debug classname="sun.applet.AppletViewer">
   2.624 +            <customize>
   2.625 +                <arg value="${applet.url}"/>
   2.626 +            </customize>
   2.627 +        </j2seproject3:debug>
   2.628 +    </target>
   2.629 +    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
   2.630 +    <!--
   2.631 +                ===============
   2.632 +                CLEANUP SECTION
   2.633 +                ===============
   2.634 +            -->
   2.635 +    <target depends="init" name="deps-clean" unless="no.deps"/>
   2.636 +    <target depends="init" name="-do-clean">
   2.637 +        <delete dir="${build.dir}"/>
   2.638 +        <delete dir="${dist.dir}"/>
   2.639 +    </target>
   2.640 +    <target name="-post-clean">
   2.641 +        <!-- Empty placeholder for easier customization. -->
   2.642 +        <!-- You can override this target in the ../build.xml file. -->
   2.643 +    </target>
   2.644 +    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
   2.645 +</project>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/task1/solution13/nbproject/genfiles.properties	Tue Sep 30 13:42:03 2008 +0200
     3.3 @@ -0,0 +1,8 @@
     3.4 +build.xml.data.CRC32=2ab820eb
     3.5 +build.xml.script.CRC32=58a52595
     3.6 +build.xml.stylesheet.CRC32=be360661
     3.7 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
     3.8 +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
     3.9 +nbproject/build-impl.xml.data.CRC32=de21ce77
    3.10 +nbproject/build-impl.xml.script.CRC32=0903858a
    3.11 +nbproject/build-impl.xml.stylesheet.CRC32=e55b27f5
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/task1/solution13/nbproject/project.properties	Tue Sep 30 13:42:03 2008 +0200
     4.3 @@ -0,0 +1,67 @@
     4.4 +application.title=currency
     4.5 +application.vendor=apidesign.org
     4.6 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8
     4.7 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80
     4.8 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=default
     4.9 +build.classes.dir=${build.dir}/classes
    4.10 +build.classes.excludes=**/*.java,**/*.form
    4.11 +# This directory is removed when the project is cleaned:
    4.12 +build.dir=build
    4.13 +build.generated.dir=${build.dir}/generated
    4.14 +# Only compile against the classpath explicitly listed here:
    4.15 +build.sysclasspath=ignore
    4.16 +build.test.classes.dir=${build.dir}/test/classes
    4.17 +build.test.results.dir=${build.dir}/test/results
    4.18 +debug.classpath=\
    4.19 +    ${run.classpath}
    4.20 +debug.test.classpath=\
    4.21 +    ${run.test.classpath}
    4.22 +# This directory is removed when the project is cleaned:
    4.23 +dist.dir=dist
    4.24 +dist.jar=${dist.dir}/currency.jar
    4.25 +dist.javadoc.dir=${dist.dir}/javadoc
    4.26 +excludes=
    4.27 +file.reference.src-apifest08=..
    4.28 +includes=**
    4.29 +jar.compress=false
    4.30 +javac.classpath=
    4.31 +# Space-separated list of extra javac options
    4.32 +javac.compilerargs=
    4.33 +javac.deprecation=false
    4.34 +javac.source=1.5
    4.35 +javac.target=1.5
    4.36 +javac.test.classpath=\
    4.37 +    ${javac.classpath}:\
    4.38 +    ${build.classes.dir}:\
    4.39 +    ${libs.junit_4.classpath}
    4.40 +javadoc.additionalparam=
    4.41 +javadoc.author=false
    4.42 +javadoc.encoding=
    4.43 +javadoc.noindex=false
    4.44 +javadoc.nonavbar=false
    4.45 +javadoc.notree=false
    4.46 +javadoc.private=false
    4.47 +javadoc.splitindex=true
    4.48 +javadoc.use=true
    4.49 +javadoc.version=false
    4.50 +javadoc.windowtitle=
    4.51 +jnlp.codebase.type=local
    4.52 +jnlp.codebase.url=file:/home/jarda/src/apifest08/currency/dist
    4.53 +jnlp.descriptor=application
    4.54 +jnlp.enabled=false
    4.55 +jnlp.offline-allowed=false
    4.56 +jnlp.signed=false
    4.57 +meta.inf.dir=${src.dir}/META-INF
    4.58 +platform.active=default_platform
    4.59 +run.classpath=\
    4.60 +    ${javac.classpath}:\
    4.61 +    ${build.classes.dir}
    4.62 +# Space-separated list of JVM arguments used when running the project
    4.63 +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
    4.64 +# or test-sys-prop.name=value to set system properties for unit tests):
    4.65 +run.jvmargs=
    4.66 +run.test.classpath=\
    4.67 +    ${javac.test.classpath}:\
    4.68 +    ${build.test.classes.dir}
    4.69 +src.dir=src
    4.70 +test.src.dir=test
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/task1/solution13/nbproject/project.xml	Tue Sep 30 13:42:03 2008 +0200
     5.3 @@ -0,0 +1,16 @@
     5.4 +<?xml version="1.0" encoding="UTF-8"?>
     5.5 +<project xmlns="http://www.netbeans.org/ns/project/1">
     5.6 +    <type>org.netbeans.modules.java.j2seproject</type>
     5.7 +    <configuration>
     5.8 +        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
     5.9 +            <name>Currency Convertor Solution 13</name>
    5.10 +            <minimum-ant-version>1.6.5</minimum-ant-version>
    5.11 +            <source-roots>
    5.12 +                <root id="src.dir"/>
    5.13 +            </source-roots>
    5.14 +            <test-roots>
    5.15 +                <root id="test.src.dir"/>
    5.16 +            </test-roots>
    5.17 +        </data>
    5.18 +    </configuration>
    5.19 +</project>
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/task1/solution13/src/org/apidesign/apifest08/currency/ConversionResult.java	Tue Sep 30 13:42:03 2008 +0200
     6.3 @@ -0,0 +1,49 @@
     6.4 +
     6.5 +package org.apidesign.apifest08.currency;
     6.6 +
     6.7 +import java.math.BigDecimal;
     6.8 +
     6.9 +/**
    6.10 + * Result of currency conversion. Holds converted value and remainder.
    6.11 + * <p>
    6.12 + * <em>Converter</em> describes value converted to <em>target</em> value. <em>Remainder</em> describes
    6.13 + * how much from original <em>amount</em> was not possible to convert. Converted never loses any (small) money
    6.14 + * in conversion error (rounding), but instead of rounding is converts only as much as possible and keeps rest as remainder.
    6.15 + * 
    6.16 + * @author arnostvalicek
    6.17 + */
    6.18 +public class ConversionResult {
    6.19 +    private BigDecimal converted;
    6.20 +    private BigDecimal remainder;
    6.21 +    
    6.22 +    /**
    6.23 +     * Get converted value.
    6.24 +     * @return Returns converted value.
    6.25 +     */
    6.26 +    public BigDecimal getConverted() {
    6.27 +        return converted;
    6.28 +    }
    6.29 +
    6.30 +    void setConverted(BigDecimal converted) {
    6.31 +        this.converted = converted;
    6.32 +    }
    6.33 +
    6.34 +    
    6.35 +    /**
    6.36 +     * Get remainder of conversion. Remainder is set if part of converted amount which can't be converted 
    6.37 +     * because this target currency precision can't handle small numbers. Remainder value is in <em>from currency</em>
    6.38 +     * <p>
    6.39 +     * Converter never loses any precision in conversion. Remainer describes how much of amount can't be converted. 
    6.40 +     * If we substract <em>remainder</em> from <em>amount</em> we will be able to get exact conversion.
    6.41 +     * 
    6.42 +     * @return Returns remainder of conversion.
    6.43 +     */
    6.44 +    public BigDecimal getRemainder() {
    6.45 +        return remainder;
    6.46 +    }
    6.47 +
    6.48 +    void setRemainder(BigDecimal remainder) {
    6.49 +        this.remainder = remainder;
    6.50 +    }
    6.51 +
    6.52 +}
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/task1/solution13/src/org/apidesign/apifest08/currency/Convertor.java	Tue Sep 30 13:42:03 2008 +0200
     7.3 @@ -0,0 +1,105 @@
     7.4 +package org.apidesign.apifest08.currency;
     7.5 +
     7.6 +import java.math.BigDecimal;
     7.7 +import java.math.MathContext;
     7.8 +import java.math.RoundingMode;
     7.9 +
    7.10 +/** Convertor able to convert amount from one currency to other currency.
    7.11 + * 
    7.12 + * Exchange rate is provided by {@link ExchangeRateProvider}.
    7.13 + */
    7.14 +public class Convertor {
    7.15 +    boolean remainderAllowed = false; //if false, remained is not allowed (should be true ideally, but can't handle it now)
    7.16 +    ExchangeRateProvider exchangeRateProvider; 
    7.17 +    
    7.18 +    private Convertor() {
    7.19 +        
    7.20 +    }
    7.21 +    
    7.22 +    /**
    7.23 +     * Static method used to create convertor.
    7.24 +     * 
    7.25 +     * @param exchangeRateProvider {@link ExchangeRateProvider} used to get exchange rate.
    7.26 +     * 
    7.27 +     * @return Returns <code>Convertor</code> which can be used to convert money.
    7.28 +     */
    7.29 +    public static Convertor createConvertor(ExchangeRateProvider exchangeRateProvider) {
    7.30 +        Convertor c = new Convertor();
    7.31 +
    7.32 +        c.exchangeRateProvider = exchangeRateProvider;
    7.33 +        return c;
    7.34 +    }
    7.35 +    
    7.36 +    /**
    7.37 +     * Convert <code>amount</code> from <code>fromCurrency</code> to <code>toCurrency</code> as specified
    7.38 +     * in <code>ExchangeRateProvider</code>.
    7.39 +     * 
    7.40 +     * @param amount Amount which should be converted. Can't be negative value (can be zero or positive).
    7.41 +     * @return Return <code>ConversionResult</code> which holds conversion result.
    7.42 +     */
    7.43 +    public ConversionResult convert(BigDecimal amount) {
    7.44 +        return convertValue(amount, false);
    7.45 +    }
    7.46 +    
    7.47 +    /**
    7.48 +     * Convert <code>amount</code> from <code>toCurrency</code> to <code>fromCurrency</code> as specified
    7.49 +     * in <code>ExchangeRateProvider</code>. This is <em>reverted</em> order than suggested by  names of currency fields in <code>ExchangeRate</code>.
    7.50 +     * 
    7.51 +     * @param amount Amount which should be converted. Can't be negative value (can be zero or positive).
    7.52 +     * @return Return <code>ConversionResult</code> which holds conversion result.
    7.53 +     */
    7.54 +    public ConversionResult convertBack(BigDecimal amount) {
    7.55 +        return convertValue(amount, true);
    7.56 +    }
    7.57 +
    7.58 +    private ConversionResult convertValue(BigDecimal amount, boolean convertBack) throws RuntimeException {
    7.59 +        ConversionResult result = new ConversionResult();
    7.60 +        
    7.61 +        ExchangeRate rate = exchangeRateProvider.getExchangeRate();
    7.62 +        int fromFranctionDigits = exchangeRateProvider.getFromCurrency().getDefaultFractionDigits();
    7.63 +        int toFractionDigits = exchangeRateProvider.getToCurrency().getDefaultFractionDigits();
    7.64 +         
    7.65 +        if (toFractionDigits!=2) {
    7.66 +            throw new RuntimeException("Can't process currency with defaultFractionDigits!=2, "+exchangeRateProvider.getToCurrency()+" has "+toFractionDigits+" defaultFractionDigits");
    7.67 +        }
    7.68 +        if (fromFranctionDigits!=2) {
    7.69 +            throw new RuntimeException("Can't process currency with defaultFractionDigits!=2, "+exchangeRateProvider.getFromCurrency()+" has "+fromFranctionDigits+" defaultFractionDigits");
    7.70 +        }
    7.71 +        
    7.72 +        if (amount.signum()==-1) {
    7.73 +            throw new RuntimeException("Can convert only non-negative value, current value is "+amount);
    7.74 +        }
    7.75 +        
    7.76 +        
    7.77 +        MathContext context = new MathContext(0, RoundingMode.DOWN);
    7.78 +        
    7.79 +        BigDecimal from;
    7.80 +        BigDecimal to;
    7.81 +        if (convertBack) {
    7.82 +            //converting in reverted way
    7.83 +            to = rate.getFromValue();
    7.84 +            from = rate.getToValue();
    7.85 +        } else {
    7.86 +            //converting in mornak way
    7.87 +            from = rate.getFromValue();
    7.88 +            to = rate.getToValue();
    7.89 +        }
    7.90 +
    7.91 +        BigDecimal amountCent = amount.movePointRight(2);
    7.92 +        
    7.93 +        final BigDecimal multiplied = amountCent.multiply(to,context);
    7.94 +        BigDecimal[] division = multiplied.divideAndRemainder(from,context);
    7.95 +
    7.96 +        if (!remainderAllowed && !(BigDecimal.ZERO.equals(division[1]))) {
    7.97 +            throw new RuntimeException("Remained is not allowed - remaining amount is " + division[1]+ " cents");
    7.98 +        } else {
    7.99 +            result.setRemainder(BigDecimal.ZERO);
   7.100 +        }
   7.101 +        
   7.102 +        final BigDecimal converted = division[0].movePointLeft(2);        
   7.103 +        result.setConverted(converted);
   7.104 +        //result.setRemainder(...);
   7.105 +
   7.106 +        return result;
   7.107 +    }
   7.108 +}
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/task1/solution13/src/org/apidesign/apifest08/currency/ConvertorCurrency.java	Tue Sep 30 13:42:03 2008 +0200
     8.3 @@ -0,0 +1,46 @@
     8.4 +
     8.5 +package org.apidesign.apifest08.currency;
     8.6 +
     8.7 +import java.util.Currency;
     8.8 +
     8.9 +/**
    8.10 + * Desription of currency. 
    8.11 + * 
    8.12 + * Java has similar class {@link java.util.Currency}, but original class is not flexible
    8.13 + * enough, we use our own implementation of currency.
    8.14 + *
    8.15 + * @author arnostvalicek
    8.16 + */
    8.17 +public class ConvertorCurrency {
    8.18 +
    8.19 +    private Currency currency;
    8.20 +
    8.21 +    private void setJavaCurrency(Currency javaCurrency) {
    8.22 +        this.currency = javaCurrency;
    8.23 +    }
    8.24 +
    8.25 +    /**
    8.26 +     * Static method providing instance of <code>ConvertorCurrency</code> base of currency code.
    8.27 +     * 
    8.28 +     * @param currencyCode Code of required currency.
    8.29 +     * @return Returns required <code>ConvertorCurrency</code>
    8.30 +     */
    8.31 +    public static ConvertorCurrency getInstance(String currencyCode) {
    8.32 +        ConvertorCurrency convertorCurrency = new ConvertorCurrency();
    8.33 +        convertorCurrency.setJavaCurrency(Currency.getInstance(currencyCode));
    8.34 +        return convertorCurrency;
    8.35 +    }
    8.36 +
    8.37 +    /**
    8.38 +     * Gets the default number of fraction digits used with this currency. For example, the default number of fraction digits for the Euro is 2, while for the Japanese Yen it's 0.
    8.39 +     * @return Returns the default number of fraction digits used with this currency.
    8.40 +     */
    8.41 +    public int getDefaultFractionDigits() {
    8.42 +        return currency.getDefaultFractionDigits();
    8.43 +    }
    8.44 +
    8.45 +    @Override
    8.46 +    public String toString() {
    8.47 +        return getClass() + " based on " + (currency != null ? currency.toString() : "NO-BASE-CURRENCY");
    8.48 +    }
    8.49 +}
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/task1/solution13/src/org/apidesign/apifest08/currency/ExchangeRate.java	Tue Sep 30 13:42:03 2008 +0200
     9.3 @@ -0,0 +1,41 @@
     9.4 +
     9.5 +package org.apidesign.apifest08.currency;
     9.6 +
     9.7 +import java.math.BigDecimal;
     9.8 +
     9.9 +/**
    9.10 + * Exchange rate value. Contains <code>from</code> and <code>to</code> value.
    9.11 + * 
    9.12 + * @author arnostvalicek
    9.13 + */
    9.14 +public class ExchangeRate {
    9.15 +    private BigDecimal numberFor;
    9.16 +    private BigDecimal numberGet;
    9.17 +
    9.18 +    public  ExchangeRate(BigDecimal fromValue, BigDecimal toValue) {
    9.19 +        this.numberFor = fromValue;
    9.20 +        this.numberGet = toValue;
    9.21 +    }
    9.22 +
    9.23 +    @Override
    9.24 +    public String toString() {
    9.25 +        return "for "+numberFor+" recieve "+numberGet+" @"+getClass().getName();
    9.26 +    }
    9.27 +    
    9.28 +    public BigDecimal getFromValue() {
    9.29 +        return numberFor;
    9.30 +    }
    9.31 +    
    9.32 +    public BigDecimal getToValue() {
    9.33 +        return numberGet;
    9.34 +    }
    9.35 +    
    9.36 +    
    9.37 +//    public ExchangeRate createExchangeRate(BigDecimal forValue, BigDecimal getValue) {
    9.38 +//        ExchangeRate rate = new ExchangeRate(forValue, getValue);
    9.39 +//        return rate;
    9.40 +//    }
    9.41 +    
    9.42 +    
    9.43 +    
    9.44 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/task1/solution13/src/org/apidesign/apifest08/currency/ExchangeRateProvider.java	Tue Sep 30 13:42:03 2008 +0200
    10.3 @@ -0,0 +1,62 @@
    10.4 +
    10.5 +package org.apidesign.apifest08.currency;
    10.6 +
    10.7 +import java.math.BigDecimal;
    10.8 +import java.util.Date;
    10.9 +
   10.10 +/**
   10.11 + * Exchange rate provider - can provide fixed exchange rate which does not depend
   10.12 + * on date (method {@link #getExchangeRate()} ) or exchange rate based on date (method {@link #getExchangeRate(java.util.Date) }).
   10.13 + * 
   10.14 + * 
   10.15 + * @author arnostvalicek
   10.16 + */
   10.17 +public class ExchangeRateProvider {
   10.18 +    BigDecimal fromValue, toValue;
   10.19 +    ConvertorCurrency fromCurrency, toCurrency;
   10.20 +
   10.21 +    /**
   10.22 +     * Simple constructor for <code>ExchangeRateProviderM</code> which can provide fixed exchange rate.
   10.23 +     * 
   10.24 +     * Describes conversion <em>from</em> to <em>to</em> currency.
   10.25 +     * 
   10.26 +     * @param fromValue From value. BigDecimal value, precision should be set to currency precision.
   10.27 +     * @param fromCurrency From currency.
   10.28 +     * @param toValue To value. BigDecimal value, precision should be set to currency precision.
   10.29 +     * @param toCurrency To currency.
   10.30 +     */
   10.31 +    public ExchangeRateProvider(BigDecimal fromValue, ConvertorCurrency fromCurrency, BigDecimal toValue, ConvertorCurrency toCurrency) {
   10.32 +        this.fromValue = fromValue;
   10.33 +        this.toValue = toValue;
   10.34 +        this.fromCurrency = fromCurrency;
   10.35 +        this.toCurrency = toCurrency;
   10.36 +    }
   10.37 +    
   10.38 +    /**
   10.39 +     * Get fixed exange rate for currencies (from->to).
   10.40 +     * @return Returns exchange rate.
   10.41 +     */
   10.42 +    public ExchangeRate getExchangeRate() {
   10.43 +        return new ExchangeRate(fromValue, toValue);
   10.44 +    }
   10.45 +    
   10.46 +    /**
   10.47 +     * Get exchange rate for currencies (from->to) based on provided date.
   10.48 +     * @param date Date for which exchange rate should be provided.
   10.49 +     * @return Returns exchange rate 
   10.50 +     */
   10.51 +    public ExchangeRate getExchangeRate(Date date) {
   10.52 +        return new ExchangeRate(fromValue, toValue);
   10.53 +    }
   10.54 +    
   10.55 +
   10.56 +    ConvertorCurrency getFromCurrency() {
   10.57 +        return fromCurrency;
   10.58 +    }
   10.59 +    
   10.60 +    ConvertorCurrency getToCurrency() {
   10.61 +        return toCurrency;
   10.62 +    }
   10.63 +    
   10.64 +
   10.65 +}
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/task1/solution13/test/org/apidesign/apifest08/test/Task1Test.java	Tue Sep 30 13:42:03 2008 +0200
    11.3 @@ -0,0 +1,209 @@
    11.4 +package org.apidesign.apifest08.test;
    11.5 +
    11.6 +import java.math.BigDecimal;
    11.7 +import junit.framework.TestCase;
    11.8 +import org.apidesign.apifest08.currency.ConversionResult;
    11.9 +import org.apidesign.apifest08.currency.Convertor;
   11.10 +import org.apidesign.apifest08.currency.ConvertorCurrency;
   11.11 +import org.apidesign.apifest08.currency.ExchangeRateProvider;
   11.12 +
   11.13 +/** Finish the Convertor API, and then write bodies of methods inside
   11.14 + * of this class to match the given tasks. To fullfil your task, use the
   11.15 + * API define in the <code>org.apidesign.apifest08.currency</code> package.
   11.16 + * Do not you reflection, or other hacks as your code
   11.17 + * shall run without any runtime permissions.
   11.18 + */
   11.19 +public class Task1Test extends TestCase {
   11.20 +    public Task1Test(String testName) {
   11.21 +        super(testName);
   11.22 +    }
   11.23 +
   11.24 +    @Override
   11.25 +    protected void setUp() throws Exception {
   11.26 +    }
   11.27 +
   11.28 +    @Override
   11.29 +    protected void tearDown() throws Exception {
   11.30 +    }
   11.31 +
   11.32 +    /** Create convertor that understands two currencies, CZK and
   11.33 +     *  USD. Make 1 USD == 17 CZK.
   11.34 +     *
   11.35 +     * Creation of the convertor shall not require subclassing of any class
   11.36 +     * or interface on the client side.
   11.37 +     *
   11.38 +     * @return prepared convertor ready for converting USD to CZK and CZK to USD
   11.39 +     */
   11.40 +    public Convertor createCZKtoUSD() {
   11.41 +        ConvertorCurrency fromCurrency = ConvertorCurrency.getInstance("CZK");
   11.42 +        ConvertorCurrency toCurrency = ConvertorCurrency.getInstance("USD");
   11.43 +        ExchangeRateProvider exchangeRateProvider = new ExchangeRateProvider(new BigDecimal(17), fromCurrency, new BigDecimal(1), toCurrency);
   11.44 +        
   11.45 +        return Convertor.createConvertor(exchangeRateProvider);
   11.46 +    }
   11.47 +
   11.48 +    /** Create convertor that understands two currencies, CZK and
   11.49 +     *  SKK. Make 100 SKK == 80 CZK.
   11.50 +     *
   11.51 +     * Creation of the convertor shall not require subclassing of any class
   11.52 +     * or interface on the client side.
   11.53 +     * 
   11.54 +     * @return prepared convertor ready for converting SKK to CZK and CZK to SKK
   11.55 +     */
   11.56 +    public Convertor createSKKtoCZK() {
   11.57 +        ConvertorCurrency fromCurrency = ConvertorCurrency.getInstance("SKK");
   11.58 +        ConvertorCurrency toCurrency = ConvertorCurrency.getInstance("CZK");
   11.59 +        ExchangeRateProvider exchangeRateProvider = new ExchangeRateProvider(new BigDecimal(100), fromCurrency, new BigDecimal(80), toCurrency);
   11.60 +        
   11.61 +        return Convertor.createConvertor(exchangeRateProvider);
   11.62 +    }
   11.63 +    
   11.64 +    
   11.65 +    public Convertor createCZKtoYEN() {
   11.66 +        ConvertorCurrency fromCurrency = ConvertorCurrency.getInstance("CZK");
   11.67 +        ConvertorCurrency toCurrency = ConvertorCurrency.getInstance("JPY");
   11.68 +        ExchangeRateProvider exchangeRateProvider = new ExchangeRateProvider(new BigDecimal(1), fromCurrency, new BigDecimal(1), toCurrency);
   11.69 +        
   11.70 +        return Convertor.createConvertor(exchangeRateProvider);
   11.71 +    }
   11.72 +    
   11.73 +    /** Use the convertor from <code>createCZKtoUSD</code> method and do few conversions
   11.74 +     * with it.
   11.75 +     */
   11.76 +    public void testCurrencyCZKUSD() throws Exception {
   11.77 +        Convertor convertCzkUsd = createCZKtoUSD();
   11.78 +
   11.79 +        {
   11.80 +            // convert $1 to CZK using c:
   11.81 +            ConversionResult result = convertCzkUsd.convertBack(new BigDecimal(1));
   11.82 +            assertEquals("Result is 17 CZK", new BigDecimal("17.00"), result.getConverted());
   11.83 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
   11.84 +        }
   11.85 +
   11.86 +        {
   11.87 +            // convert 17CKZ to $ using c:
   11.88 +            ConversionResult result = convertCzkUsd.convert(new BigDecimal(17));
   11.89 +            assertEquals("Result is 1 $", new BigDecimal("1.00"), result.getConverted());
   11.90 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
   11.91 +        }
   11.92 +
   11.93 +        {
   11.94 +            // convert $5 to CZK using c:
   11.95 +            ConversionResult result = convertCzkUsd.convertBack(new BigDecimal(5));
   11.96 +            assertEquals("Result is 85 CZK", new BigDecimal("85.00"), result.getConverted());
   11.97 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
   11.98 +        }
   11.99 +        
  11.100 +        {
  11.101 +            // convert $8 to CZK
  11.102 +            ConversionResult result = convertCzkUsd.convertBack(new BigDecimal(8));
  11.103 +            assertEquals("Result is 136 CZK", new BigDecimal("136.00"), result.getConverted());
  11.104 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
  11.105 +        }
  11.106 +
  11.107 +        {
  11.108 +            // convert 1003CZK to USD
  11.109 +            ConversionResult result = convertCzkUsd.convert(new BigDecimal(1003));
  11.110 +            assertEquals("Result is 59 USD", new BigDecimal("59.00"), result.getConverted());
  11.111 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
  11.112 +        }
  11.113 +    }
  11.114 +
  11.115 +    /** Use the convertor from <code>createSKKtoCZK</code> method and do few conversions
  11.116 +     * with it.
  11.117 +     */
  11.118 +    public void testCurrencySKKCZK() throws Exception {
  11.119 +        Convertor convertSkkCzk = createSKKtoCZK();
  11.120 +        {
  11.121 +            // convert 100SKK using c:
  11.122 +            ConversionResult result = convertSkkCzk.convert(new BigDecimal(100));
  11.123 +            assertEquals("Result is 80 CZK", new BigDecimal("80.00"), result.getConverted());
  11.124 +        }
  11.125 +        {
  11.126 +            // convert 80CZK using c:
  11.127 +            ConversionResult result = convertSkkCzk.convertBack(new BigDecimal(80));
  11.128 +            assertEquals("Result is 100 SKK", new BigDecimal("100.00"), result.getConverted());
  11.129 +        }
  11.130 +        
  11.131 +        {
  11.132 +            // convert 16CZK using c:
  11.133 +            ConversionResult result = convertSkkCzk.convertBack(new BigDecimal(16));
  11.134 +            assertEquals("Result is 20 SKK", new BigDecimal("20.00"), result.getConverted());
  11.135 +        }
  11.136 +
  11.137 +        {
  11.138 +            // convert 500SKK to CZK
  11.139 +            ConversionResult result = convertSkkCzk.convert(new BigDecimal(500));
  11.140 +            assertEquals("Result is 400 CZK", new BigDecimal("400.00"), result.getConverted());
  11.141 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());            
  11.142 +        }
  11.143 +        
  11.144 +        {
  11.145 +            // convert 501SKK to CZK
  11.146 +            ConversionResult result = convertSkkCzk.convert(new BigDecimal(501));
  11.147 +            assertEquals("Result is 400 CZK", new BigDecimal("400.80"), result.getConverted());
  11.148 +            assertEquals("No Remainer", BigDecimal.ZERO, result.getRemainder());
  11.149 +            
  11.150 +        }
  11.151 +    }
  11.152 +    
  11.153 +    /**
  11.154 +     * Convert SKK to CZK. Convertor can't convert whole amout (can't convert one SKK cent to CZK). Remaining
  11.155 +     * amount is stored in remainder result.
  11.156 +     * 
  11.157 +     * Test is currently failing, because implementation can't handle this case.
  11.158 +     */
  11.159 +//    public void testConvertSmallUnits_failing() {
  11.160 +//        Convertor convertSkkCzk = createSKKtoCZK();
  11.161 +//        {
  11.162 +//            // convert 501SKK to CZK
  11.163 +//            ConversionResult result = convertSkkCzk.convert(new BigDecimal("501.01"));
  11.164 +//            assertEquals("Result is 400 CZK", new BigDecimal("400.80"), result.getConverted());
  11.165 +//            assertEquals("No Remainer", new BigDecimal("0.01"), result.getRemainder());
  11.166 +//            
  11.167 +//        }
  11.168 +//        
  11.169 +//    }
  11.170 +    
  11.171 +    /**
  11.172 +     * Test converting from CZK to JPY. Remained has scale of CZK.
  11.173 +     * 
  11.174 +     * This test is currently failing, because converter implementation currently can't handle conversion from "cent" to "no-cent" currency.
  11.175 +     */
  11.176 +//    public void testConvertCzkToJpy_failing() {
  11.177 +//        Convertor convertSkkCzk = createCZKtoYEN();
  11.178 +//        {
  11.179 +//            // convert 501SKK to CZK
  11.180 +//            ConversionResult result = convertSkkCzk.convert(new BigDecimal("120.00"));
  11.181 +//            assertEquals("Result is 120 YEN", new BigDecimal("120"), result.getConverted());
  11.182 +//            assertEquals("No Remainer", new BigDecimal("0.00"), result.getRemainder());
  11.183 +//            
  11.184 +//        }
  11.185 +//    }
  11.186 +    
  11.187 +    /**
  11.188 +     * Test converting from JPY to CZK. Remained has scale of JPY.
  11.189 +     * 
  11.190 +     * This test is currently failing, because converter implementation currently can't handle conversion from "cent" to "no-cent" currency.
  11.191 +     */
  11.192 +//    public void testConvertJpyToCzk_failing() {
  11.193 +//        Convertor convertSkkCzk = createCZKtoYEN();
  11.194 +//        {
  11.195 +//            // convert 501SKK to CZK
  11.196 +//            ConversionResult result = convertSkkCzk.convert(new BigDecimal("120.00"));
  11.197 +//            assertEquals("Result is 120 YEN", new BigDecimal("120"), result.getConverted());
  11.198 +//            assertEquals("No Remainer", new BigDecimal("0"), result.getRemainder());
  11.199 +//            
  11.200 +//        }
  11.201 +//    }
  11.202 +    
  11.203 +    public void testCannotConvertToSKKwithCZKUSDConvertor() throws Exception {
  11.204 +            Convertor c = createCZKtoUSD();
  11.205 +            // convert $5 to SKK, the API shall say this is not possible
  11.206 +            // convert 500 SKK to CZK, the API shall say this is not possible
  11.207 +            // ... no api for required call, should be here?
  11.208 +    }
  11.209 +    
  11.210 + 
  11.211 +}
  11.212 +