KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > apps > wf > WFPanel


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.apps.wf;
15
16 import java.awt.*;
17 import java.awt.event.*;
18 import javax.swing.*;
19 import javax.swing.event.*;
20 import java.util.*;
21 import java.beans.*;
22
23 import org.compiere.apps.*;
24 import org.compiere.util.*;
25 import org.compiere.model.*;
26 import org.compiere.plaf.*;
27 import org.compiere.swing.*;
28
29 /**
30  * WorkFlow Panel
31  *
32  * @author Jorg Janke
33  * @version $Id: WFPanel.java,v 1.6 2003/11/06 07:08:28 jjanke Exp $
34  */

35 public class WFPanel extends CPanel
36     implements PropertyChangeListener, ActionListener, MouseListener
37 {
38     /**
39      * Create Workflow Panel
40      * @param menu menu
41      */

42     public WFPanel (AMenu menu)
43     {
44         m_menu = menu;
45         try
46         {
47             jbInit();
48         }
49         catch(Exception JavaDoc e)
50         {
51             Log.error("WFPanel", e);
52         }
53     } // WFPanel
54

55     /** Menu Link */
56     private AMenu m_menu = null;
57
58     /** Workflow Model */
59     private MWorkflow m_wf = null;
60     /** Context */
61     private Properties m_ctx = Env.getCtx();
62     /** Active Node */
63     private WFNode m_activeNode = null;
64     /** ReadWrite Mode (see WFNode) */
65     private boolean m_readWrite = Ini.getPropertyBool(Ini.P_COMPIERESYS);
66
67     // IO
68
private BorderLayout mainLayout = new BorderLayout();
69     private JScrollPane centerScrollPane = new JScrollPane();
70     private CPanel southPanel = new CPanel();
71     private CPanel centerPanel = new CPanel();
72     private BorderLayout southLayout = new BorderLayout();
73     private JScrollPane infoScrollPane = new JScrollPane();
74     private JTextPane infoTextPane = new JTextPane();
75     private CPanel buttonPanel = new CPanel();
76     private JButton wfStart = new JButton();
77     private JButton wfBack = new JButton();
78     private JButton wfNext = new JButton();
79     private JButton wfEnd = new JButton();
80     //
81
private JPopupMenu popup = new JPopupMenu();
82     private JMenuItem mZoom = new JMenuItem (Msg.getMsg(Env.getCtx(), "Zoom"));
83     private JMenuItem mRefresh = new JMenuItem (Msg.getMsg(Env.getCtx(), "Refresh"));
84     private JMenuItem mResetLayout = new JMenuItem ("Reset Layout");
85     private JMenuItem mSaveLayout = new JMenuItem ("Save Layout");
86
87     /**
88      * Static Init
89      * <pre>
90      * centerScrollPane
91      * centerPanel
92      * south Panel
93      * infoScrollPane
94      * buttonPanel
95      * </pre>
96      * @throws Exception
97      */

98     private void jbInit() throws Exception JavaDoc
99     {
100         this.setLayout(mainLayout);
101         CompiereColor.setBackground(this);
102         southPanel.setLayout(southLayout);
103         // Center
104
this.add(centerScrollPane, BorderLayout.CENTER);
105         centerPanel.setLayout (new WFLayoutManager());
106         centerPanel.setBorder (BorderFactory.createEmptyBorder(5,5,5,5));
107         centerPanel.setBackground(new Color(236,236,236));
108         centerPanel.setOpaque(false);
109         centerScrollPane.getViewport().add(centerPanel, null);
110         // Info
111
infoScrollPane.getViewport().add(infoTextPane, null);
112         infoScrollPane.setPreferredSize(new Dimension(200, 140));
113         infoTextPane.setBackground(CompierePLAF.getFieldBackground_Inactive());
114         infoTextPane.setEditable(false);
115         infoTextPane.setRequestFocusEnabled(false);
116         infoTextPane.setContentType("text/html");
117         // South
118
this.add(southPanel, BorderLayout.SOUTH);
119         southPanel.add(infoScrollPane, BorderLayout.CENTER);
120         southPanel.add(buttonPanel, BorderLayout.SOUTH);
121         //
122
wfStart.setIcon(Env.getImageIcon("wfStart24.gif"));
123         wfStart.setMargin(new Insets(0, 10, 0, 10));
124         wfStart.setRequestFocusEnabled(false);
125         wfStart.addActionListener(this);
126         wfStart.setToolTipText(Msg.getMsg(m_ctx, "WFStart"));
127         wfBack.setIcon(Env.getImageIcon("wfBack24.gif"));
128         wfBack.setMargin(new Insets(0, 15, 0, 15));
129         wfBack.setRequestFocusEnabled(false);
130         wfBack.addActionListener(this);
131         wfBack.setToolTipText(Msg.getMsg(m_ctx, "WFPrevious"));
132         wfNext.setIcon(Env.getImageIcon("wfNext24.gif"));
133         wfNext.setMargin(new Insets(0, 15, 0, 15));
134         wfNext.setRequestFocusEnabled(false);
135         wfNext.addActionListener(this);
136         wfNext.setToolTipText(Msg.getMsg(m_ctx, "WFNext"));
137         wfEnd.setIcon(Env.getImageIcon("wfEnd24.gif"));
138         wfEnd.setMargin(new Insets(0, 10, 0, 10));
139         wfEnd.setRequestFocusEnabled(false);
140         wfEnd.addActionListener(this);
141         wfEnd.setToolTipText(Msg.getMsg(m_ctx, "WFExit"));
142         buttonPanel.add(wfStart, null);
143         buttonPanel.add(wfBack, null);
144         buttonPanel.add(wfNext, null);
145         buttonPanel.add(wfEnd, null);
146
147         // Popup Menu
148
centerPanel.addMouseListener(this);
149         mZoom.addActionListener(this);
150         popup.add(mZoom);
151         mRefresh.addActionListener(this);
152         popup.add(mRefresh);
153         if (m_readWrite)
154         {
155             mResetLayout.addActionListener(this);
156             popup.add(mResetLayout);
157             mSaveLayout.addActionListener(this);
158             popup.add(mSaveLayout);
159         }
160     } // jbInit
161

162     /*************************************************************************/
163
164     /**
165      * Load Workflow & Nodes
166      * @param AD_Workflow_ID ID
167      */

168     public void load (int AD_Workflow_ID)
169     {
170         Log.trace(Log.l4_Data, "WFPanel.load " + AD_Workflow_ID);
171         m_wf = new MWorkflow (Env.getCtx(), AD_Workflow_ID);
172         centerPanel.removeAll();
173         // Add Nodes for Paint
174
MWFNode[] nodes = m_wf.getNodes(true);
175         for (int i = 0; i < nodes.length; i++)
176         {
177             WFNode wf = new WFNode(nodes[i]);
178             wf.addPropertyChangeListener(WFNode.PROPERTY_SELECTED, this);
179             centerPanel.add (wf);
180             // Add Lines
181
MWFNodeNext[] nexts = nodes[i].getNextNodes();
182             for (int j = 0; j < nexts.length; j++)
183                 centerPanel.add (new WFLine (nexts[j]));
184         }
185         // Info Text
186
StringBuffer JavaDoc msg = new StringBuffer JavaDoc("<HTML>");
187         msg.append("<H2>").append(m_wf.getName(true)).append("</H2>");
188         String JavaDoc s = m_wf.getDescription(true);
189         if (s != null && s.length() > 0)
190             msg.append("<B>").append(s).append("</B>");
191         s = m_wf.getHelp(true);
192         if (s != null && s.length() > 0)
193             msg.append("<BR>").append(s);
194         msg.append("</HTML>");
195         infoTextPane.setText (msg.toString());
196         infoTextPane.setCaretPosition(0);
197
198         // Layout
199
centerPanel.validate();
200         centerPanel.repaint();
201         validate();
202     } // load
203

204     /**
205      * Property Change Listener
206      * @param e event
207      */

208     public void propertyChange (PropertyChangeEvent e)
209     {
210         start ((WFNode)e.getSource());
211     } // propertyChange
212

213     /**
214      * Action Listener
215      * @param e event
216      */

217     public void actionPerformed (ActionEvent e)
218     {
219         if (m_wf == null)
220             return;
221
222         setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
223         // Popup
224
if (e.getSource() == mZoom)
225             zoom();
226         else if (e.getSource() == mRefresh)
227             load(m_wf.getAD_Workflow_ID());
228         else if (e.getSource() == mSaveLayout)
229             m_wf.save();
230         else if (e.getSource() == mResetLayout)
231             resetLayout();
232         // Buttons
233
else if (e.getSource() == wfStart || m_activeNode == null)
234             start (m_wf.getAD_WF_Node_ID());
235         else if (e.getSource() == wfBack)
236             start (m_wf.getPrevious (m_activeNode.getAD_WF_Node_ID()));
237         else if (e.getSource() == wfNext)
238             start (m_wf.getNext (m_activeNode.getAD_WF_Node_ID()));
239         else if (e.getSource() == wfEnd)
240             start (m_wf.getLast (m_activeNode.getAD_WF_Node_ID()));
241         //
242
setCursor(Cursor.getDefaultCursor());
243     } // actionPerformed
244

245     /**
246      * Display Menu
247      * @param e event
248      */

249     public void mouseClicked (MouseEvent e)
250     {
251         if (SwingUtilities.isRightMouseButton(e))
252         {
253             popup.show(centerPanel, e.getX(), e.getY());
254         }
255     } // mouseClicked
256
public void mousePressed(MouseEvent e) {}
257     public void mouseReleased(MouseEvent e) {}
258     public void mouseEntered(MouseEvent e) {}
259     public void mouseExited(MouseEvent e) {}
260
261     /*************************************************************************/
262
263     /**
264      * Start Node
265      * @param node node
266      */

267     public void start (WFNode node)
268     {
269         if (m_activeNode != null)
270             m_activeNode.setSelected(false);
271         // Prepare
272
node.setSelected(true);
273         MWFNode model = node.getModel();
274         // Info Text
275
StringBuffer JavaDoc msg = new StringBuffer JavaDoc("<HTML>");
276         msg.append("<H2>").append(model.getName(true)).append("</H2>");
277         String JavaDoc s = model.getDescription(true);
278         if (s != null && s.length() > 0)
279             msg.append("<B>").append(s).append("</B>");
280         s = model.getHelp(true);
281         if (s != null && s.length() > 0)
282             msg.append("<BR>").append(s);
283         msg.append("</HTML>");
284         infoTextPane.setText (msg.toString());
285         infoTextPane.setCaretPosition(0);
286
287         // Load Window
288
(new AMenuStartItem(model.getAD_WF_Node_ID(), false, model.getName(true), m_menu)).start(); // async load
289
//
290
m_activeNode = node;
291         //
292
boolean first = m_wf.isFirst(m_activeNode.getAD_WF_Node_ID());
293         boolean last = m_wf.isLast(m_activeNode.getAD_WF_Node_ID());
294         wfStart.setEnabled(!first);
295         wfBack.setEnabled(!first);
296         wfNext.setEnabled(!last);
297         wfEnd.setEnabled(!last);
298     } // start
299

300     /**
301      * Start Node
302      * @param AD_WF_Node_ID node id
303      */

304     public void start (int AD_WF_Node_ID)
305     {
306         if (AD_WF_Node_ID == 0)
307             return;
308         //
309
for (int i = 0; i < centerPanel.getComponentCount(); i++)
310         {
311             Component comp = centerPanel.getComponent(i);
312             if (comp instanceof WFNode)
313             {
314                 WFNode node = (WFNode)comp;
315                 if (node.getAD_WF_Node_ID() == AD_WF_Node_ID)
316                 {
317                     start (node);
318                     return;
319                 }
320             } // WFNode
321
} // for all components
322
} // start
323

324     /**
325      * Reset Layout
326      */

327     public void resetLayout()
328     {
329         Point p0 = new Point (0,0);
330         for (int i = 0; i < centerPanel.getComponentCount(); i++)
331         {
332             Component comp = centerPanel.getComponent(i);
333             comp.setLocation(p0);
334         }
335         centerPanel.doLayout();
336     } // resetLayout
337

338     /**
339      * Zoom to WorkFlow
340      */

341     private void zoom()
342     {
343         int AD_Window_ID = 113;
344         MQuery query = null;
345         if (m_wf != null)
346             query = MQuery.getEqualQuery("AD_Workflow_ID", m_wf.getAD_Workflow_ID());
347         AWindow frame = new AWindow();
348         if (!frame.initWindow (AD_Window_ID, query, false))
349             return;
350         AEnv.showCenterScreen(frame);
351         frame = null;
352     } // zoom
353

354     /**
355      * String Representation
356      * @return info
357      */

358     public String JavaDoc toString()
359     {
360         StringBuffer JavaDoc sb = new StringBuffer JavaDoc("WFPanel[");
361         if (m_wf != null)
362             sb.append(m_wf.getAD_Workflow_ID());
363         sb.append("]");
364         return sb.toString();
365     } // toString
366

367     /*************************************************************************/
368
369     /**
370      * Test
371      * @param args ignored
372      */

373     public static void main (String JavaDoc[] args)
374     {
375         org.compiere.Compiere.startupClient();
376         JFrame jf = new JFrame ("WF");
377         WFPanel pp = new WFPanel(null);
378         pp.load(101);
379         jf.getContentPane().add (pp);
380         jf.pack();
381         jf.show();
382     } // main
383

384 } // WFPanel
Popular Tags