override fun newLocalCopy()

in dnq-transient-store/src/main/kotlin/com/jetbrains/teamsys/dnq/database/TransientSessionImpl.kt [390:415]


    override fun newLocalCopy(entity: TransientEntity): TransientEntity {
        assertOpen("create local copy")
        val tracker = transientChangesTracker
        return when {
            entity.isReadonly || entity.isWrapper -> entity
            tracker.isRemoved(entity) -> {
                logger.warn { "Entity [$entity] was removed by you." }
                throw EntityRemovedException(entity)
            }

            tracker.isNew(entity) -> entity
            else -> {
                val entityId = entity.id
                if (entityId in loadedIds) {
                    return entity
                }
                try {
                    // load persistent entity from database by id
                    newEntityImpl(persistentTransactionInternal.getEntity(entityId))
                } catch (e: EntityRemovedInDatabaseException) {
                    logger.warn { "Entity [$entity] was removed in database, can't create local copy" }
                    throw e
                }
            }
        }
    }