mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Add delete of object from Python
* Move several methods to protected * Add delete() to Python rips objects * Move functions to RiaGrpcHelper Co-authored-by: magnesj <magnesj@users.noreply.github.com>
This commit is contained in:
@@ -15,12 +15,13 @@
|
||||
// for more details.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RiaGrpcPdmObjectService.h"
|
||||
|
||||
#include "RiaApplication.h"
|
||||
#include "RiaGrpcCallbacks.h"
|
||||
#include "RiaGrpcHelper.h"
|
||||
|
||||
#include "ProjectDataModelCommands/CommandRouter/RimCommandRouter.h"
|
||||
#include "Rim3dView.h"
|
||||
#include "RimEclipseResultDefinition.h"
|
||||
#include "RimProject.h"
|
||||
@@ -168,7 +169,7 @@ RiaPdmObjectMethodStateHandler::RiaPdmObjectMethodStateHandler( bool clientToSer
|
||||
Status RiaPdmObjectMethodStateHandler::init( const rips::PdmObjectGetterRequest* request )
|
||||
{
|
||||
CAF_ASSERT( !m_clientToServerStreamer );
|
||||
m_fieldOwner = RiaGrpcPdmObjectService::findCafObjectFromRipsObject( request->object() );
|
||||
m_fieldOwner = RiaGrpcHelper::findCafObjectFromRipsObject( request->object() );
|
||||
QString fieldName = QString::fromStdString( request->method() );
|
||||
|
||||
std::vector<caf::PdmFieldHandle*> fields = m_fieldOwner->fields();
|
||||
@@ -220,7 +221,7 @@ Status RiaPdmObjectMethodStateHandler::init( const rips::PdmObjectSetterChunk* c
|
||||
CAF_ASSERT( chunk->has_set_request() );
|
||||
auto setRequest = chunk->set_request();
|
||||
auto methodRequest = setRequest.request();
|
||||
m_fieldOwner = RiaGrpcPdmObjectService::findCafObjectFromRipsObject( methodRequest.object() );
|
||||
m_fieldOwner = RiaGrpcHelper::findCafObjectFromRipsObject( methodRequest.object() );
|
||||
QString fieldName = QString::fromStdString( methodRequest.method() );
|
||||
int valueCount = setRequest.data_count();
|
||||
|
||||
@@ -230,30 +231,28 @@ Status RiaPdmObjectMethodStateHandler::init( const rips::PdmObjectSetterChunk* c
|
||||
auto scriptability = field->capability<caf::PdmAbstractFieldScriptingCapability>();
|
||||
if ( scriptability && scriptability->scriptFieldName() == fieldName )
|
||||
{
|
||||
caf::PdmProxyFieldHandle* proxyField = dynamic_cast<caf::PdmProxyFieldHandle*>( field );
|
||||
auto* proxyField = dynamic_cast<caf::PdmProxyFieldHandle*>( field );
|
||||
if ( proxyField )
|
||||
{
|
||||
m_proxyField = proxyField;
|
||||
|
||||
if ( dynamic_cast<caf::PdmProxyValueField<std::vector<int>>*>( field ) )
|
||||
{
|
||||
m_dataHolder.reset( new DataHolder<std::vector<int>>( std::vector<int>( valueCount ) ) );
|
||||
m_dataHolder = std::make_unique<DataHolder<std::vector<int>>>( std::vector<int>( valueCount ) );
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
else if ( dynamic_cast<caf::PdmProxyValueField<std::vector<double>>*>( field ) )
|
||||
if ( dynamic_cast<caf::PdmProxyValueField<std::vector<double>>*>( field ) )
|
||||
{
|
||||
m_dataHolder.reset( new DataHolder<std::vector<double>>( std::vector<double>( valueCount ) ) );
|
||||
m_dataHolder = std::make_unique<DataHolder<std::vector<double>>>( std::vector<double>( valueCount ) );
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
else if ( dynamic_cast<caf::PdmProxyValueField<std::vector<QString>>*>( field ) )
|
||||
if ( dynamic_cast<caf::PdmProxyValueField<std::vector<QString>>*>( field ) )
|
||||
{
|
||||
m_dataHolder.reset( new DataHolder<std::vector<QString>>( std::vector<QString>( valueCount ) ) );
|
||||
m_dataHolder = std::make_unique<DataHolder<std::vector<QString>>>( std::vector<QString>( valueCount ) );
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
CAF_ASSERT( false && "The proxy field data type is not yet supported for streaming fields" );
|
||||
}
|
||||
|
||||
CAF_ASSERT( false && "The proxy field data type is not yet supported for streaming fields" );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,7 +265,7 @@ Status RiaPdmObjectMethodStateHandler::init( const rips::PdmObjectSetterChunk* c
|
||||
Status RiaPdmObjectMethodStateHandler::assignReply( rips::PdmObjectGetterReply* reply )
|
||||
{
|
||||
CAF_ASSERT( m_dataHolder );
|
||||
const size_t packageSize = RiaGrpcServiceInterface::numberOfDataUnitsInPackage( m_dataHolder->dataSizeOf() );
|
||||
const size_t packageSize = RiaGrpcHelper::numberOfDataUnitsInPackage( m_dataHolder->dataSizeOf() );
|
||||
size_t indexInPackage = 0u;
|
||||
m_dataHolder->reserveReplyStorage( reply );
|
||||
|
||||
@@ -377,7 +376,7 @@ grpc::Status RiaGrpcPdmObjectService::GetDescendantPdmObjects( grpc::ServerConte
|
||||
const rips::PdmDescendantObjectRequest* request,
|
||||
rips::PdmObjectArray* reply )
|
||||
{
|
||||
auto matchingObject = findCafObjectFromRipsObject( request->object() );
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( request->object() );
|
||||
|
||||
if ( matchingObject )
|
||||
{
|
||||
@@ -402,7 +401,7 @@ grpc::Status RiaGrpcPdmObjectService::GetChildPdmObjects( grpc::ServerContext*
|
||||
const rips::PdmChildObjectRequest* request,
|
||||
rips::PdmObjectArray* reply )
|
||||
{
|
||||
auto matchingObject = findCafObjectFromRipsObject( request->object() );
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( request->object() );
|
||||
if ( matchingObject )
|
||||
{
|
||||
QString fieldName = QString::fromStdString( request->child_field() );
|
||||
@@ -433,7 +432,7 @@ grpc::Status RiaGrpcPdmObjectService::UpdateExistingPdmObject( grpc::ServerConte
|
||||
const rips::PdmObject* request,
|
||||
rips::Empty* response )
|
||||
{
|
||||
auto matchingObject = findCafObjectFromRipsObject( *request );
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( *request );
|
||||
|
||||
if ( matchingObject )
|
||||
{
|
||||
@@ -459,6 +458,36 @@ grpc::Status RiaGrpcPdmObjectService::UpdateExistingPdmObject( grpc::ServerConte
|
||||
return grpc::Status( grpc::NOT_FOUND, "PdmObject not found" );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
grpc::Status RiaGrpcPdmObjectService::DeleteExistingPdmObject( grpc::ServerContext* context,
|
||||
const rips::PdmObject* request,
|
||||
rips::Empty* response )
|
||||
{
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( *request );
|
||||
|
||||
if ( matchingObject && matchingObject->parentField() )
|
||||
{
|
||||
auto parentField = matchingObject->parentField();
|
||||
parentField->removeChild( matchingObject );
|
||||
|
||||
auto obj = parentField->ownerObject();
|
||||
if ( obj && obj->uiCapability() )
|
||||
{
|
||||
std::vector<caf::PdmObjectHandle*> referringObjects;
|
||||
|
||||
obj->onChildDeleted( nullptr, referringObjects );
|
||||
obj->uiCapability()->updateAllRequiredEditors();
|
||||
}
|
||||
|
||||
delete matchingObject;
|
||||
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
return grpc::Status( grpc::NOT_FOUND, "PdmObject not found" );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -466,7 +495,7 @@ grpc::Status RiaGrpcPdmObjectService::CreateChildPdmObject( grpc::ServerContext*
|
||||
const rips::CreatePdmChildObjectRequest* request,
|
||||
rips::PdmObject* reply )
|
||||
{
|
||||
auto matchingObject = findCafObjectFromRipsObject( request->object() );
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( request->object() );
|
||||
|
||||
if ( matchingObject )
|
||||
{
|
||||
@@ -517,7 +546,7 @@ grpc::Status RiaGrpcPdmObjectService::CallPdmObjectMethod( grpc::ServerContext*
|
||||
const rips::PdmObjectMethodRequest* request,
|
||||
rips::PdmObject* reply )
|
||||
{
|
||||
auto matchingObject = findCafObjectFromRipsObject( request->object() );
|
||||
auto matchingObject = RiaGrpcHelper::findCafObjectFromRipsObject( request->object() );
|
||||
if ( matchingObject )
|
||||
{
|
||||
QString methodKeyword = QString::fromStdString( request->method() );
|
||||
@@ -538,15 +567,13 @@ grpc::Status RiaGrpcPdmObjectService::CallPdmObjectMethod( grpc::ServerContext*
|
||||
}
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( method->isNullptrValidResult() )
|
||||
{
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
return grpc::Status( grpc::NOT_FOUND, "No result returned from Method" );
|
||||
if ( method->isNullptrValidResult() )
|
||||
{
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
return grpc::Status( grpc::NOT_FOUND, "No result returned from Method" );
|
||||
}
|
||||
return grpc::Status( grpc::NOT_FOUND, "Could not find Method" );
|
||||
}
|
||||
@@ -571,6 +598,9 @@ std::vector<RiaGrpcCallbackInterface*> RiaGrpcPdmObjectService::createCallbacks(
|
||||
new RiaGrpcUnaryCallback<Self, PdmObject, Empty>( this,
|
||||
&Self::UpdateExistingPdmObject,
|
||||
&Self::RequestUpdateExistingPdmObject ),
|
||||
new RiaGrpcUnaryCallback<Self, PdmObject, Empty>( this,
|
||||
&Self::DeleteExistingPdmObject,
|
||||
&Self::RequestDeleteExistingPdmObject ),
|
||||
new RiaGrpcUnaryCallback<Self, CreatePdmChildObjectRequest, PdmObject>( this,
|
||||
&Self::CreateChildPdmObject,
|
||||
&Self::RequestCreateChildPdmObject ),
|
||||
@@ -596,41 +626,5 @@ std::vector<RiaGrpcCallbackInterface*> RiaGrpcPdmObjectService::createCallbacks(
|
||||
};
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
caf::PdmObject* RiaGrpcPdmObjectService::findCafObjectFromRipsObject( const rips::PdmObject& ripsObject )
|
||||
{
|
||||
QString scriptClassName = QString::fromStdString( ripsObject.class_keyword() );
|
||||
uint64_t address = ripsObject.address();
|
||||
return findCafObjectFromScriptNameAndAddress( scriptClassName, address );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
caf::PdmObject* RiaGrpcPdmObjectService::findCafObjectFromScriptNameAndAddress( const QString& scriptClassName,
|
||||
uint64_t address )
|
||||
{
|
||||
QString classKeyword = caf::PdmObjectScriptingCapabilityRegister::classKeywordFromScriptClassName( scriptClassName );
|
||||
|
||||
if ( classKeyword == RimCommandRouter::classKeywordStatic() ) return RiaApplication::instance()->commandRouter();
|
||||
|
||||
RimProject* project = RimProject::current();
|
||||
std::vector<caf::PdmObject*> objectsOfCurrentClass;
|
||||
|
||||
project->descendantsIncludingThisFromClassKeyword( classKeyword, objectsOfCurrentClass );
|
||||
|
||||
caf::PdmObject* matchingObject = nullptr;
|
||||
for ( caf::PdmObject* testObject : objectsOfCurrentClass )
|
||||
{
|
||||
if ( reinterpret_cast<uint64_t>( testObject ) == address )
|
||||
{
|
||||
matchingObject = testObject;
|
||||
}
|
||||
}
|
||||
return matchingObject;
|
||||
}
|
||||
|
||||
static bool RiaGrpcPdmObjectService_init = RiaGrpcServiceFactory::instance()->registerCreator<RiaGrpcPdmObjectService>(
|
||||
typeid( RiaGrpcPdmObjectService ).hash_code() );
|
||||
|
||||
Reference in New Issue
Block a user