Package org.uengine.processdesigner

Source Code of org.uengine.processdesigner.AbstractInformationPanel$InformationValueLabel

package org.uengine.processdesigner;

import org.metaworks.*;
import org.uengine.kernel.HumanActivity;
import org.uengine.kernel.ProcessDefinition;
import org.uengine.kernel.Role;
import org.uengine.kernel.RoleParameterContext;
import org.uengine.kernel.RoleResolutionContext;
import org.uengine.kernel.SubProcessActivity;
import org.uengine.kernel.designer.ComplexActivityDesigner;
import org.uengine.kernel.designer.ProcessDefinitionDesigner;
import org.uengine.kernel.designer.SubProcessActivityDesigner;
import org.uengine.util.UEngineUtil;

import javax.swing.*;
import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
import javax.swing.border.MatteBorder;
import javax.swing.border.TitledBorder;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.*;
import java.awt.*;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

/**
* @author Jinyoung Jang
*/

public abstract class AbstractInformationPanel extends JPanel {

  Application application;
  Class cls;
  String title;
  Hashtable lablesForEachValue;

  WindowAdapter refreshAction;
  JDialog editDlg;
  ProcessDefinition processDefinition;
    public ProcessDefinition getProcessDefinition() {
      return processDefinition;
    }
    public void setProcessDefinition(ProcessDefinition value) {
      processDefinition = value;
      if (value != null) {
        setValues(getValues());
        refreshAction.windowClosing(null);
      }
    }
   
  ProcessDefinitionDesigner processDefinitionDesigner;
    public ProcessDefinitionDesigner getProcessDefinitionDesigner() {
      return processDefinitionDesigner;
    }
    public void setProcessDefinitionDesigner(
        ProcessDefinitionDesigner processDefinitionDesigner) {
      this.processDefinitionDesigner = processDefinitionDesigner;
    }

