/** {@inheritDoc} */
  @Override
  @MethodLog
  public long registerPlatformSensorTypeIdent(long platformId, String fullyQualifiedClassName) {
    PlatformSensorTypeIdent platformSensorTypeIdent;
    List<PlatformSensorTypeIdent> platformSensorTypeIdents =
        platformSensorTypeIdentDao.findByClassNameAndPlatformId(
            fullyQualifiedClassName, platformId);
    if (1 == platformSensorTypeIdents.size()) {
      platformSensorTypeIdent = platformSensorTypeIdents.get(0);
    } else {
      // only if it s not registered we need updating
      PlatformIdent platformIdent = platformIdentDao.load(platformId);
      platformSensorTypeIdent = new PlatformSensorTypeIdent();
      platformSensorTypeIdent.setPlatformIdent(platformIdent);
      platformSensorTypeIdent.setFullyQualifiedClassName(fullyQualifiedClassName);

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

      platformSensorTypeIdentDao.saveOrUpdate(platformSensorTypeIdent);
      platformIdentDao.saveOrUpdate(platformIdent);
    }

    return platformSensorTypeIdent.getId();
  }
  /** {@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
  @Transactional
  @MethodLog
  public long registerJmxSensorTypeIdent(long platformId, String fullyQualifiedClassName) {
    JmxSensorTypeIdent jmxSensorTypeIdent = new JmxSensorTypeIdent();
    jmxSensorTypeIdent.setFullyQualifiedClassName(fullyQualifiedClassName);

    List<JmxSensorTypeIdent> jmxSensorTypeIdents =
        jmxSensorTypeIdentDao.findByExample(platformId, jmxSensorTypeIdent);
    if (1 == jmxSensorTypeIdents.size()) {
      jmxSensorTypeIdent = jmxSensorTypeIdents.get(0);
    } else {
      PlatformIdent platformIdent = platformIdentDao.load(platformId);
      jmxSensorTypeIdent.setPlatformIdent(platformIdent);

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

      jmxSensorTypeIdentDao.saveOrUpdate(jmxSensorTypeIdent);
      platformIdentDao.saveOrUpdate(platformIdent);
    }

    return jmxSensorTypeIdent.getId();
  }