Program: 112248
Project: 112248
Buggy source:
@SuppressWarnings("String_Node_Str") private Bundle doTransaction(ServletRequestDetails theRequestDetails,Bundle theRequest,String theActionName){
  BundleTypeEnum transactionType=theRequest.getTypeElement().getValueAsEnum();
  if (transactionType == BundleTypeEnum.BATCH) {
    return batch(theRequestDetails,theRequest);
  }
  if (transactionType == null) {
    String message="String_Node_Str" + BundleTypeEnum.TRANSACTION.getCode();
    ourLog.warn(message);
    transactionType=BundleTypeEnum.TRANSACTION;
  }
  if (transactionType != BundleTypeEnum.TRANSACTION) {
    throw new InvalidRequestException("String_Node_Str" + transactionType.getCode());
  }
  ourLog.info("String_Node_Str",theActionName,theRequest.getEntry().size());
  long start=System.currentTimeMillis();
  Date updateTime=new Date();
  Set<IdDt> allIds=new LinkedHashSet<IdDt>();
  Map<IdDt,IdDt> idSubstitutions=new HashMap<IdDt,IdDt>();
  Map<IdDt,DaoMethodOutcome> idToPersistedOutcome=new HashMap<IdDt,DaoMethodOutcome>();
  Bundle response=new Bundle();
  List<Entry> getEntries=new ArrayList<Entry>();
  IdentityHashMap<Entry,Integer> originalRequestOrder=new IdentityHashMap<Bundle.Entry,Integer>();
  for (int i=0; i < theRequest.getEntry().size(); i++) {
    originalRequestOrder.put(theRequest.getEntry().get(i),i);
    response.addEntry();
    if (theRequest.getEntry().get(i).getRequest().getMethodElement().getValueAsEnum() == HTTPVerbEnum.GET) {
      getEntries.add(theRequest.getEntry().get(i));
    }
  }
  Collections.sort(theRequest.getEntry(),new TransactionSorter());
  List<IIdType> deletedResources=new ArrayList<IIdType>();
  List<DeleteConflict> deleteConflicts=new ArrayList<DeleteConflict>();
  Map<Entry,ResourceTable> entriesToProcess=new IdentityHashMap<Entry,ResourceTable>();
  Set<ResourceTable> nonUpdatedEntities=new HashSet<ResourceTable>();
  for (int i=0; i < theRequest.getEntry().size(); i++) {
    if (i % 100 == 0) {
      ourLog.info("String_Node_Str",i,theRequest.getEntry().size());
    }
    Entry nextReqEntry=theRequest.getEntry().get(i);
    IResource res=nextReqEntry.getResource();
    IdDt nextResourceId=null;
    if (res != null) {
      nextResourceId=res.getId();
      if (nextResourceId.hasIdPart() == false) {
        if (isNotBlank(nextReqEntry.getFullUrl())) {
          nextResourceId=new IdDt(nextReqEntry.getFullUrl());
        }
      }
      if (nextResourceId.hasIdPart() && nextResourceId.getIdPart().matches("String_Node_Str") && !isPlaceholder(nextResourceId)) {
        throw new InvalidRequestException("String_Node_Str" + nextResourceId.getIdPart() + "String_Node_Str");
      }
      if (nextResourceId.hasIdPart() && !nextResourceId.hasResourceType() && !isPlaceholder(nextResourceId)) {
        nextResourceId=new IdDt(toResourceName(res.getClass()),nextResourceId.getIdPart());
        res.setId(nextResourceId);
      }
      if (isPlaceholder(nextResourceId)) {
        if (!allIds.add(nextResourceId)) {
          throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextResourceId));
        }
      }
 else       if (nextResourceId.hasResourceType() && nextResourceId.hasIdPart()) {
        IdDt nextId=nextResourceId.toUnqualifiedVersionless();
        if (!allIds.add(nextId)) {
          throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextId));
        }
      }
    }
    HTTPVerbEnum verb=nextReqEntry.getRequest().getMethodElement().getValueAsEnum();
    if (verb == null) {
      throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextReqEntry.getRequest().getMethod()));
    }
    String resourceType=res != null ? getContext().getResourceDefinition(res).getName() : null;
    Entry nextRespEntry=response.getEntry().get(originalRequestOrder.get(nextReqEntry));
