package eu.play_project.dcep;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import org.etsi.uri.gcm.util.GCM;
import org.junit.Test;
import org.objectweb.fractal.adl.ADLException;
import org.objectweb.fractal.adl.Factory;
import org.objectweb.fractal.api.Component;
import org.objectweb.fractal.api.NoSuchInterfaceException;
import org.objectweb.fractal.api.control.IllegalLifeCycleException;
import org.objectweb.proactive.ActiveObjectCreationException;
import org.objectweb.proactive.api.PAActiveObject;
import org.objectweb.proactive.core.component.adl.FactoryFactory;
import org.objectweb.proactive.core.config.CentralPAPropertyRepository;
import org.objectweb.proactive.core.config.ProActiveConfiguration;
import org.objectweb.proactive.core.node.NodeException;
import com.hp.hpl.jena.graph.NodeFactory;
import eu.play_project.dcep.api.DcepManagementException;
import eu.play_project.dcep.api.DcepManagmentApi;
import eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi;
import eu.play_project.dcep.distributedetalis.api.SimplePublishApi;
import eu.play_project.play_platformservices.QueryTemplateImpl;
import eu.play_project.play_platformservices.api.BdplQuery;
import eu.play_project.play_platformservices.api.HistoricalQuery;
import eu.play_project.play_platformservices.api.QueryDetails;
import fr.inria.eventcloud.api.CompoundEvent;
import fr.inria.eventcloud.api.Quadruple;
public class DcepTest implements Serializable {
private static final long serialVersionUID = 100L;
public static SimplePublishApi dcepPublishApi;
public static eu.play_project.dcep.api.DcepManagmentApi dcepManagmentApi;
public static DistributedEtalisTestApi dcepTestApi;
@Test
public void InstantiateDcepComponentTest() {
try {
InstantiateDcepComponent();
} catch (IllegalLifeCycleException e) {
fail("Could not generate DCEP Component" + e.getMessage());
e.printStackTrace();
} catch (NoSuchInterfaceException e) {
fail("Could not generate DCEP Component. No SuchInterface: " + e.getMessage());
e.printStackTrace();
} catch (ADLException e) {
fail("Could not generate DCEP Component" + e.getMessage());
e.printStackTrace();
}
if (dcepPublishApi == null) {
fail("No DCEP Component");
} else {
for (int i = 0; i < 10; i++) {
//assertTrue(dcepPublishApi.mirror("a").equals("a"));
}
}
}
// @Test
public void pushEvents() throws DcepManagementException {
PublishApiSubscriber subscriber =null;
try {
subscriber = PAActiveObject.newActive(PublishApiSubscriber.class, new Object[] {});
} catch (ActiveObjectCreationException e1) {
e1.printStackTrace();
} catch (NodeException e1) {
e1.printStackTrace();
}
//Subscribe for new events.
dcepTestApi.attach(subscriber);
//dcepTestApi.setEcConnectionManager(new EcConnectionMangerLocal());
BdplQuery bdplQuery = BdplQuery.builder()
.details(new QueryDetails("queryId42"))
.ele("complex(ID1, queryId42) do (generateConstructResult([S], ['http://play-project.eu/is/CepResult'], [O], ID)) <- 'http://events.event-processing.org/types/Event'(ID1) where (rdf(S, P, O, ID1))")
.bdpl("")
.constructTemplate(new QueryTemplateImpl())
.historicalQueries(new LinkedList<HistoricalQuery>())
.build();
//Register pattern
dcepManagmentApi.registerEventPattern(bdplQuery);
if (dcepPublishApi == null) {
fail("No DCEP component instantiated");
} else {
for (int i = 0; i < 30; i++) {
List<Quadruple> quadruple = new ArrayList<Quadruple>();
quadruple
.add(new Quadruple(
NodeFactory.createURI("ab" + Math.random()),
NodeFactory.createURI("http://events.event-processing.org/ids/e2#event"),
NodeFactory.createURI("http://events.event-processing.org/ids/endTime"),
NodeFactory.createURI("\"2011-08-24T12:42:01.011Z\"^^http://www.w3.org/2001/XMLSchema#dateTime")));
dcepPublishApi.publish(new CompoundEvent(quadruple));
}
}
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//assertTrue(subscriber.getComplexEvents().get(0).getGraph().toString().equals("http://events.event-processing.org/ids/2620:0:1C11:e::100") ); //&&
// subscriber.getComplexEvents().size()==2);
}
public static void InstantiateDcepComponent()
throws IllegalLifeCycleException, NoSuchInterfaceException,
ADLException {
CentralPAPropertyRepository.JAVA_SECURITY_POLICY
.setValue("proactive.java.policy");
// CentralPAPropertyRepository.JAVA_SECURITY_POLICY.setValue(System.getProperty("user.dir")+
// "/proactive.java.policy");
CentralPAPropertyRepository.GCM_PROVIDER
.setValue("org.objectweb.proactive.core.component.Fractive");
// setProAktiveHome();
Factory factory = FactoryFactory.getFactory();
HashMap<String, Object> context = new HashMap<String, Object>();
// GCMApplication gcma = PAGCMDeployment.loadApplicationDescriptor(
// new
// URL("file:/"+System.getProperty("user.dir")+"/src/main/resources/applicationDescriptor.xml"));
// gcma.startDeployment();
// gcma.waitReady();
//
// context.put("deployment-descriptor", gcma);
Component root = (Component) factory.newComponent("StandAloneDCEP", context);
GCM.getGCMLifeCycleController(root).startFc();
dcepPublishApi = ((SimplePublishApi) root
.getFcInterface(SimplePublishApi.class.getSimpleName()));
dcepManagmentApi = ((DcepManagmentApi) root
.getFcInterface(DcepManagmentApi.class.getSimpleName()));
dcepTestApi = ((DistributedEtalisTestApi) root
.getFcInterface(DistributedEtalisTestApi.class.getSimpleName()));
}
/**
* Sets the value of proactive.home if not already set Hack from:
* http://kickjava
* .com/src/org/objectweb/proactive/core/config/ProActiveConfiguration
* .java.htm
*/
private void setProAktiveHome() {
File file = null;
if (System.getProperty("proactive.home") == null) {
String location = ProActiveConfiguration.class.getResource(
"ProActiveConfiguration.class").getPath();
location = location.split("/proactive-")[0].toString();
try {
file = new File(location.split("file:")[1]);
String proactivehome = file.getCanonicalPath();
System.setProperty("proactive.home", proactivehome);
} catch (IOException e) {
e.printStackTrace();
System.err.println("ProaktiveHome not found");
}
}
}
public void getEvent(CompoundEvent event){
System.out.println("OK i got an event :=) " + event.getGraph());
}
}