  public AbstractInformationPanel(ProcessDefinition pd, String label, Class cls)
  { 
    super(new BorderLayout(8,8));
   
    final JPanel contentPanel = new ProxyPanel(new GridLayout(0,1));
     
    setSize( 200, 200);   
    this.cls = cls;
    this.title = label;
    try{
      application = createApplication();
       
      refreshAction =      
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          //finalThis.revalidate();
           
          contentPanel.removeAll();
          if(lablesForEachValue!=null) lablesForEachValue.clear();
          lablesForEachValue = new Hashtable();
           
          Instance[] records = getApplication().getInstances();
          Object[] values = new Object[records.length];
          for(int i=0; i<records.length; i++){
            ObjectInstance objRec = (ObjectInstance)records[i];
            final Object value = objRec.getObject();
            //
            java.net.URL img = getClass().getClassLoader().getResource("org/uengine/kernel/images/arr_02.gif");
           
            JLabel label = new InformationValueLabel((value), new ImageIcon(img), JLabel.LEFT);
            contentPanel.add(label);
            lablesForEachValue.put(value, label);
           
            DragSource dragSource = DragSource.getDefaultDragSource();
            dragSource.createDefaultDragGestureRecognizer(
              label, // component where drag originates
              DnDConstants.ACTION_COPY_OR_MOVE, // actions
              new DragGestureListener(){
                /**
                 * start of D&D framework implementation
                 */
               
                public void dragGestureRecognized(DragGestureEvent e) {
                  e.startDrag(DragSource.DefaultCopyDrop, // cursor
                    new Transferable(){

                      public DataFlavor[] getTransferDataFlavors() {
                        // TODO Auto-generated method stub
                        return null;
                      }

                      public boolean isDataFlavorSupported(DataFlavor flavor) {
                        // TODO Auto-generated method stub
                        return false;
                      }

                      public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
                        List list = new ArrayList();
                        list.add(value);
                        list.add(getProcessDefinitionDesigner());
                        return list;
                      }
                   
                    })// drag source listener
                }
                public void dragDropEnd(DragSourceDropEvent e) {}
                public void dragEnter(DragSourceDragEvent e) {}
                public void dragExit(DragSourceEvent e) {}
                public void dragOver(DragSourceDragEvent e) {}
                public void dropActionChanged(DragSourceDragEvent e) {}

                /**
                 * end of D&D framework implementation
                 */
              }
            ); // drag gesture recognizer
           
            //
            values[i] = value;
          }         
           
          if(e!=null)
            applyValues(values)
             
          if(values==null || values.length==0)
            contentPanel.add(new JLabel("        <empty>         "));
           
          contentPanel.revalidate();
        }
      };

      editDlg = new JDialog(ProcessDesigner.getInstance(), "Edit " + title, true);
      editDlg.getContentPane().add(application.createPanel());
      editDlg.addWindowListener(refreshAction);
      ((DefaultApplication)application).setOwner(ProcessDesigner.getInstance());

      //setBorder(BorderFactory.createTitledBorder(label));
      //java.net.URL imgURL = getClass().getClassLoader().getResource("org/uengine/kernel/images/role.gif");
      //setBorder(new NewBorder(getBorder(), label, new ImageIcon(imgURL)));
     
      setToolTipText("Click to edit " + label);
     
      addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent me){
         
          onEdit();
          editDlg.setSize(450, 300);
          editDlg.setLocationRelativeTo(ProcessDesigner.getInstance());   
          editDlg.setVisible(true);
        }
      });
     
      add("Center", contentPanel);
         
      setProcessDefinition(pd);
      contentPanel.revalidate();
     
    }catch(Exception e){
      e.printStackTrace();
      return;
    }
    }
 
  public JLabel getJLabel(Object value){
    if(value==null) return null;
   
    if(lablesForEachValue.containsKey(value))
      return (JLabel) lablesForEachValue.get(value);
   
    return null;
  }

  public Application getApplication() {
    return application;
  }
 
  protected Application createApplication() throws Exception{
    return new GridApplication(new ObjectType(getCls()));
  }
 
  protected void setValues(Object[] values){
    if(values!=null){
      ((DefaultApplication)getApplication()).clearAll();

      for(int i=0; i<values.length; i++){
        ObjectInstance rec = (ObjectInstance)getApplication().getType().createInstance();
        rec.setObject(values[i]);
        //rec.setFieldValue("name", roles[i].getName());
       
        getApplication().addInstance(rec);
      }   
    }
  }
 
  protected abstract Object[] getValues();
  protected abstract void applyValues(Object[] objs);
 
  protected String getLabel(Object value){
    return value.toString();
  }
 
  public void onEdit(){
  }
 
  public void refresh(){
    setValues(getValues());
    refreshAction.windowClosing(null);
  }
 
