Beispiel #1
0
  /**
   * When learning the data model from the CPEs via the "GetParameterNames" RPC method, the
   * "GetParameterNamesResponse" message will only contain the parameter names and a boolean
   * "writable" attribute.
   *
   * <p>We will have to compare the parameter names against the standard TR-09 model, and figure out
   * the diffs.
   *
   * <p>For the objects/parameters that are defined in TR-098, we copy all the object/parameter's
   * attribute over from TR-098.
   *
   * <p>For the objects/parameters that are not defined in TR-098, we leave them wide open for now.
   */
  public static Model getModelByGetParameterNamesResponse(
      GetParameterNamesResponseDocument.GetParameterNamesResponse getParameterNamesResponse) {
    // Start with an empty model
    Model model = Model.Factory.newInstance();

    // Go through the response
    ParameterInfoList paramList = getParameterNamesResponse.getParameterList();
    log.info("Found " + paramList.sizeOfParameterInfoStructArray() + " parameters in the response");
    for (ParameterInfoStruct paramInfo : paramList.getParameterInfoStructArray()) {
      /** Extract parameter name/writable from ParameterInfoStruct */
      String name = paramInfo.getName();
      int writable =
          paramInfo.getWritable() ? ReadWriteAccess.INT_READ_WRITE : ReadWriteAccess.INT_READ_ONLY;

      /** Is it an Object (partial path) or a Parameter? */
      if (name.charAt(name.length() - 1) == '.') {
        /**
         * Partial Path ends with a '.' which indicates an Object
         *
         * <p>Have TR-098 model already defined this object?
         */
        ModelObject tr098ModelObject = getTR098ModelObjectByName(name);
        if (tr098ModelObject != null) {
          /** Yes, this object is defined in TR-098. Copy the object over. */
          model.setObjectArray(model.sizeOfObjectArray(), tr098ModelObject);
        } else {
          /**
           * No, this object is not defined in TR-098.
           *
           * <p>Create a new object:
           */
          ModelObject object = model.addNewObject();
          object.setName(name);
          object.setAccess(ReadWriteAccess.Enum.forInt(writable));
          /** TODO: How do we figure out other attributes of this vendor specific parameter? */
          log.info("Created a new vendor specific data model object " + name);
        }
      } else {
        /**
         * This is a full path which indicates a parameter.
         *
         * <p>Do we already have a parent object for it?
         */
        ModelObject parentObj = getObjectByParamName(model, name);
        if (parentObj == null) {
          log.error("Unable to find parent object for parameter " + name);
        } else {
          /**
           * Found the parent object.
           *
           * <p>Have TR-098 already defined this parameter?
           */
          ModelParameter tr098ModelParameter = getTR098ModelParameterByName(name);
          if (tr098ModelParameter != null) {
            // Copy the TR-098 parameter to the new data model
            model.setParameterArray(model.sizeOfParameterArray(), tr098ModelParameter);
          } else {
            // Create a new vendor specific parameter
            ModelParameter newParam = model.addNewParameter();
            newParam.setName(paramInfo.getName());
            newParam.setAccess(ReadWriteAccess.Enum.forInt(writable));

            /** TODO: How do we figure out other attributes of this vendor specific parameter? */
            log.info("Created a new vendor specific data model parameter " + name);
          }
        }
      }
    }

    return model;
  }