Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
C
caosdb-server
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
caosdb
Software
caosdb-server
Commits
c7d76423
Verified
Commit
c7d76423
authored
3 years ago
by
Timm Fitschen
Browse files
Options
Downloads
Patches
Plain Diff
WIP: multi retrieve
parent
3b0e40ae
Branches
Branches containing commit
Tags
Tags containing commit
2 merge requests
!44
Release 0.6
,
!43
Merge f-GRPC-main to dev
Pipeline
#11125
passed
3 years ago
Stage: info
Stage: test
Stage: deploy
Changes
1
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+129
-23
129 additions, 23 deletions
.../org/caosdb/server/grpc/EntityTransactionServiceImpl.java
with
129 additions
and
23 deletions
src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+
129
−
23
View file @
c7d76423
package
org.caosdb.server.grpc
;
package
org.caosdb.server.grpc
;
import
io.grpc.stub.StreamObserver
;
import
io.grpc.stub.StreamObserver
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -20,6 +21,8 @@ import org.caosdb.api.entity.v1alpha1.TransactionRequest;
...
@@ -20,6 +21,8 @@ import org.caosdb.api.entity.v1alpha1.TransactionRequest;
import
org.caosdb.api.entity.v1alpha1.TransactionRequest.WrappedRequestsCase
;
import
org.caosdb.api.entity.v1alpha1.TransactionRequest.WrappedRequestsCase
;
import
org.caosdb.api.entity.v1alpha1.TransactionResponse
;
import
org.caosdb.api.entity.v1alpha1.TransactionResponse
;
import
org.caosdb.api.entity.v1alpha1.Version
;
import
org.caosdb.api.entity.v1alpha1.Version
;
import
org.caosdb.server.datatype.GenericValue
;
import
org.caosdb.server.datatype.Value
;
import
org.caosdb.server.entity.DeleteEntity
;
import
org.caosdb.server.entity.DeleteEntity
;
import
org.caosdb.server.entity.EntityInterface
;
import
org.caosdb.server.entity.EntityInterface
;
import
org.caosdb.server.entity.InsertEntity
;
import
org.caosdb.server.entity.InsertEntity
;
...
@@ -27,6 +30,7 @@ import org.caosdb.server.entity.MagicTypes;
...
@@ -27,6 +30,7 @@ import org.caosdb.server.entity.MagicTypes;
import
org.caosdb.server.entity.Message
;
import
org.caosdb.server.entity.Message
;
import
org.caosdb.server.entity.RetrieveEntity
;
import
org.caosdb.server.entity.RetrieveEntity
;
import
org.caosdb.server.entity.Role
;
import
org.caosdb.server.entity.Role
;
import
org.caosdb.server.entity.StatementStatus
;
import
org.caosdb.server.entity.container.ParentContainer
;
import
org.caosdb.server.entity.container.ParentContainer
;
import
org.caosdb.server.entity.container.PropertyContainer
;
import
org.caosdb.server.entity.container.PropertyContainer
;
import
org.caosdb.server.entity.container.RetrieveContainer
;
import
org.caosdb.server.entity.container.RetrieveContainer
;
...
@@ -203,27 +207,33 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
...
@@ -203,27 +207,33 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
return
Integer
.
parseInt
(
id
);
return
Integer
.
parseInt
(
id
);
}
}
public
RetrieveResponse
retrieve
(
final
QueryOrIdRequest
queryOrIdRequest
)
throws
Exception
{
public
MultiTransactionResponse
retrieve
(
final
MultiTransactionRequest
request
)
throws
Exception
{
final
MultiTransactionResponse
.
Builder
builder
=
MultiTransactionResponse
.
newBuilder
();
Entity
responseEntity
=
null
;
final
org
.
caosdb
.
api
.
entity
.
v1alpha1
.
RetrieveResponse
.
Builder
builder
=
RetrieveResponse
.
newBuilder
();
final
RetrieveContainer
container
=
final
RetrieveContainer
container
=
new
RetrieveContainer
(
SecurityUtils
.
getSubject
(),
getTimestamp
(),
getSRID
(),
null
);
new
RetrieveContainer
(
SecurityUtils
.
getSubject
(),
getTimestamp
(),
getSRID
(),
null
);
try
{
final
RetrieveEntity
entity
=
new
RetrieveEntity
(
getId
(
queryOrIdRequest
.
getId
()));
container
.
add
(
entity
);
final
Retrieve
transaction
=
new
Retrieve
(
container
);
for
(
final
TransactionRequest
sub_request
:
request
.
getRequestsList
())
{
transaction
.
execute
();
final
String
id
=
sub_request
.
getRetrieveRequest
().
getId
();
responseEntity
=
convert
(
transaction
.
getContainer
().
get
(
0
));
try
{
}
catch
(
final
NumberFormatException
e
)
{
final
RetrieveEntity
entity
=
new
RetrieveEntity
(
getId
(
id
));
// ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
container
.
add
(
entity
);
// exist.
responseEntity
=
entityDoesNotExist
(
queryOrIdRequest
.
getId
());
builder
.
addResponses
(
TransactionResponse
.
newBuilder
()
.
setRetrieveResponse
(
RetrieveResponse
.
newBuilder
().
setEntity
(
convert
(
entity
))));
}
catch
(
final
NumberFormatException
e
)
{
// ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
// exist.
builder
.
addResponses
(
TransactionResponse
.
newBuilder
()
.
setRetrieveResponse
(
RetrieveResponse
.
newBuilder
().
setEntity
(
entityDoesNotExist
(
id
))));
}
}
}
builder
.
setEntity
(
responseEntity
);
final
Retrieve
transaction
=
new
Retrieve
(
container
);
transaction
.
execute
();
return
builder
.
build
();
return
builder
.
build
();
}
}
...
@@ -244,17 +254,26 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
...
@@ -244,17 +254,26 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
public
MultiTransactionResponse
transaction
(
final
MultiTransactionRequest
request
)
public
MultiTransactionResponse
transaction
(
final
MultiTransactionRequest
request
)
throws
Exception
{
throws
Exception
{
final
TransactionResponse
response
=
singleTransaction
(
request
.
getRequests
(
0
));
// we currently can only process one request type per multi transaction request.
return
MultiTransactionResponse
.
newBuilder
().
addResponses
(
response
).
build
();
WrappedRequestsCase
requestCase
=
WrappedRequestsCase
.
WRAPPEDREQUESTS_NOT_SET
;
if
(
request
.
getRequestsCount
()
>
0
)
{
requestCase
=
request
.
getRequests
(
0
).
getWrappedRequestsCase
();
}
switch
(
requestCase
)
{
case
RETRIEVE_REQUEST:
return
retrieve
(
request
);
default
:
return
MultiTransactionResponse
.
newBuilder
()
.
addResponses
(
singleTransaction
(
request
.
getRequests
(
0
)))
.
build
();
}
}
}
public
TransactionResponse
singleTransaction
(
final
TransactionRequest
request
)
throws
Exception
{
public
TransactionResponse
singleTransaction
(
final
TransactionRequest
request
)
throws
Exception
{
final
WrappedRequestsCase
requestCase
=
request
.
getWrappedRequestsCase
();
final
WrappedRequestsCase
requestCase
=
request
.
getWrappedRequestsCase
();
switch
(
requestCase
)
{
switch
(
requestCase
)
{
case
RETRIEVE_REQUEST:
return
TransactionResponse
.
newBuilder
()
.
setRetrieveResponse
(
retrieve
(
request
.
getRetrieveRequest
()))
.
build
();
case
INSERT_REQUEST:
case
INSERT_REQUEST:
return
TransactionResponse
.
newBuilder
()
return
TransactionResponse
.
newBuilder
()
.
setInsertResponse
(
insert
(
request
.
getInsertRequest
()))
.
setInsertResponse
(
insert
(
request
.
getInsertRequest
()))
...
@@ -334,15 +353,102 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
...
@@ -334,15 +353,102 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
}
}
}
}
public
Property
getUnit
(
final
String
unitStr
)
{
final
EntityInterface
magicUnit
=
MagicTypes
.
UNIT
.
getEntity
();
final
Property
unit
=
new
Property
();
unit
.
setDescription
(
magicUnit
.
getDescription
());
unit
.
setName
(
magicUnit
.
getName
());
unit
.
setId
(
magicUnit
.
getId
());
unit
.
setDatatype
(
magicUnit
.
getDatatype
());
unit
.
setStatementStatus
(
StatementStatus
.
FIX
);
unit
.
setValue
(
new
GenericValue
(
unitStr
));
unit
.
setEntityStatus
(
EntityStatus
.
QUALIFIED
);
return
unit
;
}
public
Value
getValue
(
final
String
valString
)
{
return
new
GenericValue
(
valString
);
}
private
InsertEntity
convert
(
final
Entity
insertEntity
)
{
private
InsertEntity
convert
(
final
Entity
insertEntity
)
{
final
InsertEntity
entity
=
final
InsertEntity
entity
=
new
InsertEntity
(
new
InsertEntity
(
insertEntity
.
getName
().
isEmpty
()
?
null
:
insertEntity
.
getName
(),
insertEntity
.
getName
().
isEmpty
()
?
null
:
insertEntity
.
getName
(),
Role
.
parse
(
insertEntity
.
getRole
()));
Role
.
parse
(
insertEntity
.
getRole
()));
// TODO (other basic attributes, properties, parents)
entity
.
setDescription
(
insertEntity
.
getDescription
().
isBlank
()
?
null
:
insertEntity
.
getDescription
());
if
(!
insertEntity
.
getUnit
().
isBlank
())
{
entity
.
addProperty
(
getUnit
(
insertEntity
.
getUnit
()));
}
entity
.
setDatatype
(
insertEntity
.
getDatatype
().
isBlank
()
?
null
:
insertEntity
.
getDatatype
());
if
(!
insertEntity
.
getValue
().
isBlank
())
{
entity
.
setValue
(
getValue
(
insertEntity
.
getValue
()));
}
if
(
insertEntity
.
getPropertiesCount
()
>
0
)
{
entity
.
getProperties
().
addAll
(
convertProperties
(
insertEntity
.
getPropertiesList
()));
}
if
(
insertEntity
.
getParentsCount
()
>
0
)
{
entity
.
getParents
().
addAll
(
convertParents
(
insertEntity
.
getParentsList
()));
}
return
entity
;
return
entity
;
}
}
private
Collection
<
Property
>
convertProperties
(
final
List
<
org
.
caosdb
.
api
.
entity
.
v1alpha1
.
Property
>
propertiesList
)
{
final
Collection
<
Property
>
result
=
new
LinkedList
<>();
propertiesList
.
forEach
(
e
->
{
result
.
add
(
convert
(
e
));
});
return
result
;
}
private
Property
convert
(
final
org
.
caosdb
.
api
.
entity
.
v1alpha1
.
Property
e
)
{
final
Property
result
=
new
Property
();
try
{
result
.
setId
(
e
.
getId
().
isBlank
()
?
null
:
getId
(
e
.
getId
()));
}
catch
(
final
NumberFormatException
exc
)
{
result
.
addError
(
ServerMessages
.
ENTITY_DOES_NOT_EXIST
);
}
result
.
setName
(
e
.
getName
().
isBlank
()
?
null
:
e
.
getName
());
result
.
setDescription
(
e
.
getDescription
().
isBlank
()
?
null
:
e
.
getDescription
());
if
(!
e
.
getUnit
().
isBlank
())
{
result
.
addProperty
(
getUnit
(
e
.
getUnit
()));
}
result
.
setDatatype
(
e
.
getDatatype
().
isBlank
()
?
null
:
e
.
getDatatype
());
if
(!
e
.
getValue
().
isBlank
())
{
result
.
setValue
(
getValue
(
e
.
getValue
()));
}
result
.
setStatementStatus
(
e
.
getImportance
().
isBlank
()
?
null
:
e
.
getImportance
());
return
result
;
}
private
Collection
<
org
.
caosdb
.
server
.
entity
.
wrapper
.
Parent
>
convertParents
(
final
List
<
Parent
>
parentsList
)
{
final
Collection
<
org
.
caosdb
.
server
.
entity
.
wrapper
.
Parent
>
result
=
new
LinkedList
<>();
parentsList
.
forEach
(
e
->
{
result
.
add
(
convert
(
e
));
});
return
result
;
}
private
org
.
caosdb
.
server
.
entity
.
wrapper
.
Parent
convert
(
final
Parent
e
)
{
final
org
.
caosdb
.
server
.
entity
.
wrapper
.
Parent
result
=
new
org
.
caosdb
.
server
.
entity
.
wrapper
.
Parent
();
try
{
result
.
setId
(
e
.
getId
().
isBlank
()
?
null
:
getId
(
e
.
getId
()));
}
catch
(
final
NumberFormatException
exc
)
{
result
.
addError
(
ServerMessages
.
ENTITY_DOES_NOT_EXIST
);
}
result
.
setName
(
e
.
getName
().
isBlank
()
?
null
:
e
.
getName
());
return
result
;
}
@Override
@Override
public
void
multiTransaction
(
public
void
multiTransaction
(
final
MultiTransactionRequest
request
,
final
MultiTransactionRequest
request
,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment