/******************************************************************************* * Copyright (c) 2010-2013, Abel Hegedus, Istvan Rath and Daniel Varro * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Abel Hegedus - initial API and implementation *******************************************************************************/ package org.eclipse.viatra.transformation.evm.protoapp; import org.apache.log4j.Level; import org.eclipse.viatra.transformation.evm.api.Activation; import org.eclipse.viatra.transformation.evm.api.ActivationLifeCycle; import org.eclipse.viatra.transformation.evm.api.Context; import org.eclipse.viatra.transformation.evm.api.EventDrivenVM; import org.eclipse.viatra.transformation.evm.api.Job; import org.eclipse.viatra.transformation.evm.api.RuleEngine; import org.eclipse.viatra.transformation.evm.api.RuleSpecification; import org.eclipse.viatra.transformation.evm.api.event.EventType.RuleEngineEventType; import org.eclipse.viatra.transformation.evm.proto.ProtoActivationStates; import org.eclipse.viatra.transformation.evm.proto.ProtoEventFilter; import org.eclipse.viatra.transformation.evm.proto.ProtoEventSourceSpecification; import org.eclipse.viatra.transformation.evm.proto.ProtoEventType; import org.eclipse.viatra.transformation.evm.proto.ProtoRealm; import org.junit.Test; import com.google.common.collect.Sets; /** * @author Abel Hegedus * */ public class ProtoApp { @Test public void testProtoEventRealm() { final ProtoRealm protoRealm = new ProtoRealm(); final RuleEngine engine = EventDrivenVM.createRuleEngine(protoRealm); engine.getLogger().setLevel(Level.DEBUG); final ActivationLifeCycle lifeCycle = ActivationLifeCycle.create(ProtoActivationStates.IS_NOT); lifeCycle.addStateTransition(ProtoActivationStates.IS_NOT, ProtoEventType.PUSH, ProtoActivationStates.IS); lifeCycle.addStateTransition(ProtoActivationStates.IS, RuleEngineEventType.FIRE, ProtoActivationStates.IS_NOT); final Job<String> job = new Job<String>(ProtoActivationStates.IS) { @Override protected void execute(final Activation<? extends String> activation, final Context context) { System.out.println("String pushed" + activation.getAtom()); } @Override protected void handleError(final Activation<? extends String> activation, final Exception exception, final Context context) { // not gonna happen } }; final ProtoEventSourceSpecification sourceSpec = new ProtoEventSourceSpecification("test"); final RuleSpecification<String> ruleSpec = new RuleSpecification<String>(sourceSpec, lifeCycle, Sets.newHashSet(job)); final ProtoEventFilter filter = new ProtoEventFilter("t"); engine.addRule(ruleSpec, filter); protoRealm.pushString("PUSH THIS!"); engine.getNextActivation().fire(Context.create()); } }