1 23 24 package org.objectweb.medor.filter.jorm.lib; 25 26 import org.objectweb.jorm.naming.api.PNamingContext; 27 import org.objectweb.jorm.type.api.PType; 28 import org.objectweb.medor.api.MedorException; 29 import org.objectweb.medor.expression.api.ExpressionException; 30 import org.objectweb.medor.expression.api.MalformedExpressionException; 31 import org.objectweb.medor.expression.api.ParameterOperand; 32 import org.objectweb.medor.expression.api.TypingException; 33 import org.objectweb.medor.expression.api.Operand; 34 import org.objectweb.medor.filter.api.FieldOperand; 35 import org.objectweb.medor.expression.lib.BasicBinaryOperator; 36 import org.objectweb.medor.expression.lib.BasicVariableOperand; 37 import org.objectweb.medor.tuple.api.Tuple; 38 import org.objectweb.medor.type.lib.QTypeTuple; 39 40 import java.math.BigDecimal ; 41 import java.math.BigInteger ; 42 43 62 public class SinglePName extends BasicBinaryOperator { 63 64 72 public SinglePName(FieldOperand f, Operand pnc, PType nameType) { 73 super(nameType, f, pnc); 74 } 75 76 79 public Operand evaluate(ParameterOperand[] pos, Object t) 80 throws ExpressionException { 81 Tuple o = (Tuple) t; 82 expressions[1].evaluate(pos, o); 84 PNamingContext nc = 86 (PNamingContext) ((Operand) expressions[1]).getObject(); 87 if (result == null) 88 result = new BasicVariableOperand(type); 89 PType fieldType = ((FieldOperand) expressions[0]).getField().getType(); 90 int i = ((FieldOperand) expressions[0]).getIndex(); 91 try { 92 switch (fieldType.getTypeCode()) { 93 case QTypeTuple.TYPECODE_BYTE: 94 if (!o.isDefined(i)) { 95 result.setValue(nc.getNull()); 96 } else { 97 result.setValue(nc.decodeByte(o.getByte(i))); 98 } 99 break; 100 case QTypeTuple.TYPECODE_CHAR: 101 if (!o.isDefined(i)) { 102 result.setValue(nc.getNull()); 103 } else { 104 result.setValue(nc.decodeChar(o.getChar(i))); 105 } 106 break; 107 case QTypeTuple.TYPECODE_DATE: 108 result.setValue(nc.decodeDate(o.getDate(i))); 109 break; 110 case QTypeTuple.TYPECODE_INT: 111 if (!o.isDefined(i)) { 112 result.setValue(nc.getNull()); 113 } else { 114 result.setValue(nc.decodeInt(o.getInt(i))); 115 } 116 break; 117 case QTypeTuple.TYPECODE_LONG: 118 if (!o.isDefined(i)) { 119 result.setValue(nc.getNull()); 120 } else { 121 result.setValue(nc.decodeLong(o.getLong(i))); 122 } 123 break; 124 case QTypeTuple.TYPECODE_SHORT: 125 if (!o.isDefined(i)) { 126 result.setValue(nc.getNull()); 127 } else { 128 result.setValue(nc.decodeShort(o.getShort(i))); 129 } 130 break; 131 case QTypeTuple.TYPECODE_STRING: 132 result.setValue(nc.decodeString(o.getString(i))); 133 break; 134 case QTypeTuple.TYPECODE_OBJBYTE: 135 result.setValue(nc.decodeObyte((Byte ) o.getObject(i))); 136 break; 137 case QTypeTuple.TYPECODE_OBJCHAR: 138 result.setValue(nc.decodeOchar((Character ) o.getObject(i))); 139 break; 140 case QTypeTuple.TYPECODE_OBJINT: 141 result.setValue(nc.decodeOint((Integer ) o.getObject(i))); 142 break; 143 case QTypeTuple.TYPECODE_OBJLONG: 144 result.setValue(nc.decodeOlong((Long ) o.getObject(i))); 145 break; 146 case QTypeTuple.TYPECODE_OBJSHORT: 147 result.setValue(nc.decodeOshort((Short ) o.getObject(i))); 148 break; 149 case QTypeTuple.TYPECODE_BIGINTEGER: 150 result.setValue(nc.decodeBigInteger((BigInteger ) o.getObject(i))); 151 break; 152 case QTypeTuple.TYPECODE_BIGDECIMAL: 153 result.setValue(nc.decodeBigDecimal((BigDecimal ) o.getObject(i))); 154 break; 155 default: 156 throw new MedorException("Impossible to construct PName from field"); } 158 } 159 catch (Exception e) { 160 throw new ExpressionException("Error while building SinglePName", e); 161 } 162 return result; 163 } 164 165 176 public Operand compileExpression() 177 throws TypingException, MalformedExpressionException { 178 if ((expressions[0] != null) && (expressions[1] != null)) { 179 result = new BasicVariableOperand(type); 180 verified = true; 181 } 182 else 183 throw new MalformedExpressionException("null children value"); 185 return result; 186 } 187 188 public FieldOperand getField() { 189 return (FieldOperand) expressions[0]; 190 } 191 192 public ParameterOperand getPNameManagerParameter() { 193 return (expressions[1] instanceof ParameterOperand 194 ? (ParameterOperand) expressions[1] 195 : null); 196 } 197 198 202 public String getOperatorString() { 203 return "singlePName"; 204 } 205 } 206 | Popular Tags |