/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/agpl.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package se.streamsource.streamflow.web.domain.interaction.gtd; import org.qi4j.api.common.Optional; import org.qi4j.api.common.UseDefaults; import org.qi4j.api.injection.scope.This; import org.qi4j.api.mixin.Mixins; import org.qi4j.api.property.Property; import se.streamsource.streamflow.infrastructure.event.domain.DomainEvent; /** * This interface is used to determine if an implementer has been read( acknowledged ) or not. */ @Mixins(Unread.Mixin.class) public interface Unread { public void setUnread( boolean unread ); public boolean isUnread(); interface Data { @UseDefaults Property<Boolean> unread(); void setUnread( @Optional DomainEvent event, boolean unread ); } abstract class Mixin implements Unread, Data { @This Data data; public void setUnread( boolean unread ) { if( new Boolean( unread ).compareTo( data.unread().get() ) != 0 ) setUnread( null, unread ); } public boolean isUnread() { return data.unread().get(); } public void setUnread( DomainEvent event, boolean unread ) { data.unread().set( unread ); } } }