switch (verb) {
case POST:
{
        @SuppressWarnings("String_Node_Str") IFhirResourceDao resourceDao=getDaoOrThrowException(res.getClass());
        res.setId((String)null);
        DaoMethodOutcome outcome;
        outcome=resourceDao.create(res,nextReqEntry.getRequest().getIfNoneExist(),false,theRequestDetails);
        handleTransactionCreateOrUpdateOutcome(idSubstitutions,idToPersistedOutcome,nextResourceId,outcome,nextRespEntry,resourceType,res);
        entriesToProcess.put(nextRespEntry,outcome.getEntity());
        if (outcome.getCreated() == false) {
          nonUpdatedEntities.add(outcome.getEntity());
        }
        break;
      }
case DELETE:
{
      String url=extractTransactionUrlOrThrowException(nextReqEntry,verb);
      UrlParts parts=UrlUtil.parseUrl(url);
      ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao=toDao(parts,verb.getCode(),url);
      int status=Constants.STATUS_HTTP_204_NO_CONTENT;
      if (parts.getResourceId() != null) {
        DaoMethodOutcome outcome=dao.delete(new IdDt(parts.getResourceType(),parts.getResourceId()),deleteConflicts,theRequestDetails);
        if (outcome.getEntity() != null) {
          deletedResources.add(outcome.getId().toUnqualifiedVersionless());
          entriesToProcess.put(nextRespEntry,outcome.getEntity());
        }
      }
 else {
        DeleteMethodOutcome deleteOutcome=dao.deleteByUrl(parts.getResourceType() + '?' + parts.getParams(),deleteConflicts,theRequestDetails);
        List<ResourceTable> allDeleted=deleteOutcome.getDeletedEntities();
        for (        ResourceTable deleted : allDeleted) {
          deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless());
        }
        if (allDeleted.isEmpty()) {
          status=Constants.STATUS_HTTP_404_NOT_FOUND;
        }
      }
      nextRespEntry.getResponse().setStatus(toStatusString(status));
      break;
    }
case PUT:
{
    @SuppressWarnings("String_Node_Str") IFhirResourceDao resourceDao=getDaoOrThrowException(res.getClass());
    DaoMethodOutcome outcome;
    String url=extractTransactionUrlOrThrowException(nextReqEntry,verb);
    UrlParts parts=UrlUtil.parseUrl(url);
    if (isNotBlank(parts.getResourceId())) {
      res.setId(new IdDt(parts.getResourceType(),parts.getResourceId()));
      outcome=resourceDao.update(res,null,false,theRequestDetails);
    }
 else {
      res.setId((String)null);
      outcome=resourceDao.update(res,parts.getResourceType() + '?' + parts.getParams(),false,theRequestDetails);
    }
    handleTransactionCreateOrUpdateOutcome(idSubstitutions,idToPersistedOutcome,nextResourceId,outcome,nextRespEntry,resourceType,res);
    entriesToProcess.put(nextRespEntry,outcome.getEntity());
    break;
  }
}
}
for (Iterator<DeleteConflict> iter=deleteConflicts.iterator(); iter.hasNext(); ) {
DeleteConflict next=iter.next();
if (deletedResources.contains(next.getTargetId().toVersionless())) {
iter.remove();
}
}
validateDeleteConflictsEmptyOrThrowException(deleteConflicts);
FhirTerser terser=getContext().newTerser();
for (DaoMethodOutcome nextOutcome : idToPersistedOutcome.values()) {
IResource nextResource=(IResource)nextOutcome.getResource();
if (nextResource == null) {
continue;
}
List<BaseResourceReferenceDt> allRefs=terser.getAllPopulatedChildElementsOfType(nextResource,BaseResourceReferenceDt.class);
for (BaseResourceReferenceDt nextRef : allRefs) {
IdDt nextId=nextRef.getReference();
if (!nextId.hasIdPart()) {
  continue;
}
if (idSubstitutions.containsKey(nextId)) {
  IdDt newId=idSubstitutions.get(nextId);
  ourLog.info("String_Node_Str",nextId,newId);
  nextRef.setReference(newId);
}
 else {
  ourLog.debug("String_Node_Str",nextId);
}
}
InstantDt deletedInstantOrNull=ResourceMetadataKeyEnum.DELETED_AT.get(nextResource);
Date deletedTimestampOrNull=deletedInstantOrNull != null ? deletedInstantOrNull.getValue() : null;
boolean shouldUpdate=!nonUpdatedEntities.contains(nextOutcome.getEntity());
if (shouldUpdate) {
updateEntity(nextResource,nextOutcome.getEntity(),deletedTimestampOrNull,true,true,updateTime);
}
}
myEntityManager.flush();
for (Entry nextEntry : theRequest.getEntry()) {
if (nextEntry.getRequest().getMethodElement().getValueAsEnum() == HTTPVerbEnum.POST) {
String matchUrl=nextEntry.getRequest().getIfNoneExist();
if (isNotBlank(matchUrl)) {
  IFhirResourceDao<?> resourceDao=getDao(nextEntry.getResource().getClass());
  Set<Long> val=resourceDao.processMatchUrl(matchUrl);
  if (val.size() > 1) {
    throw new InvalidRequestException("String_Node_Str" + theActionName + "String_Node_Str"+ matchUrl+ "String_Node_Str");
  }
}
}
}
for (IdDt next : allIds) {
IdDt replacement=idSubstitutions.get(next);
if (replacement == null) {
continue;
}
if (replacement.equals(next)) {
continue;
}
ourLog.info("String_Node_Str",next,replacement);
}
for (int i=0; i < getEntries.size(); i++) {
Entry nextReqEntry=getEntries.get(i);
Integer originalOrder=originalRequestOrder.get(nextReqEntry);
Entry nextRespEntry=response.getEntry().get(originalOrder);
ServletSubRequestDetails requestDetails=new ServletSubRequestDetails();
requestDetails.setServletRequest(theRequestDetails.getServletRequest());
requestDetails.setRequestType(RequestTypeEnum.GET);
requestDetails.setServer(theRequestDetails.getServer());
String url=extractTransactionUrlOrThrowException(nextReqEntry,HTTPVerbEnum.GET);
int qIndex=url.indexOf('?');
ArrayListMultimap<String,String> paramValues=ArrayListMultimap.create();
requestDetails.setParameters(new HashMap<String,String[]>());
if (qIndex != -1) {
String params=url.substring(qIndex);
List<NameValuePair> parameters=translateMatchUrl(params);
for (NameValuePair next : parameters) {
  paramValues.put(next.getName(),next.getValue());
}
for (java.util.Map.Entry<String,Collection<String>> nextParamEntry : paramValues.asMap().entrySet()) {
  String[] nextValue=nextParamEntry.getValue().toArray(new String[nextParamEntry.getValue().size()]);
  requestDetails.getParameters().put(nextParamEntry.getKey(),nextValue);
}
url=url.substring(0,qIndex);
}
requestDetails.setRequestPath(url);
requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase());
theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails,url);
BaseMethodBinding<?> method=theRequestDetails.getServer().determineResourceMethod(requestDetails,url);
if (method == null) {
throw new IllegalArgumentException("String_Node_Str" + url);
}
if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
requestDetails.addHeader(Constants.HEADER_IF_MATCH,nextReqEntry.getRequest().getIfMatch());
}
if (isNotBlank(nextReqEntry.getRequest().getIfNoneExist())) {
requestDetails.addHeader(Constants.HEADER_IF_NONE_EXIST,nextReqEntry.getRequest().getIfNoneExist());
}
if (isNotBlank(nextReqEntry.getRequest().getIfNoneMatch())) {
requestDetails.addHeader(Constants.HEADER_IF_NONE_MATCH,nextReqEntry.getRequest().getIfNoneMatch());
}
if (method instanceof BaseResourceReturningMethodBinding) {
try {
  ResourceOrDstu1Bundle responseData=((BaseResourceReturningMethodBinding)method).doInvokeServer(theRequestDetails.getServer(),requestDetails);
  IBaseResource resource=responseData.getResource();
  if (paramValues.containsKey(Constants.PARAM_SUMMARY) || paramValues.containsKey(Constants.PARAM_CONTENT)) {
    resource=filterNestedBundle(requestDetails,resource);
  }
  nextRespEntry.setResource((IResource)resource);
  nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
}
 catch (NotModifiedException e) {
  nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_304_NOT_MODIFIED));
}
}
 else {
throw new IllegalArgumentException("String_Node_Str" + url);
}
}
ourLog.info("String_Node_Str",theActionName);
myEntityManager.flush();
for (java.util.Map.Entry<Entry,ResourceTable> nextEntry : entriesToProcess.entrySet()) {
nextEntry.getKey().getResponse().setLocation(nextEntry.getValue().getIdDt().toUnqualified().getValue());
nextEntry.getKey().getResponse().setEtag(nextEntry.getValue().getIdDt().getVersionIdPart());
}
long delay=System.currentTimeMillis() - start;
int numEntries=theRequest.getEntry().size();
long delayPer=delay / numEntries;
ourLog.info("String_Node_Str",new Object[]{theActionName,delay,numEntries,delayPer});
response.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
return response;
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") private Bundle doTransaction(ServletRequestDetails theRequestDetails,Bundle theRequest,String theActionName){
  BundleTypeEnum transactionType=theRequest.getTypeElement().getValueAsEnum();
  if (transactionType == BundleTypeEnum.BATCH) {
    return batch(theRequestDetails,theRequest);
  }
  if (transactionType == null) {
    String message="String_Node_Str" + BundleTypeEnum.TRANSACTION.getCode();
    ourLog.warn(message);
    transactionType=BundleTypeEnum.TRANSACTION;
  }
  if (transactionType != BundleTypeEnum.TRANSACTION) {
    throw new InvalidRequestException("String_Node_Str" + transactionType.getCode());
  }
  ourLog.info("String_Node_Str",theActionName,theRequest.getEntry().size());
  long start=System.currentTimeMillis();
  Date updateTime=new Date();
  Set<IdDt> allIds=new LinkedHashSet<IdDt>();
  Map<IdDt,IdDt> idSubstitutions=new HashMap<IdDt,IdDt>();
  Map<IdDt,DaoMethodOutcome> idToPersistedOutcome=new HashMap<IdDt,DaoMethodOutcome>();
  Bundle response=new Bundle();
  List<Entry> getEntries=new ArrayList<Entry>();
  IdentityHashMap<Entry,Integer> originalRequestOrder=new IdentityHashMap<Bundle.Entry,Integer>();
  for (int i=0; i < theRequest.getEntry().size(); i++) {
    originalRequestOrder.put(theRequest.getEntry().get(i),i);
    response.addEntry();
    if (theRequest.getEntry().get(i).getRequest().getMethodElement().getValueAsEnum() == HTTPVerbEnum.GET) {
      getEntries.add(theRequest.getEntry().get(i));
    }
  }
  Collections.sort(theRequest.getEntry(),new TransactionSorter());
  List<IIdType> deletedResources=new ArrayList<IIdType>();
  List<DeleteConflict> deleteConflicts=new ArrayList<DeleteConflict>();
  Map<Entry,ResourceTable> entriesToProcess=new IdentityHashMap<Entry,ResourceTable>();
  Set<ResourceTable> nonUpdatedEntities=new HashSet<ResourceTable>();
  for (int i=0; i < theRequest.getEntry().size(); i++) {
    if (i % 100 == 0) {
      ourLog.info("String_Node_Str",i,theRequest.getEntry().size());
    }
    Entry nextReqEntry=theRequest.getEntry().get(i);
    IResource res=nextReqEntry.getResource();
    IdDt nextResourceId=null;
    if (res != null) {
      nextResourceId=res.getId();
      if (nextResourceId.hasIdPart() == false) {
        if (isNotBlank(nextReqEntry.getFullUrl())) {
          nextResourceId=new IdDt(nextReqEntry.getFullUrl());
        }
      }
      if (nextResourceId.hasIdPart() && nextResourceId.getIdPart().matches("String_Node_Str") && !isPlaceholder(nextResourceId)) {
        throw new InvalidRequestException("String_Node_Str" + nextResourceId.getIdPart() + "String_Node_Str");
      }
      if (nextResourceId.hasIdPart() && !nextResourceId.hasResourceType() && !isPlaceholder(nextResourceId)) {
        nextResourceId=new IdDt(toResourceName(res.getClass()),nextResourceId.getIdPart());
        res.setId(nextResourceId);
      }
      if (isPlaceholder(nextResourceId)) {
        if (!allIds.add(nextResourceId)) {
          throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextResourceId));
        }
      }
 else       if (nextResourceId.hasResourceType() && nextResourceId.hasIdPart()) {
        IdDt nextId=nextResourceId.toUnqualifiedVersionless();
        if (!allIds.add(nextId)) {
          throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextId));
        }
      }
    }
    HTTPVerbEnum verb=nextReqEntry.getRequest().getMethodElement().getValueAsEnum();
    if (verb == null) {
      throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class,"String_Node_Str",nextReqEntry.getRequest().getMethod()));
    }
    String resourceType=res != null ? getContext().getResourceDefinition(res).getName() : null;
    Entry nextRespEntry=response.getEntry().get(originalRequestOrder.get(nextReqEntry));
