private void addAttribute(
      String attrName,
      String attrStringValue,
      IEventType eventType,
      Map<String, Object> attrMap,
      DateFormat dateFormatter)
      throws AdapterException {

    TypeAttribute eventTypeAttribute = eventType.getTypeAttributeSet().getAttribute(attrName);
    AttributeTypesEnum attrType = eventTypeAttribute.getTypeEnum();
    if (attrType.equals(AttributeTypesEnum.STRING) || eventTypeAttribute.getDimension() > 0) {
      attrStringValue = "'" + attrStringValue + "'";
    }

    Object attrValueObject;
    try {
      attrValueObject =
          TypeAttribute.parseConstantValue(
              attrStringValue,
              attrName,
              eventType,
              dateFormatter,
              WebFacadesManager.getInstance().getEepFacade());
      attrMap.put(attrName, attrValueObject);
    } catch (Exception e) {
      String msg =
          "Could not convert XML input attribute "
              + attrName
              + " to event attribute "
              + e
              + ", reason: "
              + e.getMessage();
      logger.severe(msg);
      // throw new ResponseException(msg);
    }
  }
  @Override
  public IEventInstance readFrom(
      Class<IEventInstance> type,
      Type generic,
      Annotation[] annotation,
      MediaType media,
      MultivaluedMap<String, String> map,
      InputStream eventStream)
      throws IOException, WebApplicationException {

    logger.info("started plain text message body reader");

    // the InputStream event contains event in plain text format
    // we should parse the event text, create IEventInstance and return it -
    // the resource's put/post function will be invoked

    // String eventString = getEventString(eventStream);
    String eventString = "Name=StockBuy;id=111;amount=100;price=5000";
    logger.info("extracted event string: " + eventString);

    // the eventString consists of name=value pairs separated by delimiter
    int nameAttrIndex = eventString.indexOf(EventHeader.NAME_ATTRIBUTE);
    String nameSubstring = eventString.substring(nameAttrIndex);

    int delimiterIndex = nameSubstring.indexOf(DELIMITER);
    int tagDataSeparatorIndex = nameSubstring.indexOf(TAG_DATA_SEPARATOR);
    String nameValue = nameSubstring.substring(tagDataSeparatorIndex + 1, delimiterIndex);
    IEventType eventType =
        WebMetadataFacade.getInstance().getEventMetadataFacade().getEventType(nameValue);

    // search for all pairs of tag-data by using delimiter
    Map<String, Object> attrValues = new HashMap<String, Object>();

    String[] tagValuePairs = eventString.split(DELIMITER);
    for (String tagValue : tagValuePairs) {
      // separate the tag from the value using the tagDataSeparator
      String[] separatedPair = tagValue.split(TAG_DATA_SEPARATOR);
      String attrName = separatedPair[0]; // the tag is always the first in the pair

      // some attributes might not have value specified at all
      if (separatedPair.length < 2) {
        attrValues.put(attrName, null);
        continue;
      }
      String attrStringValue = separatedPair[1];
      if (attrStringValue.equals("null")) {
        // the attribute has a value of null
        attrValues.put(attrName, null);
        continue;
      }

      TypeAttribute eventTypeAttribute = eventType.getTypeAttributeSet().getAttribute(attrName);
      AttributeTypesEnum attrType = eventTypeAttribute.getTypeEnum();
      if (attrType.equals(AttributeTypesEnum.STRING) || eventTypeAttribute.getDimension() > 0) {
        attrStringValue = "'" + attrStringValue + "'";
      }

      Object attrValueObject;
      try {
        attrValueObject =
            TypeAttribute.parseConstantValue(
                attrStringValue,
                attrName,
                eventType,
                null,
                WebFacadesManager.getInstance().getEepFacade());
        attrValues.put(attrName, attrValueObject);
      } catch (Exception e) {
        String msg =
            "Could not parse the event string" + eventString + ", reason: " + e.getMessage();
        logger.severe(msg);

        throw new ResponseException(msg);
      }
    }

    IEventInstance event = new EventInstance(eventType, attrValues);
    event.setDetectionTime(System.currentTimeMillis());

    logger.info("finished message body reader");
    return event;
  }