package fr.inria.diverse.iot2.iot2.aspects;
import fr.inria.diverse.iot2.iot2.iot2.ActivityEdge;
import fr.inria.diverse.k3.al.annotationprocessor.Aspect;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties;
import fr.inria.diverse.iot2.iot2.aspects.NamedElementAspect;
import fr.inria.diverse.iot2.iot2.aspects.Offer;
import fr.inria.diverse.iot2.iot2.aspects.Token;
@Aspect(className = ActivityEdge.class)
@SuppressWarnings("all")
public class ActivityEdgeAspect extends NamedElementAspect {
public static void sendOffer(final ActivityEdge _self, final List<Token> tokens) {
fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectContext.getSelf(_self);
_privk3_sendOffer(_self_, _self,tokens);
}
public static List<Token> takeOfferedTokens(final ActivityEdge _self) {
fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectContext.getSelf(_self);
Object result = null;
result =_privk3_takeOfferedTokens(_self_, _self);
return (java.util.List<fr.inria.diverse.iot2.iot2.aspects.Token>)result;
}
public static boolean hasOffer(final ActivityEdge _self) {
fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectContext.getSelf(_self);
Object result = null;
result =_privk3_hasOffer(_self_, _self);
return (boolean)result;
}
public static List<Offer> offers(final ActivityEdge _self) {
fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectContext.getSelf(_self);
Object result = null;
result =_privk3_offers(_self_, _self);
return (java.util.List<fr.inria.diverse.iot2.iot2.aspects.Offer>)result;
}
public static void offers(final ActivityEdge _self, final List<Offer> offers) {
fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityEdgeAspectActivityEdgeAspectContext.getSelf(_self);
_privk3_offers(_self_, _self,offers);
}
protected static void _privk3_sendOffer(final ActivityEdgeAspectActivityEdgeAspectProperties _self_, final ActivityEdge _self, final List<Token> tokens) {
final Offer offer = new Offer();
final Consumer<Token> _function = (Token token) -> {
offer.offeredTokens.add(token);
};
tokens.forEach(_function);
List<Offer> _offers = ActivityEdgeAspect.offers(_self);
_offers.add(offer);
}
protected static List<Token> _privk3_takeOfferedTokens(final ActivityEdgeAspectActivityEdgeAspectProperties _self_, final ActivityEdge _self) {
final ArrayList<Token> tokens = new ArrayList<Token>();
List<Offer> _offers = ActivityEdgeAspect.offers(_self);
final Consumer<Offer> _function = (Offer o) -> {
tokens.addAll(o.offeredTokens);
};
_offers.forEach(_function);
List<Offer> _offers_1 = ActivityEdgeAspect.offers(_self);
_offers_1.clear();
return tokens;
}
protected static boolean _privk3_hasOffer(final ActivityEdgeAspectActivityEdgeAspectProperties _self_, final ActivityEdge _self) {
List<Offer> _offers = ActivityEdgeAspect.offers(_self);
final Function1<Offer, Boolean> _function = (Offer o1) -> {
return Boolean.valueOf(o1.hasTokens());
};
return IterableExtensions.<Offer>exists(_offers, _function);
}
protected static List<Offer> _privk3_offers(final ActivityEdgeAspectActivityEdgeAspectProperties _self_, final ActivityEdge _self) {
try {
for (java.lang.reflect.Method m : _self.getClass().getMethods()) {
if (m.getName().equals("getOffers") &&
m.getParameterTypes().length == 0) {
Object ret = m.invoke(_self);
if (ret != null) {
return (java.util.List) ret;
}
}
}
} catch (Exception e) {
// Chut !
}
return _self_.offers;
}
protected static void _privk3_offers(final ActivityEdgeAspectActivityEdgeAspectProperties _self_, final ActivityEdge _self, final List<Offer> offers) {
_self_.offers = offers; try {
for (java.lang.reflect.Method m : _self.getClass().getMethods()) {
if (m.getName().equals("setOffers")
&& m.getParameterTypes().length == 1) {
m.invoke(_self, offers);
}
}
} catch (Exception e) {
// Chut !
}
}
}