/** {@inheritDoc} */
  @Override
  @MethodLog
  public long registerMethodSensorTypeIdent(
      long platformId, String fullyQualifiedClassName, Map<String, Object> parameters) {
    MethodSensorTypeIdent methodSensorTypeIdent;

    List<MethodSensorTypeIdent> methodSensorTypeIdents =
        methodSensorTypeIdentDao.findByClassNameAndPlatformId(fullyQualifiedClassName, platformId);
    if (1 == methodSensorTypeIdents.size()) {
      methodSensorTypeIdent = methodSensorTypeIdents.get(0);

      // update preferences
      methodSensorTypeIdent.setSettings(parameters);
      methodSensorTypeIdentDao.saveOrUpdate(methodSensorTypeIdent);
    } else {
      // only if the new sensor is registered we need to update the platform ident
      PlatformIdent platformIdent = platformIdentDao.load(platformId);
      methodSensorTypeIdent = new MethodSensorTypeIdent();
      methodSensorTypeIdent.setPlatformIdent(platformIdent);
      methodSensorTypeIdent.setFullyQualifiedClassName(fullyQualifiedClassName);
      methodSensorTypeIdent.setSettings(parameters);

      Set<SensorTypeIdent> sensorTypeIdents = platformIdent.getSensorTypeIdents();
      sensorTypeIdents.add(methodSensorTypeIdent);

      methodSensorTypeIdentDao.saveOrUpdate(methodSensorTypeIdent);
      platformIdentDao.saveOrUpdate(platformIdent);
    }

    return methodSensorTypeIdent.getId();
  }
  /** {@inheritDoc} */
  @Override
  @MethodLog
  public void addSensorTypeToMethod(long methodSensorTypeId, long methodId) {
    MethodIdentToSensorType methodIdentToSensorType =
        methodIdentToSensorTypeDao.find(methodId, methodSensorTypeId);
    if (null == methodIdentToSensorType) {
      MethodIdent methodIdent = methodIdentDao.load(methodId);
      MethodSensorTypeIdent methodSensorTypeIdent =
          methodSensorTypeIdentDao.load(methodSensorTypeId);
      methodIdentToSensorType =
          new MethodIdentToSensorType(methodIdent, methodSensorTypeIdent, null);
    }

    // always update the timestamp
    methodIdentToSensorType.setTimestamp(
        new Timestamp(GregorianCalendar.getInstance().getTimeInMillis()));

    methodIdentToSensorTypeDao.saveOrUpdate(methodIdentToSensorType);
  }