diff --git a/src/main/java/net/nuagenetworks/bambou/RestObject.java b/src/main/java/net/nuagenetworks/bambou/RestObject.java index 0df3b6f..2f2d883 100644 --- a/src/main/java/net/nuagenetworks/bambou/RestObject.java +++ b/src/main/java/net/nuagenetworks/bambou/RestObject.java @@ -212,15 +212,20 @@ public void instantiateChild(RestObject childRestObj, RestObject fromTemplate, I } @Override - public void assign(List childRestObjs) throws RestException { + public void assign(List childRestObjs, Class objectType) throws RestException { RestSession session = RestSession.getCurrentSession(); if (session != null) { - session.assign(this, childRestObjs); + session.assign(this, childRestObjs, objectType); } else { throw new RestException("Session not available in current thread"); } } + @Override + public void assign(List childRestObjs) throws RestException { + assign(childRestObjs, null); + } + @Override public void assign(List childRestObjs, boolean commit) throws RestException { RestSession session = RestSession.getCurrentSession(); @@ -334,10 +339,21 @@ public void assign(RestSession session, List childRestO @Override public void assign(RestSession session, List childRestObjs, boolean commit) throws RestException { + assign(session, childRestObjs, null, commit); + } + + @Override + public void assign(RestSession session, List childRestObjs, Class objectType) throws RestException { + assign(session, childRestObjs, objectType, true); + } + + @Override + public void assign(RestSession session, List childRestObjs, Class objectType, boolean commit) throws RestException { // Make sure there are child objects passed in - if (childRestObjs.isEmpty()) { + if (childRestObjs.isEmpty() && objectType == null) { throw new RestException("No child objects specified"); } + // Extract IDs from the specified child objects List ids = new ArrayList(); @@ -345,7 +361,7 @@ public void assign(RestSession session, List childRestO ids.add(restObject.getId()); } - Class childRestObjClass = childRestObjs.get(0).getClass(); + Class childRestObjClass = objectType == null ? childRestObjs.get(0).getClass() : objectType; ResponseEntity response = session.sendRequestWithRetry(HttpMethod.PUT, getResourceUrlForChildType(session, childRestObjClass), null, null, ids, BambouUtils.getArrayClass(this)); if (response.getStatusCode().series() == HttpStatus.Series.SUCCESSFUL) { diff --git a/src/main/java/net/nuagenetworks/bambou/RestSession.java b/src/main/java/net/nuagenetworks/bambou/RestSession.java index fc4c05d..273c3ec 100644 --- a/src/main/java/net/nuagenetworks/bambou/RestSession.java +++ b/src/main/java/net/nuagenetworks/bambou/RestSession.java @@ -203,9 +203,14 @@ public void instantiateChild(RestObject restObj, RestObject childRestObj, RestOb @Override public void assign(RestObject restObj, List childRestObjs) throws RestException { - restObj.assign(this, childRestObjs); + assign(restObj, childRestObjs, null); } + @Override + public void assign(RestObject restObj, List childRestObjs, Class objectType) throws RestException { + restObj.assign(this, childRestObjs, objectType); + } + @Override public void assign(RestObject restObj, List childRestObjs, boolean commit) throws RestException { restObj.assign(this, childRestObjs, commit); diff --git a/src/main/java/net/nuagenetworks/bambou/operation/RestObjectOperations.java b/src/main/java/net/nuagenetworks/bambou/operation/RestObjectOperations.java index f26c100..d2e0c80 100644 --- a/src/main/java/net/nuagenetworks/bambou/operation/RestObjectOperations.java +++ b/src/main/java/net/nuagenetworks/bambou/operation/RestObjectOperations.java @@ -53,9 +53,11 @@ public interface RestObjectOperations { void instantiateChild(RestObject childRestObj, RestObject fromTemplate, Integer responseChoice, boolean commit) throws RestException; void assign(List childRestObjs) throws RestException; + + void assign(List childRestObjs, Class objectType) throws RestException; void assign(List childRestObjs, boolean commit) throws RestException; - + void fetch(RestSession session) throws RestException; void save(RestSession session) throws RestException; @@ -78,4 +80,8 @@ void instantiateChild(RestSession session, RestObject childRestObj, RestObjec void assign(RestSession session, List childRestObjs) throws RestException; void assign(RestSession session, List childRestObjs, boolean commit) throws RestException; + + void assign(RestSession session, List childRestObjs, Class objectType, boolean commit) throws RestException; + + void assign(RestSession session, List childRestObjs, Class objectType) throws RestException; } diff --git a/src/main/java/net/nuagenetworks/bambou/operation/RestSessionOperations.java b/src/main/java/net/nuagenetworks/bambou/operation/RestSessionOperations.java index 485073f..9418ec7 100644 --- a/src/main/java/net/nuagenetworks/bambou/operation/RestSessionOperations.java +++ b/src/main/java/net/nuagenetworks/bambou/operation/RestSessionOperations.java @@ -59,6 +59,8 @@ public interface RestSessionOperations { void assign(RestObject restObj, List childRestObjs) throws RestException; void assign(RestObject restObj, List childRestObjs, boolean commit) throws RestException; + + void assign(RestObject restObj, List childRestObjs, Class objectType) throws RestException; List get(RestFetcher fetcher) throws RestException;