EMMA Coverage Report (generated Thu Jan 03 04:54:40 CET 2013)
[all classes][org.jomc.ri]

COVERAGE SUMMARY FOR SOURCE FILE [DefaultLocator.java]

nameclass, %method, %block, %line, %
DefaultLocator.java100% (1/1)33%  (3/9)8%   (35/454)8%   (7/89)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DefaultLocator100% (1/1)33%  (3/9)8%   (35/454)8%   (7/89)
getIllegalObjectMessage (Locale, String, String): String 0%   (0/1)0%   (0/135)0%   (0/25)
getJndiContext (): Context 0%   (0/1)0%   (0/11)0%   (0/3)
getJndiName (URI): String 0%   (0/1)0%   (0/38)0%   (0/8)
getMessage (Throwable): String 0%   (0/1)0%   (0/14)0%   (0/1)
getObject (Class, URI): Object 0%   (0/1)0%   (0/83)0%   (0/18)
getUnsupportedUriSchemeMessage (Locale, String): String 0%   (0/1)0%   (0/131)0%   (0/25)
isLocationSupported (URI): boolean 100% (1/1)74%  (20/27)67%  (4/6)
<static initializer> 100% (1/1)100% (12/12)100% (1/1)
DefaultLocator (): void 100% (1/1)100% (3/3)100% (2/2)

