1 23 package org.objectweb.jorm.mapper.rdb.metainfo; 24 25 import org.objectweb.jorm.api.PException; 26 import org.objectweb.jorm.metainfo.api.MetaObject; 27 import org.objectweb.jorm.metainfo.api.PrimitiveElement; 28 import org.objectweb.jorm.metainfo.lib.BasicMetaObject; 29 import org.objectweb.medor.expression.api.Expression; 30 import org.objectweb.medor.expression.api.Operand; 31 import org.objectweb.medor.expression.api.Operator; 32 import org.objectweb.medor.expression.lib.BasicOperand; 33 import org.objectweb.medor.expression.lib.BasicParameterOperand; 34 import org.objectweb.medor.expression.lib.Equal; 35 import org.objectweb.util.monolog.api.BasicLevel; 36 37 import java.util.HashMap ; 38 39 public class RdbFilter extends BasicMetaObject { 40 41 46 48 52 HashMap filteringElements = null; 53 54 57 private String stringExp = null; 58 59 62 private Expression exp = null; 63 64 72 public RdbFilter(MetaObject parent) { 73 super(parent); 74 filteringElements = new HashMap (); 75 } 76 77 82 public boolean isFilter(PrimitiveElement pe) { 83 logger.log(BasicLevel.DEBUG, "Looking whether PrimitiveElement " + pe.getName() + " is in the filter"); 84 return filteringElements.containsKey(pe.getName()); 85 } 86 87 94 public String getEqualPredicateValue(String elementName) throws PException { 95 String predValue = (String ) filteringElements.get(elementName); 96 if (predValue == null) { 97 throw new PException("No fixed value can be given for this PrimitiveElement " + 98 elementName + " although it is a hidden filter field!"); 99 } 100 return predValue; 101 } 102 103 public void setExpression(Expression e) { 104 exp = e; 105 108 addElementsToFilter(e); 109 } 110 111 private void addElementsToFilter(Expression e) { 112 if (e instanceof BasicParameterOperand) { 113 filteringElements.put(((BasicParameterOperand) e).getName(), null); 114 } else if (e instanceof Operand) { 115 } else if (e instanceof Equal) { 117 Equal eq = (Equal) e; 118 Expression eq0 = eq.getExpression(0); 119 Expression eq1 = eq.getExpression(1); 120 if (eq0 instanceof BasicParameterOperand) { 121 if (eq1 instanceof BasicOperand) { 122 filteringElements.put( 123 ((BasicParameterOperand) eq0).getName(), 124 ((BasicOperand) eq1).getObject() 125 ); 126 } else { 127 filteringElements.put(((BasicParameterOperand) eq0).getName(), null); 128 addElementsToFilter(eq1); 129 } 130 } else if (eq1 instanceof BasicParameterOperand) { 131 if (eq0 instanceof BasicOperand) { 132 filteringElements.put( 133 ((BasicParameterOperand) eq1).getName(), 134 ((BasicOperand) eq0).getObject() 135 ); 136 } else { 137 filteringElements.put(((BasicParameterOperand) eq1).getName(), null); 138 addElementsToFilter(eq0); 139 } 140 } else { 141 addElementsToFilter(eq.getExpression(0)); 142 addElementsToFilter(eq.getExpression(1)); 143 } 144 } else if (e instanceof Operator) { 145 Operator op = (Operator) e; 146 for (int i = 0; i < op.getOperandNumber(); i++) { 147 addElementsToFilter(op.getExpression(i)); 148 } 149 } 150 } 151 152 public Expression getExpression() { 153 return exp; 154 } 155 156 public void setStringExpression(String e) { 157 stringExp = e; 158 } 159 160 public String getStringExpression() { 161 return stringExp; 162 } 163 } 164 | Popular Tags |