/** Overriden method from SQLMultiSource */
  public Rating next() {
    if (!hasNext()) return null;

    Rating l = new Rating(instances);
    Attribute[] attributes = getAttributes();
    SparseInstance d = new SparseInstance(attributes.length - 2);
    Long start;
    try {
      l.setUserId(Utils.objectToInteger(records.getObject(1)));
      l.setObjectId(Utils.objectToInteger(records.getObject(2)));
      int flixId = Integer.parseInt(records.getObject(2).toString());
      int i = 0;
      for (; i < this.attributes.length; i++) {
        start = System.currentTimeMillis();
        if (attributes[i].isNominal()) d.setValue(i, records.getObject(i + 3).toString());
        else d.setValue(i, Utils.objectToDouble(records.getObject(i + 3)));
        Oracle += System.currentTimeMillis() - start;
      }
      SparseInstance movie = imdb.getMovie(flixId);
      d = (SparseInstance) d.mergeInstance(movie);
      d.setDataset(instances);

      start = System.currentTimeMillis();
      records.next();
      Oracle += System.currentTimeMillis() - start;
    } catch (SQLException e) {
      e.printStackTrace();
      return null;
    }
    l.setRecord(d);
    return l;
  }
 public void useUserRatingsForContent(int userId) {
   // Use the user's ratings
   // Integer userIdDataset;
   // int current = content.getCurrentUser();
   /// content.restartUserId();
   // while( (userIdDataset= content.userId())!=null){
   //	content.setFixedUserId(userIdDataset);
   content.restart();
   // if (!content.hasNext())
   //	continue;
   Rating rec;
   while ((rec = (Rating) content.next()) != null) {
     // int userId = rec.getUserId();
     int objectId = rec.getObjectId();
     rec.setRating(usersRatings.get(userId).get(objectId));
   }
   // }
   // content.setFixedUserId(current);
 }
  public void usePredictedRatingsForContent(Method m, int userId) {
    // Store the original ratings in the map.
    Rating rec;
    content.setFixedUserId(userId);
    content.restart();
    while ((rec = (Rating) content.next()) != null) {
      int objectId = rec.getObjectId();
      double rating = rec.getRating();

      if (!usersRatings.containsKey(userId))
        usersRatings.put(userId, new HashMap<Integer, Double>());

      usersRatings.get(userId).put(objectId, rating);
    }
    // Use the ratings from the behaviour method
    content.restart();
    while ((rec = (Rating) content.next()) != null) {
      Double r = (Double) m.classifyRecord(rec);
      if (r != null) rec.setRating(r);
    }
  }