void cmx_writerDataTypeAction( v_entity entity, c_voidp args) { sd_serializer ser; sd_serializedData data; c_type type; struct cmx_writerTypeArg *arg; arg = (struct cmx_writerTypeArg *)args; type = NULL; switch(v_object(entity)->kind){ case K_WRITER: type = v_topicDataType(v_writer(entity)->topic); break; default: OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Trying to resolve dataType of writer that is not a writer.\n"); assert(FALSE); break; } if(type != NULL){ ser = sd_serializerXMLMetadataNew(c_getBase(type)); data = sd_serializerSerialize(ser, type); arg->result = sd_serializerToString(ser, data); sd_serializedDataFree(data); sd_serializerFree(ser); } }
const c_char* cmx_participantRegisterType( const c_char* participant, const c_char* type) { sd_serializer serializer; sd_serializedData meta_data; cmx_entityKernelArg kernelArg; c_type topicType; cmx_entity ce; const c_char* result; const c_char* msg; ce = cmx_entityClaim(participant); if(ce != NULL){ kernelArg = cmx_entityKernelArg(os_malloc(C_SIZEOF(cmx_entityKernelArg))); if (u_observableAction(u_observable(ce->uentity), cmx_entityKernelAction, (c_voidp)kernelArg) == U_RESULT_OK) { serializer = sd_serializerXMLMetadataNew(c_getBase(c_object(kernelArg->kernel))); if(serializer != NULL){ meta_data = sd_serializerFromString(serializer, type); if (meta_data != NULL) { topicType = c_type(sd_serializerDeserialize(serializer, meta_data)); if (topicType == NULL) { msg = sd_serializerLastValidationMessage(serializer); OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Data type could not be registered, " "because it is not valid: %s", msg); result = CMX_RESULT_FAILED; } else { result = CMX_RESULT_OK; } sd_serializedDataFree(meta_data); } else { OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Construction of serialized data failed."); result = CMX_RESULT_FAILED; } sd_serializerFree(serializer); } else { OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Serializer could not be initialized"); result = CMX_RESULT_FAILED; } } else { OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Kernel object could not be retrieved"); result = CMX_RESULT_FAILED; } os_free(kernelArg); cmx_entityRelease(ce); } else { result = CMX_RESULT_FAILED; } return result; }
static c_type cloneType( c_base src, c_base dst, c_type object) { sd_serializer serializer, deserializer; sd_serializedData data; c_char* xmlData; c_type result; result = NULL; serializer = sd_serializerXMLMetadataNew(src); deserializer = sd_serializerXMLMetadataNew(dst); if(serializer && deserializer){ data = sd_serializerSerialize(serializer, object); if(data){ xmlData = sd_serializerToString(serializer, data); sd_serializedDataFree(data); if(xmlData){ data = sd_serializerFromString(deserializer, xmlData); if(data){ result = c_type(sd_serializerDeserializeValidated( deserializer, data)); sd_serializedDataFree(data); } os_free(xmlData); } } sd_serializerFree(serializer); sd_serializerFree(deserializer); } return result; }
void cmx_readerDataTypeAction( v_entity entity, c_voidp args) { sd_serializer ser; sd_serializedData data; c_type type; v_dataReader r; v_query query; v_topic topic; struct cmx_readerArg *arg; arg = (struct cmx_readerArg *)args; type = NULL; switch(v_object(entity)->kind){ case K_DATAREADER: r = v_dataReader(entity); v_observerLock(v_observer(r)); topic = v_dataReaderGetTopic(r); type = v_topicDataType(topic); c_free(topic); v_observerUnlock(v_observer(r)); break; case K_DATAREADERQUERY: query = v_query(entity); r = v_dataReader(v_querySource(query)); v_observerLock(v_observer(r)); topic = v_dataReaderGetTopic(r); type = v_topicDataType(topic); c_free(topic); v_observerUnlock(v_observer(r)); c_free(r); break; case K_NETWORKREADER: OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Resolving data type of networkReader unsupported.\n"); assert(FALSE); break; case K_GROUPQUEUE: OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Resolving data type of groupQueue unsupported.\n"); assert(FALSE); break; default: OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "Trying to resolve dataType of unknown reader type.\n"); assert(FALSE); break; } if(type != NULL){ ser = sd_serializerXMLMetadataNew(c_getBase(type)); data = sd_serializerSerialize(ser, type); arg->result = sd_serializerToString(ser, data); sd_serializedDataFree(data); sd_serializerFree(ser); } }