All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sdmlib.javafx.ModelListController Maven / Gradle / Ivy

Go to download

SDMLib is a light weight modeling library. SDMLib intentionally comes without any tool or editor.

There is a newer version: 2.3.2341
Show newest version
package org.sdmlib.javafx;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;

import org.sdmlib.serialization.PropertyChangeInterface;

import de.uniks.networkparser.interfaces.SendableEntityCreator;
import de.uniks.networkparser.IdMap;
import de.uniks.networkparser.list.SimpleSet;
import javafx.scene.Node;
import javafx.scene.layout.VBox;

public class ModelListController implements PropertyChangeListener
{

   private IdMap idMap;
   private VBox vBox;
   private PropertyChangeInterface listRoot;
   private String property;
   private Class elementControllerClass;
   
   private LinkedHashMap objectControllers = new LinkedHashMap();
   private SendableEntityCreator creator;

   public ModelListController(IdMap idMap, VBox vBox, PropertyChangeInterface listRoot, String property,
         Class elementControllerClass2)
   {
      this.idMap = idMap;
      this.vBox = vBox;
      this.listRoot = listRoot;
      this.property = property;
      this.elementControllerClass = elementControllerClass2;
      creator = idMap.getCreatorClass(listRoot);
      
      // subscribe as listener to the list
      listRoot.getPropertyChangeSupport().addPropertyChangeListener(property, this);
      
      this.propertyChange(null);
   }

   @Override
   public void propertyChange(PropertyChangeEvent evt)
   {
      // run through all list elements, remove obsolete element controllers, add missing element controllers
	   SimpleSet elems = (SimpleSet) creator.getValue(listRoot, property);
      for (PropertyChangeInterface listElem : new LinkedHashSet(objectControllers.keySet()))
      {
         if ( ! elems.contains(listElem))
         {
            // it has been removed
            ModelObjectController elemControl = objectControllers.get(listElem);
            objectControllers.remove(listElem);
            vBox.getChildren().remove(elemControl.getNode());
         }
      }
      
      for (PropertyChangeInterface listElem : elems)
      {
         if (objectControllers.get(listElem) == null)
         {
            // need new one
            try
            {
               ModelObjectController elemController = elementControllerClass.newInstance();
               Node listNode = elemController.init(listElem);
               vBox.getChildren().add(listNode);
               objectControllers.put(listElem, elemController);
            }
            catch (InstantiationException | IllegalAccessException e)
            {
               e.printStackTrace();
            }
         }
      }
   }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy