Program: 68699
Project: 68699
Buggy source:
/** 
 * INTERNAL: Sets the value of the given property of the object to the new value. <p> The use of a false updateSequence flag is internally implemented during an SDOSequence.add() call. Refactor: we need to abstract this function using a type of Command pattern to handle the sequence context.
 * @param property
 * @param value
 * @param updateSequence
 * @throws UnsupportedOperationException
 * @throws IllegalArgumentException
 */
public void set(Property property,Object value,boolean updateSequence) throws UnsupportedOperationException, IllegalArgumentException {
  if (null == property) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (property.isReadOnly()) {
    throw new UnsupportedOperationException("String_Node_Str" + property.getName() + "String_Node_Str"+ getType().getName());
  }
  if (null == getType()) {
    throw new UnsupportedOperationException("String_Node_Str");
  }
  if (property.isOpenContent() && !getType().isOpen()) {
    throw new IllegalArgumentException("String_Node_Str" + this + "String_Node_Str"+ property.getName());
  }
  Object oldValue=get(property);
  boolean wasSet=isSet(property);
  if (wasSet && (oldValue == value)) {
    return;
  }
 else {
    _setModified(true);
  }
  if (property.isMany()) {
    if (null == value) {
      value=new ListWrapper(this,property);
    }
    if (!(value instanceof Collection)) {
      throw new IllegalArgumentException("String_Node_Str");
    }
    List listValue=(List)value;
    if (property.isContainment() || isContainedByDataGraph(property)) {
      for (int i=0, size=listValue.size(); i < size; i++) {
        Object next=listValue.get(i);
        if (next instanceof SDODataObject) {
          if (parentContains(next)) {
            throw new IllegalArgumentException("String_Node_Str");
          }
        }
      }
    }
    listValue=(List)oldValue;
    ((ListWrapper)listValue).clear(updateSequence);
    ((ListWrapper)listValue).addAll((Collection)value,updateSequence);
  }
 else {
    if (property.isContainment() || isContainedByDataGraph(property)) {
      if (value instanceof SDODataObject) {
        if (parentContains(value)) {
          throw new IllegalArgumentException("String_Node_Str");
        }
      }
      detach(property,oldValue);
      if ((value != null) && value instanceof DataObject) {
        updateContainment(property,(DataObject)value);
      }
    }
    setPropertyInternal(property,value,updateSequence);
  }
  if (getType().isOpen() && property.isOpenContent()) {
    addOpenContentProperty(property);
  }
}

Fixed version (ground truth):
/** 
 * INTERNAL: Sets the value of the given property of the object to the new value. <p> The use of a false updateSequence flag is internally implemented during an SDOSequence.add() call. Refactor: we need to abstract this function using a type of Command pattern to handle the sequence context.
 * @param property
 * @param value
 * @param updateSequence
 * @throws UnsupportedOperationException
 * @throws IllegalArgumentException
 */
public void set(Property property,Object value,boolean updateSequence) throws UnsupportedOperationException, IllegalArgumentException {
  if (null == property) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (property.isReadOnly()) {
    throw new UnsupportedOperationException("String_Node_Str" + property.getName() + "String_Node_Str"+ getType().getName());
  }
  setInternal(property,value,updateSequence);
}