package com.airlock.iam.servicecontainer.app.infrastructure.webapp.view;

import com.airlock.iam.base.misc.concurrent.ThreadUtils;
import com.airlock.iam.core.misc.plugin.config.activation.StoppableRunnable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class ServiceContainerRunnable extends StoppableRunnable {
   private final List<ServiceContainerUI> uis = new ArrayList<>();
   private final int sleepInterval;

   public ServiceContainerRunnable(int sleepInterval) {
      this.sleepInterval = sleepInterval;
   }

   public void run() {
      while (!this.isStopped()) {
         this.updateUi();
         ThreadUtils.sleepInterruptibly(this.sleepInterval, TimeUnit.MILLISECONDS);
      }
   }

   private synchronized void updateUi() {
      Iterator<ServiceContainerUI> iterator = this.uis.iterator();

      while (iterator.hasNext()) {
         ServiceContainerUI serviceContainerUI = iterator.next();
         if (!serviceContainerUI.isAttached()) {
            iterator.remove();
         } else {
            serviceContainerUI.getContentView().update(serviceContainerUI);
         }
      }
   }

   public synchronized void add(ServiceContainerUI serviceContainerUI) {
      this.uis.add(serviceContainerUI);
   }
}