1// SECTION-START[License Header]
2// <editor-fold defaultstate="collapsed" desc=" Generated License ">
3/*
4 *   Java Object Management and Configuration
5 *   Copyright (C) Christian Schulte, 2005-206
6 *   All rights reserved.
7 *
8 *   Redistribution and use in source and binary forms, with or without
9 *   modification, are permitted provided that the following conditions
10 *   are met:
11 *
12 *     o Redistributions of source code must retain the above copyright
13 *       notice, this list of conditions and the following disclaimer.
14 *
15 *     o Redistributions in binary form must reproduce the above copyright
16 *       notice, this list of conditions and the following disclaimer in
17 *       the documentation and/or other materials provided with the
18 *       distribution.
19 *
20 *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
21 *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22 *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23 *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
24 *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 *
31 *   $JOMC: DefaultLocator.java 4712 2013-01-02 13:56:12Z schulte $
32 *
33 */
34// </editor-fold>
35// SECTION-END
36package org.jomc.ri;
37 
38import java.io.IOException;
39import java.net.URI;
40import java.util.Locale;
41import javax.naming.Context;
42import javax.naming.InitialContext;
43import javax.naming.NamingException;
44import javax.rmi.PortableRemoteObject;
45import org.jomc.spi.Locator;
46 
47// SECTION-START[Documentation]
48// <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
49/**
50 * Default {@code Locator} implementation.
51 *
52 * <dl>
53 *   <dt><b>Identifier:</b></dt><dd>org.jomc.ri.DefaultLocator</dd>
54 *   <dt><b>Name:</b></dt><dd>JOMC ⁑ RI ⁑ DefaultLocator</dd>
55 *   <dt><b>Abstract:</b></dt><dd>No</dd>
56 *   <dt><b>Final:</b></dt><dd>No</dd>
57 *   <dt><b>Stateless:</b></dt><dd>No</dd>
58 * </dl>
59 *
60 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0
61 * @version 1.0
62 */
63// </editor-fold>
64// SECTION-END
65// SECTION-START[Annotations]
66// <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
67@javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
68// </editor-fold>
69// SECTION-END
70public class DefaultLocator implements Locator
71{
72    // SECTION-START[DefaultLocator]
73 
74    /** Constant for the {@code 'jndi'} URI scheme. */
75    private static final String JNDI_URI_SCHEME = "jndi";
76 
77    /** Constant for the {@code 'jndi+rmi'} URI scheme. */
78    private static final String JNDI_RMI_URI_SCHEME = "jndi+rmi";
79 
80    /** URI schemes supported by this {@code Locator} implementation. */
81    private static final String[] SUPPORTED_URI_SCHEMES =
82    {
83        JNDI_URI_SCHEME, JNDI_RMI_URI_SCHEME
84    };
85 
86    /** The JNDI context of the instance. */
87    private Context jndiContext;
88 
89    /**
90     * Gets a flag indicating support for a given location URI.
91     *
92     * @param location The location URI to test support for.
93     *
94     * @return {@code true}, if {@code location} is supported by this implementation; {@code false}, else.
95     *
96     * @throws NullPointerException if {@code location} is {@code null}.
97     */
98    public boolean isLocationSupported( final URI location )
99    {
100        if ( location == null )
101        {
102            throw new NullPointerException( "location" );
103        }
104 
105        for ( int i = SUPPORTED_URI_SCHEMES.length - 1; i >= 0; i-- )
106        {
107            if ( SUPPORTED_URI_SCHEMES[i].equals( location.getScheme() ) )
108            {
109                return true;
110            }
111        }
112 
113        return false;
114    }
115 
116    /**
117     * Gets the JNDI context of the instance.
118     *
119     * @return The JNDI context of the instance.
120     *
121     * @throws NamingException if getting the context fails.
122     */
123    public Context getJndiContext() throws NamingException
124    {
125        if ( this.jndiContext == null )
126        {
127            this.jndiContext = new InitialContext();
128        }
129 
130        return this.jndiContext;
131    }
132 
133    /**
134     * Gets the JNDI name for a given location.
135     *
136     * @param location The location to get a JNDI name for.
137     *
138     * @return The JNDI name for {@code location}.
139     *
140     * @throws NullPointerException if {@code location} is {@code null}.
141     */
142    public String getJndiName( final URI location )
143    {
144        if ( location == null )
145        {
146            throw new NullPointerException( "location" );
147        }
148 
149        String name = location.getSchemeSpecificPart();
150        if ( name == null || name.replace( '/', ' ' ).trim().length() == 0 )
151        {
152            name = "";
153        }
154        if ( location.getFragment() != null )
155        {
156            name += '#' + location.getFragment();
157        }
158 
159        return name;
160    }
161 
162    public <T> T getObject( final Class<T> specification, final URI location ) throws IOException
163    {
164        if ( specification == null )
165        {
166            throw new NullPointerException( "specification" );
167        }
168        if ( location == null )
169        {
170            throw new NullPointerException( "location" );
171        }
172 
173        T object = null;
174 
175        try
176        {
177            final String scheme = location.getScheme();
178            if ( !this.isLocationSupported( location ) )
179            {
180                throw new IOException( getUnsupportedUriSchemeMessage( Locale.getDefault(), location.getScheme() ) );
181            }
182 
183            final Object jndiObject = this.getJndiContext().lookup( this.getJndiName( location ) );
184 
185            if ( JNDI_URI_SCHEME.equals( scheme ) )
186            {
187                object = (T) jndiObject;
188            }
189            else if ( JNDI_RMI_URI_SCHEME.equals( scheme ) )
190            {
191                object = (T) PortableRemoteObject.narrow( jndiObject, specification );
192            }
193 
194            return object;
195        }
196        catch ( final NamingException e )
197        {
198            // JDK: As of JDK 6, "new IOException( message, cause )".
199            throw (IOException) new IOException( getMessage( e ) ).initCause( e );
200        }
201        catch ( final ClassCastException e )
202        {
203            // JDK: As of JDK 6, "new IOException( message, cause )".
204            throw (IOException) new IOException( getIllegalObjectMessage(
205                Locale.getDefault(), object != null ? object.toString() : null,
206                specification.getName() ) ).initCause( e );
207 
208        }
209    }
210 
211    private static String getMessage( final Throwable t )
212    {
213        return t != null ? t.getMessage() != null ? t.getMessage() : getMessage( t.getCause() ) : null;
214    }
215 
216    // SECTION-END
217    // SECTION-START[Constructors]
218    // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
219    /** Creates a new {@code DefaultLocator} instance. */
220    @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
221    public DefaultLocator()
222    {
223        // SECTION-START[Default Constructor]
224        super();
225        // SECTION-END
226    }
227    // </editor-fold>
228    // SECTION-END
229    // SECTION-START[Dependencies]
230    // SECTION-END
231    // SECTION-START[Properties]
232    // SECTION-END
233    // SECTION-START[Messages]
234    // <editor-fold defaultstate="collapsed" desc=" Generated Messages ">
235    /**
236     * Gets the text of the {@code <Illegal Object Message>} message.
237     * <p><dl>
238     *   <dt><b>Languages:</b></dt>
239     *     <dd>English (default)</dd>
240     *     <dd>Deutsch</dd>
241     *   <dt><b>Final:</b></dt><dd>No</dd>
242     * </dl></p>
243     * @param locale The locale of the message to return.
244     * @param objectInfo Format argument.
245     * @param classInfo Format argument.
246     * @return The text of the {@code <Illegal Object Message>} message for {@code locale}.
247     * @throws org.jomc.ObjectManagementException if getting the message instance fails.
248     */
249    @SuppressWarnings("unused")
250    @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
251    private static String getIllegalObjectMessage( final java.util.Locale locale, final java.lang.String objectInfo, final java.lang.String classInfo )
252    {
253        java.io.BufferedReader reader = null;
254        boolean suppressExceptionOnClose = true;
255 
256        try
257        {
258            final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultLocator", locale ).getString( "Illegal Object Message" ), objectInfo, classInfo, (Object) null );
259            final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() );
260            reader = new java.io.BufferedReader( new java.io.StringReader( message ) );
261            final String lineSeparator = System.getProperty( "line.separator", "\n" );
262 
263            String line;
264            while ( ( line = reader.readLine() ) != null )
265            {
266                builder.append( lineSeparator ).append( line );
267            }
268 
269            suppressExceptionOnClose = false;
270            return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : "";
271        }
272        catch( final java.lang.ClassCastException e )
273        {
274            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
275        }
276        catch( final java.lang.IllegalArgumentException e )
277        {
278            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
279        }
280        catch( final java.util.MissingResourceException e )
281        {
282            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
283        }
284        catch( final java.io.IOException e )
285        {
286            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
287        }
288        finally
289        {
290            try
291            {
292                if( reader != null )
293                {
294                    reader.close();
295                }
296            }
297            catch( final java.io.IOException e )
298            {
299                if( !suppressExceptionOnClose )
300                {
301                    throw new org.jomc.ObjectManagementException( e.getMessage(), e );
302                }
303            }
304        }
305    }
306    /**
307     * Gets the text of the {@code <Unsupported URI Scheme Message>} message.
308     * <p><dl>
309     *   <dt><b>Languages:</b></dt>
310     *     <dd>English (default)</dd>
311     *     <dd>Deutsch</dd>
312     *   <dt><b>Final:</b></dt><dd>No</dd>
313     * </dl></p>
314     * @param locale The locale of the message to return.
315     * @param schemeInfo Format argument.
316     * @return The text of the {@code <Unsupported URI Scheme Message>} message for {@code locale}.
317     * @throws org.jomc.ObjectManagementException if getting the message instance fails.
318     */
319    @SuppressWarnings("unused")
320    @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
321    private static String getUnsupportedUriSchemeMessage( final java.util.Locale locale, final java.lang.String schemeInfo )
322    {
323        java.io.BufferedReader reader = null;
324        boolean suppressExceptionOnClose = true;
325 
326        try
327        {
328            final String message = java.text.MessageFormat.format( java.util.ResourceBundle.getBundle( "org.jomc.ri.DefaultLocator", locale ).getString( "Unsupported URI Scheme Message" ), schemeInfo, (Object) null );
329            final java.lang.StringBuilder builder = new java.lang.StringBuilder( message.length() );
330            reader = new java.io.BufferedReader( new java.io.StringReader( message ) );
331            final String lineSeparator = System.getProperty( "line.separator", "\n" );
332 
333            String line;
334            while ( ( line = reader.readLine() ) != null )
335            {
336                builder.append( lineSeparator ).append( line );
337            }
338 
339            suppressExceptionOnClose = false;
340            return builder.length() > 0 ? builder.substring( lineSeparator.length() ) : "";
341        }
342        catch( final java.lang.ClassCastException e )
343        {
344            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
345        }
346        catch( final java.lang.IllegalArgumentException e )
347        {
348            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
349        }
350        catch( final java.util.MissingResourceException e )
351        {
352            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
353        }
354        catch( final java.io.IOException e )
355        {
356            throw new org.jomc.ObjectManagementException( e.getMessage(), e );
357        }
358        finally
359        {
360            try
361            {
362                if( reader != null )
363                {
364                    reader.close();
365                }
366            }
367            catch( final java.io.IOException e )
368            {
369                if( !suppressExceptionOnClose )
370                {
371                    throw new org.jomc.ObjectManagementException( e.getMessage(), e );
372                }
373            }
374        }
375    }
376    // </editor-fold>
377    // SECTION-END
378}

[all classes][org.jomc.ri]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov