EMMA Coverage Report (generated Wed Feb 03 01:24:19 UTC 2010)
[all classes][org.jomc.model.bootstrap]

COVERAGE SUMMARY FOR SOURCE FILE [DefaultServiceProvider.java]

nameclass, %method, %block, %line, %
DefaultServiceProvider.java100% (1/1)71%  (5/7)73%  (99/136)73%  (27.8/38)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DefaultServiceProvider100% (1/1)71%  (5/7)73%  (99/136)73%  (27.8/38)
setDefaultServiceLocation (String): void 0%   (0/1)0%   (0/3)0%   (0/2)
setServiceLocation (String): void 0%   (0/1)0%   (0/4)0%   (0/2)
findServices (BootstrapContext): Services 100% (1/1)62%  (8/13)67%  (2/3)
findServices (BootstrapContext, String): Services 100% (1/1)74%  (71/96)77%  (17.8/23)
DefaultServiceProvider (): void 100% (1/1)100% (3/3)100% (2/2)
getDefaultServiceLocation (): String 100% (1/1)100% (8/8)100% (3/3)
getServiceLocation (): String 100% (1/1)100% (9/9)100% (3/3)

1/*
2 *   Copyright (c) 2009 The JOMC Project
3 *   Copyright (c) 2005 Christian Schulte <cs@jomc.org>
4 *   All rights reserved.
5 *
6 *   Redistribution and use in source and binary forms, with or without
7 *   modification, are permitted provided that the following conditions
8 *   are met:
9 *
10 *     o Redistributions of source code must retain the above copyright
11 *       notice, this list of conditions and the following disclaimer.
12 *
13 *     o Redistributions in binary form must reproduce the above copyright
14 *       notice, this list of conditions and the following disclaimer in
15 *       the documentation and/or other materials provided with the
16 *       distribution.
17 *
18 *   THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS"
19 *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 *   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 *   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR
22 *   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 *   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 *   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 *   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 *   $Id: DefaultServiceProvider.java 1393 2010-01-27 18:34:30Z schulte2005 $
31 *
32 */
33package org.jomc.model.bootstrap;
34 
35import java.net.URL;
36import java.util.Enumeration;
37import javax.xml.bind.JAXBContext;
38import javax.xml.bind.JAXBElement;
39import javax.xml.bind.JAXBException;
40import javax.xml.bind.Unmarshaller;
41 
42/**
43 * Default {@code ServiceProvider} implementation.
44 *
45 * @author <a href="mailto:cs@jomc.org">Christian Schulte</a>
46 * @version $Id: DefaultServiceProvider.java 1393 2010-01-27 18:34:30Z schulte2005 $
47 * @see BootstrapContext#findServices()
48 */
49public class DefaultServiceProvider implements ServiceProvider
50{
51 
52    /**
53     * Classpath location searched for services by default.
54     * @see #getDefaultServiceLocation()
55     */
56    private static final String DEFAULT_SERVICE_LOCATION = "META-INF/jomc-services.xml";
57 
58    /** Default service location. */
59    private static volatile String defaultServiceLocation;
60 
61    /** Service location of the instance. */
62    private String serviceLocation;
63 
64    /** Creates a new {@code DefaultServiceProvider} instance. */
65    public DefaultServiceProvider()
66    {
67        super();
68    }
69 
70    /**
71     * Gets the default location searched for service resources.
72     * <p>The default service location is controlled by system property
73     * {@code org.jomc.model.bootstrap.DefaultServiceProvider.defaultServiceLocation} holding the location to search for
74     * service resources by default. If that property is not set, the {@code META-INF/jomc-services.xml} default is
75     * returned.</p>
76     *
77     * @return The location searched for service resources by default.
78     *
79     * @see #setDefaultServiceLocation(java.lang.String)
80     */
81    public static String getDefaultServiceLocation()
82    {
83        if ( defaultServiceLocation == null )
84        {
85            defaultServiceLocation = System.getProperty(
86                "org.jomc.model.bootstrap.DefaultServiceProvider.defaultServiceLocation", DEFAULT_SERVICE_LOCATION );
87 
88        }
89 
90        return defaultServiceLocation;
91    }
92 
93    /**
94     * Sets the default location searched for service resources.
95     *
96     * @param value The new default location to search for service resources or {@code null}.
97     *
98     * @see #getDefaultServiceLocation()
99     */
100    public static void setDefaultServiceLocation( final String value )
101    {
102        defaultServiceLocation = value;
103    }
104 
105    /**
106     * Gets the location searched for service resources.
107     *
108     * @return The location searched for service resources.
109     *
110     * @see #getDefaultServiceLocation()
111     * @see #setServiceLocation(java.lang.String)
112     */
113    public String getServiceLocation()
114    {
115        if ( this.serviceLocation == null )
116        {
117            this.serviceLocation = getDefaultServiceLocation();
118        }
119 
120        return this.serviceLocation;
121    }
122 
123    /**
124     * Sets the location searched for service resources.
125     *
126     * @param value The new location to search for service resources or {@code null}.
127     *
128     * @see #getServiceLocation()
129     */
130    public void setServiceLocation( final String value )
131    {
132        this.serviceLocation = value;
133    }
134 
135    /**
136     * Searches a given context for services.
137     *
138     * @param context The context to search for services.
139     * @param location The location to search at.
140     *
141     * @return The services found at {@code location} in {@code context} or {@code null} of no services are found.
142     *
143     * @throws NullPointerException if {@code context} or {@code location} is {@code null}.
144     * @throws BootstrapException if searching the context fails.
145     */
146    public Services findServices( final BootstrapContext context, final String location ) throws BootstrapException
147    {
148        if ( context == null )
149        {
150            throw new NullPointerException( "context" );
151        }
152        if ( location == null )
153        {
154            throw new NullPointerException( "location" );
155        }
156 
157        try
158        {
159            final Services services = new Services();
160            final JAXBContext ctx = context.createContext();
161            final Unmarshaller u = ctx.createUnmarshaller();
162            final Enumeration<URL> e = context.findResources( location );
163            u.setSchema( context.createSchema() );
164 
165            while ( e.hasMoreElements() )
166            {
167                final URL url = e.nextElement();
168                Object content = u.unmarshal( url );
169                if ( content instanceof JAXBElement )
170                {
171                    content = ( (JAXBElement) content ).getValue();
172                }
173 
174                if ( content instanceof Service )
175                {
176                    services.getService().add( (Service) content );
177                }
178                else if ( content instanceof Services )
179                {
180                    for ( Service s : ( (Services) content ).getService() )
181                    {
182                        services.getService().add( s );
183                    }
184                }
185            }
186 
187            return services.getService().isEmpty() ? null : services;
188        }
189        catch ( final JAXBException e )
190        {
191            throw new BootstrapException( e );
192        }
193    }
194 
195    /**
196     * {@inheritDoc}
197     *
198     * @see #getServiceLocation()
199     * @see #findServices(org.jomc.model.bootstrap.BootstrapContext, java.lang.String)
200     */
201    public Services findServices( final BootstrapContext context ) throws BootstrapException
202    {
203        if ( context == null )
204        {
205            throw new NullPointerException( "context" );
206        }
207 
208        return this.findServices( context, this.getServiceLocation() );
209    }
210 
211}

[all classes][org.jomc.model.bootstrap]
EMMA 2.0.5312 (C) Vladimir Roubtsov