Projet

Général

Profil

Télécharger (3,61 ko) Statistiques
| Branche: | Tag: | Révision:
/*
* This program is a part of the IoTa project.
*
* Copyright © 2008-2012 Université de Caen Basse-Normandie, GREYC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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.
* <http://www.gnu.org/licenses/>
*
* See AUTHORS for a list of contributors.
*/
package fr.unicaen.iota.validator.operations;

import fr.unicaen.iota.application.rmi.AccessInterface;
import fr.unicaen.iota.tau.model.Identity;
import fr.unicaen.iota.validator.Configuration;
import fr.unicaen.iota.validator.IOTA;
import fr.unicaen.iota.validator.model.BaseEvent;
import fr.unicaen.iota.validator.model.EPC;
import fr.unicaen.iota.validator.model.Infrastructure;
import fr.unicaen.iota.validator.model.Link;
import java.rmi.RemoteException;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fosstrak.epcis.model.EPCISEventType;

/**
*
*/
public class EPCISEntryComparator {

private static final Log log = LogFactory.getLog(EPCISEntryComparator.class);
private final AccessInterface applicationLevelInterface;
private final IOTA iota;
private final Identity identity;

public EPCISEntryComparator(Identity identity, AccessInterface applicationLevelInterface, IOTA iota) {
this.applicationLevelInterface = applicationLevelInterface;
this.iota = iota;
this.identity = identity;
}

public Map<EPC, List<BaseEvent>> getEventNotVerified(List<EPC> list) throws RemoteException {
if (Configuration.DEBUG) {
log.debug("Analysing EPCIS entries...");
}
Map<EPC, List<BaseEvent>> map = new HashMap<EPC, List<BaseEvent>>();
for (EPC container : list) { //sort the list
map.put(container, verifyEPCISEntry(container));
}
return map;
}

private List<BaseEvent> verifyEPCISEntry(EPC container) throws RemoteException {
List<EPCISEventType> eventList = new ArrayList<EPCISEventType>();
for (Infrastructure infra : container.getInfrastructures()) {
Link link = iota.get(infra.getBizLoc());
if (!link.isActiveAnalyse()) {
continue;
}
Date d1 = new Date();
eventList.addAll(applicationLevelInterface.queryEPCIS(identity, container.getEpc(), link.getServiceAddress()));
Date d2 = new Date();
link.addTimeResponse(d2.getTime() - d1.getTime());
}
List<BaseEvent> res = container.verifyEPCISEvents(eventList, iota);
int fullListSize = container.getActiveEventList(iota).size();
String report = (fullListSize - res.size()) + " / " + fullListSize;
boolean succedded = res.isEmpty();
if (Configuration.DEBUG) {
log.debug(container.getEpc() + " => " + report + " events match " + (succedded ? "" : "!"));
}
log.trace(String.format("%s %s %d %d", Configuration.EPCIS_LOG_TYPE, container.getEpc(), fullListSize - res.size(), fullListSize));
return res;
}

public String formatAddress(String address) {
String[] sub = address.split(Configuration.EPCIS_CAPTURE_INTERFACE);
return sub[0] + Configuration.EPCIS_QUERY_INTERFACE;
}
}
(7-7/10)