001/*
002 * Copyright (c) 2003-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: welker $'
006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 
007 * '$Revision: 24234 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.objectmanager.data.db;
031
032import java.util.Vector;
033
034/**
035 * Simple Implementation of the DSTableKeyIFace<br>
036 * A key can be made up of more than one field
037 */
038public class DSTableKeyDef implements DSTableKeyIFace {
039        protected Vector mFields = new Vector();
040        protected DSTableDef mTable = null;
041        protected Vector mMissingValueCode = new Vector();
042
043        /**
044         * Default Constructor
045         * 
046         */
047        public DSTableKeyDef() {
048        }
049
050        /**
051         * Adds a DSTableFieldDef object to the Key
052         * 
053         * @param aFieldDef
054         *            Object to be added
055         */
056        public void add(DSTableFieldDef aFieldDef) {
057                // aFieldDef.setIsKey(true);
058                mFields.add(aFieldDef);
059        }
060
061        /**
062         * Get Vector of DSTableFieldDef objects
063         * 
064         * @return vector
065         */
066        public Vector getFields() {
067                return mFields;
068        }
069
070        /**
071         * Returns one or more names. A single name for a single field or key.
072         * Multiple names for a key with multiple fields
073         * 
074         * @return String of type in format "XXXX, XXXX, XXXX"
075         */
076        public String getName() {
077                StringBuffer name = new StringBuffer();
078                for (int i = 0; i < mFields.size(); i++) {
079                        if (i > 0)
080                                name.append(", ");
081                        name.append(((DSTableFieldDef) mFields.elementAt(i)).getName());
082                }
083                return name.toString();
084        }
085
086        /**
087         * Passes back one or more types in human readable string may want to change
088         * this to an array of type or a vector
089         * 
090         * @return String of type in format "XXXX, XXXX, XXXX"
091         */
092        public String getDataType() {
093                StringBuffer name = new StringBuffer();
094                for (int i = 0; i < mFields.size(); i++) {
095                        if (i > 0)
096                                name.append(", ");
097                        name.append(((DSTableFieldDef) mFields.elementAt(i)).getDataType());
098                }
099                return name.toString();
100        }
101
102        /**
103         * @return Returns the mKeyType.
104         */
105        public int getKeyType() {
106                return DSTableKeyIFace.PRIMARYKEY;
107        }
108
109        /**
110         * Sets the Parent DSTableDef object
111         * 
112         * @param aTable
113         *            DSTableDef object
114         */
115        public void setTable(DSTableDef aTable) {
116                mTable = aTable;
117        }
118
119        /**
120         * Returns the table for the field
121         * 
122         * @return DSTableDef Object
123         */
124        public DSTableIFace getTable() {
125                return mTable;
126        }
127
128        /**
129         * Method to return the vector which store the missing value code. If this
130         * attribute doesn't has the missing value code, empty vector will be
131         * returned.
132         * 
133         *       */
134        public Vector getMissingValueCode() {
135                return mMissingValueCode;
136        }
137
138        /**
139         * Method to add missing value code into a vector. This method will be used
140         * to store the missing value code in metadata
141         * 
142         * @param code
143         */
144        public void addMissingValueCode(String code) {
145                if (code != null) {
146                        mMissingValueCode.add(code);
147                }
148        }
149
150        /**
151         * Method to return the vector which store the missing value code. If this
152         * attribute doesn't has the missing value code, empty vector will be
153         * returned.
154         * 
155         *       */
156        public void setMissingValueCode(Vector missingValueVector) {
157                mMissingValueCode = missingValueVector;
158        }
159}