View Javadoc
1   /*
2    *   Licensed to the Apache Software Foundation (ASF) under one
3    *   or more contributor license agreements.  See the NOTICE file
4    *   distributed with this work for additional information
5    *   regarding copyright ownership.  The ASF licenses this file
6    *   to you under the Apache License, Version 2.0 (the
7    *   "License"); you may not use this file except in compliance
8    *   with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *   Unless required by applicable law or agreed to in writing,
13   *   software distributed under the License is distributed on an
14   *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *   KIND, either express or implied.  See the License for the
16   *   specific language governing permissions and limitations
17   *   under the License.
18   *
19   */
20  
21  package org.apache.directory.api.ldap.extras.controls.ppolicy_impl;
22  
23  
24  import org.apache.directory.api.asn1.actions.CheckNotNullLength;
25  import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
26  import org.apache.directory.api.asn1.ber.grammar.Grammar;
27  import org.apache.directory.api.asn1.ber.grammar.GrammarTransition;
28  import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
29  
30  
31  /**
32   * Grammar for decoding PasswordPolicyResponseControl.
33   *
34   * PasswordPolicyResponseValue ::= SEQUENCE {
35   *         warning [0] CHOICE {
36   *         timeBeforeExpiration [0] INTEGER (0 .. maxInt),
37   *         graceAuthNsRemaining [1] INTEGER (0 .. maxInt) } OPTIONAL,
38   *         
39   *      error   [1] ENUMERATED {
40   *          passwordExpired             (0),
41   *          accountLocked               (1),
42   *          changeAfterReset            (2),
43   *          passwordModNotAllowed       (3),
44   *          mustSupplyOldPassword       (4),
45   *          insufficientPasswordQuality (5),
46   *          passwordTooShort            (6),
47   *          passwordTooYoung            (7),
48   *          passwordInHistory           (8) } OPTIONAL }
49   *          
50   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
51   */
52  public class PasswordPolicyGrammar extends AbstractGrammar<PasswordPolicyContainer>
53  {
54      /** PasswordPolicyResponseControlGrammar singleton instance */
55      private static final PasswordPolicyGrammar INSTANCE = new PasswordPolicyGrammar();
56  
57  
58      @SuppressWarnings("unchecked")
59      private PasswordPolicyGrammar()
60      {
61          setName( PasswordPolicyGrammar.class.getName() );
62  
63          super.transitions = new GrammarTransition[PasswordPolicyStates.END_STATE.ordinal()][256];
64  
65          // PasswordPolicyResponseValue ::= SEQUENCE {
66          // ...
67          super.transitions[PasswordPolicyStates.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition<PasswordPolicyContainer>(
68              PasswordPolicyStates.START_STATE, PasswordPolicyStates.PPOLICY_SEQ_STATE,
69              UniversalTag.SEQUENCE.getValue(),
70              new PPolicyInit() );
71  
72          // PasswordPolicyResponseValue ::= SEQUENCE {
73          //              warning [0] CHOICE {
74          super.transitions[PasswordPolicyStates.PPOLICY_SEQ_STATE.ordinal()][PasswordPolicyTags.PPOLICY_WARNING_TAG
75              .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
76              PasswordPolicyStates.PPOLICY_SEQ_STATE, PasswordPolicyStates.PPOLICY_WARNING_TAG_STATE,
77              PasswordPolicyTags.PPOLICY_WARNING_TAG.getValue(),
78              new CheckNotNullLength<PasswordPolicyContainer>() );
79  
80          // PasswordPolicyResponseValue ::= SEQUENCE {
81          //              ...
82          //              error   [1] ENUMERATED {
83          super.transitions[PasswordPolicyStates.PPOLICY_SEQ_STATE.ordinal()][PasswordPolicyTags.PPOLICY_ERROR_TAG
84              .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
85              PasswordPolicyStates.PPOLICY_SEQ_STATE, PasswordPolicyStates.PPOLICY_ERROR_TAG_STATE,
86              PasswordPolicyTags.PPOLICY_ERROR_TAG.getValue(),
87              new StoreError<PasswordPolicyContainer>() );
88  
89          // PasswordPolicyResponseValue ::= SEQUENCE {
90          //              warning [0] CHOICE {
91          //                      timeBeforeExpiration [0] INTEGER (0 .. maxInt),
92          super.transitions[PasswordPolicyStates.PPOLICY_WARNING_TAG_STATE.ordinal()][PasswordPolicyTags.TIME_BEFORE_EXPIRATION_TAG
93              .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
94              PasswordPolicyStates.PPOLICY_WARNING_TAG_STATE, PasswordPolicyStates.PPOLICY_TIME_BEFORE_EXPIRATION_STATE,
95              PasswordPolicyTags.TIME_BEFORE_EXPIRATION_TAG.getValue(),
96              new StoreTimeBeforeExpiration() );
97  
98          // PasswordPolicyResponseValue ::= SEQUENCE {
99          //              warning [0] CHOICE {
100         //                      ...
101         //                      graceAuthNsRemaining [1] INTEGER (0 .. maxInt) } OPTIONAL,
102         super.transitions[PasswordPolicyStates.PPOLICY_WARNING_TAG_STATE.ordinal()][PasswordPolicyTags.GRACE_AUTHNS_REMAINING_TAG
103             .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
104             PasswordPolicyStates.PPOLICY_WARNING_TAG_STATE, PasswordPolicyStates.PPOLICY_GRACE_AUTHNS_REMAINING_STATE,
105             PasswordPolicyTags.GRACE_AUTHNS_REMAINING_TAG.getValue(),
106             new StoreGraceAuthNRemaining() );
107 
108         // PasswordPolicyResponseValue ::= SEQUENCE {
109         //              ...
110         //              error   [1] ENUMERATED {
111         super.transitions[PasswordPolicyStates.PPOLICY_TIME_BEFORE_EXPIRATION_STATE.ordinal()][PasswordPolicyTags.PPOLICY_ERROR_TAG
112             .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
113             PasswordPolicyStates.PPOLICY_TIME_BEFORE_EXPIRATION_STATE, PasswordPolicyStates.PPOLICY_ERROR_TAG_STATE,
114             PasswordPolicyTags.PPOLICY_ERROR_TAG.getValue(),
115             new StoreError<PasswordPolicyContainer>() );
116 
117         // PasswordPolicyResponseValue ::= SEQUENCE {
118         //              ...
119         //              error   [1] ENUMERATED {
120         super.transitions[PasswordPolicyStates.PPOLICY_GRACE_AUTHNS_REMAINING_STATE.ordinal()][PasswordPolicyTags.GRACE_AUTHNS_REMAINING_TAG
121             .getValue()] = new GrammarTransition<PasswordPolicyContainer>(
122             PasswordPolicyStates.PPOLICY_GRACE_AUTHNS_REMAINING_STATE, PasswordPolicyStates.PPOLICY_ERROR_TAG_STATE,
123             PasswordPolicyTags.GRACE_AUTHNS_REMAINING_TAG.getValue(),
124             new StoreError<PasswordPolicyContainer>() );
125     }
126 
127 
128     public static Grammar<PasswordPolicyContainer> getInstance()
129     {
130         return INSTANCE;
131     }
132 }