EMMA Coverage Report (generated Tue Dec 09 03:51:57 CET 2014)
[all classes][org.jdtaus.banking.dtaus.ri.zka]

COVERAGE SUMMARY FOR SOURCE FILE [DefaultTransactionValidator.java]

nameclass, %method, %block, %line, %
DefaultTransactionValidator.java100% (1/1)100% (10/10)80%  (327/410)86%  (62/72)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DefaultTransactionValidator100% (1/1)100% (10/10)80%  (327/410)86%  (62/72)
assertValidProperties (): void 100% (1/1)47%  (28/60)56%  (5/9)
assertValidTransaction (LogicalFile, Transaction, IllegalTransactionException... 100% (1/1)83%  (250/301)89%  (48/54)
DefaultTransactionValidator (): void 100% (1/1)100% (3/3)100% (2/2)
getCurrencyMapper (): CurrencyMapper 100% (1/1)100% (6/6)100% (1/1)
getLogger (): Logger 100% (1/1)100% (6/6)100% (1/1)
getMaxAmount (): long 100% (1/1)100% (7/7)100% (1/1)
getMaxDescriptions (): int 100% (1/1)100% (7/7)100% (1/1)
getMinAmount (): long 100% (1/1)100% (7/7)100% (1/1)
getMinDescriptions (): int 100% (1/1)100% (7/7)100% (1/1)
getTextschluesselVerzeichnis (): TextschluesselVerzeichnis 100% (1/1)100% (6/6)100% (1/1)

1/*
2 *  jDTAUS Banking RI DTAUS
3 *  Copyright (C) 2005 Christian Schulte
4 *  <cs@schulte.it>
5 *
6 *  This library is free software; you can redistribute it and/or
7 *  modify it under the terms of the GNU Lesser General Public
8 *  License as published by the Free Software Foundation; either
9 *  version 2.1 of the License, or any later version.
10 *
11 *  This library is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 *  Lesser General Public License for more details.
15 *
16 *  You should have received a copy of the GNU Lesser General Public
17 *  License along with this library; if not, write to the Free Software
18 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19 *
20 */
21package org.jdtaus.banking.dtaus.ri.zka;
22 
23import java.io.IOException;
24import java.util.HashMap;
25import java.util.Iterator;
26import java.util.Map;
27import org.jdtaus.banking.Textschluessel;
28import org.jdtaus.banking.TextschluesselVerzeichnis;
29import org.jdtaus.banking.dtaus.LogicalFile;
30import org.jdtaus.banking.dtaus.LogicalFileType;
31import org.jdtaus.banking.dtaus.Transaction;
32import org.jdtaus.banking.dtaus.spi.IllegalTransactionException;
33import org.jdtaus.banking.dtaus.spi.TransactionValidator;
34import org.jdtaus.banking.messages.IllegalAmountMessage;
35import org.jdtaus.banking.messages.IllegalCurrencyMessage;
36import org.jdtaus.banking.messages.IllegalDescriptionCountMessage;
37import org.jdtaus.banking.messages.TextschluesselConstraintMessage;
38import org.jdtaus.banking.spi.CurrencyMapper;
39import org.jdtaus.banking.spi.UnsupportedCurrencyException;
40import org.jdtaus.core.container.ContainerFactory;
41import org.jdtaus.core.container.PropertyException;
42import org.jdtaus.core.logging.spi.Logger;
43import org.jdtaus.core.messages.MandatoryPropertyMessage;
44import org.jdtaus.core.text.Message;
45 
46/**
47 * jDTAUS Banking SPI {@code TransactionValidator} implementation.
48 *
49 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
50 * @version $JDTAUS: DefaultTransactionValidator.java 8661 2012-09-27 11:29:58Z schulte $
51 */
52public final class DefaultTransactionValidator implements TransactionValidator
53{
54 
55    public IllegalTransactionException assertValidTransaction(
56        final LogicalFile lFile, final Transaction transaction, IllegalTransactionException result )
57        throws IOException
58    {
59        if ( lFile == null )
60        {
61            throw new NullPointerException( "lFile" );
62        }
63        if ( transaction == null )
64        {
65            throw new NullPointerException( "transaction" );
66        }
67 
68        this.assertValidProperties();
69        final Map properties = new HashMap( 20 );
70        final LogicalFileType lFileType = lFile.getHeader().getType();
71        final Textschluessel[] allowedTypes = this.getTextschluesselVerzeichnis().searchTextschluessel(
72            Boolean.valueOf( lFileType.isDebitAllowed() ), Boolean.valueOf( lFileType.isRemittanceAllowed() ),
73            lFile.getHeader().getCreateDate() );
74 
75        if ( transaction.getExecutiveAccount() == null )
76        {
77            properties.put( Transaction.PROP_EXECUTIVEACCOUNT, new MandatoryPropertyMessage() );
78        }
79        if ( transaction.getExecutiveBank() == null )
80        {
81            properties.put( Transaction.PROP_EXECUTIVEBANK, new MandatoryPropertyMessage() );
82        }
83        if ( transaction.getExecutiveName() == null || transaction.getExecutiveName().isEmpty() )
84        {
85            properties.put( Transaction.PROP_EXECUTIVENAME, new MandatoryPropertyMessage() );
86        }
87        if ( transaction.getTargetAccount() == null )
88        {
89            properties.put( Transaction.PROP_TARGETACCOUNT, new MandatoryPropertyMessage() );
90        }
91        if ( transaction.getTargetBank() == null )
92        {
93            properties.put( Transaction.PROP_TARGETBANK, new MandatoryPropertyMessage() );
94        }
95        if ( transaction.getTargetName() == null || transaction.getTargetName().isEmpty() )
96        {
97            properties.put( Transaction.PROP_TARGETNAME, new MandatoryPropertyMessage() );
98        }
99        if ( transaction.getType() == null )
100        {
101            properties.put( Transaction.PROP_TYPE, new MandatoryPropertyMessage() );
102        }
103        if ( transaction.getCurrency() == null )
104        {
105            properties.put( Transaction.PROP_CURRENCY, new MandatoryPropertyMessage() );
106        }
107        if ( transaction.getAmount() == null )
108        {
109            properties.put( Transaction.PROP_AMOUNT, new MandatoryPropertyMessage() );
110        }
111        if ( allowedTypes != null && transaction.getType() != null )
112        {
113            int i;
114            for ( i = allowedTypes.length - 1; i >= 0; i-- )
115            {
116                if ( allowedTypes[i].equals( transaction.getType() ) )
117                {
118                    break;
119                }
120            }
121            if ( i < 0 )
122            {
123                properties.put( Transaction.PROP_TYPE, new TextschluesselConstraintMessage(
124                    lFileType, transaction.getType() ) );
125 
126            }
127        }
128        else if ( transaction.getType() != null )
129        {
130            properties.put( Transaction.PROP_TYPE, new TextschluesselConstraintMessage(
131                lFileType, transaction.getType() ) );
132 
133        }
134 
135        if ( transaction.getAmount() != null &&
136             !( transaction.getAmount().longValue() >= this.getMinAmount() &&
137                transaction.getAmount().longValue() <= this.getMaxAmount() ) )
138        {
139            properties.put( Transaction.PROP_AMOUNT, new IllegalAmountMessage( transaction.getAmount() ) );
140        }
141        if ( !( transaction.getDescriptions().length >= this.getMinDescriptions() &&
142                transaction.getDescriptions().length <= this.getMaxDescriptions() ) )
143        {
144            properties.put( Transaction.PROP_DESCRIPTIONS, new IllegalDescriptionCountMessage(
145                this.getMaxDescriptions(), transaction.getDescriptions().length ) );
146 
147        }
148 
149        if ( transaction.getCurrency() != null )
150        {
151            try
152            {
153                this.getCurrencyMapper().getDtausCode( transaction.getCurrency(), lFile.getHeader().getCreateDate() );
154            }
155            catch ( UnsupportedCurrencyException ex )
156            {
157                if ( this.getLogger().isDebugEnabled() )
158                {
159                    this.getLogger().debug( ex.toString() );
160                }
161 
162                properties.put( Transaction.PROP_CURRENCY, new IllegalCurrencyMessage(
163                    transaction.getCurrency().getCurrencyCode(), lFile.getHeader().getCreateDate() ) );
164 
165            }
166        }
167 
168        if ( properties.size() > 0 )
169        {
170            if ( result == null )
171            {
172                result = new IllegalTransactionException();
173            }
174 
175            for ( Iterator it = properties.entrySet().iterator(); it.hasNext(); )
176            {
177                final Map.Entry entry = (Map.Entry) it.next();
178                result.addMessage( (String) entry.getKey(), (Message) entry.getValue() );
179            }
180        }
181 
182        return result;
183    }
184 
185    /**
186     * Checks configured properties.
187     *
188     * @throws PropertyException for illegal property values.
189     */
190    private void assertValidProperties()
191    {
192        if ( this.getMinAmount() < 0L )
193        {
194            throw new PropertyException( "minAmount", Long.toString( this.getMinAmount() ) );
195        }
196        if ( this.getMaxAmount() < 0L || this.getMinAmount() > this.getMaxAmount() )
197        {
198            throw new PropertyException( "maxAmount", Long.toString( this.getMaxAmount() ) );
199        }
200        if ( this.getMinDescriptions() < 0 )
201        {
202            throw new PropertyException( "minDescriptions", Integer.toString( this.getMinDescriptions() ) );
203        }
204        if ( this.getMaxDescriptions() < 0 || this.getMinDescriptions() > this.getMaxDescriptions() )
205        {
206            throw new PropertyException( "maxDescriptions", Integer.toString( this.getMaxDescriptions() ) );
207        }
208    }
209 
210    //--Constructors------------------------------------------------------------
211 
212// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausConstructors
213    // This section is managed by jdtaus-container-mojo.
214 
215    /** Standard implementation constructor <code>org.jdtaus.banking.dtaus.ri.zka.DefaultTransactionValidator</code>. */
216    public DefaultTransactionValidator()
217    {
218        super();
219    }
220 
221// </editor-fold>//GEN-END:jdtausConstructors
222 
223    //------------------------------------------------------------Constructors--
224    //--Dependencies------------------------------------------------------------
225 
226// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausDependencies
227    // This section is managed by jdtaus-container-mojo.
228 
229    /**
230     * Gets the configured <code>TextschluesselVerzeichnis</code> implementation.
231     *
232     * @return The configured <code>TextschluesselVerzeichnis</code> implementation.
233     */
234    private TextschluesselVerzeichnis getTextschluesselVerzeichnis()
235    {
236        return (TextschluesselVerzeichnis) ContainerFactory.getContainer().
237            getDependency( this, "TextschluesselVerzeichnis" );
238 
239    }
240 
241    /**
242     * Gets the configured <code>CurrencyMapper</code> implementation.
243     *
244     * @return The configured <code>CurrencyMapper</code> implementation.
245     */
246    private CurrencyMapper getCurrencyMapper()
247    {
248        return (CurrencyMapper) ContainerFactory.getContainer().
249            getDependency( this, "CurrencyMapper" );
250 
251    }
252 
253    /**
254     * Gets the configured <code>Logger</code> implementation.
255     *
256     * @return The configured <code>Logger</code> implementation.
257     */
258    private Logger getLogger()
259    {
260        return (Logger) ContainerFactory.getContainer().
261            getDependency( this, "Logger" );
262 
263    }
264 
265// </editor-fold>//GEN-END:jdtausDependencies
266 
267    //------------------------------------------------------------Dependencies--
268    //--Properties--------------------------------------------------------------
269 
270// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausProperties
271    // This section is managed by jdtaus-container-mojo.
272 
273    /**
274     * Gets the value of property <code>minDescriptions</code>.
275     *
276     * @return Minimum number of descriptions any transaction has to specify.
277     */
278    private int getMinDescriptions()
279    {
280        return ( (java.lang.Integer) ContainerFactory.getContainer().
281            getProperty( this, "minDescriptions" ) ).intValue();
282 
283    }
284 
285    /**
286     * Gets the value of property <code>minAmount</code>.
287     *
288     * @return Minimum amount any transaction has to specify.
289     */
290    private long getMinAmount()
291    {
292        return ( (java.lang.Long) ContainerFactory.getContainer().
293            getProperty( this, "minAmount" ) ).longValue();
294 
295    }
296 
297    /**
298     * Gets the value of property <code>maxDescriptions</code>.
299     *
300     * @return Maximum number of descriptions any transaction is allowed to specify.
301     */
302    private int getMaxDescriptions()
303    {
304        return ( (java.lang.Integer) ContainerFactory.getContainer().
305            getProperty( this, "maxDescriptions" ) ).intValue();
306 
307    }
308 
309    /**
310     * Gets the value of property <code>maxAmount</code>.
311     *
312     * @return Maximum amount any transaction is allowed to specify.
313     */
314    private long getMaxAmount()
315    {
316        return ( (java.lang.Long) ContainerFactory.getContainer().
317            getProperty( this, "maxAmount" ) ).longValue();
318 
319    }
320 
321// </editor-fold>//GEN-END:jdtausProperties
322 
323    //--------------------------------------------------------------Properties--
324}

[all classes][org.jdtaus.banking.dtaus.ri.zka]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov