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

net.alantea.glideui.pageelements.GliderPage Maven / Gradle / Ivy

The newest version!
package net.alantea.glideui.pageelements;

import java.util.LinkedList;
import java.util.List;

import javax.swing.JPanel;

import net.alantea.glide.Element;
import net.alantea.glide.Entity;
import net.alantea.glideui.parser.GUIDataAccessParser;
import net.alantea.glideui.utils.LinkAccess;
import net.alantea.swing.pageelements.GUIElement;
import net.alantea.swing.pageelements.GUIElementPage;

/**
 * The Class GliderPage.
 */
public class GliderPage extends GUIElementPage
{
   
   /** The Constant serialVersionUID. */
   private static final long serialVersionUID = 1L;

   /**
    * Instantiates a new glider page.
    *
    * @param parent the parent
    * @param element the element
    * @param reference the reference
    */
   public GliderPage(JPanel parent, Element element, String reference)
   {
      super(parent, element, reference, generateGUIElements(parent, element));
   }
   
   private static List generateGUIElements(JPanel parent, Element element)
   {
      List list = GUIElementPage.generateGUIElements(element);
      if (parent != null)
      {
         List sublist = instrumentElementLinks(parent, element.getClass(), element);
         list.addAll(sublist);
      }
      return list;
   }
   
   /**
    * Instrument element links.
    *
    * @param element the element
    * @param theClass the the class
    */
   private static List instrumentElementLinks(JPanel parent, Class theClass, Element element)
   {
      List list = new LinkedList<>();
      if (theClass != Object.class)
      {
         List sublist = instrumentElementLinks(parent,theClass.getSuperclass(), element);
         list.addAll(sublist);
      }

      List linkAccesses = GUIDataAccessParser.getLinks(theClass.getName());
      if (linkAccesses != null)
      {
         for (LinkAccess linkAccess : linkAccesses)
         {
            GUIElement elt = instrumentElementLink(parent,linkAccess, element.getClass(), element);
            list.add(elt);
         }
      }
      return list;
   }
   
   private static GUIElement instrumentElementLink(JPanel parent, LinkAccess link, Class class1,
         Element element)
   {
      if ("MINDMAP".equals(link.getType()))
      {
         return instrumentMindMapElementLink(parent, link, class1, element);
      }
      else if (link.isMultiple())
      {
         return instrumentMultipleElementLink(parent, link, class1, element);
      }
      else
      {
         return instrumentUniqueElementLink(parent, link, class1, element); 
      }
   }

   private static GUIElement instrumentMindMapElementLink(JPanel parent, LinkAccess link, Class class1,
         Element element)
   {
      String key = (link.getKey().isEmpty()) ? link.getName() : link.getKey();
      int n = link.getOrder();
      MindMapLinkElement elt = new MindMapLinkElement(parent, link.getName(),
            (Entity) element, key, link.isEditable(), link.getPage(), 
            (n == Integer.MAX_VALUE) ? -2 : 128, link.getOrder(), link.getAttributes());
      
      return elt;
   }

   private static GUIElement instrumentMultipleElementLink(JPanel parent, LinkAccess link, Class class1,
         Element element)
   {
      String key = (link.getKey().isEmpty()) ? link.getName() : link.getKey();
      int n = link.getOrder();
      @SuppressWarnings("unchecked")
      MultipleLinkElement elt = new MultipleLinkElement(parent, link.getName(), link.getDirection(),
            (Entity) element, key, link.isEditable(), link.getPage(), (Class) link.getTarget(),
            link.getRelationType(), link.getRelationTarget(),
            (n == Integer.MAX_VALUE) ? -2 : 128, link.getOrder(), link.isCreate(), link.getAttributes());
      
      return elt;
   }
   
   private static GUIElement instrumentUniqueElementLink(JPanel parent, LinkAccess link, Class class1,
         Element element)
   {
      String key = (link.getKey().isEmpty()) ? link.getName() : link.getKey();
      UniqueLinkElement elt = new UniqueLinkElement(parent, link.getName(), link.getDirection(),
            (Entity) element, key, link.isEditable(), link.getPage(),
            link.getRelationType(), link.getRelationTarget(), 40, link.getOrder(), link.getAttributes());
      
      return elt;
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy