public Client parse(String agentString) { // lookup cache if enabled if (!disableCache) { Client client = uaCache.getIfPresent(agentString); if (client != null) { return client; } } UserAgent ua = parseUserAgent(agentString); OS os = parseOS(agentString); Device device = deviceParser.parse(agentString, (ua == null ? null : ua.family)); Client client = new Client(ua, os, device); if (!disableCache) { uaCache.put(agentString, client); } return client; }
private void initialize(InputStream regexYaml, boolean disableCache) { Yaml yaml = new Yaml(new SafeConstructor()); Map<String, List> regexConfig = (Map<String, List>) yaml.load(regexYaml); List<Map> uaParserConfigs = regexConfig.get("user_agent_parsers"); if (uaParserConfigs == null) { throw new IllegalArgumentException("user_agent_parsers is missing from yaml"); } uaParser = UserAgentParser.fromList(uaParserConfigs); List<Map> osParserConfigs = regexConfig.get("os_parsers"); if (osParserConfigs == null) { throw new IllegalArgumentException("os_parsers is missing from yaml"); } osParser = OSParser.fromList(osParserConfigs); List<Map> deviceParserConfigs = regexConfig.get("device_parsers"); if (deviceParserConfigs == null) { throw new IllegalArgumentException("device_parsers is missing from yaml"); } List<String> mobileUAFamiliesList = regexConfig.get("mobile_user_agent_families"); List<String> mobileOSFamiliesList = regexConfig.get("mobile_os_families"); Set<String> mobileUAFamilies = (mobileUAFamiliesList == null ? Collections.EMPTY_SET : new HashSet<String>(mobileUAFamiliesList)); Set<String> mobileOSFamilies = (mobileOSFamiliesList == null ? Collections.EMPTY_SET : new HashSet<String>(mobileOSFamiliesList)); deviceParser = DeviceParser.fromList(deviceParserConfigs, uaParser, mobileUAFamilies, mobileOSFamilies); this.disableCache = disableCache; if (!disableCache) { uaCache = CacheBuilder.newBuilder() .maximumSize(MAX_CACHE_SIZE) .initialCapacity(MIN_CACHE_SIZE) .concurrencyLevel(1) .build(); } }
/** * This is where the sensor network is initialised, the datamodel, is read, the device info is * read, and sensors are created */ private void setupSensorNetwork() { DatamodelNode instanceTree = new SingleInstanceNode(null, "UPnP"); DatamodelNode child = new SingleInstanceNode(instanceTree, "SensorMgt"); instanceTree.addChildNode(child); DeviceParser.parse(getResources().openRawResource(R.raw.sensor_config), child); List<DataItem> dataItemList = new ArrayList<DataItem>(); String urn = "urn:upnp-org:smgt-surn:refrigerator:AcmeSensorsCorp-com:AcmeIntegratedController:FrigidaireCorp:rf217acrs:monitor"; DataItem mAccumulatedPowerUsed = new DataItem("SensorCollection0001", "Sensor0001", urn, "AccumulatedPowerUsed"); mAccumulatedPowerUsed.setSensorValue("50"); int updatePeriod = 10; // seconds between sensor updates // three sensors mFreezerTemp = new TemperatureSensor("SensorCollection0001", "Sensor0001", urn, "FreezerTemp"); mFreezerTemp.setAvgTemp(-21); mFreezerTemp.setSensorValue("-21"); mFreezerTemp.setUpdatePeriod(updatePeriod); mGroceryTemp = new TemperatureSensor("SensorCollection0001", "Sensor0001", urn, "GroceryTemp"); mGroceryTemp.setAvgTemp(6); mGroceryTemp.setSensorValue("6"); mGroceryTemp.setUpdatePeriod(updatePeriod); mVegetableTemp = new TemperatureSensor("SensorCollection0001", "Sensor0001", urn, "VegetableTemp"); mVegetableTemp.setAvgTemp(8); mVegetableTemp.setSensorValue("8"); mVegetableTemp.setUpdatePeriod(updatePeriod); mDoorOpenAlarm = new AlarmSensor("SensorCollection0001", "Sensor0001", urn, "DoorOpenAlarm"); mDoorOpenAlarm.setSensorValue("0"); mDoorOpenAlarm.setTimeOut(DOOROPENALARM_TIME); DataItem mPowerFaultAlarm = new DataItem("SensorCollection0001", "Sensor0001", urn, "PowerFaultAlarm"); mPowerFaultAlarm.setSensorValue("0"); DataItem mStatusInterval = new DataItem("SensorCollection0001", "Sensor0001", urn, "StatusInterval"); mStatusInterval.setSensorValue(Integer.toString(updatePeriod)); DataItem mClientID = new DataItem("SensorCollection0001", "Sensor0001", urn, "ClientID"); dataItemList.add(mAccumulatedPowerUsed); dataItemList.add(mFreezerTemp); dataItemList.add(mGroceryTemp); dataItemList.add(mVegetableTemp); dataItemList.add(mDoorOpenAlarm); dataItemList.add(mPowerFaultAlarm); dataItemList.add(mStatusInterval); dataItemList.add(mClientID); mDatamodelInterface = new DatamodelInterfaceImpl( Datamodel.inflateDatamodelTree(Datamodel.mDatamodelDefinition), instanceTree, dataItemList); // inform me on any sensor access for (DataItem sensor : dataItemList) { sensor.addOnSensorWriteListener(this); sensor.addOnSensorReadListener(this); } Log.d(TAG, "SensorEventsEnable"); // get all sensors in all collections List<DatamodelNode> sensorInstances = mDatamodelInterface.findNodes( instanceTree, "/UPnP/SensorMgt/SensorCollections/#/Sensors/#/SensorEventsEnable"); Iterator<DatamodelNode> iterator = sensorInstances.iterator(); while (iterator.hasNext()) { DatamodelNode sensorEnable = (DatamodelNode) iterator.next(); if (sensorEnable.getNodeType() == NodeType.LEAF) { Log.d(TAG, "SensorEventsEnable: " + sensorEnable); // set event listener } } }
public Device parseDevice(String agentString) { return deviceParser.parse(agentString); }