@Override public String toString() { StringBuffer buff = new StringBuffer(); buff.append("[CompositeRequest (" + size() + ")"); for (Request r : this.getRequests()) { buff.append("\n\t").append(r); } buff.append("]"); return buff.toString(); }
protected boolean shouldProcessSynchronously( Request request ) { if (RequestType.COMPOSITE == request.getType()) { CompositeRequest composite = (CompositeRequest)request; if (composite.size() <= 1) return true; // There is more than one request, and the JoinRequestProcessor needs to be able to run even if // the ForkRequestProcessor is processing incoming requests. Normally this would work fine, // but if the incoming request is a CompositeRequestChannel.CompositeRequest, the ForkRequestProcessor // will block if the channel is still open. In a synchronous mode, this prevents the JoinRequestProcessor // from completing the incoming requests. See ModeShape-616 for details. return false; } // Otherwise, its just a single request ... return true; }
/** * {@inheritDoc} * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals( Object obj ) { if (obj == this) return true; if (obj instanceof CompositeRequest) { CompositeRequest that = (CompositeRequest)obj; if (this.size() != that.size()) return false; Iterator<Request> thisIter = this.iterator(); Iterator<Request> thatIter = that.iterator(); while (thisIter.hasNext()) { Request thisRequest = thisIter.next(); Request thatRequest = thatIter.next(); if (thisRequest == null) { if (thatRequest != null) return false; } else { if (!thisRequest.equals(thatRequest)) return false; } } return true; } return false; }
/** * Add requests to the supplied composite request. * * @param composite the composite request to which the requests are to be added * @param requests the requests to wrap * @return the requests wrapped in a CompositeRequest, or if only one request is supplied that single request, or null if * there are no request * @throws IllegalArgumentException if the composite request is null */ public static CompositeRequest add( CompositeRequest composite, Request... requests ) { CheckArg.isNotNull(composite, "composite"); if (requests == null || requests.length == 0) return composite; List<Request> list = new ArrayList<Request>(requests.length + composite.size()); boolean readOnly = composite.isReadOnly(); if (composite.size() != 0) list.addAll(composite.getRequests()); for (Request request : requests) { if (request == null) continue; if (RequestType.COMPOSITE == request.getType()) { CompositeRequest compositeRequest = (CompositeRequest)request; list.addAll(compositeRequest.getRequests()); if (!compositeRequest.isReadOnly()) readOnly = false; } else { list.add(request); if (!request.isReadOnly()) readOnly = false; } } return new CompositeRequest(list, readOnly); }
} else { setError(new MultipleRequestFailuresException(requestsWithErrors, size()));
/** * Add requests to the supplied composite request. * * @param composite the composite request to which the requests are to be added * @param requests the requests to wrap * @return the requests wrapped in a CompositeRequest, or if only one request is supplied that single request, or null if * there are no request * @throws IllegalArgumentException if the composite request is null */ public static CompositeRequest add( CompositeRequest composite, Iterator<? extends Request> requests ) { CheckArg.isNotNull(composite, "composite"); List<Request> list = new LinkedList<Request>(); boolean readOnly = composite.isReadOnly(); if (composite.size() != 0) list.addAll(composite.getRequests()); while (requests.hasNext()) { Request request = requests.next(); if (request == null) continue; if (RequestType.COMPOSITE == request.getType()) { CompositeRequest compositeRequest = (CompositeRequest)request; list.addAll(compositeRequest.getRequests()); if (!compositeRequest.isReadOnly()) readOnly = false; } else { list.add(request); if (!request.isReadOnly()) readOnly = false; } } return new CompositeRequest(list, readOnly); }
@Test public void shouldProcessCompositeRequestWithOneRequestSynchronously() { CompositeRequest request = mock(CompositeRequest.class); when(request.size()).thenReturn(1); assertThat(connection.shouldProcessSynchronously(request), is(true)); }
@Ignore @Test public void shouldProcessCompositeRequestWithMultipleRequestsAsynchronously() { CompositeRequest request = mock(CompositeRequest.class); when(request.size()).thenReturn(2); assertThat(connection.shouldProcessSynchronously(request), is(false)); }
@Test public void shouldCreateCompositeFromIteratorOverRequests() { request = CompositeRequest.with(requestList.iterator()); assertThat(request, is(instanceOf(CompositeRequest.class))); CompositeRequest composite = (CompositeRequest)request; assertThat(composite.size(), is(3)); assertThat(composite.size(), is(requestList.size())); assertThat(composite.getRequests(), hasItems(requests)); Iterator<Request> actual = composite.iterator(); Iterator<Request> expected = requestList.iterator(); while (actual.hasNext() && expected.hasNext()) { assertThat(actual.next(), is(sameInstance(expected.next()))); } assertThat(actual.hasNext(), is(expected.hasNext())); assertThat(composite.hasError(), is(false)); }
@Test public void shouldCreateCompositeFromMultipleRequests() { request = CompositeRequest.with(requests); assertThat(request, is(instanceOf(CompositeRequest.class))); CompositeRequest composite = (CompositeRequest)request; assertThat(composite.size(), is(3)); assertThat(composite.size(), is(requests.length)); assertThat(composite.getRequests(), hasItems(requests)); Iterator<Request> actual = composite.iterator(); Iterator<Request> expected = requestList.iterator(); while (actual.hasNext() && expected.hasNext()) { assertThat(actual.next(), is(sameInstance(expected.next()))); } assertThat(actual.hasNext(), is(expected.hasNext())); assertThat(composite.hasError(), is(false)); }