private String getStringValue(V value) { if (value == null) { return null; } else if (value instanceof BString) { return "\"" + value.stringValue() + "\""; } else { return value.stringValue(); } }
/** * Encode a given BValue using Base64 encoding scheme. * * @param context Represent a ballerina context * @param input Represent a BValue which can be of type blob, string or byte channel * @param charset Represent the charset value to be used with string * @param isMimeSpecific A boolean indicating whether the encoder should be mime specific or not */ public static void encode(Context context, BValue input, String charset, boolean isMimeSpecific) { switch (input.getType().getTag()) { case TypeTags.STRING_TAG: encodeString(context, input.stringValue(), charset, isMimeSpecific); break; default: break; } }
@Override public BValue copy(Map<BValue, BValue> refs) { readLock.lock(); try { if (isFrozen()) { return this; } if (refs.containsKey(this)) { return refs.get(this); } BMap<K, BValue> newMap = new BMap<>(type); refs.put(this, newMap); for (Map.Entry<K, V> entry: map.entrySet()) { BValue value = entry.getValue(); newMap.put(entry.getKey(), value == null ? null : value.copy(refs)); } return newMap; } finally { readLock.unlock(); } }
/** * {@inheritDoc} */ @Override public synchronized void attemptFreeze(BVM.FreezeStatus freezeStatus) { if (this.type.getTag() == TypeTags.OBJECT_TYPE_TAG) { throw new BLangFreezeException("'freeze()' not allowed on '" + getType() + "'"); } if (isOpenForFreeze(this.freezeStatus, freezeStatus)) { this.freezeStatus = freezeStatus; map.values().forEach(val -> { if (val != null) { val.attemptFreeze(freezeStatus); } }); } }
/** * Check whether provided JSON object is a JSON Array. * * @param json JSON to execute array condition. * @return returns true if provided JSON is a JSON Array. */ public static boolean isJSONArray(BValue json) { if (json == null) { return false; } return json.getType().getTag() == TypeTags.ARRAY_TAG; }
@Override public String stringValue() { return value.stringValue(); }
public static CoordinatorCommit notifyTransactionEnd(Strand ctx, String globalTransactionId, String transactionBlockId) { BValue[] args = {new BString(globalTransactionId), new BString(transactionBlockId)}; BValue[] returns = invokeCoordinatorFunction(ctx, TransactionConstants.COORDINATOR_END_TRANSACTION, args); checkTransactionCoordinatorError(returns[0], "error in transaction end: "); switch (returns[0].getType().getTag()) { case TypeTags.STRING_TAG: String statusMessage = returns[0].stringValue(); if (statusMessage.equals("committed")) { return CoordinatorCommit.COMMITTED; } return CoordinatorCommit.ABORTED; default: throw new IllegalStateException("Transaction coordinator returned unexpected result upon trx end: " + returns[0].stringValue()); } }
/** * Method to attempt freezing a {@link BValue}, to disallow further modification. * * @param freezeStatus the {@link BVM.FreezeStatus} instance to keep track of the * freeze result of this attempt */ default void attemptFreeze(BVM.FreezeStatus freezeStatus) { throw new BLangFreezeException("freeze not allowed on '" + getType() + "'"); }
private static void convertStructToMap(Strand strand, int[] operands, StackFrame sf) { int i = operands[0]; int j = operands[1]; // TODO: do validation for type? BMap newMap = new BMap(BTypes.typeMap); ((BMap) sf.refRegs[i]).getMap().forEach((key, value) -> newMap.put(key, value == null ? null : ((BValue) value).copy(new HashMap<>()))); sf.refRegs[j] = newMap; }
@Override public String toString() { StringBuilder payload = new StringBuilder("Message : "); if (bMessage != null) { payload.append("{ ").append(bMessage.stringValue()).append(" }"); } else { payload.append("null"); } return payload.toString(); }
private String getStringValue(BValue bValue) { String bValueString; if (bValue == null) { bValueString = null; } else if (bValue instanceof BValueType || bValue instanceof BXML || bValue.getType().getTag() == TypeTags.JSON) { bValueString = bValue.stringValue(); } else if (bValue instanceof BNewArray) { BNewArray bArray = (BNewArray) bValue; bValueString = "Array[" + bArray.size() + "] "; bValueString = bValueString + bArray.stringValue(); } else if (bValue.getType().getTag() == TypeTags.MAP) { BMap bmap = (BMap) bValue; bValueString = "Map[" + bmap.size() + "] "; bValueString = bValueString + bmap.stringValue(); } else if (bValue.getType().getTag() == TypeTags.RECORD) { bValueString = "Record " + bValue.getType().getName() + " "; bValueString = bValueString + bValue.stringValue(); } else if (bValue.getType().getTag() == TypeTags.OBJECT) { bValueString = "Object " + bValue.getType().getName() + " "; bValueString = bValueString + ((BMap) bValue).absoluteStringValue(); } else { bValueString = "<Complex_Value>"; } return bValueString; }
/** * Check whether provided JSON object is a JSON Object. * * @param json JSON to execute array condition. * @return returns true if provided JSON is a JSON Object. */ public static boolean isJSONObject(BValue json) { if (json == null) { return false; } return json.getType().getTag() == TypeTags.JSON_TAG || json.getType().getTag() == TypeTags.MAP_TAG; }
@Override public String toString() { if (bValue != null) { if (bValue instanceof BString) { return "\"" + bValue.stringValue() + "\""; } return bValue.stringValue(); } if (annotationValue != null) { return annotationValue.toString(); } if (valueArray != null) { return Arrays.toString(valueArray); } return null; } }
@Override public void execute(Context context) { BValue entityBody = context.getRefArgument(0); Checksum checksum = new CRC32(); byte[] bytes; long checksumVal; BType argType = entityBody.getType(); if (argType == BTypes.typeJSON || argType == BTypes.typeXML || argType == BTypes.typeString) { // TODO: Look at the possibility of making the encoding configurable bytes = entityBody.stringValue().getBytes(StandardCharsets.UTF_8); } else if (argType.getTag() == TypeTags.ARRAY_TAG && ((BArrayType) argType).getElementType().getTag() == TypeTags.BYTE_TAG) { bytes = ((BValueArray) entityBody).getBytes(); } else { throw new BallerinaException( "failed to generate hash: unsupported data type: " + entityBody.getType().getName()); } checksum.update(bytes, 0, bytes.length); checksumVal = checksum.getValue(); context.setReturnValues(new BString(Long.toHexString(checksumVal))); } }
private static boolean checkFiniteTypeAssignable(BValue bRefTypeValue, BType lhsType) { BFiniteType fType = (BFiniteType) lhsType; if (bRefTypeValue == null) { // we should not reach here return false; } else { Iterator<BValue> valueSpaceItr = fType.valueSpace.iterator(); while (valueSpaceItr.hasNext()) { BValue valueSpaceItem = valueSpaceItr.next(); if (valueSpaceItem.getType().getTag() == bRefTypeValue.getType().getTag()) { if (valueSpaceItem.equals(bRefTypeValue)) { return true; } } } } return false; }
@SuppressWarnings("unchecked") @Override public BigDecimal toObject(BPacket packet, BValueDeserializer bValueDeserializer) { String payload = packet.getValue().stringValue(); return new BigDecimal(payload); } }
Time val = null; if (value != null) { if (value instanceof BMap && value.getType().getName().equals(Constants.STRUCT_TIME) && value.getType() .getPackagePath().equals(Constants.STRUCT_TIME_PACKAGE)) { BValue timeVal = ((BMap<String, BValue>) value).get(TIME_FIELD); val = new Time(((BInteger) value).intValue()); } else if (value instanceof BString) { val = SQLDatasourceUtils.convertToTime(value.stringValue());
/** * Reference inequality check for values. If both the values are simple basic types, returns the same * result as the negation of {@link BVM#isEqual(BValue, BValue, List)} * * @param lhsValue The value on the left hand side * @param rhsValue The value on the right hand side * @return True if values are not reference equal or in the case of simple basic types if the values are not equal, * else false. */ private static boolean isReferenceInequal(BValue lhsValue, BValue rhsValue) { if (lhsValue == null || rhsValue == null) { return lhsValue != rhsValue; } if (isSimpleBasicType(lhsValue.getType()) && isSimpleBasicType(rhsValue.getType())) { return !isEqual(lhsValue, rhsValue, Collections.emptyList()); } return lhsValue != rhsValue; }