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

COVERAGE SUMMARY FOR SOURCE FILE [RuntimeInstances.java]

nameclass, %method, %block, %line, %
RuntimeInstances.java0%   (0/1)0%   (0/8)0%   (0/197)0%   (0/50)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class RuntimeInstances0%   (0/1)0%   (0/8)0%   (0/197)0%   (0/50)
RuntimeInstances (): void 0%   (0/1)0%   (0/6)0%   (0/3)
RuntimeInstances (Instances): void 0%   (0/1)0%   (0/27)0%   (0/8)
clear (): void 0%   (0/1)0%   (0/21)0%   (0/5)
copyInstances (): void 0%   (0/1)0%   (0/26)0%   (0/4)
gc (): void 0%   (0/1)0%   (0/5)0%   (0/2)
gcOrClear (boolean, boolean): void 0%   (0/1)0%   (0/37)0%   (0/12)
gcOrClearInstances (boolean, boolean): void 0%   (0/1)0%   (0/31)0%   (0/8)
getInstance (String): Instance 0%   (0/1)0%   (0/44)0%   (0/9)

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, 2011-313
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: RuntimeInstances.java 4712 2013-01-02 13:56:12Z schulte $
32 *
33 */
34// </editor-fold>
35// SECTION-END
36package org.jomc.ri.model;
37 
38import java.util.Map;
39import javax.xml.bind.annotation.XmlTransient;
40import org.jomc.model.Instance;
41import org.jomc.model.Instances;
42import static org.jomc.ri.model.RuntimeModelObjects.createMap;
43 
44// SECTION-START[Documentation]
45// <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
46/**
47 * Runtime {@code Instances}.
48 *
49 * <dl>
50 *   <dt><b>Identifier:</b></dt><dd>org.jomc.ri.model.RuntimeInstances</dd>
51 *   <dt><b>Name:</b></dt><dd>JOMC ⁑ RI ⁑ RuntimeInstances</dd>
52 *   <dt><b>Specifications:</b></dt>
53 *     <dd>org.jomc.ri.model.RuntimeModelObject @ 1.2</dd>
54 *   <dt><b>Abstract:</b></dt><dd>No</dd>
55 *   <dt><b>Final:</b></dt><dd>No</dd>
56 *   <dt><b>Stateless:</b></dt><dd>No</dd>
57 * </dl>
58 *
59 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.2
60 * @version 1.2
61 */
62// </editor-fold>
63// SECTION-END
64// SECTION-START[Annotations]
65// <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
66@javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
67// </editor-fold>
68// SECTION-END
69public class RuntimeInstances extends Instances implements RuntimeModelObject
70{
71    // SECTION-START[RuntimeInstances]
72 
73    /** Cache map. */
74    @XmlTransient
75    private transient final Map<String, Instance> instancesByIdentifierCache = createMap();
76 
77    /**
78     * Creates a new {@code RuntimeInstances} instance by deeply copying a given {@code Instances} instance.
79     *
80     * @param instances The instance to copy.
81     *
82     * @throws NullPointerException if {@code instances} is {@code null}.
83     */
84    public RuntimeInstances( final Instances instances )
85    {
86        super( instances );
87 
88        if ( this.getAuthors() != null )
89        {
90            this.setAuthors( RuntimeModelObjects.getInstance().copyOf( this.getAuthors() ) );
91        }
92        if ( this.getDocumentation() != null )
93        {
94            this.setDocumentation( RuntimeModelObjects.getInstance().copyOf( this.getDocumentation() ) );
95        }
96 
97        this.copyInstances();
98    }
99 
100    /**
101     * Gets an instance for a given identifier from the list of instances.
102     * <p>This method queries an internal cache for a result object to return for the given argument values. If no
103     * cached result object is available, this method queries the super-class for a result object to return and caches
104     * the outcome of that query for use on successive calls.</p>
105     * <p><b>Note:</b><br/>Method {@code clear()} must be used to synchronize the state of the internal cache with the
106     * state of the instance, should the state of the instance change.</p>
107     *
108     * @param identifier The identifier of the instance to return.
109     *
110     * @return The first matching instance or {@code null}, if no such instance is found.
111     *
112     * @throws NullPointerException if {@code identifier} is {@code null}.
113     *
114     * @see #getInstance()
115     * @see Instance#getIdentifier()
116     * @see #clear()
117     */
118    @Override
119    public Instance getInstance( final String identifier )
120    {
121        if ( identifier == null )
122        {
123            throw new NullPointerException( "identifier" );
124        }
125 
126        synchronized ( this.instancesByIdentifierCache )
127        {
128            Instance i = this.instancesByIdentifierCache.get( identifier );
129 
130            if ( i == null && !this.instancesByIdentifierCache.containsKey( identifier ) )
131            {
132                i = super.getInstance( identifier );
133                this.instancesByIdentifierCache.put( identifier, i );
134            }
135 
136            return i;
137        }
138    }
139 
140    private void copyInstances()
141    {
142        for ( int i = 0, s0 = this.getInstance().size(); i < s0; i++ )
143        {
144            final Instance inst = this.getInstance().get( i );
145            this.getInstance().set( i, RuntimeModelObjects.getInstance().copyOf( inst ) );
146        }
147    }
148 
149    // SECTION-END
150    // SECTION-START[RuntimeModelObject]
151    public void gc()
152    {
153        this.gcOrClear( true, false );
154    }
155 
156    public void clear()
157    {
158        synchronized ( this.instancesByIdentifierCache )
159        {
160            this.instancesByIdentifierCache.clear();
161        }
162 
163        this.gcOrClear( false, true );
164    }
165 
166    private void gcOrClear( final boolean gc, final boolean clear )
167    {
168        if ( this.getAuthors() instanceof RuntimeModelObject )
169        {
170            if ( gc )
171            {
172                ( (RuntimeModelObject) this.getAuthors() ).gc();
173            }
174            if ( clear )
175            {
176                ( (RuntimeModelObject) this.getAuthors() ).clear();
177            }
178        }
179        if ( this.getDocumentation() instanceof RuntimeModelObject )
180        {
181            if ( gc )
182            {
183                ( (RuntimeModelObject) this.getDocumentation() ).gc();
184            }
185            if ( clear )
186            {
187                ( (RuntimeModelObject) this.getDocumentation() ).clear();
188            }
189        }
190 
191        this.gcOrClearInstances( gc, clear );
192    }
193 
194    private void gcOrClearInstances( final boolean handle, final boolean prepare )
195    {
196        for ( int i = 0, s0 = this.getInstance().size(); i < s0; i++ )
197        {
198            final Instance inst = this.getInstance().get( i );
199            if ( inst instanceof RuntimeModelObject )
200            {
201                if ( handle )
202                {
203                    ( (RuntimeModelObject) inst ).gc();
204                }
205                if ( prepare )
206                {
207                    ( (RuntimeModelObject) inst ).clear();
208                }
209            }
210        }
211    }
212    // SECTION-END
213    // SECTION-START[Constructors]
214    // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
215    /** Creates a new {@code RuntimeInstances} instance. */
216    @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" )
217    public RuntimeInstances()
218    {
219        // SECTION-START[Default Constructor]
220        super();
221        // SECTION-END
222    }
223    // </editor-fold>
224    // SECTION-END
225    // SECTION-START[Dependencies]
226    // SECTION-END
227    // SECTION-START[Properties]
228    // SECTION-END
229    // SECTION-START[Messages]
230    // SECTION-END
231}

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