public void processVideos() throws NoVideoAvailableException {
List<Advertisement> video = new ArrayList<>();
for (Object video1 : storage.list()) {
Advertisement adv = (Advertisement) video1;
video.add(adv);
}
Collections.sort(video, (Comparator.comparingInt(Advertisement::getDuration)));
Collections.sort(video, ((o1, o2) -> (int) (o1.getAmountPerOneDisplaying() - o2.getAmountPerOneDisplaying())));
Collections.reverse(video);
int freetime = timeSeconds;
for (Advertisement vid : video) {
if (vid.getDuration() <= freetime && vid.getAmountPerOneDisplaying() > 0) {
System.out.println(vid.getName() + " is displaying... " + vid.getAmountPerOneDisplaying() + ", " + vid.getAmountPerOneDisplaying() * 1000 / vid.getDuration());
vid.revalidate();
freetime = freetime - vid.getDuration();
}
}
if(!video.isEmpty()) StatisticManager.getInstance().register(new VideoSelectedEventDataRow(video, video.size(), freetime));
if (storage.list().isEmpty()) {
throw new NoVideoAvailableException();
}
}package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.ad.AdvertisementManager;
import com.javarush.task.task27.task2712.ad.NoVideoAvailableException;
import com.javarush.task.task27.task2712.kitchen.Order;
import java.io.IOException;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Tablet extends Observable {
final int number;
static Logger logger = Logger.getLogger(Tablet.class.getName());
public Tablet(int number) {
this.number = number;
}
public Order createOrder(){
try {
Order order = new Order(this);
try {
new AdvertisementManager(order.getTotalCookingTime()*60).processVideos();
} catch (NoVideoAvailableException ex){
logger.log(Level.INFO, "No video is available for the order " + order);
}
if(!order.isEmpty()){
setChanged();
notifyObservers(order);
}
return order;
} catch (IOException e) {
logger.log(Level.SEVERE,"Console is unavailable.");
return null;
}
}
@Override
public String toString() {
return "Tablet{number="+number + "}";
}
}