001 // SECTION-START[License Header]
002 // <editor-fold defaultstate="collapsed" desc=" Generated License ">
003 /*
004 * Copyright (c) 2010 The JOMC Project
005 * Copyright (c) 2005 Christian Schulte <schulte2005@users.sourceforge.net>
006 * All rights reserved.
007 *
008 * Redistribution and use in source and binary forms, with or without
009 * modification, are permitted provided that the following conditions
010 * are met:
011 *
012 * o Redistributions of source code must retain the above copyright
013 * notice, this list of conditions and the following disclaimer.
014 *
015 * o Redistributions in binary form must reproduce the above copyright
016 * notice, this list of conditions and the following disclaimer in
017 * the documentation and/or other materials provided with the
018 * distribution.
019 *
020 * THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS"
021 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
022 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
023 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR
024 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
026 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
027 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
028 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
029 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
030 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
031 *
032 * $Id: DefaultSequenceDirectory.java 2247 2010-06-29 08:01:42Z schulte2005 $
033 *
034 */
035 // </editor-fold>
036 // SECTION-END
037 package org.jomc.sequences.ri;
038
039 import java.math.BigInteger;
040 import java.util.Calendar;
041 import java.util.HashSet;
042 import java.util.List;
043 import java.util.Set;
044 import javax.persistence.NoResultException;
045 import javax.persistence.Query;
046 import org.jomc.sequences.CapacityLimitException;
047 import org.jomc.sequences.ConcurrentModificationException;
048 import org.jomc.sequences.SequenceExistsException;
049 import org.jomc.sequences.SequenceVetoException;
050 import org.jomc.sequences.Sequence;
051 import org.jomc.sequences.SequenceChangeEvent;
052 import org.jomc.sequences.SequenceChangeListener;
053 import org.jomc.sequences.SequenceDirectory;
054 import org.jomc.sequences.SequenceLimitException;
055 import org.jomc.sequences.SequenceNotFoundException;
056 import org.jomc.sequences.SequenceOperations;
057 import org.jomc.sequences.SequencesSystemException;
058 import org.jomc.sequences.VetoableSequenceChangeListener;
059 import org.jomc.sequences.model.SequenceType;
060 import org.jomc.sequences.model.SequencesType;
061
062 // SECTION-START[Documentation]
063 // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
064 /**
065 * SequenceDirectory reference implementation.
066 * <p><b>Specifications</b><ul>
067 * <li>{@code 'org.jomc.sequences.SequenceDirectory'} {@code (org.jomc.sequences.SequenceDirectory)} {@code 1.0} {@code Singleton}</li>
068 * <li>{@code 'org.jomc.sequences.SequenceOperations'} {@code (org.jomc.sequences.SequenceOperations)} {@code 1.0} {@code Singleton}</li>
069 * </ul></p>
070 * <p><b>Properties</b><ul>
071 * <li>"{@link #getDefaultSequenceDirectoryCapacityLimit defaultSequenceDirectoryCapacityLimit}"
072 * <blockquote>Property of type {@code java.math.BigInteger}.
073 * <p>Default capacity limit when creating new sequence directory entities and no default value is provided otherwise.</p>
074 * </blockquote></li>
075 * <li>"{@link #getSequenceDirectoryName sequenceDirectoryName}"
076 * <blockquote>Property of type {@code java.lang.String}.
077 * <p>Name uniquely identifying the directory in a set of directories.</p>
078 * </blockquote></li>
079 * <li>"{@link #getSequenceDirectoryNameQueryParameterName sequenceDirectoryNameQueryParameterName}"
080 * <blockquote>Property of type {@code java.lang.String}.
081 * <p>Name of a JPA query parameter denoting the name of a sequence directory entity.</p>
082 * </blockquote></li>
083 * <li>"{@link #getSequenceNameQueryParameterName sequenceNameQueryParameterName}"
084 * <blockquote>Property of type {@code java.lang.String}.
085 * <p>Name of a JPA query parameter denoting the name of a sequence entity.</p>
086 * </blockquote></li>
087 * </ul></p>
088 * <p><b>Dependencies</b><ul>
089 * <li>"{@link #getEntityManager EntityManager}"<blockquote>
090 * Dependency on {@code 'javax.persistence.EntityManager'} {@code (javax.persistence.EntityManager)}.</blockquote></li>
091 * <li>"{@link #getLocale Locale}"<blockquote>
092 * Dependency on {@code 'java.util.Locale'} {@code (java.util.Locale)} at specification level 1.1 bound to an instance.</blockquote></li>
093 * <li>"{@link #getLogger Logger}"<blockquote>
094 * Dependency on {@code 'org.jomc.logging.Logger'} {@code (org.jomc.logging.Logger)} at specification level 1.0 bound to an instance.</blockquote></li>
095 * <li>"{@link #getSelectAllSequencesQuery SelectAllSequencesQuery}"<blockquote>
096 * Dependency on {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)}.</blockquote></li>
097 * <li>"{@link #getSelectSequenceCountQuery SelectSequenceCountQuery}"<blockquote>
098 * Dependency on {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)}.</blockquote></li>
099 * <li>"{@link #getSelectSequenceDirectoryQuery SelectSequenceDirectoryQuery}"<blockquote>
100 * Dependency on {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)}.</blockquote></li>
101 * <li>"{@link #getSelectSequenceQuery SelectSequenceQuery}"<blockquote>
102 * Dependency on {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)}.</blockquote></li>
103 * <li>"{@link #getSelectSequencesQuery SelectSequencesQuery}"<blockquote>
104 * Dependency on {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)}.</blockquote></li>
105 * <li>"{@link #getSequenceChangeListener SequenceChangeListener}"<blockquote>
106 * Dependency on {@code 'org.jomc.sequences.SequenceChangeListener'} {@code (org.jomc.sequences.SequenceChangeListener)} at specification level 1.0 bound to an instance.</blockquote></li>
107 * <li>"{@link #getSequenceMapper SequenceMapper}"<blockquote>
108 * Dependency on {@code 'org.jomc.sequences.ri.SequenceMapper'} {@code (org.jomc.sequences.ri.SequenceMapper)} at specification level 1.0 bound to an instance.</blockquote></li>
109 * <li>"{@link #getVetoableSequenceChangeListener VetoableSequenceChangeListener}"<blockquote>
110 * Dependency on {@code 'org.jomc.sequences.VetoableSequenceChangeListener'} {@code (org.jomc.sequences.VetoableSequenceChangeListener)} at specification level 1.0 bound to an instance.</blockquote></li>
111 * </ul></p>
112 * <p><b>Messages</b><ul>
113 * <li>"{@link #getIllegalArgumentMessage illegalArgumentMessage}"<table>
114 * <tr><td valign="top">English:</td><td valign="top"><pre>Illegal value ''{1}'' for argument ''{0}''.</pre></td></tr>
115 * <tr><td valign="top">Deutsch:</td><td valign="top"><pre>Ungültiger Wert ''{1}'' für Parameter ''{0}''.</pre></td></tr>
116 * </table>
117 * <li>"{@link #getSuccessfullyCreatedSequenceDirectoryMessage successfullyCreatedSequenceDirectoryMessage}"<table>
118 * <tr><td valign="top">English:</td><td valign="top"><pre>Sequence directory ''{0}'' created.</pre></td></tr>
119 * <tr><td valign="top">Deutsch:</td><td valign="top"><pre>Sequenzverzeichnis ''{0}'' erstellt.</pre></td></tr>
120 * </table>
121 * </ul></p>
122 *
123 * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
124 * @version $Id: DefaultSequenceDirectory.java 2247 2010-06-29 08:01:42Z schulte2005 $
125 */
126 // </editor-fold>
127 // SECTION-END
128 // SECTION-START[Annotations]
129 // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
130 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
131 // </editor-fold>
132 // SECTION-END
133 public class DefaultSequenceDirectory
134 implements SequenceDirectory, SequenceOperations
135 {
136 // SECTION-START[SequenceDirectory]
137
138 public BigInteger getSequenceCount()
139 {
140 final Query query = this.getSelectSequenceCountQuery();
141 query.setParameter( this.getSequenceDirectoryNameQueryParameterName(),
142 this.getSequencesType( this.getSequenceDirectoryName() ).getName() );
143
144 return BigInteger.valueOf( ( (Long) query.getSingleResult() ).longValue() );
145 }
146
147 public BigInteger getCapacityLimit()
148 {
149 return this.getSequencesType( this.getSequenceDirectoryName() ).getCapacityLimit();
150 }
151
152 public Sequence getSequence( final String name )
153 {
154 if ( name == null )
155 {
156 throw new SequencesSystemException( this.getIllegalArgumentMessage( this.getLocale(), "name", null ) );
157 }
158
159 final SequenceType sequenceType = this.getSequenceType( name );
160 if ( sequenceType != null )
161 {
162 return this.getSequenceMapper().map( sequenceType, new Sequence() );
163 }
164
165 return null;
166 }
167
168 public Sequence addSequence( final Sequence sequence )
169 {
170 if ( sequence == null )
171 {
172 throw new SequencesSystemException( this.getIllegalArgumentMessage( this.getLocale(), "sequence", null ) );
173 }
174
175 final BigInteger capacityLimit = this.getCapacityLimit();
176 if ( this.getSequenceCount().compareTo( capacityLimit ) >= 0 )
177 {
178 throw new CapacityLimitException( capacityLimit );
179 }
180
181 this.fireVetoableSequenceChange( null, sequence );
182
183 SequenceType sequenceType = this.getSequenceType( sequence.getName() );
184
185 if ( sequenceType != null )
186 {
187 throw new SequenceExistsException( this.getSequenceMapper().map( sequenceType, new Sequence() ) );
188 }
189
190 sequenceType = this.getSequenceMapper().map( sequence, new SequenceType() );
191 sequenceType.setJpaDate( Calendar.getInstance() );
192
193 final SequencesType sequences = this.getSequencesType( this.getSequenceDirectoryName() );
194 this.getEntityManager().persist( sequenceType );
195 sequences.getSequence().add( sequenceType );
196 this.getEntityManager().merge( sequences );
197
198 final Sequence persistent = this.getSequenceMapper().map( sequenceType, new Sequence() );
199 this.fireSequenceChange( null, persistent );
200 return persistent;
201 }
202
203 public Sequence editSequence( final String name, final long revision, final Sequence sequence )
204 {
205 if ( name == null )
206 {
207 throw new SequencesSystemException( this.getIllegalArgumentMessage( this.getLocale(), "name", null ) );
208 }
209 if ( sequence == null )
210 {
211 throw new SequencesSystemException( this.getIllegalArgumentMessage( this.getLocale(), "sequence", null ) );
212 }
213
214 SequenceType sequenceType = this.getSequenceType( name );
215
216 if ( sequenceType == null )
217 {
218 throw new SequenceNotFoundException( name );
219 }
220 if ( sequenceType.getRevision() != revision )
221 {
222 throw new ConcurrentModificationException(
223 this.getSequenceMapper().map( sequenceType, new Sequence() ) );
224
225 }
226
227 final Sequence oldValue = this.getSequenceMapper().map( sequenceType, new Sequence() );
228 this.fireVetoableSequenceChange( oldValue, sequence );
229
230 sequenceType = this.getSequenceMapper().map( sequence, sequenceType );
231 sequenceType.setRevision( sequenceType.getRevision() + 1L );
232 sequenceType.setJpaDate( Calendar.getInstance() );
233 this.getEntityManager().merge( sequenceType );
234
235 final Sequence edited = this.getSequenceMapper().map( sequenceType, new Sequence() );
236 this.fireSequenceChange( oldValue, edited );
237 return edited;
238 }
239
240 public Sequence deleteSequence( final String name, final long revision )
241 {
242 if ( name == null )
243 {
244 throw new SequencesSystemException( this.getIllegalArgumentMessage( this.getLocale(), "name", null ) );
245 }
246
247 final SequenceType sequenceType = this.getSequenceType( name );
248
249 if ( sequenceType == null )
250 {
251 throw new SequenceNotFoundException( name );
252 }
253 if ( sequenceType.getRevision() != revision )
254 {
255 throw new ConcurrentModificationException(
256 this.getSequenceMapper().map( sequenceType, new Sequence() ) );
257
258 }
259
260 final Sequence deleted = this.getSequenceMapper().map( sequenceType, new Sequence() );
261 this.fireVetoableSequenceChange( deleted, null );
262
263 final SequencesType sequences = this.getSequencesType( this.getSequenceDirectoryName() );
264 sequences.getSequence().remove( sequenceType );
265 this.getEntityManager().remove( sequenceType );
266
267 if ( sequences.getSequence().isEmpty() )
268 {
269 this.getEntityManager().remove( sequences );
270 }
271 else
272 {
273 this.getEntityManager().merge( sequences );
274 }
275
276 final Sequence s = this.getSequenceMapper().map( sequenceType, new Sequence() );
277 this.fireSequenceChange( s, null );
278 return deleted;
279 }
280
281 public Set<Sequence> searchSequences( final String name )
282 {
283 final Query query = name == null ? this.getSelectAllSequencesQuery() : this.getSelectSequencesQuery();
284 query.setParameter( this.getSequenceDirectoryNameQueryParameterName(),
285 this.getSequencesType( this.getSequenceDirectoryName() ).getName() );
286
287 if ( name != null )
288 {
289 query.setParameter( this.getSequenceNameQueryParameterName(), name );
290 }
291
292 final List<SequenceType> resultList = (List<SequenceType>) query.getResultList();
293 final Set<Sequence> sequences = new HashSet<Sequence>( resultList.size() );
294
295 for ( SequenceType s : resultList )
296 {
297 sequences.add( this.getSequenceMapper().map( s, new Sequence() ) );
298 }
299
300 return sequences;
301 }
302
303 // SECTION-END
304 // SECTION-START[SequenceOperations]
305 public long getNextSequenceValue( final String sequenceName )
306 {
307 if ( sequenceName == null )
308 {
309 throw new SequencesSystemException( this.getIllegalArgumentMessage(
310 this.getLocale(), "sequenceName", null ) );
311
312 }
313
314 final SequenceType sequenceType = this.getSequenceType( sequenceName );
315
316 if ( sequenceType == null )
317 {
318 throw new SequenceNotFoundException( sequenceName );
319 }
320
321 final Sequence oldValue = this.getSequenceMapper().map( sequenceType, new Sequence() );
322 final Long nextValue = sequenceType.getValue() + sequenceType.getIncrement();
323
324 if ( nextValue < sequenceType.getValue() || nextValue > sequenceType.getMaximum() )
325 {
326 throw new SequenceLimitException( sequenceType.getValue() );
327 }
328
329 sequenceType.setValue( nextValue );
330 sequenceType.setRevision( sequenceType.getRevision() + 1L );
331 sequenceType.setJpaDate( Calendar.getInstance() );
332
333 this.getEntityManager().merge( sequenceType );
334
335 final Sequence s = this.getSequenceMapper().map( sequenceType, new Sequence() );
336 this.fireSequenceChange( oldValue, s );
337 return s.getValue();
338 }
339
340 public long[] getNextSequenceValues( final String sequenceName, final int numValues )
341 {
342 if ( sequenceName == null )
343 {
344 throw new SequencesSystemException( this.getIllegalArgumentMessage(
345 this.getLocale(), "sequenceName", null ) );
346
347 }
348 if ( numValues < 0 )
349 {
350 throw new SequencesSystemException( this.getIllegalArgumentMessage(
351 this.getLocale(), "numValues", Integer.toString( numValues ) ) );
352
353 }
354
355 final SequenceType sequenceType = this.getSequenceType( sequenceName );
356
357 if ( sequenceType == null )
358 {
359 throw new SequenceNotFoundException( sequenceName );
360 }
361
362 final long[] values = new long[ numValues ];
363 final Sequence oldValue = this.getSequenceMapper().map( sequenceType, new Sequence() );
364
365 for ( int i = values.length - 1; i >= 0; i-- )
366 {
367 final long nextValue = sequenceType.getValue() + sequenceType.getIncrement();
368
369 if ( nextValue < sequenceType.getValue() || nextValue > sequenceType.getMaximum() )
370 {
371 throw new SequenceLimitException( sequenceType.getValue() );
372 }
373
374 sequenceType.setValue( nextValue );
375 values[i] = nextValue;
376 }
377
378 sequenceType.setRevision( sequenceType.getRevision() + 1L );
379 sequenceType.setJpaDate( Calendar.getInstance() );
380
381 this.getEntityManager().merge( sequenceType );
382
383 final Sequence s = this.getSequenceMapper().map( sequenceType, new Sequence() );
384 this.fireSequenceChange( oldValue, s );
385 return values;
386 }
387
388 // SECTION-END
389 // SECTION-START[DefaultSequenceDirectory]
390 /**
391 * Gets a sequence entity for a given name.
392 *
393 * @param name The name of the sequence entity to return.
394 *
395 * @return The sequence entity with name {@code name}, or {@code null} if no sequence entity matching {@code name}
396 * is found.
397 */
398 protected SequenceType getSequenceType( final String name )
399 {
400 try
401 {
402 final Query query = this.getSelectSequenceQuery();
403 query.setParameter( this.getSequenceDirectoryNameQueryParameterName(),
404 this.getSequencesType( this.getSequenceDirectoryName() ).getName() );
405
406 query.setParameter( this.getSequenceNameQueryParameterName(), name );
407
408 return (SequenceType) query.getSingleResult();
409 }
410 catch ( final NoResultException e )
411 {
412 if ( this.getLogger().isDebugEnabled() )
413 {
414 this.getLogger().debug( e.getMessage() );
415 }
416
417 return null;
418 }
419 }
420
421 /**
422 * Gets a sequence directory entity for a given name.
423 *
424 * @param name The name of the sequence directory entity to return.
425 *
426 * @return The sequence directory entity matching {@code name}; if no such sequence directory entity is found, a
427 * new entity is created.
428 */
429 protected SequencesType getSequencesType( final String name )
430 {
431 final Query query = this.getSelectSequenceDirectoryQuery();
432 query.setParameter( this.getSequenceDirectoryNameQueryParameterName(), name );
433
434 SequencesType sequencesType = null;
435
436 try
437 {
438 sequencesType = (SequencesType) query.getSingleResult();
439 }
440 catch ( final NoResultException e )
441 {
442 if ( this.getLogger().isDebugEnabled() )
443 {
444 this.getLogger().debug( e.getMessage() );
445 }
446
447 sequencesType = new SequencesType();
448 sequencesType.setName( name );
449
450 BigInteger defaultCapacityLimit = sequencesType.getCapacityLimit();
451 if ( defaultCapacityLimit == null )
452 {
453 defaultCapacityLimit = this.getDefaultSequenceDirectoryCapacityLimit();
454 }
455
456 sequencesType.setCapacityLimit( defaultCapacityLimit );
457 sequencesType.setJpaDate( Calendar.getInstance() );
458
459 this.getEntityManager().persist( sequencesType );
460
461 if ( this.getLogger().isInfoEnabled() )
462 {
463 this.getLogger().info( this.getSuccessfullyCreatedSequenceDirectoryMessage( this.getLocale(), name ) );
464 }
465 }
466
467 return sequencesType;
468 }
469
470 /**
471 * Notifies all available {@code SequenceChangeListener}s about a changed sequence.
472 *
473 * @param oldValue The entity having been changed or {@code null} if {@code newValue} got added to the directory.
474 * @param newValue The value {@code oldValue} got changed to or {@code null} if {@code oldValue} got removed from
475 * the directory.
476 */
477 protected void fireSequenceChange( final Sequence oldValue, final Sequence newValue )
478 {
479 SequenceChangeEvent sequenceChange = null;
480 for ( SequenceChangeListener l : this.getSequenceChangeListener() )
481 {
482 if ( sequenceChange == null )
483 {
484 sequenceChange = new SequenceChangeEvent( this, oldValue, newValue );
485 }
486
487 l.sequenceChange( sequenceChange );
488 }
489 }
490
491 /**
492 * Notifies all available {@code SequenceChangeListener}s about a sequence about to change.
493 *
494 * @param oldValue The entity about to change or {@code null} if {@code newValue} is about to be added to the
495 * directory.
496 * @param newValue The value {@code oldValue} will change to or {@code null} if {@code oldValue} will be removed
497 * from the directory.
498 *
499 * @throws SequenceVetoException if any available {@code SequenceChangeListener} chooses to veto the sequence
500 * change.
501 */
502 protected void fireVetoableSequenceChange( final Sequence oldValue, final Sequence newValue )
503 {
504 SequenceChangeEvent sequenceChange = null;
505 boolean vetoed = false;
506
507 for ( VetoableSequenceChangeListener l : this.getVetoableSequenceChangeListener() )
508 {
509 if ( sequenceChange == null )
510 {
511 sequenceChange = new SequenceChangeEvent( this, oldValue, newValue );
512 }
513
514 try
515 {
516 l.vetoableSequenceChange( sequenceChange );
517 }
518 catch ( final SequenceVetoException e )
519 {
520 this.getLogger().error( e.getMessage() );
521 vetoed = true;
522 }
523 }
524
525 if ( vetoed )
526 {
527 throw new SequenceVetoException( sequenceChange );
528 }
529 }
530
531 // SECTION-END
532 // SECTION-START[Constructors]
533 // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
534
535 /** Creates a new {@code DefaultSequenceDirectory} instance. */
536 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
537 public DefaultSequenceDirectory()
538 {
539 // SECTION-START[Default Constructor]
540 super();
541 // SECTION-END
542 }
543 // </editor-fold>
544 // SECTION-END
545 // SECTION-START[Dependencies]
546 // <editor-fold defaultstate="collapsed" desc=" Generated Dependencies ">
547
548 /**
549 * Gets the {@code EntityManager} dependency.
550 * <p>This method returns the {@code 'JOMC SDK JPA'} object of the {@code 'javax.persistence.EntityManager'} {@code (javax.persistence.EntityManager)} specification.</p>
551 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
552 * @return The {@code EntityManager} dependency.
553 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
554 */
555 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
556 private javax.persistence.EntityManager getEntityManager()
557 {
558 final javax.persistence.EntityManager _d = (javax.persistence.EntityManager) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "EntityManager" );
559 assert _d != null : "'EntityManager' dependency not found.";
560 return _d;
561 }
562
563 /**
564 * Gets the {@code Locale} dependency.
565 * <p>This method returns the {@code 'default'} object of the {@code 'java.util.Locale'} {@code (java.util.Locale)} specification at specification level 1.1.</p>
566 * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
567 * @return The {@code Locale} dependency.
568 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
569 */
570 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
571 private java.util.Locale getLocale()
572 {
573 final java.util.Locale _d = (java.util.Locale) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Locale" );
574 assert _d != null : "'Locale' dependency not found.";
575 return _d;
576 }
577
578 /**
579 * Gets the {@code Logger} dependency.
580 * <p>This method returns any available object of the {@code 'org.jomc.logging.Logger'} {@code (org.jomc.logging.Logger)} specification at specification level 1.0.</p>
581 * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
582 * <p><b>Properties</b><dl>
583 * <dt>"{@code name}"</dt>
584 * <dd>Property of type {@code java.lang.String}.
585 * </dd>
586 * </dl>
587 * @return The {@code Logger} dependency.
588 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
589 */
590 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
591 private org.jomc.logging.Logger getLogger()
592 {
593 final org.jomc.logging.Logger _d = (org.jomc.logging.Logger) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Logger" );
594 assert _d != null : "'Logger' dependency not found.";
595 return _d;
596 }
597
598 /**
599 * Gets the {@code SelectAllSequencesQuery} dependency.
600 * <p>This method returns the {@code 'JOMC Sequences Model - Select All Sequences Query'} object of the {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)} specification.</p>
601 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
602 * @return The {@code SelectAllSequencesQuery} dependency.
603 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
604 */
605 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
606 private javax.persistence.Query getSelectAllSequencesQuery()
607 {
608 final javax.persistence.Query _d = (javax.persistence.Query) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectAllSequencesQuery" );
609 assert _d != null : "'SelectAllSequencesQuery' dependency not found.";
610 return _d;
611 }
612
613 /**
614 * Gets the {@code SelectSequenceCountQuery} dependency.
615 * <p>This method returns the {@code 'JOMC Sequences Model - Select Sequence Count Query'} object of the {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)} specification.</p>
616 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
617 * @return The {@code SelectSequenceCountQuery} dependency.
618 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
619 */
620 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
621 private javax.persistence.Query getSelectSequenceCountQuery()
622 {
623 final javax.persistence.Query _d = (javax.persistence.Query) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectSequenceCountQuery" );
624 assert _d != null : "'SelectSequenceCountQuery' dependency not found.";
625 return _d;
626 }
627
628 /**
629 * Gets the {@code SelectSequenceDirectoryQuery} dependency.
630 * <p>This method returns the {@code 'JOMC Sequences Model - Select Sequence Directory Query'} object of the {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)} specification.</p>
631 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
632 * @return The {@code SelectSequenceDirectoryQuery} dependency.
633 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
634 */
635 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
636 private javax.persistence.Query getSelectSequenceDirectoryQuery()
637 {
638 final javax.persistence.Query _d = (javax.persistence.Query) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectSequenceDirectoryQuery" );
639 assert _d != null : "'SelectSequenceDirectoryQuery' dependency not found.";
640 return _d;
641 }
642
643 /**
644 * Gets the {@code SelectSequenceQuery} dependency.
645 * <p>This method returns the {@code 'JOMC Sequences Model - Select Sequence Query'} object of the {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)} specification.</p>
646 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
647 * @return The {@code SelectSequenceQuery} dependency.
648 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
649 */
650 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
651 private javax.persistence.Query getSelectSequenceQuery()
652 {
653 final javax.persistence.Query _d = (javax.persistence.Query) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectSequenceQuery" );
654 assert _d != null : "'SelectSequenceQuery' dependency not found.";
655 return _d;
656 }
657
658 /**
659 * Gets the {@code SelectSequencesQuery} dependency.
660 * <p>This method returns the {@code 'JOMC Sequences Model - Select Sequences Query'} object of the {@code 'javax.persistence.Query'} {@code (javax.persistence.Query)} specification.</p>
661 * <p>That specification does not apply to any scope. A new object is returned whenever requested.</p>
662 * @return The {@code SelectSequencesQuery} dependency.
663 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
664 */
665 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
666 private javax.persistence.Query getSelectSequencesQuery()
667 {
668 final javax.persistence.Query _d = (javax.persistence.Query) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectSequencesQuery" );
669 assert _d != null : "'SelectSequencesQuery' dependency not found.";
670 return _d;
671 }
672
673 /**
674 * Gets the {@code SequenceChangeListener} dependency.
675 * <p>This method returns any available object of the {@code 'org.jomc.sequences.SequenceChangeListener'} {@code (org.jomc.sequences.SequenceChangeListener)} specification at specification level 1.0.</p>
676 * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
677 * @return The {@code SequenceChangeListener} dependency.
678 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
679 */
680 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
681 private org.jomc.sequences.SequenceChangeListener[] getSequenceChangeListener()
682 {
683 final org.jomc.sequences.SequenceChangeListener[] _d = (org.jomc.sequences.SequenceChangeListener[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SequenceChangeListener" );
684 assert _d != null : "'SequenceChangeListener' dependency not found.";
685 return _d;
686 }
687
688 /**
689 * Gets the {@code SequenceMapper} dependency.
690 * <p>This method returns the {@code 'JOMC Sequences RI'} object of the {@code 'org.jomc.sequences.ri.SequenceMapper'} {@code (org.jomc.sequences.ri.SequenceMapper)} specification at specification level 1.0.</p>
691 * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
692 * @return The {@code SequenceMapper} dependency.
693 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
694 */
695 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
696 private org.jomc.sequences.ri.SequenceMapper getSequenceMapper()
697 {
698 final org.jomc.sequences.ri.SequenceMapper _d = (org.jomc.sequences.ri.SequenceMapper) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SequenceMapper" );
699 assert _d != null : "'SequenceMapper' dependency not found.";
700 return _d;
701 }
702
703 /**
704 * Gets the {@code VetoableSequenceChangeListener} dependency.
705 * <p>This method returns any available object of the {@code 'org.jomc.sequences.VetoableSequenceChangeListener'} {@code (org.jomc.sequences.VetoableSequenceChangeListener)} specification at specification level 1.0.</p>
706 * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
707 * @return The {@code VetoableSequenceChangeListener} dependency.
708 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
709 */
710 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
711 private org.jomc.sequences.VetoableSequenceChangeListener[] getVetoableSequenceChangeListener()
712 {
713 final org.jomc.sequences.VetoableSequenceChangeListener[] _d = (org.jomc.sequences.VetoableSequenceChangeListener[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "VetoableSequenceChangeListener" );
714 assert _d != null : "'VetoableSequenceChangeListener' dependency not found.";
715 return _d;
716 }
717 // </editor-fold>
718 // SECTION-END
719 // SECTION-START[Properties]
720 // <editor-fold defaultstate="collapsed" desc=" Generated Properties ">
721
722 /**
723 * Gets the value of the {@code defaultSequenceDirectoryCapacityLimit} property.
724 * @return Default capacity limit when creating new sequence directory entities and no default value is provided otherwise.
725 * @throws org.jomc.ObjectManagementException if getting the property instance fails.
726 */
727 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
728 private java.math.BigInteger getDefaultSequenceDirectoryCapacityLimit()
729 {
730 final java.math.BigInteger _p = (java.math.BigInteger) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "defaultSequenceDirectoryCapacityLimit" );
731 assert _p != null : "'defaultSequenceDirectoryCapacityLimit' property not found.";
732 return _p;
733 }
734
735 /**
736 * Gets the value of the {@code sequenceDirectoryName} property.
737 * @return Name uniquely identifying the directory in a set of directories.
738 * @throws org.jomc.ObjectManagementException if getting the property instance fails.
739 */
740 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
741 private java.lang.String getSequenceDirectoryName()
742 {
743 final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "sequenceDirectoryName" );
744 assert _p != null : "'sequenceDirectoryName' property not found.";
745 return _p;
746 }
747
748 /**
749 * Gets the value of the {@code sequenceDirectoryNameQueryParameterName} property.
750 * @return Name of a JPA query parameter denoting the name of a sequence directory entity.
751 * @throws org.jomc.ObjectManagementException if getting the property instance fails.
752 */
753 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
754 private java.lang.String getSequenceDirectoryNameQueryParameterName()
755 {
756 final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "sequenceDirectoryNameQueryParameterName" );
757 assert _p != null : "'sequenceDirectoryNameQueryParameterName' property not found.";
758 return _p;
759 }
760
761 /**
762 * Gets the value of the {@code sequenceNameQueryParameterName} property.
763 * @return Name of a JPA query parameter denoting the name of a sequence entity.
764 * @throws org.jomc.ObjectManagementException if getting the property instance fails.
765 */
766 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
767 private java.lang.String getSequenceNameQueryParameterName()
768 {
769 final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "sequenceNameQueryParameterName" );
770 assert _p != null : "'sequenceNameQueryParameterName' property not found.";
771 return _p;
772 }
773 // </editor-fold>
774 // SECTION-END
775 // SECTION-START[Messages]
776 // <editor-fold defaultstate="collapsed" desc=" Generated Messages ">
777
778 /**
779 * Gets the text of the {@code illegalArgumentMessage} message.
780 * <p><b>Templates</b><br/><table>
781 * <tr><td valign="top">English:</td><td valign="top"><pre>Illegal value ''{1}'' for argument ''{0}''.</pre></td></tr>
782 * <tr><td valign="top">Deutsch:</td><td valign="top"><pre>Ungültiger Wert ''{1}'' für Parameter ''{0}''.</pre></td></tr>
783 * </table></p>
784 * @param locale The locale of the message to return.
785 * @param argumentName Format argument.
786 * @param argumentValue Format argument.
787 * @return The text of the {@code illegalArgumentMessage} message.
788 *
789 * @throws org.jomc.ObjectManagementException if getting the message instance fails.
790 */
791 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
792 private String getIllegalArgumentMessage( final java.util.Locale locale, final java.lang.String argumentName, final java.lang.String argumentValue )
793 {
794 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "illegalArgumentMessage", locale, argumentName, argumentValue );
795 assert _m != null : "'illegalArgumentMessage' message not found.";
796 return _m;
797 }
798
799 /**
800 * Gets the text of the {@code successfullyCreatedSequenceDirectoryMessage} message.
801 * <p><b>Templates</b><br/><table>
802 * <tr><td valign="top">English:</td><td valign="top"><pre>Sequence directory ''{0}'' created.</pre></td></tr>
803 * <tr><td valign="top">Deutsch:</td><td valign="top"><pre>Sequenzverzeichnis ''{0}'' erstellt.</pre></td></tr>
804 * </table></p>
805 * @param locale The locale of the message to return.
806 * @param name Format argument.
807 * @return The text of the {@code successfullyCreatedSequenceDirectoryMessage} message.
808 *
809 * @throws org.jomc.ObjectManagementException if getting the message instance fails.
810 */
811 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
812 private String getSuccessfullyCreatedSequenceDirectoryMessage( final java.util.Locale locale, final java.lang.String name )
813 {
814 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "successfullyCreatedSequenceDirectoryMessage", locale, name );
815 assert _m != null : "'successfullyCreatedSequenceDirectoryMessage' message not found.";
816 return _m;
817 }
818 // </editor-fold>
819 // SECTION-END
820 }