switch (verb) {
case POST:
{
        @SuppressWarnings("String_Node_Str") IFhirResourceDao resourceDao=getDaoOrThrowException(res.getClass());
        res.setId((String)null);
        DaoMethodOutcome outcome;
        outcome=resourceDao.create(res,nextReqEntry.getRequest().getIfNoneExist(),false,theRequestDetails);
        handleTransactionCreateOrUpdateOutcome(idSubstitutions,idToPersistedOutcome,nextResourceId,outcome,nextRespEntry,resourceType,res);
        entriesToProcess.put(nextRespEntry,outcome.getEntity());
        if (outcome.getCreated() == false) {
          nonUpdatedEntities.add(outcome.getEntity());
        }
        break;
      }
case DELETE:
{
      String url=extractTransactionUrlOrThrowException(nextReqEntry,verb);
      UrlParts parts=UrlUtil.parseUrl(url);
      ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao=toDao(parts,verb.getCode(),url);
      int status=Constants.STATUS_HTTP_204_NO_CONTENT;
      if (parts.getResourceId() != null) {
        DaoMethodOutcome outcome=dao.delete(new IdDt(parts.getResourceType(),parts.getResourceId()),deleteConflicts,theRequestDetails);
        if (outcome.getEntity() != null) {
          deletedResources.add(outcome.getId().toUnqualifiedVersionless());
          entriesToProcess.put(nextRespEntry,outcome.getEntity());
        }
      }
 else {
        DeleteMethodOutcome deleteOutcome=dao.deleteByUrl(parts.getResourceType() + '?' + parts.getParams(),deleteConflicts,theRequestDetails);
        List<ResourceTable> allDeleted=deleteOutcome.getDeletedEntities();
        for (        ResourceTable deleted : allDeleted) {
          deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless());
        }
        if (allDeleted.isEmpty()) {
          status=Constants.STATUS_HTTP_404_NOT_FOUND;
        }
      }
      nextRespEntry.getResponse().setStatus(toStatusString(status));
      break;
    }
