예제 #1
0
  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;
  }
예제 #2
0
  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
      }
    }
  }
예제 #4
0
 public Device parseDevice(String agentString) {
   return deviceParser.parse(agentString);
 }