mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3822 AppFwk : Improve resolve of PtrField
This commit is contained in:
parent
687aadcfde
commit
90550fe561
@ -16,6 +16,8 @@ public:
|
|||||||
public:
|
public:
|
||||||
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
||||||
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
||||||
|
bool resolveReferences() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FieldType* m_field;
|
FieldType* m_field;
|
||||||
};
|
};
|
||||||
@ -40,7 +42,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
||||||
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
||||||
void resolveReferences() override;
|
bool resolveReferences() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FieldType* m_field;
|
FieldType* m_field;
|
||||||
@ -69,7 +71,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
||||||
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
||||||
void resolveReferences() override;
|
bool resolveReferences() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FieldType* m_field;
|
FieldType* m_field;
|
||||||
@ -93,6 +95,8 @@ public:
|
|||||||
public:
|
public:
|
||||||
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
||||||
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
||||||
|
bool resolveReferences() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FieldType* m_field;
|
FieldType* m_field;
|
||||||
};
|
};
|
||||||
@ -111,6 +115,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) override;
|
||||||
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
void writeFieldData(QXmlStreamWriter& xmlStream) const override;
|
||||||
|
bool resolveReferences() override;
|
||||||
private:
|
private:
|
||||||
FieldType* m_field;
|
FieldType* m_field;
|
||||||
};
|
};
|
||||||
|
@ -38,6 +38,16 @@ void caf::PdmFieldXmlCap<FieldType>::writeFieldData(QXmlStreamWriter& xmlStream)
|
|||||||
PdmFieldWriter<typename FieldType::FieldDataType>::writeFieldData(m_field->value(), xmlStream);
|
PdmFieldWriter<typename FieldType::FieldDataType>::writeFieldData(m_field->value(), xmlStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
template < typename FieldType>
|
||||||
|
bool caf::PdmFieldXmlCap<FieldType>::resolveReferences()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
/// XML Implementation for PdmPtrField<>
|
/// XML Implementation for PdmPtrField<>
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@ -97,14 +107,16 @@ void caf::PdmFieldXmlCap<FieldType>::writeFieldData(QXmlStreamWriter& xmlStream)
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
template < typename DataType>
|
template < typename DataType>
|
||||||
void caf::PdmFieldXmlCap< PdmPtrField<DataType*> >::resolveReferences()
|
bool caf::PdmFieldXmlCap< PdmPtrField<DataType*> >::resolveReferences()
|
||||||
{
|
{
|
||||||
if (m_isResolved) return;
|
if (m_isResolved) return true;
|
||||||
if (m_referenceString.isEmpty()) return;
|
if (m_referenceString.isEmpty()) return true;
|
||||||
|
|
||||||
PdmObjectHandle* objHandle = PdmReferenceHelper::objectFromFieldReference(this->fieldHandle(), m_referenceString);
|
PdmObjectHandle* objHandle = PdmReferenceHelper::objectFromFieldReference(this->fieldHandle(), m_referenceString);
|
||||||
m_field->setRawPtr(objHandle);
|
m_field->setRawPtr(objHandle);
|
||||||
m_isResolved = true;
|
m_isResolved = true;
|
||||||
|
|
||||||
|
return objHandle != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@ -163,20 +175,29 @@ void caf::PdmFieldXmlCap<FieldType>::writeFieldData(QXmlStreamWriter& xmlStream)
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
template < typename DataType>
|
template < typename DataType>
|
||||||
void caf::PdmFieldXmlCap< PdmPtrArrayField<DataType*> >::resolveReferences()
|
bool caf::PdmFieldXmlCap< PdmPtrArrayField<DataType*> >::resolveReferences()
|
||||||
{
|
{
|
||||||
if(m_isResolved) return;
|
if(m_isResolved) return true;
|
||||||
if(m_referenceString.isEmpty()) return;
|
if(m_referenceString.isEmpty()) return true;
|
||||||
m_field->clear();
|
m_field->clear();
|
||||||
|
|
||||||
|
bool foundValidObjectFromString = true;
|
||||||
QStringList tokens = m_referenceString.split('|');
|
QStringList tokens = m_referenceString.split('|');
|
||||||
for(int i = 0; i < tokens.size(); ++i)
|
for(int i = 0; i < tokens.size(); ++i)
|
||||||
{
|
{
|
||||||
PdmObjectHandle* objHandle = PdmReferenceHelper::objectFromFieldReference(this->fieldHandle(), tokens[i]);
|
PdmObjectHandle* objHandle = PdmReferenceHelper::objectFromFieldReference(this->fieldHandle(), tokens[i]);
|
||||||
|
if (!tokens[i].isEmpty() && !objHandle)
|
||||||
|
{
|
||||||
|
foundValidObjectFromString = false;
|
||||||
|
}
|
||||||
|
|
||||||
m_field->m_pointers.push_back(NULL);
|
m_field->m_pointers.push_back(NULL);
|
||||||
m_field->m_pointers.back().setRawPtr(objHandle);
|
m_field->m_pointers.back().setRawPtr(objHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_isResolved = true;
|
m_isResolved = true;
|
||||||
|
|
||||||
|
return foundValidObjectFromString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -281,6 +302,15 @@ void caf::PdmFieldXmlCap< caf::PdmChildField<DataType*> >::writeFieldData(QXmlSt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
template < typename DataType>
|
||||||
|
bool caf::PdmFieldXmlCap<caf::PdmChildField<DataType *>>::resolveReferences()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
/// XML Implementation for PdmChildArrayField<>
|
/// XML Implementation for PdmChildArrayField<>
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@ -373,4 +403,14 @@ void caf::PdmFieldXmlCap< caf::PdmChildArrayField<DataType*> >::readFieldData(QX
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
template < typename DataType>
|
||||||
|
bool caf::PdmFieldXmlCap<caf::PdmChildArrayField<DataType *>>::resolveReferences()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // End namespace caf
|
} // End namespace caf
|
||||||
|
@ -40,7 +40,7 @@ public:
|
|||||||
virtual void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) = 0;
|
virtual void readFieldData(QXmlStreamReader& xmlStream, PdmObjectFactory* objectFactory) = 0;
|
||||||
virtual void writeFieldData(QXmlStreamWriter& xmlStream) const = 0;
|
virtual void writeFieldData(QXmlStreamWriter& xmlStream) const = 0;
|
||||||
|
|
||||||
virtual void resolveReferences() { };
|
virtual bool resolveReferences() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool assertValid() const;
|
bool assertValid() const;
|
||||||
|
@ -299,7 +299,7 @@ void PdmXmlObjectHandle::initAfterReadRecursively(PdmObjectHandle* object)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void PdmXmlObjectHandle::resolveReferencesRecursively(PdmObjectHandle* object)
|
void PdmXmlObjectHandle::resolveReferencesRecursively(PdmObjectHandle* object, std::vector<PdmFieldHandle*>* fieldWithFailingResolve)
|
||||||
{
|
{
|
||||||
if (object == nullptr) return;
|
if (object == nullptr) return;
|
||||||
|
|
||||||
@ -315,14 +315,35 @@ void PdmXmlObjectHandle::resolveReferencesRecursively(PdmObjectHandle* object)
|
|||||||
{
|
{
|
||||||
field->childObjects(&children);
|
field->childObjects(&children);
|
||||||
|
|
||||||
field->xmlCapability()->resolveReferences();
|
bool resolvedOk = field->xmlCapability()->resolveReferences();
|
||||||
|
if (fieldWithFailingResolve && !resolvedOk)
|
||||||
|
{
|
||||||
|
fieldWithFailingResolve->push_back(field);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t cIdx;
|
size_t cIdx;
|
||||||
for (cIdx = 0; cIdx < children.size(); ++cIdx)
|
for (cIdx = 0; cIdx < children.size(); ++cIdx)
|
||||||
{
|
{
|
||||||
resolveReferencesRecursively(children[cIdx]);
|
resolveReferencesRecursively(children[cIdx], fieldWithFailingResolve);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void PdmXmlObjectHandle::resolveReferencesRecursively(std::vector<PdmFieldHandle*>* fieldWithFailingResolve /*= nullptr*/)
|
||||||
|
{
|
||||||
|
std::vector<PdmFieldHandle*> tempFields;
|
||||||
|
resolveReferencesRecursively(this->m_owner, &tempFields);
|
||||||
|
|
||||||
|
if (fieldWithFailingResolve)
|
||||||
|
{
|
||||||
|
for (auto f : tempFields)
|
||||||
|
{
|
||||||
|
fieldWithFailingResolve->push_back(f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class QXmlStreamReader;
|
class QXmlStreamReader;
|
||||||
class QXmlStreamWriter;
|
class QXmlStreamWriter;
|
||||||
|
|
||||||
@ -15,6 +17,7 @@ class PdmXmlFieldHandle;
|
|||||||
class PdmObjectHandle;
|
class PdmObjectHandle;
|
||||||
class PdmObjectFactory;
|
class PdmObjectFactory;
|
||||||
class PdmReferenceHelper;
|
class PdmReferenceHelper;
|
||||||
|
class PdmFieldHandle;
|
||||||
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@ -51,7 +54,8 @@ public:
|
|||||||
|
|
||||||
void initAfterReadRecursively() { initAfterReadRecursively(this->m_owner); };
|
void initAfterReadRecursively() { initAfterReadRecursively(this->m_owner); };
|
||||||
void setupBeforeSaveRecursively() { setupBeforeSaveRecursively(this->m_owner); };
|
void setupBeforeSaveRecursively() { setupBeforeSaveRecursively(this->m_owner); };
|
||||||
void resolveReferencesRecursively() { resolveReferencesRecursively(this->m_owner); };
|
|
||||||
|
void resolveReferencesRecursively(std::vector<PdmFieldHandle*>* fieldWithFailingResolve = nullptr);
|
||||||
|
|
||||||
protected: // Virtual
|
protected: // Virtual
|
||||||
/// Method gets called from PdmDocument after all objects are read.
|
/// Method gets called from PdmDocument after all objects are read.
|
||||||
@ -68,7 +72,7 @@ protected: // Virtual
|
|||||||
private:
|
private:
|
||||||
void initAfterReadRecursively(PdmObjectHandle* object);
|
void initAfterReadRecursively(PdmObjectHandle* object);
|
||||||
void setupBeforeSaveRecursively(PdmObjectHandle * object);
|
void setupBeforeSaveRecursively(PdmObjectHandle * object);
|
||||||
void resolveReferencesRecursively(PdmObjectHandle* object);
|
void resolveReferencesRecursively(PdmObjectHandle* object, std::vector<PdmFieldHandle*>* fieldWithFailingResolve);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class PdmObjectHandle ; // Only temporary for void PdmObject::addFieldNoDefault( ) accessing findField
|
friend class PdmObjectHandle ; // Only temporary for void PdmObject::addFieldNoDefault( ) accessing findField
|
||||||
|
Loading…
Reference in New Issue
Block a user