case PUT:
{
    @SuppressWarnings("String_Node_Str") IFhirResourceDao resourceDao=getDaoOrThrowException(res.getClass());
    DaoMethodOutcome outcome;
    String url=extractTransactionUrlOrThrowException(nextReqEntry,verb);
    UrlParts parts=UrlUtil.parseUrl(url);
    if (isNotBlank(parts.getResourceId())) {
      res.setId(new IdDt(parts.getResourceType(),parts.getResourceId()));
      outcome=resourceDao.update(res,null,false,theRequestDetails);
    }
 else {
      res.setId((String)null);
      outcome=resourceDao.update(res,parts.getResourceType() + '?' + parts.getParams(),false,theRequestDetails);
    }
    handleTransactionCreateOrUpdateOutcome(idSubstitutions,idToPersistedOutcome,nextResourceId,outcome,nextRespEntry,resourceType,res);
    entriesToProcess.put(nextRespEntry,outcome.getEntity());
    break;
  }
case GET:
break;
}
}
for (Iterator<DeleteConflict> iter=deleteConflicts.iterator(); iter.hasNext(); ) {
DeleteConflict next=iter.next();
if (deletedResources.contains(next.getTargetId().toVersionless())) {
iter.remove();
}
}
validateDeleteConflictsEmptyOrThrowException(deleteConflicts);
FhirTerser terser=getContext().newTerser();
for (DaoMethodOutcome nextOutcome : idToPersistedOutcome.values()) {
IResource nextResource=(IResource)nextOutcome.getResource();
if (nextResource == null) {
continue;
}
List<BaseResourceReferenceDt> allRefs=terser.getAllPopulatedChildElementsOfType(nextResource,BaseResourceReferenceDt.class);
for (BaseResourceReferenceDt nextRef : allRefs) {
IdDt nextId=nextRef.getReference();
if (!nextId.hasIdPart()) {
continue;
}
if (idSubstitutions.containsKey(nextId)) {
IdDt newId=idSubstitutions.get(nextId);
ourLog.info("String_Node_Str",nextId,newId);
nextRef.setReference(newId);
}
 else {
ourLog.debug("String_Node_Str",nextId);
}
}
InstantDt deletedInstantOrNull=ResourceMetadataKeyEnum.DELETED_AT.get(nextResource);
Date deletedTimestampOrNull=deletedInstantOrNull != null ? deletedInstantOrNull.getValue() : null;
boolean shouldUpdate=!nonUpdatedEntities.contains(nextOutcome.getEntity());
if (shouldUpdate) {
updateEntity(nextResource,nextOutcome.getEntity(),deletedTimestampOrNull,true,true,updateTime);
}
}
myEntityManager.flush();
for (Entry nextEntry : theRequest.getEntry()) {
if (nextEntry.getRequest().getMethodElement().getValueAsEnum() == HTTPVerbEnum.POST) {
String matchUrl=nextEntry.getRequest().getIfNoneExist();
if (isNotBlank(matchUrl)) {
IFhirResourceDao<?> resourceDao=getDao(nextEntry.getResource().getClass());
Set<Long> val=resourceDao.processMatchUrl(matchUrl);
if (val.size() > 1) {
  throw new InvalidRequestException("String_Node_Str" + theActionName + "String_Node_Str"+ matchUrl+ "String_Node_Str");
}
}
}
}
for (IdDt next : allIds) {
IdDt replacement=idSubstitutions.get(next);
if (replacement == null) {
continue;
}
if (replacement.equals(next)) {
continue;
}
ourLog.info("String_Node_Str",next,replacement);
}
for (int i=0; i < getEntries.size(); i++) {
Entry nextReqEntry=getEntries.get(i);
Integer originalOrder=originalRequestOrder.get(nextReqEntry);
Entry nextRespEntry=response.getEntry().get(originalOrder);
ServletSubRequestDetails requestDetails=new ServletSubRequestDetails();
requestDetails.setServletRequest(theRequestDetails.getServletRequest());
requestDetails.setRequestType(RequestTypeEnum.GET);
requestDetails.setServer(theRequestDetails.getServer());
String url=extractTransactionUrlOrThrowException(nextReqEntry,HTTPVerbEnum.GET);
int qIndex=url.indexOf('?');
ArrayListMultimap<String,String> paramValues=ArrayListMultimap.create();
requestDetails.setParameters(new HashMap<String,String[]>());
if (qIndex != -1) {
String params=url.substring(qIndex);
List<NameValuePair> parameters=translateMatchUrl(params);
for (NameValuePair next : parameters) {
paramValues.put(next.getName(),next.getValue());
}
for (java.util.Map.Entry<String,Collection<String>> nextParamEntry : paramValues.asMap().entrySet()) {
String[] nextValue=nextParamEntry.getValue().toArray(new String[nextParamEntry.getValue().size()]);
requestDetails.getParameters().put(nextParamEntry.getKey(),nextValue);
}
url=url.substring(0,qIndex);
}
requestDetails.setRequestPath(url);
requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase());
theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails,url);
BaseMethodBinding<?> method=theRequestDetails.getServer().determineResourceMethod(requestDetails,url);
if (method == null) {
throw new IllegalArgumentException("String_Node_Str" + url);
}
if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
requestDetails.addHeader(Constants.HEADER_IF_MATCH,nextReqEntry.getRequest().getIfMatch());
}
if (isNotBlank(nextReqEntry.getRequest().getIfNoneExist())) {
requestDetails.addHeader(Constants.HEADER_IF_NONE_EXIST,nextReqEntry.getRequest().getIfNoneExist());
}
if (isNotBlank(nextReqEntry.getRequest().getIfNoneMatch())) {
requestDetails.addHeader(Constants.HEADER_IF_NONE_MATCH,nextReqEntry.getRequest().getIfNoneMatch());
}
if (method instanceof BaseResourceReturningMethodBinding) {
try {
ResourceOrDstu1Bundle responseData=((BaseResourceReturningMethodBinding)method).doInvokeServer(theRequestDetails.getServer(),requestDetails);
IBaseResource resource=responseData.getResource();
if (paramValues.containsKey(Constants.PARAM_SUMMARY) || paramValues.containsKey(Constants.PARAM_CONTENT)) {
  resource=filterNestedBundle(requestDetails,resource);
}
nextRespEntry.setResource((IResource)resource);
nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
}
 catch (NotModifiedException e) {
nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_304_NOT_MODIFIED));
}
}
 else {
throw new IllegalArgumentException("String_Node_Str" + url);
}
}
ourLog.info("String_Node_Str",theActionName);
myEntityManager.flush();
for (java.util.Map.Entry<Entry,ResourceTable> nextEntry : entriesToProcess.entrySet()) {
nextEntry.getKey().getResponse().setLocation(nextEntry.getValue().getIdDt().toUnqualified().getValue());
nextEntry.getKey().getResponse().setEtag(nextEntry.getValue().getIdDt().getVersionIdPart());
}
long delay=System.currentTimeMillis() - start;
int numEntries=theRequest.getEntry().size();
long delayPer=delay / numEntries;
ourLog.info("String_Node_Str",new Object[]{theActionName,delay,numEntries,delayPer});
response.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
return response;
}