/* This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, see http://www.gnu.org/licenses or write to the Free Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ package com.servoy.j2db.scripting.solutionmodel; import org.mozilla.javascript.annotations.JSGetter; import org.mozilla.javascript.annotations.JSSetter; import com.servoy.j2db.documentation.ServoyDocumented; import com.servoy.j2db.persistence.LiteralDataprovider; import com.servoy.j2db.persistence.RelationItem; import com.servoy.j2db.scripting.IConstantsObject; import com.servoy.j2db.scripting.IJavaScriptType; import com.servoy.j2db.scripting.IReturnedTypesProvider; import com.servoy.j2db.scripting.ScriptObjectRegistry; import com.servoy.j2db.solutionmodel.ISMRelationItem; import com.servoy.j2db.util.Utils; /** * @author jcompagner */ @ServoyDocumented(category = ServoyDocumented.RUNTIME) public class JSRelationItem extends JSBase<RelationItem> implements IJavaScriptType, IConstantsObject, ISMRelationItem { static { ScriptObjectRegistry.registerReturnedTypesProviderForClass(JSRelationItem.class, new IReturnedTypesProvider() { public Class< ? >[] getAllReturnedTypes() { return new Class< ? >[] { JSRelationItem.class }; } }); } public JSRelationItem(RelationItem relationItem, JSRelation parent, boolean isNew) { super(parent, relationItem, isNew); } /** * @clonedesc com.servoy.j2db.persistence.RelationItem#getForeignColumnName() * * @sample * var relation = solutionModel.newRelation('parentToChild', 'db:/example_data/parent_table', 'db:/example_data/child_table', JSRelation.INNER_JOIN); * var criteria = relation.newRelationItem('parent_table_id', '=', 'child_table_parent_id'); * criteria.primaryDataProviderID = 'parent_table_text'; * criteria.foreignColumnName = 'child_table_text'; * criteria.operator = '<'; */ @JSGetter public String getForeignColumnName() { return getBaseComponent(false).getForeignColumnName(); } @JSSetter public void setForeignColumnName(String arg) { checkModification(); getBaseComponent(true).setForeignColumnName(arg); } /** * @clonedesc com.servoy.j2db.persistence.RelationItem#getOperator() * * @sampleas getForeignColumnName() */ @JSGetter public String getOperator() { return RelationItem.getOperatorAsString(getBaseComponent(false).getOperator()); } @JSSetter public void setOperator(String operator) { checkModification(); int validOperator = RelationItem.getValidOperator(operator, RelationItem.RELATION_OPERATORS, null); if (validOperator == -1) throw new IllegalArgumentException("Operator " + operator + " is not a valid relation operator"); //$NON-NLS-1$ //$NON-NLS-2$ getBaseComponent(true).setOperator(validOperator); } /** * @clonedesc com.servoy.j2db.persistence.RelationItem#getPrimaryDataProviderID() * * @sampleas getForeignColumnName() */ @JSGetter public String getPrimaryDataProviderID() { return getBaseComponent(false).getPrimaryDataProviderID(); } @JSSetter public void setPrimaryDataProviderID(String arg) { checkModification(); getBaseComponent(true).setPrimaryDataProviderID(arg); } /** * Get the literal. * * @sample * var relation = solutionModel.newRelation('parentToChild', 'db:/example_data/parent_table', 'db:/example_data/child_table', JSRelation.INNER_JOIN); * var criteria = relation.newRelationItem(JSRelationItem.LITERAL_PREFIX + "'hello'",'=', 'myTextField'); * criteria.primaryLiteral = 'literal_text'; * //criteria.primaryLiteral = number; * var primaryLiteral = criteria.primaryLiteral; * */ @JSGetter public Object getPrimaryLiteral() { String primaryLiteral = getPrimaryDataProviderID(); if (primaryLiteral.startsWith(LiteralDataprovider.LITERAL_PREFIX)) { return Utils.parseJSExpression(primaryLiteral.substring(LiteralDataprovider.LITERAL_PREFIX.length())); } return null; } @JSSetter public void setPrimaryLiteral(Object arg) { checkModification(); getBaseComponent(true).setPrimaryDataProviderID(LiteralDataprovider.LITERAL_PREFIX + Utils.makeJSExpression(arg)); } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "JSRelationItem[" + getBaseComponent(false).getPrimaryDataProviderID() + getOperator() + getBaseComponent(false).getForeignColumnName() + ']'; //$NON-NLS-1$ } }