1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 package org.jomc.sequences.ri;
38
39 import java.math.BigInteger;
40 import java.util.Calendar;
41 import java.util.HashSet;
42 import java.util.List;
43 import java.util.Set;
44 import javax.persistence.NoResultException;
45 import javax.persistence.Query;
46 import org.jomc.sequences.CapacityLimitException;
47 import org.jomc.sequences.ConcurrentModificationException;
48 import org.jomc.sequences.SequenceExistsException;
49 import org.jomc.sequences.SequenceVetoException;
50 import org.jomc.sequences.Sequence;
51 import org.jomc.sequences.SequenceChangeEvent;
52 import org.jomc.sequences.SequenceChangeListener;
53 import org.jomc.sequences.SequenceDirectory;
54 import org.jomc.sequences.SequenceLimitException;
55 import org.jomc.sequences.SequenceNotFoundException;
56 import org.jomc.sequences.SequenceOperations;
57 import org.jomc.sequences.SequencesSystemException;
58 import org.jomc.sequences.VetoableSequenceChangeListener;
59 import org.jomc.sequences.model.SequenceType;
60 import org.jomc.sequences.model.SequencesType;
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
131
132
133 public class DefaultSequenceDirectory
134 implements SequenceDirectory, SequenceOperations
135 {
136
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
304
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
389
390
391
392
393
394
395
396
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
423
424
425
426
427
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
472
473
474
475
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
493
494
495
496
497
498
499
500
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
532
533
534
535
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
540 super();
541
542 }
543
544
545
546
547
548
549
550
551
552
553
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
565
566
567
568
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
580
581
582
583
584
585
586
587
588
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
600
601
602
603
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
615
616
617
618
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
630
631
632
633
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
645
646
647
648
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
660
661
662
663
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
675
676
677
678
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
690
691
692
693
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
705
706
707
708
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
718
719
720
721
722
723
724
725
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
737
738
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
750
751
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
763
764
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
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
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
801
802
803
804
805
806
807
808
809
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
819
820 }