/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include #include #include using namespace std; using namespace qmf::engine; using qpid::framing::Buffer; EventImpl::EventImpl(const SchemaEventClass* type) : eventClass(type), timestamp(0), severity(0) { int argCount = eventClass->getArgumentCount(); int idx; for (idx = 0; idx < argCount; idx++) { const SchemaArgument* arg = eventClass->getArgument(idx); arguments[arg->getName()] = ValuePtr(new Value(arg->getType())); } } EventImpl::EventImpl(const SchemaEventClass* type, Buffer& buffer) : eventClass(type), timestamp(0), severity(0) { int argCount = eventClass->getArgumentCount(); int idx; timestamp = buffer.getLongLong(); severity = buffer.getOctet(); for (idx = 0; idx < argCount; idx++) { const SchemaArgument *arg = eventClass->getArgument(idx); Value* pval = ValueImpl::factory(arg->getType(), buffer); arguments[arg->getName()] = ValuePtr(pval); } } Event* EventImpl::factory(const SchemaEventClass* type, Buffer& buffer) { EventImpl* impl(new EventImpl(type, buffer)); return new Event(impl); } Value* EventImpl::getValue(const char* key) const { map::const_iterator iter; iter = arguments.find(key); if (iter != arguments.end()) return iter->second.get(); return 0; } void EventImpl::encodeSchemaKey(Buffer& buffer) const { buffer.putShortString(eventClass->getClassKey()->getPackageName()); buffer.putShortString(eventClass->getClassKey()->getClassName()); buffer.putBin128(const_cast(eventClass->getClassKey()->getHash())); } void EventImpl::encode(Buffer& buffer) const { buffer.putOctet((uint8_t) eventClass->getSeverity()); int argCount = eventClass->getArgumentCount(); for (int idx = 0; idx < argCount; idx++) { const SchemaArgument* arg = eventClass->getArgument(idx); ValuePtr value = arguments[arg->getName()]; value->impl->encode(buffer); } } string EventImpl::getRoutingKey(uint32_t brokerBank, uint32_t agentBank) const { stringstream key; key << "console.event." << brokerBank << "." << agentBank << "." << eventClass->getClassKey()->getPackageName() << "." << eventClass->getClassKey()->getClassName(); return key.str(); } //================================================================== // Wrappers //================================================================== Event::Event(const SchemaEventClass* type) : impl(new EventImpl(type)) {} Event::Event(EventImpl* i) : impl(i) {} Event::Event(const Event& from) : impl(new EventImpl(*(from.impl))) {} Event::~Event() { delete impl; } const SchemaEventClass* Event::getClass() const { return impl->getClass(); } Value* Event::getValue(const char* key) const { return impl->getValue(key); }