| 638 | } |
| 639 | |
| 640 | boost::optional<WorkspaceObject> Workspace_Impl::addObject(const IdfObject& idfObject) { |
| 641 | WorkspaceObject_ImplPtr objectImplPtr; |
| 642 | |
| 643 | // handle potential name conflicts up front |
| 644 | IdfObject workingIdfObject = idfObject; // shallow copy |
| 645 | if (idfObject.iddObject().hasNameField()) { |
| 646 | OptionalString currentName = idfObject.name(); |
| 647 | if (currentName && !currentName->empty()) { |
| 648 | bool potentialConflict = potentialNameConflict(idfObject.name().get(), idfObject.iddObject()); |
| 649 | if (potentialConflict) { |
| 650 | LOG(Info, "Resetting name of " << idfObject.briefDescription() << " to avoid name conflict upon adding it to the Workspace."); |
| 651 | workingIdfObject = idfObject.clone(); // deep copy |
| 652 | // clear name of single object--WorkspaceObject_Impl constructor will make new one |
| 653 | bool ok = workingIdfObject.setName("").has_value(); |
| 654 | OS_ASSERT(ok); |
| 655 | } |
| 656 | } |
| 657 | } |
| 658 | // create new object |
| 659 | objectImplPtr = this->createObject(workingIdfObject, false); |
| 660 | |
| 661 | // add to workspace |
| 662 | WorkspaceObject_ImplPtrVector objectImplPtrs(1u, objectImplPtr); |
| 663 | WorkspaceObjectVector objects = addObjects(objectImplPtrs, false); |
| 664 | |
| 665 | // assess result and return |
| 666 | if (objects.size() != 1) { |
| 667 | OS_ASSERT(objects.empty()); |
| 668 | return boost::none; |
| 669 | } |
| 670 | return objects[0]; |
| 671 | } |
| 672 | |
| 673 | boost::optional<WorkspaceObject> Workspace_Impl::insertObject(const IdfObject& idfObject) { |
| 674 | OptionalWorkspaceObject result = getEquivalentObject(idfObject); |
no test coverage detected