/*  public class ObjectTable2 extends ObjectTable{
    public ObjectTable2(Class type) throws Exception{
      super(type);
     
      FieldDescriptor[] fds = getFieldDescriptors();
     
      for(int i=0; i<fds.length; i++){
        FieldDescriptor fd = fds[i];
        try{
          fd.setInputter(ActivityDescriptor.getDefaultInputter(fd.getClassType()));
        }catch(Exception e){
        }
      }
    }
  }*/
  public Class getCls() {
    return cls;
  }

  public void setCls(Class class1) {
    cls = class1;
  }
 
 
  ImageIcon icon;
 
  @Override
  public void setBorder(Border border) {
    if(border instanceof IconTitledBorder){
      IconTitledBorder iconBorder = (IconTitledBorder)border;
      icon = iconBorder.icon;
      title = iconBorder.getTitle();
     
      add("North", new JLabel( title));
    }else
      super.setBorder(border);
  }

  public void paint(Graphics g) {
    super.paint(g);
   
    Graphics2D g2d = (Graphics2D) g;
   
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    //BasicStroke stroke = new BasicStroke(2, 1, 1, 1, new float[]{4f,4f}, 3);
    Stroke stroke = new BasicStroke(0.5f);

    g2d.setStroke(stroke);
    g2d.setColor(new Color(100, 100, 200));

    g2d.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 10, 10);
   
    icon.paintIcon(this, g2d, 5, 0);
   
    //g2d.drawString(title, 10, 0);
    g2d.dispose();
  }
 
  class InformationValueLabel extends JLabel implements DropTargetListener {
    Object value;
   
    public InformationValueLabel(Object value, Icon icon, int alignment){
      super(getLabel(value), icon, alignment);
      this.value = value;
     
      new DropTarget(this,
          DnDConstants.ACTION_COPY_OR_MOVE,
          this);

    }

    public void dragEnter(DropTargetDragEvent dtde) {
      // TODO Auto-generated method stub
     
    }

    public void dragOver(DropTargetDragEvent dtde) {
      // TODO Auto-generated method stub
     
    }

    public void dropActionChanged(DropTargetDragEvent dtde) {
      // TODO Auto-generated method stub
     
    }

    public void dragExit(DropTargetEvent dte) {
      // TODO Auto-generated method stub
     
    }

    public void drop(DropTargetDropEvent e) {
      try {
        DataFlavor listFlavor = DataFlavor.javaFileListFlavor;
        Transferable tr = e.getTransferable();
       
//        System.out.println(tr);
        java.util.List list = (java.util.List)tr.getTransferData(listFlavor);
       
        Object objectGot = list.get(0);
       
        if(objectGot instanceof Role && value instanceof Role && list.size()>1){
          ProcessDefinitionDesigner processDefinitionDesignerFrom = (ProcessDefinitionDesigner)list.get(1);
          Role droppedRole = (Role) objectGot;
         
          if(processDefinitionDesignerFrom!=getProcessDefinitionDesigner()){
            boolean connectedFromMain = true;
           
            try{
              connectedFromMain = !(processDefinitionDesignerFrom.getParentDesigner().getActivity().getProcessDefinition() == processDefinition);
            }catch(Exception ex){
            }
           
            SubProcessActivity subProcAct = null;
            ProcessDefinition mainProcessDefinition, subProcessDefinition;
            Role subRole, mainRole;
            if(connectedFromMain){
              subProcAct = (SubProcessActivity) getSubProcessDesigner(getProcessDefinitionDesigner()).getActivity();
              subProcessDefinition = (ProcessDefinition) getProcessDefinitionDesigner().getActivity();
              subRole = (Role)value;
              mainRole = droppedRole;
            }else{
              subProcAct = (SubProcessActivity) getSubProcessDesigner(processDefinitionDesignerFrom).getActivity();
              subProcessDefinition = (ProcessDefinition) processDefinitionDesignerFrom.getActivity();
              subRole = droppedRole;
              mainRole = (Role)value;
            }
            mainProcessDefinition = subProcAct.getProcessDefinition();
           
            RoleParameterContext roleParamContext = new RoleParameterContext();
            roleParamContext.setArgument(subRole.getName());
            roleParamContext.setRole(mainRole);
           
            RoleParameterContext[] newRPC = (RoleParameterContext[]) UEngineUtil.addArrayElement(subProcAct.getRoleBindings(), roleParamContext);
            subProcAct.setRoleBindings(newRPC);
          }
         
        }       
      } catch(UnsupportedFlavorException ufe) {
        ufe.printStackTrace();
      } catch (IOException ioe) {
        ioe.printStackTrace();
      }     
    }
   
    private SubProcessActivityDesigner getSubProcessDesigner(ProcessDefinitionDesigner designer){
      Container parent = designer.getComponent().getParent();
     
      while(!(parent instanceof ActivityDesigner) && parent!=null){
        parent = parent.getParent();
      }
     
      return (SubProcessActivityDesigner)parent;
    }

   
  }

}

/*class NewBorder extends TitledBorder {
 
  ImageIcon icon;
  public NewBorder(Border border, String title, ImageIcon icon){
    super(title);
    this.icon = icon;
  }
 
  public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
   
    super.paintBorder(c, g, x, y, width, height);
    Insets insets = getBorderInsets(c);
   
    int tileW = icon.getIconWidth()/2;
        int tileH = icon.getIconHeight()/2;
        g.translate(x-tileW, y);
       
        // Paint Icon
        Graphics cg;
        cg = g.create();
        cg.setClip(0, 0, width, insets.top);
        icon.paintIcon(c, cg, x, y);
        cg.dispose();
        g.translate(x+tileW, y);
       
   
    }
}*/

 
TOP

Related Classes of org.uengine.processdesigner.AbstractInformationPanel$InformationValueLabel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.