@@ -0,0 +1,2214 @@
+/*%0A * Copyright (c) 2013 Red Rainbow IT Solutions GmbH, Germany%0A *%0A * Permission is hereby granted, free of charge, to any person obtaining a copy of%0A * this software and associated documentation files (the %22Software%22), to deal in%0A * the Software without restriction, including without limitation the rights to%0A * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of%0A * the Software, and to permit persons to whom the Software is furnished to do so,%0A * subject to the following conditions:%0A * %0A * The above copyright notice and this permission notice shall be included in all%0A * copies or substantial portions of the Software.%0A * %0A * THE SOFTWARE IS PROVIDED %22AS IS%22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR%0A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS%0A * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR%0A * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER%0A * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN%0A * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.%0A */%0A%0Apackage org.jeecqrs.bundle.jcommondomain.sagas;%0A%0Aimport org.jeecqrs.common.event.Event;%0Aimport org.jeecqrs.sagas.Saga;%0Aimport org.jodah.typetools.TypeResolver;%0A%0A/**%0A * A saga that receives exactly one event.%0A * @param %3CS%3E  the actual saga type%0A */%0Apublic abstract class AbstractSingleEventSaga%3CS extends Saga%3CEvent%3E, E extends Event%3E extends AbstractSaga%3CS%3E %7B%0A%0A    protected abstract void when(E event);%0A%0A    @Override%0A    protected void setupSaga() %7B%0A        Class%3C?%3E%5B%5D typeArguments = TypeResolver.resolveRawArguments(AbstractSingleEventSaga.class, getClass());%0A        Class%3CE%3E eventClass = (Class) typeArguments%5B1%5D;%0A        if (TypeResolver.Unknown.class.equals(eventClass))%0A            throw new IllegalStateException(%22Event type parameter missing on %22 + getClass().getSimpleName());%0A        listenTo(eventClass, new SagaIdentifier%3CE%3E() %7B%0A            @Override%0A            public String sagaIdFor(E event) %7B%0A                return event.id().toString();%0A            %7D%0A        %7D);%0A    %7D%0A%0A    @Override%0A    public boolean isCompleted() %7B%0A        return true;%0A    %7D%0A%0A%7D%0A

Add AbstractSingleEventSaga for sagas that react to exactly one event