diff options
Diffstat (limited to 'tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/SequenceImpl.cpp')
-rw-r--r-- | tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/SequenceImpl.cpp | 1328 |
1 files changed, 0 insertions, 1328 deletions
diff --git a/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/SequenceImpl.cpp b/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/SequenceImpl.cpp deleted file mode 100644 index 71bcc6e07f..0000000000 --- a/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/SequenceImpl.cpp +++ /dev/null @@ -1,1328 +0,0 @@ -/* - * 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. - */ - -/* $Rev$ $Date$ */ - -#include "commonj/sdo/disable_warn.h" -#include "commonj/sdo/Property.h" -#include "commonj/sdo/Type.h" -#include "commonj/sdo/TypeList.h" - -#include "commonj/sdo/SequenceImpl.h" - -#include "commonj/sdo/DataObject.h" -#include "commonj/sdo/DataObjectImpl.h" -#include "commonj/sdo/SDORuntimeException.h" -using namespace std; - - -#define CHECK_RANGE\ - if (index >= the_list.size()){\ - std::string msg("Index out of range:");\ - msg += index;\ - SDO_THROW_EXCEPTION("Sequence API", SDOIndexOutOfRangeException,\ - msg.c_str());\ - }\ - unsigned int j = 0;\ - for (i = the_list.begin(); (j < index) && (i != the_list.end()); ++i)\ - {\ - j++;\ - } - - -namespace commonj -{ - namespace sdo - { - - SequenceImpl::SequenceImpl() - { - SDO_THROW_EXCEPTION("Sequence constructor", - SDORuntimeException, - "SequenceImpl::construction without a data object"); - } - - SequenceImpl::SequenceImpl(DataObject* indo) - { - the_do = (DataObjectImpl*) indo; - } - - SequenceImpl::SequenceImpl(SequenceImpl* inseq) - { - // take a copy of the_list - the_list = inseq->the_list; - } - - unsigned int SequenceImpl::size() - { - return the_list.size(); - } - - // Convert an index into the sequence into an iterator (pointer) to the - // list element identified by the index. If the index is invalid then - // throw an exception. - void SequenceImpl::checkRange(unsigned int index, SEQUENCE_ITEM_LIST::iterator& i) - { - if (index >= the_list.size()) - { - std::string msg("Index out of range:"); - msg += index; - SDO_THROW_EXCEPTION("Sequence API", - SDOIndexOutOfRangeException, - msg.c_str()); - } - unsigned int j = 0; - for (i = the_list.begin(); (j < index) && (i != the_list.end()); ++i) - { - j++; - } - return; - } - - // Return the data object associated with this sequence - const DataObjectPtr SequenceImpl::getDataObject() - { - return the_do; - } - - const Property& SequenceImpl::getProperty(unsigned int index) - { - SEQUENCE_ITEM_LIST::iterator i; - - if (isText(index)) - { - std::string msg("Cannot get property of a text item"); - msg += index; - SDO_THROW_EXCEPTION("getProperty", - SDOUnsupportedOperationException, - msg.c_str()); - } - - checkRange(index, i); - - if (i != the_list.end()) - { - return *((*i).getProp()); - } - std::string msg("Index out of range:"); - msg += index; - SDO_THROW_EXCEPTION("getProperty", - SDOIndexOutOfRangeException, - msg.c_str()); - } - - Type::Types SequenceImpl::getTypeEnum(unsigned int index) - { - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - if (i != the_list.end()) - { - if ((*i).getProp() == 0) - { - // text type - return Type::TextType; - } - return (*i).getProp()->getTypeEnum(); - } - std::string msg("Index out of range:"); - msg += index; - SDO_THROW_EXCEPTION("getTypeEnum", - SDOIndexOutOfRangeException, - msg.c_str()); - } - - unsigned int SequenceImpl::getListIndex(unsigned int index) - { - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - if (i != the_list.end()) { - if ((*i).getProp() == 0) - { - std::string msg("Get list index on text property"); - SDO_THROW_EXCEPTION("getListIndex", - SDOUnsupportedOperationException, - msg.c_str()); - } - if ((*i).getProp()->isMany()) - { - return (*i).getIndex(); - } - else - { - std::string msg("Get list index on text single valued property"); - SDO_THROW_EXCEPTION("getListIndex", - SDOUnsupportedOperationException, - msg.c_str()); - } - } - std::string msg("Index out of range:"); - msg += index; - SDO_THROW_EXCEPTION("getListIndex", - SDOIndexOutOfRangeException, - msg.c_str()); - } - - unsigned int SequenceImpl::getIndex(const char* propName, unsigned int pindex) - { - SEQUENCE_ITEM_LIST::iterator i; - unsigned int j = 0; - for (i = the_list.begin(), j = 0; i != the_list.end(); ++i, ++j) - { - const Property* p = (*i).getProp(); - if (p == 0) - { - continue; // avoid text - } - - if (!strcmp(p->getName(), propName)) - { - if (p->isMany()) - { - if (pindex == (*i).getIndex()) - { - return j; - } - } - else - { - return j; - } - } - } - SDO_THROW_EXCEPTION("getIndex", - SDOIndexOutOfRangeException, - "SequenceImpl::getIndex - property Setting not in sequence"); - } - - unsigned int SequenceImpl::getIndex(const Property& p, unsigned int pindex) - { - return getIndex(p.getName(), pindex); - } - - // specific getters for prims and data objects - - // It isn't obvious from the code here, however, this method also - // retrieves free text elements (see the spec) ie text items that can be - // added to the sequence even though they are not associated with a property. - const char* SequenceImpl::getCStringValue(unsigned int index) - { - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getCString(); - } - else - { - return 0; - } - } - - unsigned int SequenceImpl::getLength(unsigned int index) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - const Property* p = (*i).getProp(); - switch (p->getTypeEnum()) - { - case Type::StringType: - return getStringValue(index,0,0); - case Type::BytesType: - return getBytesValue(index,0,0); - default: - return 0; - } - } - - RefCountingPointer<DataObject> SequenceImpl::getDataObjectValue(unsigned int index) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - const Property* p = (*i).getProp(); - if (p == 0) { - return 0; - } - if (p->isMany()) - { - DataObjectList& dol = the_do->getList(*p); - DataObject* list_do = dol[(*i).getIndex()]; - if (list_do != 0) - { - return list_do; - } - return 0; - } - return the_do->getDataObject(*((*i).getProp())); - } - - /////////////////////////////////////////////////////////////////////////// - // generic getter for those types which support it - /////////////////////////////////////////////////////////////////////////// - - void SequenceImpl::setCStringValue( unsigned int index, const char* s ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - (*i).setText(s); - return; - } - the_do->setCString(*((*i).getProp()),s); - - } - void SequenceImpl::setBooleanValue( unsigned int index, bool b ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setBoolean(*((*i).getProp()),b); - } - - void SequenceImpl::setByteValue( unsigned int index, char c ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setByte(*((*i).getProp()),c); - } - - void SequenceImpl::setCharacterValue( unsigned int index, wchar_t c ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setCharacter(*((*i).getProp()),c); - } - void SequenceImpl::setStringValue( unsigned int index, const wchar_t* s , unsigned int len) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setString(*((*i).getProp()),s, len); - } - void SequenceImpl::setBytesValue( unsigned int index, const char* s , unsigned int len) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setBytes(*((*i).getProp()),s, len); - } - void SequenceImpl::setShortValue( unsigned int index, short s ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setShort(*((*i).getProp()),s); - } - - void SequenceImpl::setIntegerValue( unsigned int index, long l) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setInteger(*((*i).getProp()),l); - } - - - void SequenceImpl::setLongValue( unsigned int index, int64_t l ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setLong(*((*i).getProp()),l); - } - - void SequenceImpl::setFloatValue( unsigned int index, float f ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setFloat(*((*i).getProp()),f); - } - - - void SequenceImpl::setDoubleValue(unsigned int index, long double d ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setDouble(*((*i).getProp()),d); - } - - void SequenceImpl::setDateValue(unsigned int index, const SDODate t ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setDate(*((*i).getProp()),t); - } - - void SequenceImpl::setDataObjectValue(unsigned int index, DataObjectPtr d ) - { - SEQUENCE_ITEM_LIST::iterator i; - CHECK_RANGE; - if ((*i).getProp() == 0) { - return; - } - the_do->setDataObject(*((*i).getProp()),d); - } - - -bool SequenceImpl::addDataObject(const char* propertyName, RefCountingPointer<DataObject> v) -{ - const PropertyImpl* p = the_do->getPropertyImpl(propertyName); - if (p == 0) - { - if (the_do->getType().isOpenType()) - { - p = the_do->defineDataObject(propertyName, v->getType()); - } - if (p == 0) - { - std::string msg("Cannot find property:"); - msg += propertyName; - SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException, - msg.c_str()); - } - } - return addDataObject((const Property&)*p,v); -} -bool SequenceImpl::addDataObject(unsigned int propertyIndex, RefCountingPointer<DataObject> v) -{ - return addDataObject(the_do->getProperty(propertyIndex), v); -} -bool SequenceImpl::addDataObject(const Property& p, RefCountingPointer<DataObject> v) -{ - // If this is a many valued property. - if (p.isMany()) - { - // Append the incoming data object value to the end of the list of - // values. The sequence is updated as part of the append operation. - DataObjectList& dol = the_do->getList(p); - dol.append((RefCountingPointer<DataObject>) v); - /* the_list.push_back(seq_item(&p,dol.size()-1));*/ - return true; - } - - SEQUENCE_ITEM_LIST::iterator i; - - // Scan the sequence to check that this property has not been set already. - for (i= the_list.begin(); i != the_list.end(); ++i) - { - const Property* pp = (*i).getProp(); - if (pp == 0) - { - continue; // This item is a free text entry. - } - if (!strcmp(pp->getName(), p.getName())) - { - SDO_THROW_EXCEPTION("add", - SDOUnsupportedOperationException, - "Sequence::add of property which already exists in sequence"); - } - } - - the_do->setDataObject(p, v, true); - // the_list.push_back(seq_item(&p, 0)); - return true; -} - - -bool SequenceImpl::addDataObject(unsigned int index, const char* propertyName, RefCountingPointer<DataObject> v) -{ - const PropertyImpl* p = the_do->getPropertyImpl(propertyName); - if (p == 0) - { - if (the_do->getType().isOpenType()) - { - p = the_do->defineDataObject(propertyName, v->getType()); - } - if (p == 0) - { - std::string msg("Cannot find property:"); - msg += propertyName; - SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException, - msg.c_str()); - } - } - return addDataObject(index,(const Property&)*p,v); -} -bool SequenceImpl::addDataObject(unsigned int index, unsigned int propertyIndex, RefCountingPointer<DataObject> v) -{ - return addDataObject(index,the_do->getProperty(propertyIndex), v); -} -bool SequenceImpl::addDataObject(unsigned int index, const Property& p, RefCountingPointer<DataObject> v) -{ - SEQUENCE_ITEM_LIST::iterator i; - SEQUENCE_ITEM_LIST::iterator i2 = the_list.end(); - unsigned int j = 0; - - if (index >= the_list.size()) - { - return addDataObject(p, v); - } - if (p.isMany()) - { - DataObjectList& dol = the_do->getList(p); - dol.append((RefCountingPointer<DataObject>)v); - - checkRange(index, i); - - /*the_list.insert(i,seq_item(&p,dol.size()-1));*/ - return true; - } - - for (i = the_list.begin(); i != the_list.end(); ++i) - { - const Property* pp = (*i).getProp(); - if (pp == 0) - { - continue; // This item is a free text entry. - } - if (!strcmp(pp->getName(), p.getName())) - { - SDO_THROW_EXCEPTION("Insert", - SDOUnsupportedOperationException, - "Sequence::insert of property which already exists in sequence"); - } - if (j == index) - { - i2 = i; - } - j++; - } - // setDataObject can update the sequence but does not do so by an append - // so tell it to mind its own business and we will update the sequence here. - the_do->setDataObject(p, v, false); - the_list.insert(i2, seq_item(&p, 0)); - return true; -} - - void SequenceImpl::push(const Property& p, unsigned int index) - { - the_list.push_back(seq_item(&p,index)); - } - - void SequenceImpl::remove(unsigned int index) - { - if (index >= the_list.size()) { - std::string msg("Index out of range:"); - msg += index; - SDO_THROW_EXCEPTION("Sequence remove", SDOIndexOutOfRangeException, - msg.c_str()); - } - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - the_list.erase(i); - return; - } - - void SequenceImpl::removeAll(const Property& p) - { - int j = 0; - const Property* prop; - SEQUENCE_ITEM_LIST::iterator i = the_list.begin(); - - while (i != the_list.end()) - { - prop = (*i).getProp(); - if (prop != 0) - { - if (!strcmp(prop->getName(), p.getName())) - { - i = the_list.erase(i); - } - else - { - ++i; - } - } - else - { - ++i; - } - - } - - return; - } - - void SequenceImpl::move(unsigned int toIndex, unsigned int fromIndex) - { - if (fromIndex >= the_list.size()) { - std::string msg("Index out of range:"); - msg += fromIndex; - SDO_THROW_EXCEPTION("Sequence Move", SDOIndexOutOfRangeException, - msg.c_str()); - } - - if (toIndex == fromIndex) return; - - SEQUENCE_ITEM_LIST::iterator i1, - i2 = the_list.end(), - i3 = the_list.end(); - unsigned int j = 0; - for (i3 = the_list.begin(); - j < toIndex && j < fromIndex && - i3 != the_list.end() ; ++i3); - { - if (j == toIndex) i1 = i3; - if (j == fromIndex) i2 = i3; - j++; - } - - if (toIndex < fromIndex) - { - the_list.insert( i1, *i2); - the_list.erase(i2); - } - else - { - if (toIndex + 1 == the_list.size()) - { - the_list.push_back(*i2); - } - else - { - the_list.insert(++i1,*i2); - } - the_list.erase(i2); - } - return; - } - - bool SequenceImpl::addText(const char* text) - { - the_list.push_back(seq_item(text)); - return true; - } - - bool SequenceImpl::isText(unsigned int index) - { - if (index >= the_list.size()) { - return false; - } - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - if ((*i).getProp() == 0) - { - return true; - } - - return false; - } - - bool SequenceImpl::addText(unsigned int index, const char* text) - { - if (index >= the_list.size()) { - return addText(text); - } - - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - the_list.insert(i,seq_item(text)); - return true; - } - - bool SequenceImpl::setText(unsigned int index, const char* text) - { - if (index >= the_list.size()) { - return false; - } - - if (!isText(index)) - { - return false; - } - - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - (*i).setText(text); - return true; - } - -const SDOValue& SequenceImpl::getSDOValue(unsigned int index) -{ - SEQUENCE_ITEM_LIST::iterator i; - - checkRange(index, i); - - const Property* p = (*i).getProp(); - if (p == 0) - { - // There is no property. Either this is a free text element or we have a - // problem. - const SDOValue* freeText = (*i).getFreeText(); - if (freeText != 0) - { - return *freeText; - } - else - { - return SDOValue::unsetSDOValue; - } - } - PropertyImpl* pProp = 0; // Not used. Just a place for getSDOValue to - // write the return value that we don't need. - if (p->isMany()) - { - DataObjectList& dol = the_do->getList(*p); - DataObject* list_do = dol[(*i).getIndex()]; - if (list_do != 0) - { - return ((DataObjectImpl*) list_do)->getSDOValue(&pProp); - } - return SDOValue::unsetSDOValue; - } - return the_do->getSDOValue(*((*i).getProp()), &pProp); -} - -bool SequenceImpl::getBooleanValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getBoolean(); - } - else - { - return (bool) 0; - } -} - -char SequenceImpl::getByteValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getByte(); - } - else - { - return (char) 0; - } -} - -wchar_t SequenceImpl::getCharacterValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getCharacter(); - } - else - { - return (wchar_t) 0; - } -} - -short SequenceImpl::getShortValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getShort(); - } - else - { - return (short) 0; - } -} - -long SequenceImpl::getIntegerValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getInteger(); - } - else - { - return (long) 0; - } -} - -int64_t SequenceImpl::getLongValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getLong(); - } - else - { - return (int64_t) 0; - } -} - -float SequenceImpl::getFloatValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getFloat(); - } - else - { - return (float) 0; - } -} - -long double SequenceImpl::getDoubleValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getDouble(); - } - else - { - return (long double) 0; - } -} - -const SDODate SequenceImpl::getDateValue(unsigned int index) -{ - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getDate(); - } - else - { - return (SDODate) 0; - } -} - -bool SequenceImpl::addCString(const char* propertyName, const char* v) -{ - return addSDOValue(propertyName, SDOValue(SDOString(v))); -} -bool SequenceImpl::addCString(const Property& p, const char* v) -{ - return addSDOValue(p, SDOValue(SDOString(v))); -} -bool SequenceImpl::addCString(unsigned int propertyIndex, const char* v) -{ - return addCString(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addByte(const char* propertyName, char v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addByte(const Property& p, char v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addByte(unsigned int propertyIndex, char v) -{ - return addByte(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addCharacter(const char* propertyName, wchar_t v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addCharacter(const Property& p, wchar_t v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addCharacter(unsigned int propertyIndex, wchar_t v) -{ - return addCharacter(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addShort(const char* propertyName, short v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addShort(const Property& p, short v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addShort(unsigned int propertyIndex, short v) -{ - return addShort(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addFloat(const char* propertyName, float v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addFloat(const Property& p, float v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addFloat(unsigned int propertyIndex, float v) -{ - return addFloat(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addDouble(const char* propertyName, long double v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addDouble(const Property& p, long double v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addDouble(unsigned int propertyIndex, long double v) -{ - return addDouble(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addDate(const char* propertyName, const SDODate v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addDate(const Property& p, const SDODate v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addDate(unsigned int propertyIndex, const SDODate v) -{ - return addDate(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addLong(const char* propertyName, int64_t v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addLong(const Property& p, int64_t v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addLong(unsigned int propertyIndex, int64_t v) -{ - return addLong(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addInteger(const char* propertyName, long v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addInteger(const Property& p, long v) -{ - return addSDOValue(p, SDOValue(v)); -} -bool SequenceImpl::addInteger(unsigned int propertyIndex, long v) -{ - return addInteger(the_do->getProperty(propertyIndex), v); -} - -bool SequenceImpl::addBoolean(const char* propertyName, bool v) -{ - return addSDOValue(propertyName, SDOValue(v)); -} -bool SequenceImpl::addBoolean(const Property& p, bool v) -{ - return addSDOValue(p, SDOValue(v)); -} - -bool SequenceImpl::addBoolean(unsigned int propertyIndex, bool v) -{ - return addBoolean(the_do->getProperty(propertyIndex), v); -} - -// The return value is not spec compliant (which calls for void) it is a -// yes/no as to whether the call succeeded. -bool SequenceImpl::addSDOValue(const char* propertyName, const SDOValue& sval) -{ - const PropertyImpl* p = the_do->getPropertyImpl(propertyName); - if (p == 0) - { - if (the_do->getType().isOpenType()) - { - p = the_do->defineSDOValue(propertyName, sval); - } - if (p == 0) - { - std::string msg("Cannot find property:"); - msg += propertyName; - SDO_THROW_EXCEPTION("SequenceImpl::addSDOValue", - SDOPropertyNotFoundException, - msg.c_str()); - } - } - return addSDOValue((const Property&) *p, sval); -} -bool SequenceImpl::addSDOValue(const Property& p, const SDOValue& sval) -{ - if (p.isMany()) - { - DataObjectList& dol = the_do->getList(p); - dol.append(sval); - /* the_list.push_back(seq_item(&p,dol.size()-1));*/ - return true; - } -// std::cout << "Incoming property: " << p.getName() << std::endl << std::endl; - SEQUENCE_ITEM_LIST::iterator i; - for (i = the_list.begin(); i != the_list.end(); ++i) - { - const Property* pp = (*i).getProp(); - if (pp == 0) continue; -// std::cout << pp->getName() << std::endl; - if (!strcmp(pp->getName(), p.getName())) - { - SDO_THROW_EXCEPTION("add", - SDOUnsupportedOperationException, - "Sequence::add of property which already exists in sequence"); - } - } -// std::cout << std::endl; - the_do->setSDOValue(p, sval, sval.convertTypeEnumToString(), true); - // the_list.push_back(seq_item(&p, 0)); - return true; -} -bool SequenceImpl::addSDOValue(unsigned int propertyIndex, const SDOValue& sval) -{ - return addSDOValue(the_do->getProperty(propertyIndex), sval); -} - -bool SequenceImpl::addString(const char* propertyName, const wchar_t* v, unsigned int len) -{ - return addSDOValue(propertyName, SDOValue(v, len)); -} -bool SequenceImpl::addString(unsigned int propertyIndex, const wchar_t* v, unsigned int len) -{ - return addString(the_do->getProperty(propertyIndex), v, len); -} -bool SequenceImpl::addString(const Property& p, const wchar_t* v, unsigned int len) -{ - return addSDOValue(p, SDOValue(v, len)); -} - -bool SequenceImpl::addBytes(const char* propertyName, const char* v, unsigned int len) -{ - return addSDOValue(propertyName, SDOValue(v, len)); -} -bool SequenceImpl::addBytes(unsigned int propertyIndex, const char* v, unsigned int len) -{ - return addBytes(the_do->getProperty(propertyIndex), v, len); -} -bool SequenceImpl::addBytes(const Property& p, const char* v, unsigned int len) -{ - return addSDOValue(p, SDOValue(v, len)); -} - - bool SequenceImpl::addByte(unsigned int index, const char* propertyName, char v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addByte(unsigned int index, unsigned int propertyIndex, char v) - { - return addByte(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addByte(unsigned int index, const Property& p, char v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addCharacter(unsigned int index, const char* propertyName, wchar_t v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addCharacter(unsigned int index, unsigned int propertyIndex, wchar_t v) - { - return addCharacter(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addCharacter(unsigned int index, const Property& p, wchar_t v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addShort(unsigned int index, const char* propertyName, short v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addShort(unsigned int index, unsigned int propertyIndex, short v) - { - return addShort(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addShort(unsigned int index, const Property& p, short v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addLong(unsigned int index, const char* propertyName, int64_t v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addLong(unsigned int index, unsigned int propertyIndex, int64_t v) - { - return addLong(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addLong(unsigned int index, const Property& p, int64_t v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addFloat(unsigned int index, const char* propertyName, float v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addFloat(unsigned int index, unsigned int propertyIndex, float v) - { - return addFloat(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addFloat(unsigned int index, const Property& p, float v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addDouble(unsigned int index, const char* propertyName, long double v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addDouble(unsigned int index, unsigned int propertyIndex, long double v) - { - return addDouble(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addDouble(unsigned int index, const Property& p, long double v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addDate(unsigned int index, const char* propertyName, const SDODate v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addDate(unsigned int index, unsigned int propertyIndex, const SDODate v) - { - return addDate(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addDate(unsigned int index, const Property& p, const SDODate v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addInteger(unsigned int index, const char* propertyName, long v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addInteger(unsigned int index, unsigned int propertyIndex, long v) - { - return addInteger(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addInteger(unsigned int index, const Property& p, long v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addCString(unsigned int index, const char* propertyName, const char* v) - { - return addSDOValue(index, propertyName, SDOValue(SDOString(v))); - } - bool SequenceImpl::addCString(unsigned int index, unsigned int propertyIndex, const char* v) - { - return addCString(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addCString(unsigned int index, const Property& p, const char* v) - { - return addSDOValue(index, p, SDOValue(SDOString(v))); - } - - bool SequenceImpl::addBoolean(unsigned int index, const char* propertyName, bool v) - { - return addSDOValue(index, propertyName, SDOValue(v)); - } - bool SequenceImpl::addBoolean(unsigned int index, unsigned int propertyIndex, bool v) - { - return addBoolean(index, the_do->getProperty(propertyIndex), v); - } - bool SequenceImpl::addBoolean(unsigned int index, const Property& p, bool v) - { - return addSDOValue(index, p, SDOValue(v)); - } - - bool SequenceImpl::addSDOValue(unsigned int index, const char* propertyName, const SDOValue& sval) - { - const PropertyImpl* p = the_do->getPropertyImpl(propertyName); - if (p == 0) - { - if (the_do->getType().isOpenType()) - { - p = the_do->defineSDOValue(propertyName, sval); - } - if (p == 0) - { - std::string msg("Cannot find property:"); - msg += propertyName; - SDO_THROW_EXCEPTION("getProperty", - SDOPropertyNotFoundException, - msg.c_str()); - } - } - return addSDOValue(index, (const Property&) *p, sval); - } - bool SequenceImpl::addSDOValue(unsigned int index, unsigned int propertyIndex, const SDOValue& sval) - { - return addSDOValue(index,the_do->getProperty(propertyIndex), sval); - } - bool SequenceImpl::addSDOValue(unsigned int index, const Property& p, const SDOValue& sval) - { - SEQUENCE_ITEM_LIST::iterator i; - SEQUENCE_ITEM_LIST::iterator i2 = the_list.end(); - unsigned int j = 0; - if (index >= the_list.size()) { - return addSDOValue(p, sval); - } - if (p.isMany()) - { - DataObjectList& dol = the_do->getList(p); - dol.append(sval); - - checkRange(index, i); - - /*the_list.insert(i,seq_item(&p,dol.size()-1));*/ - return true; - } - - for (i = the_list.begin(); i != the_list.end(); ++i) - { - const Property* pp = (*i).getProp(); - if (pp == 0) continue; - if (!strcmp(pp->getName(), p.getName())) - { - SDO_THROW_EXCEPTION("Insert", - SDOUnsupportedOperationException, - "Sequence::insert of property which already exists in sequence"); - } - if (j == index) { - i2 = i; - } - j++; - } - - // setSDOValue can update the sequence but does not do so by an append so - // tell it to mind its own business and we will update the sequence here. - the_do->setSDOValue(p, sval, sval.convertTypeEnumToString(), false); - the_list.insert(i2, seq_item(&p, 0)); - return true; - } - -bool SequenceImpl::addString(unsigned int index, - const char* propertyName, - const wchar_t* v, - unsigned int len) -{ - return addSDOValue(index, propertyName, SDOValue(v, len)); -} - -bool SequenceImpl::addString(unsigned int index, unsigned int propertyIndex, const wchar_t* v, unsigned int len) -{ - return addString(index,the_do->getProperty(propertyIndex), v, len); -} -bool SequenceImpl::addString(unsigned int index, const Property& p, const wchar_t* v, unsigned int len) -{ - return addSDOValue(index, p, SDOValue(v, len)); -} - -bool SequenceImpl::addBytes(unsigned int index, - const char* propertyName, - const char* v, - unsigned int len) -{ - return addSDOValue(index, propertyName, SDOValue(v, len)); -} - -bool SequenceImpl::addBytes(unsigned int index, unsigned int propertyIndex, const char* v, unsigned int len) -{ - return addBytes(index,the_do->getProperty(propertyIndex), v, len); -} -bool SequenceImpl::addBytes(unsigned int index, const Property& p, const char* v, unsigned int len) -{ - return addSDOValue(index, p, SDOValue(v, len)); -} - -unsigned int SequenceImpl::getBytesValue(unsigned int index, char* ptr, unsigned int max) -{ - - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getBytes(ptr, max); - } - else - { - return 0; - } -} -unsigned int SequenceImpl::getStringValue(unsigned int index, wchar_t* ptr, unsigned int max) -{ - - const SDOValue& result = getSDOValue(index); - - if (result.isSet()) - { - return result.getString(ptr, max); - } - else - { - return 0; - } -} - -}; -}; |