001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.sql.framework.model;
043:
044: import java.util.Collection;
045: import java.util.List;
046:
047: import org.netbeans.modules.sql.framework.model.visitors.SQLVisitedObject;
048:
049: import com.sun.sql.framework.exception.BaseException;
050: import com.sun.sql.framework.utils.Attribute;
051:
052: /**
053: * This defines condition container for sql, which are defined at source table target
054: * table
055: *
056: * @author Ritesh Adval
057: */
058: public interface SQLCondition extends SQLContainerObject,
059: SQLVisitedObject {
060:
061: public static final String ATTR_CONTAINS_JAVA_OPERATORS = "containsJavaOperators";
062:
063: /** XML attribute name for display name */
064: public static final String DISPLAY_NAME = "displayName";
065:
066: /**
067: * GUI Mode Type II : Graphical
068: */
069: public static final int GUIMODE_GRAPHICAL = 2;
070:
071: /**
072: * GUI Mode Type I : Text Mode
073: */
074: public static final int GUIMODE_SQLCODE = 1;
075:
076: /**
077: * XML tag name for SQL Condition
078: */
079: public static final String TAG_CONDITION = "sqlCondition";
080:
081: public static final String TAG_SQLCODE = "sqlcode";
082:
083: /**
084: * Adds equality predicate to the condition. If a different predicate already exists
085: * then it is linked with "AND" predicator. Ex: 1) col = input 2) (T1.EMP_ID =
086: * S1.EMP_ID) AND (T1.LAST_NAME = S2.LAST_NAME)
087: *
088: * @param newInput
089: * @param col
090: * @throws com.sun.sql.framework.exception.BaseException
091: */
092: public void addEqualityPredicate(SQLObject newInput, SQLDBColumn col)
093: throws BaseException;
094:
095: /**
096: * Gets an Attribute based on its name
097: *
098: * @param attrName attribute Name
099: * @return Attribute instance associated with attrName, or null if none exists
100: */
101: public Attribute getAttribute(String attrName);
102:
103: /**
104: * Gets Collection of active attribute names.
105: *
106: * @return Collection of attribute names
107: */
108: public Collection getAttributeNames();
109:
110: /**
111: * Gets the object referenced by a named Attribute, if it exists.
112: *
113: * @param attrName attribute Name
114: * @return Object referenced by Attributed with name attrName, or null if none exists
115: */
116: public Object getAttributeValue(String attrName);
117:
118: /**
119: * get the condition sql text
120: *
121: * @return condition sql text
122: */
123: public String getConditionText();
124:
125: /**
126: * Get the condition sql text. Tries to construct Sql text from graphic model if the
127: * sql text is null or empty.
128: *
129: * @param constructIfEmpty
130: * @return condition sql text
131: */
132: public String getConditionText(boolean constructIfEmpty);
133:
134: /**
135: * Gets display name.
136: *
137: * @return current display name
138: */
139: public String getDisplayName();
140:
141: public GUIInfo getGUIInfo();
142:
143: /**
144: * get the gui mode
145: *
146: * @return gui mode
147: */
148: public int getGuiMode();
149:
150: public Object getParentObject();
151:
152: /**
153: * Returns list of Source or Target table columns used in the Condition expression.
154: *
155: * @return
156: */
157: public List getParticipatingColumns();
158:
159: public SQLPredicate getRootPredicate();
160:
161: /**
162: * check if there is some condition is defined, it may be invalid condition
163: *
164: * @return true if some form of condition exist
165: */
166: public boolean isConditionDefined();
167:
168: /**
169: * Check if a java operator is used in the model.
170: *
171: * @return true if a java operator is used.
172: */
173: public boolean isContainsJavaOperators();
174:
175: /**
176: * check if the object already exist
177: *
178: * @param obj
179: * @return true if object already exist
180: */
181: public SQLObject isObjectExist(SQLObject obj);
182:
183: /**
184: * is this condition a valid condition
185: *
186: * @return true if condition is valid
187: */
188: public boolean isValid();
189:
190: /**
191: * when a table is removed whose column are refered in this condition rhen we need to
192: * remove the column references
193: *
194: * @param column AbstractDBColumn
195: * @throws com.sun.sql.framework.exception.BaseException
196: */
197: public void removeDanglingColumnRef(SQLObject column)
198: throws BaseException;
199:
200: /**
201: * Removes equality operator "col = value" from the condition and any reference to it
202: * using "AND" operator.
203: *
204: * @param col
205: * @param victim
206: * @throws BaseException
207: */
208: public void removeEqualsPredicate(SQLDBColumn col, SQLObject victim)
209: throws BaseException;
210:
211: /**
212: * Removes the "targetColumn IS NULL" predicate from the target condition. Used when
213: * target table is outer joined with source/table view and SQL being generated for
214: * ANSI satndard FROM clause.
215: *
216: * @throws BaseException
217: */
218: public void replaceTargetColumnIsNullPredicate()
219: throws BaseException;
220:
221: /**
222: * Sets an attribute name-value pair. The name of the Attribute should be one of the
223: * String constants defined in this class.
224: *
225: * @param attrName attribute Name
226: * @param val value of the attribute
227: */
228: public void setAttribute(String attrName, Object val);
229:
230: /**
231: * set the condition text
232: *
233: * @param text condition text
234: */
235: public void setConditionText(String text);
236:
237: /**
238: * set it to true if a java operator is used in the model
239: *
240: * @param javaOp true if there is a java operator
241: */
242: public void setContainsJavaOperators(boolean javaOp);
243:
244: /**
245: * Sets display name to given value.
246: *
247: * @param newName new display name
248: */
249: public void setDisplayName(String newName);
250:
251: /**
252: * set the gui mode
253: *
254: * @param mode gui mode
255: */
256: public void setGuiMode(int mode);
257:
258: /**
259: * Validate SQL Condition and retuns list of Invalid Input Object
260: *
261: * @return List
262: */
263: public List validate();
264: }
|