diff --git a/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteEclipseCasesFeature.cpp b/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteEclipseCasesFeature.cpp index a073a383d8..b3ba6e2baa 100644 --- a/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteEclipseCasesFeature.cpp +++ b/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteEclipseCasesFeature.cpp @@ -107,10 +107,19 @@ void RicPasteEclipseCasesFeature::addCasesToGridCaseGroup(PdmObjectGroup& object RimProject* proj = RiaApplication::instance()->project(); CVF_ASSERT(proj); - std::vector > typedObjects; - objectGroup.createCopyByType(&typedObjects, PdmDefaultObjectFactory::instance()); + std::vector resultCases; - if (typedObjects.size() == 0) + for (size_t i = 0; i < objectGroup.objects.size(); i++) + { + RimEclipseResultCase* eclCase = dynamic_cast(objectGroup.objects[i]); + if (eclCase) + { + RimEclipseResultCase* eclCaseCopy = dynamic_cast(eclCase->copyByXmlSerialization(PdmDefaultObjectFactory::instance())); + resultCases.push_back(eclCaseCopy); + } + } + + if (resultCases.size() == 0) { return; } @@ -130,9 +139,9 @@ void RicPasteEclipseCasesFeature::addCasesToGridCaseGroup(PdmObjectGroup& object std::vector insertedCases; // Add cases to case group - for (size_t i = 0; i < typedObjects.size(); i++) + for (size_t i = 0; i < resultCases.size(); i++) { - RimEclipseResultCase* rimResultReservoir = typedObjects[i]; + RimEclipseResultCase* rimResultReservoir = resultCases[i]; proj->assignCaseIdToCase(rimResultReservoir); @@ -144,19 +153,11 @@ void RicPasteEclipseCasesFeature::addCasesToGridCaseGroup(PdmObjectGroup& object insertedCases.push_back(rimResultReservoir); } - // Initialize the new objects - for (size_t i = 0; i < insertedCases.size(); i++) - { - RimEclipseResultCase* rimResultReservoir = insertedCases[i]; - rimResultReservoir->initAfterReadRecursively(); - } - // Load stuff for (size_t i = 0; i < insertedCases.size(); i++) { RimEclipseResultCase* rimResultReservoir = insertedCases[i]; - if (!mainResultCase) { rimResultReservoir->openEclipseGridFile(); diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp index 7a9fb59c64..4dda13ced0 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp @@ -170,6 +170,21 @@ PdmObjectHandle* PdmXmlObjectHandle::readUnknownObjectFromXmlString(const QStrin return newObject; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +PdmObjectHandle* PdmXmlObjectHandle::copyByXmlSerialization(PdmObjectFactory* objectFactory) +{ + this->setupBeforeSaveRecursively(); + + QString xmlString = this->writeObjectToXmlString(); + + PdmObjectHandle* objectCopy = PdmXmlObjectHandle::readUnknownObjectFromXmlString(xmlString, objectFactory); + objectCopy->xmlCapability()->initAfterReadRecursively(); + + return objectCopy; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.h index 4bf992e5d6..0759889f52 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.h @@ -36,6 +36,7 @@ public: void readObjectFromXmlString(const QString& xmlString, PdmObjectFactory* objectFactory); QString writeObjectToXmlString(); static PdmObjectHandle* readUnknownObjectFromXmlString(const QString& xmlString, PdmObjectFactory* objectFactory); + PdmObjectHandle* copyByXmlSerialization(PdmObjectFactory* objectFactory); // Main XML serialization methods that is used internally by the document serialization system // Not supposed to be used directly.