private double differenceAverage(Vd2_3MapData loc, Vd2_3MapData unknownStat) { double res = 0; int cnt = 0; for (APStatistic ap : loc.getStatistics().values()) { if (ap.variance < SMALL_VARIANCE) { for (APStatistic curAP : unknownStat.getStatistics().values()) { if (ap.accessPoint.equals(curAP.accessPoint) && curAP.variance < SMALL_VARIANCE) { res += (ap.average - curAP.average) * (ap.average - curAP.average); ++cnt; } } } } if (cnt != 0) { return -res / cnt; } else return Double.NEGATIVE_INFINITY; }
private double nMissingLowVariance(Vd2_3MapData loc, Vd2_3MapData unknownStat) { double res = 0; for (APStatistic ap : loc.getStatistics().values()) { if (ap.variance < SMALL_VARIANCE) { boolean ok = false; for (APStatistic curAP : unknownStat.getStatistics().values()) { if (ap.accessPoint.equals(curAP.accessPoint) && curAP.variance < SMALL_VARIANCE) { ok = true; break; } } if (!ok) { --res; } } } return res; }
public void callMapdataFunction(ObjectInputStream in, ObjectOutputStream out) { MapData mapData; try { mapData = (MapData) in.readObject(); if (mapData instanceof WifiMapData || mapData instanceof Vd2_3MapData) { LocationDatabaseObject locationDatabaseObject = ServerAPI.searchLocationByLocationId(mapData.getLocationId()); LocationDatabaseObject rootLocation = LocationDataManagement.getRootLocationByLocationObject(locationDatabaseObject); Long rootLocationMAC = rootLocation.getMacaddressIDForBuildDevice(); Long newMapMAC; if (mapData instanceof WifiMapData) { newMapMAC = ((WifiMapData) mapData).getScannerMAC(); } else { newMapMAC = ((Vd2_3MapData) mapData).getScannerMAC(); } System.out.println(rootLocationMAC + " : " + newMapMAC); out.writeBoolean(rootLocationMAC.compareTo(newMapMAC) != 0); out.flush(); boolean replaceRootMAC = in.readBoolean(); if (!replaceRootMAC) { out.writeBoolean(true); out.flush(); return; } if (rootLocationMAC.compareTo(newMapMAC) != 0) { System.out.println(rootLocationMAC + " : " + newMapMAC); if (mapData instanceof Vd2_3MapData) { Vd2_3MapData vd2_3MapData = (Vd2_3MapData) mapData; if (rootLocation.getMacaddressIDForBuildDevice() == 0 || rootLocation.getMacaddressIDForBuildDevice() != vd2_3MapData.getScannerMAC()) { rootLocation.setMacaddressIDForBuildDevice(vd2_3MapData.getScannerMAC()); LocationDataManagement.updateLocation(rootLocation); } } else if (mapData instanceof WifiMapData) { WifiMapData wifiMapData = (WifiMapData) mapData; if (rootLocation.getMacaddressIDForBuildDevice() == 0 || rootLocation.getMacaddressIDForBuildDevice() != wifiMapData.getScannerMAC()) { rootLocation.setMacaddressIDForBuildDevice(wifiMapData.getScannerMAC()); LocationDataManagement.updateLocation(rootLocation); } } // need implement delete all wifi map String dataTypeId = ServerAPI.getDataTypeIdByDataTypeClassName(Vd2_3MapData.class.getName()); LocationDataManagement.deleleAllMapData(rootLocation, dataTypeId); dataTypeId = ServerAPI.getDataTypeIdByDataTypeClassName(WifiMapData.class.getName()); LocationDataManagement.deleleAllMapData(rootLocation, dataTypeId); } } String datatypeId = ServerAPI.getDataTypeIdByDataTypeClassName(mapData.getDataTypeClassName()); File dirUser = new File(ServerConfig.dirData + "/" + mapData.getUserId() + "/"); if (!dirUser.exists()) { dirUser.mkdirs(); } MapData.writeMapData( mapData, dirUser.getAbsolutePath() + "/" + mapData.getLocationId() + "_" + datatypeId + ServerConfig.extensionMapDataFile); if (mapData instanceof WifiMapData || mapData instanceof Vd2_3MapData) { EntityManager entityManager = LocalizationDataManager.getEntityManagerFactory().createEntityManager(); LocationDatabaseObject locationDatabaseObject = ServerAPI.searchLocationByLocationId(mapData.getLocationId()); ArrayList<Long> listMacAddress = new ArrayList<Long>(); if (mapData instanceof WifiMapData) { WifiMapData wifiMapData = (WifiMapData) mapData; for (ScanningPoint scanningPoint : wifiMapData.getSpsList()) { for (AccessPoint accessPoint : scanningPoint.getApsList()) { if (!listMacAddress.contains(accessPoint.getMACAddress())) { listMacAddress.add(accessPoint.getMACAddress()); } } } } else { Vd2_3MapData vd2_3MapData = (Vd2_3MapData) mapData; for (APStatistic apStatistic : vd2_3MapData.getStatistics().values()) { if (!listMacAddress.contains(apStatistic.accessPoint.getMACAddress())) { listMacAddress.add(apStatistic.accessPoint.getMACAddress()); } } } MacAddressDatabaseObject macAddress = null; // Boolean checkReAdd = false; for (Long strMACAddress : listMacAddress) { macAddress = ServerAPI.searchMacAddressByID(strMACAddress); // entityManager.getTransaction().begin(); if (macAddress == null) { System.out.println("macAddress = null"); macAddress = new MacAddressDatabaseObject(); macAddress.setMacAddressId(strMACAddress); entityManager.persist(macAddress); macAddress.setLocations(new ArrayList<LocationDatabaseObject>()); System.out.println("end add"); // checkReAdd = true; } boolean contains = false; for (LocationDatabaseObject locationDatabaseObject2 : macAddress.getLocations()) { // System.out.println(locationDatabaseObject2.getLocationId()); if (locationDatabaseObject2 .getLocationId() .equals(locationDatabaseObject.getLocationId())) { contains = true; } } if (!contains) { System.out.println( macAddress.getMacAddressId() + ":" + locationDatabaseObject.getLocationId()); macAddress.getLocations().add(locationDatabaseObject); macAddress.addLocation(locationDatabaseObject.getLocationId()); // LocationDataManagement.updateLocation(location); // entityManager.merge(macAddress); } } // entityManager.getTransaction().commit(); } out.writeBoolean(true); out.flush(); // System.out.println("++++++++++++++++++++++++++++++"); return; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { out.writeBoolean(false); out.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }