/* * version 1.0 - MUSES prototype software * Copyright MUSES project (European Commission FP7) - 2013 * */ package eu.musesproject.server.contextdatareceiver; /* * #%L * MUSES Server * %% * Copyright (C) 2013 - 2014 S2 Grupo * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.sql.Time; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; import eu.musesproject.client.model.contextmonitoring.Event; import eu.musesproject.contextmodel.ContextEvent; import eu.musesproject.server.connectionmanager.IConnectionManager; import eu.musesproject.server.connectionmanager.StubConnectionManager; import eu.musesproject.server.contextdatareceiver.formatting.EventFormatter; import eu.musesproject.server.continuousrealtimeeventprocessor.EventProcessor; import eu.musesproject.server.dataminer.DataMiner; import eu.musesproject.server.db.eventcorrelation.StubEventCorrelationData; import eu.musesproject.server.db.handler.DBManager; import eu.musesproject.server.entity.Devices; import eu.musesproject.server.entity.PatternsKrs; import eu.musesproject.server.entity.SimpleEvents; import eu.musesproject.server.entity.Users; import eu.musesproject.server.eventprocessor.correlator.engine.DroolsEngineService; import eu.musesproject.server.eventprocessor.impl.EventProcessorImpl; import eu.musesproject.server.eventprocessor.impl.MusesCorrelationEngineImpl; import eu.musesproject.server.scheduler.ModuleType; /** * Class UserContextEventDataReceiver * * @author Sergio Zamarripa (S2) * @version Oct 7, 2013 */ public class UserContextEventDataReceiver { private static DBManager dbManager = new DBManager(ModuleType.EP); private static DataMiner dm = new DataMiner(); private static final String MUSES_TAG = "MUSES_TAG"; private static UserContextEventDataReceiver INSTANCE = new UserContextEventDataReceiver(); private StubEventCorrelationData data = null; private Logger logger = Logger.getLogger(UserContextEventDataReceiver.class); public static UserContextEventDataReceiver getInstance() { if (INSTANCE == null) { synchronized(UserContextEventDataReceiver.class) { if (INSTANCE == null) { INSTANCE = new UserContextEventDataReceiver(); } } } return INSTANCE; } /** * Info M * * Regarding events to be stored, these will be stored based on several criteria, for example, in order to compute * user trust, we should store any event associated to a user action (Event objects whose instance type is UserEvent). * This method will be in charge of classifying the concrete databases where the event must be stored * * @param event * * * @return void */ public void storeEvent(Event event){ StubEventCorrelationData data = getEventCorrelationData(); data.addEvent(event); } public boolean isConnectionManagerActive(){ StubConnectionManager stubConnectionManager = (StubConnectionManager)getConnectionManager(); return stubConnectionManager.isActive(); } public IConnectionManager getConnectionManager(){ return new StubConnectionManager(); } public StubEventCorrelationData getEventCorrelationData(){ if (data == null){ return new StubEventCorrelationData(); }else{ return data; } } public eu.musesproject.server.eventprocessor.correlator.model.owl.Event formatEvent(ContextEvent contextEvent){ eu.musesproject.server.eventprocessor.correlator.model.owl.Event formattedEvent = null; formattedEvent = EventFormatter.formatContextEvent(contextEvent); return formattedEvent; } public void processContextEventList(List<ContextEvent> list, String currentSessionId, String username, String deviceId, int requestId){ logger.info("processContextEventList: Processing list of "+list.size()+" elements."); for (Iterator iterator = list.iterator(); iterator.hasNext();) { ContextEvent event = (ContextEvent) iterator.next(); eu.musesproject.server.eventprocessor.correlator.model.owl.Event formattedEvent = UserContextEventDataReceiver.getInstance().formatEvent(event); EventProcessor processor = null; MusesCorrelationEngineImpl engine = null; DroolsEngineService des = EventProcessorImpl.getMusesEngineService(); if (des==null){ processor = new EventProcessorImpl(); engine = (MusesCorrelationEngineImpl)processor.startTemporalCorrelation("drl"); des = EventProcessorImpl.getMusesEngineService(); }else{ logger.info("DroolsEngine Service already available"); } if (formattedEvent != null){ formattedEvent.setSessionId(currentSessionId); formattedEvent.setUsername(username); formattedEvent.setDeviceId(deviceId); //if (requestId != 0){ formattedEvent.setHashId(requestId); //} logger.info("Inserting event into the WM:"+formattedEvent); try{ des.insertFact(formattedEvent); }catch(NullPointerException e){ logger.info("formatter Event not inserted due to NullPointerException"); } }else{ logger.error("Formatted event is null."); } //Database storage of simple events if (formattedEvent.getType()!=null){ storeEvent(formattedEvent.getType(), username, "musesawaew", deviceId, "Geneva", event.getProperties().toString()); } } } public static void storeEvent(String eventType, String username, String applicationName, String deviceId, String assetLocation, String rawEvent) { // Database insertion List<SimpleEvents> list = new ArrayList<SimpleEvents>(); List<PatternsKrs> pList = new ArrayList<PatternsKrs>(); SimpleEvents event = new SimpleEvents(); event.setEventType(dbManager.getEventTypeByKey(eventType)); if (event.getEventType() == null){ Logger.getLogger(UserContextEventDataReceiver.class).error("Event type not found in database, associate to key:"+ eventType); } Users user = dbManager.getUserByUsername(username); if (user != null){ event.setUser(user); }else{ event.setUser(dbManager.getUserByUsername("notfound")); } event.setData(rawEvent); Logger.getLogger(UserContextEventDataReceiver.class).info("Application name:"+ applicationName); event.setApplication(dbManager.getApplicationByName(applicationName)); event.setAsset(dbManager.getAssetByLocation(assetLocation)); event.setDate(new Date()); Devices device = dbManager.getDeviceByIMEI(deviceId); if (device == null){ device = new Devices(); device.setName(username); device.setImei(deviceId); device.setTrustValue(0.5); device.setDeviceModel("domemodel"); dbManager.setDevice(device); } event.setDevice(device); event.setTime(new Time(new Date().getTime())); event.setSource(dbManager.getSourceByName("EP")); event.setKRS_can_access(1); event.setEP_can_access(1); event.setRT2AE_can_access(1); list.add(event); dbManager.setSimpleEvents(list); //dm.retrievePendingEvents(list); //pList = dm.minePatterns(event); //dbManager.setPatternsKRS(pList); } }