001    /*
002     * JBoss DNA (http://www.jboss.org/dna)
003     * See the COPYRIGHT.txt file distributed with this work for information
004     * regarding copyright ownership.  Some portions may be licensed
005     * to Red Hat, Inc. under one or more contributor license agreements.
006     * See the AUTHORS.txt file in the distribution for a full listing of 
007     * individual contributors. 
008     *
009     * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010     * is licensed to you under the terms of the GNU Lesser General Public License as
011     * published by the Free Software Foundation; either version 2.1 of
012     * the License, or (at your option) any later version.
013     *
014     * JBoss DNA is distributed in the hope that it will be useful,
015     * but WITHOUT ANY WARRANTY; without even the implied warranty of
016     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017     * Lesser General Public License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this software; if not, write to the Free
021     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023     */
024    package org.jboss.dna.common.jdbc.model.spi;
025    
026    import java.util.Set;
027    import java.util.HashSet;
028    import org.jboss.dna.common.jdbc.model.api.Index;
029    import org.jboss.dna.common.jdbc.model.api.IndexColumn;
030    import org.jboss.dna.common.jdbc.model.api.IndexType;
031    
032    /**
033     * Provides all database table's index specific metadata.
034     * 
035     * @author <a href="mailto:litsenko_sergey@yahoo.com">Sergiy Litsenko</a>
036     */
037    public class IndexBean extends SchemaObjectBean implements Index {
038        private static final long serialVersionUID = -1217601426100735909L;
039        private Set<IndexColumn> columns = new HashSet<IndexColumn>();
040        private Boolean unique;
041        private IndexType indexType;
042        private Integer cardinality;
043        private Integer pages;
044        private String filterCondition;
045    
046        /**
047         * Default constructor
048         */
049        public IndexBean() {
050        }
051    
052        /**
053         * Retrieves index columns
054         * 
055         * @return index columns
056         */
057        public Set<IndexColumn> getColumns() {
058            return columns;
059        }
060    
061        /**
062         * Adds IndexColumn
063         * 
064         * @param indexColumn the IndexColumn
065         */
066        public void addColumn( IndexColumn indexColumn ) {
067            columns.add(indexColumn);
068        }
069    
070        /**
071         * delete IndexColumn
072         * 
073         * @param indexColumn the IndexColumn
074         */
075        public void deleteColumn( IndexColumn indexColumn ) {
076            columns.remove(indexColumn);
077        }
078    
079        /**
080         * Returns index column for specified column name or null
081         * 
082         * @param columnName the name of column
083         * @return index column for specified column name or null.
084         */
085        public IndexColumn findColumnByName( String columnName ) {
086            for (IndexColumn ic : columns) {
087                if (ic.getName().equals(columnName)) {
088                    return ic;
089                }
090            }
091            // return nothing
092            return null;
093        }
094    
095        /**
096         * Can index values be non-unique. false when TYPE is tableIndexStatistic.
097         * 
098         * @return true if index values can be non-unique.
099         */
100        public Boolean isUnique() {
101            return unique;
102        }
103    
104        /**
105         * Can index values be non-unique. false when TYPE is tableIndexStatistic.
106         * 
107         * @param unique true if index values can be non-unique.
108         */
109        public void setUnique( Boolean unique ) {
110            this.unique = unique;
111        }
112    
113        /**
114         * Gets index type
115         * 
116         * @return index type
117         */
118        public IndexType getIndexType() {
119            return indexType;
120        }
121    
122        /**
123         * Sets index type
124         * 
125         * @param indexType index type
126         */
127        public void setIndexType( IndexType indexType ) {
128            this.indexType = indexType;
129        }
130    
131        /**
132         * When TYPE is tableIndexStatistic, then this is the number of rows in the table; otherwise, it is the number of unique
133         * values in the index.
134         * 
135         * @return the number of rows in the table if index type is STATISTICS; otherwise, the number of unique values in the index.
136         */
137        public Integer getCardinality() {
138            return cardinality;
139        }
140    
141        /**
142         * When TYPE is tableIndexStatistic, then this is the number of rows in the table; otherwise, it is the number of unique
143         * values in the index.
144         * 
145         * @param cardinality the number of rows in the table if index type is STATISTICS; otherwise, the number of unique values in
146         *        the index.
147         */
148        public void setCardinality( Integer cardinality ) {
149            this.cardinality = cardinality;
150        }
151    
152        /**
153         * When TYPE is tableIndexStatisic then this is the number of pages used for the table, otherwise it is the number of pages
154         * used for the current index.
155         * 
156         * @return the number of pages used for the table if index type is STATISTICS; otherwise the number of pages used for the
157         *         current index.
158         */
159        public Integer getPages() {
160            return pages;
161        }
162    
163        /**
164         * When TYPE is tableIndexStatisic then this is the number of pages used for the table, otherwise it is the number of pages
165         * used for the current index.
166         * 
167         * @param pages the number of pages used for the table if index type is STATISTICS; otherwise the number of pages used for the
168         *        current index.
169         */
170        public void setPages( Integer pages ) {
171            this.pages = pages;
172        }
173    
174        /**
175         * Returns the filter condition, if any. (may be null)
176         * 
177         * @return the filter condition, if any. (may be null)
178         */
179        public String getFilterCondition() {
180            return filterCondition;
181        }
182    
183        /**
184         * Sets the filter condition, if any. (may be null)
185         * 
186         * @param filterCondition the filter condition, if any. (may be null)
187         */
188        public void setFilterCondition( String filterCondition ) {
189            this.filterCondition = filterCondition;
190        }
191    }