@Override
  public boolean updateFeature(MobileFeature mobileFeature)
      throws MobileDeviceManagementDAOException {
    boolean status = false;
    Connection conn = null;
    PreparedStatement stmt = null;
    try {
      conn = AndroidDAOFactory.getConnection();
      String updateDBQuery = "UPDATE AD_FEATURE SET NAME = ?, DESCRIPTION = ?" + "WHERE CODE = ?";

      stmt = conn.prepareStatement(updateDBQuery);
      stmt.setString(1, mobileFeature.getName());
      stmt.setString(2, mobileFeature.getDescription());
      stmt.setString(3, mobileFeature.getCode());

      int rows = stmt.executeUpdate();
      if (rows > 0) {
        status = true;
        if (log.isDebugEnabled()) {
          log.debug("Android Feature " + mobileFeature.getCode() + " data has been " + "modified.");
        }
      }
    } catch (SQLException e) {
      String msg =
          "Error occurred while updating the Android Feature '"
              + mobileFeature.getCode()
              + "' to the Android db.";
      log.error(msg, e);
      throw new AndroidFeatureManagementDAOException(msg, e);
    } finally {
      MobileDeviceManagementDAOUtil.cleanupResources(stmt, null);
    }
    return status;
  }
  @Override
  public MobileFeature getFeatureById(int mblFeatureId) throws MobileDeviceManagementDAOException {
    PreparedStatement stmt = null;
    ResultSet rs = null;
    Connection conn = null;
    try {
      conn = AndroidDAOFactory.getConnection();
      String sql = "SELECT ID, CODE, NAME, DESCRIPTION FROM AD_FEATURE WHERE ID = ?";
      stmt = conn.prepareStatement(sql);
      stmt.setInt(1, mblFeatureId);
      rs = stmt.executeQuery();

      MobileFeature mobileFeature = null;
      if (rs.next()) {
        mobileFeature = new MobileFeature();
        mobileFeature.setId(rs.getInt(AndroidPluginConstants.ANDROID_FEATURE_ID));
        mobileFeature.setCode(rs.getString(AndroidPluginConstants.ANDROID_FEATURE_CODE));
        mobileFeature.setName(rs.getString(AndroidPluginConstants.ANDROID_FEATURE_NAME));
        mobileFeature.setDescription(
            rs.getString(AndroidPluginConstants.ANDROID_FEATURE_DESCRIPTION));
        mobileFeature.setDeviceType(
            DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
      }
      return mobileFeature;
    } catch (SQLException e) {
      throw new AndroidFeatureManagementDAOException(
          "Error occurred while retrieving android feature '"
              + mblFeatureId
              + "' from the Android database.",
          e);
    } finally {
      MobileDeviceManagementDAOUtil.cleanupResources(stmt, rs);
      AndroidDAOFactory.closeConnection();
    }
  }
  @Override
  public boolean addFeature(MobileFeature mobileFeature) throws MobileDeviceManagementDAOException {

    PreparedStatement stmt = null;
    boolean status = false;
    Connection conn = null;
    try {
      conn = AndroidDAOFactory.getConnection();
      String sql = "INSERT INTO AD_FEATURE(CODE, NAME, DESCRIPTION) VALUES (?, ?, ?)";
      stmt = conn.prepareStatement(sql);
      stmt.setString(1, mobileFeature.getCode());
      stmt.setString(2, mobileFeature.getName());
      stmt.setString(3, mobileFeature.getDescription());
      stmt.executeUpdate();
      status = true;
      status = true;
    } catch (SQLException e) {
      throw new AndroidFeatureManagementDAOException(
          "Error occurred while adding android feature '"
              + mobileFeature.getName()
              + "' into the metadata repository",
          e);
    } finally {
      MobileDeviceManagementDAOUtil.cleanupResources(stmt, null);
    }
    return status;
  }
 @Override
 public boolean deleteFeatureByCode(String mblFeatureCode)
     throws MobileDeviceManagementDAOException {
   PreparedStatement stmt = null;
   boolean status = false;
   Connection conn = null;
   try {
     conn = AndroidDAOFactory.getConnection();
     String sql = "DELETE FROM AD_FEATURE WHERE CODE = ?";
     stmt = conn.prepareStatement(sql);
     stmt.setString(1, mblFeatureCode);
     stmt.execute();
     status = true;
   } catch (SQLException e) {
     throw new AndroidFeatureManagementDAOException(
         "Error occurred while deleting android feature '"
             + mblFeatureCode
             + "' from Android database.",
         e);
   } finally {
     MobileDeviceManagementDAOUtil.cleanupResources(stmt, null);
   }
   return status;
 }