package org.korsakow.domain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.dsrg.soenea.domain.MapperException;
import org.dsrg.soenea.uow.UoW;
import org.korsakow.domain.interf.IEvent;
import org.korsakow.domain.interf.IPredicate;
import org.korsakow.domain.interf.IRule;
import org.korsakow.domain.interf.ITrigger;
import org.korsakow.ide.DataRegistry;
public class EventFactory {
public static Event createNew(ITrigger trigger, IPredicate predicate, IRule rule)
{
Event object = new Event(DataRegistry.getMaxId(), 0L, trigger, predicate, rule);
UoW.getCurrent().registerNew(object);
return object;
}
public static Event createClean(ITrigger trigger, IPredicate predicate, IRule rule)
{
return createClean(DataRegistry.getMaxId(), 0, trigger, predicate, rule);
}
public static Event createClean(long id, long version, ITrigger trigger, IPredicate predicate, IRule rule)
{
Event object = new Event(id, version, trigger, predicate, rule);
UoW.getCurrent().registerClean(object);
return object;
}
public static Event createClean(long id, long version, Collection<ITrigger> triggers, Collection<IPredicate> predicates, Collection<IRule> rules) throws MapperException
{
if (triggers.size() > 1 || predicates.size() > 1 || rules.size() > 1)
throw new MapperException("invalid argument");
ITrigger trigger = triggers.isEmpty()?null:triggers.iterator().next();
IPredicate predicate = predicates.isEmpty()?null:predicates.iterator().next();
IRule rule = rules.isEmpty()?null:rules.iterator().next();
return createClean(id, version, trigger, predicate, rule);
}
public static Event copy(IEvent src) {
Event copy = createNew(TriggerFactory.copy(src.getTrigger()), PredicateFactory.copy(src.getPredicate()), RuleFactory.copy(src.getRule()));
for (String propId : src.getDynamicPropertyIds())
copy.setDynamicProperty(propId, src.getDynamicProperty(propId));
return copy;
}
public static Collection<IEvent> copy(Collection<IEvent> src) {
List<IEvent> copies = new ArrayList<IEvent>();
for (IEvent event : src) {
IEvent copy = copy(event);
copies.add(copy);
}
return copies;
}
}