001/*
002 *  Licensed to the Apache Software Foundation (ASF) under one
003 *  or more contributor license agreements.  See the NOTICE file
004 *  distributed with this work for additional information
005 *  regarding copyright ownership.  The ASF licenses this file
006 *  to you under the Apache License, Version 2.0 (the
007 *  "License"); you may not use this file except in compliance
008 *  with the License.  You may obtain a copy of the License at
009 *  
010 *    http://www.apache.org/licenses/LICENSE-2.0
011 *  
012 *  Unless required by applicable law or agreed to in writing,
013 *  software distributed under the License is distributed on an
014 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *  KIND, either express or implied.  See the License for the
016 *  specific language governing permissions and limitations
017 *  under the License. 
018 *  
019 */
020
021package org.apache.directory.api.ldap.trigger;
022
023
024import java.util.List;
025
026import org.apache.commons.lang.NullArgumentException;
027import org.apache.directory.api.i18n.I18n;
028
029
030/**
031 * The Trigger Specification Bean.
032 * 
033 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
034 */
035public class TriggerSpecification
036{
037
038    private LdapOperation ldapOperation;
039
040    private ActionTime actionTime;
041
042    private List<SPSpec> spSpecs;
043
044
045    /**
046     * Instantiates a new trigger specification.
047     *
048     * @param ldapOperation the LDAP operation
049     * @param actionTime the action time
050     * @param spSpecs the stored procedure specs
051     */
052    public TriggerSpecification( LdapOperation ldapOperation, ActionTime actionTime, List<SPSpec> spSpecs )
053    {
054        super();
055        if ( ldapOperation == null
056            || actionTime == null
057            || spSpecs == null )
058        {
059            throw new NullArgumentException( I18n.err( I18n.ERR_04331 ) );
060        }
061        if ( spSpecs.size() == 0 )
062        {
063            throw new IllegalArgumentException( I18n.err( I18n.ERR_04332 ) );
064        }
065        this.ldapOperation = ldapOperation;
066        this.actionTime = actionTime;
067        this.spSpecs = spSpecs;
068    }
069
070
071    /**
072     * Gets the action time.
073     *
074     * @return the action time
075     */
076    public ActionTime getActionTime()
077    {
078        return actionTime;
079    }
080
081
082    /**
083     * Gets the LDAP operation.
084     *
085     * @return the LDAP operation
086     */
087    public LdapOperation getLdapOperation()
088    {
089        return ldapOperation;
090    }
091
092
093    /**
094     * Gets the stored procedure specs.
095     *
096     * @return the stored procedure specs
097     */
098    public List<SPSpec> getSPSpecs()
099    {
100        return spSpecs;
101    }
102
103    /**
104     * The stored procedure spec bean.
105     */
106    public static class SPSpec
107    {
108        private String name;
109
110        private List<StoredProcedureOption> options;
111
112        private List<StoredProcedureParameter> parameters;
113
114
115        /**
116         * Instantiates a new stored procedure spec.
117         *
118         * @param name the name
119         * @param options the options
120         * @param parameters the parameters
121         */
122        public SPSpec( String name, List<StoredProcedureOption> options, List<StoredProcedureParameter> parameters )
123        {
124            super();
125            this.name = name;
126            this.options = options;
127            this.parameters = parameters;
128        }
129
130
131        /**
132         * Gets the name.
133         *
134         * @return the name
135         */
136        public String getName()
137        {
138            return name;
139        }
140
141
142        /**
143         * Gets the options.
144         *
145         * @return the options
146         */
147        public List<StoredProcedureOption> getOptions()
148        {
149            return options;
150        }
151
152
153        /**
154         * Gets the parameters.
155         *
156         * @return the parameters
157         */
158        public List<StoredProcedureParameter> getParameters()
159        {
160            return parameters;
161        }
162
163
164        /**
165         * {@inheritDoc}
166         */
167        @Override
168        public int hashCode()
169        {
170            int h = 37;
171
172            h = h * 17 + ( ( name == null ) ? 0 : name.hashCode() );
173            h = h * 17 + ( ( options == null ) ? 0 : options.hashCode() );
174            h = h * 17 + ( ( parameters == null ) ? 0 : parameters.hashCode() );
175            return h;
176        }
177
178
179        /**
180         * {@inheritDoc}
181         */
182        @Override
183        public boolean equals( Object obj )
184        {
185            if ( this == obj )
186            {
187                return true;
188            }
189            if ( obj == null )
190            {
191                return false;
192            }
193            if ( getClass() != obj.getClass() )
194            {
195                return false;
196            }
197            final SPSpec other = ( SPSpec ) obj;
198            if ( name == null )
199            {
200                if ( other.name != null )
201                {
202                    return false;
203                }
204            }
205            else if ( !name.equals( other.name ) )
206            {
207                return false;
208            }
209            if ( options == null )
210            {
211                if ( other.options != null )
212                {
213                    return false;
214                }
215            }
216            else if ( !options.equals( other.options ) )
217            {
218                return false;
219            }
220            if ( parameters == null )
221            {
222                if ( other.parameters != null )
223                {
224                    return false;
225                }
226            }
227            else if ( !parameters.equals( other.parameters ) )
228            {
229                return false;
230            }
231            return true;
232        }
233
234    }
235
236}