📄 scripteditor.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.apps;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import java.sql.*;
import org.compiere.util.*;
import org.compiere.model.*;
import org.compiere.swing.*;
/**
* Bean Shell Editor
*
* @author Jorg Janke
* @version $Id: ScriptEditor.java,v 1.7 2003/02/14 06:44:13 jjanke Exp $
*/
public class ScriptEditor extends JFrame implements ActionListener
{
/**
* Minimum Constructor
*/
public ScriptEditor()
{
this (Msg.getMsg(Env.getCtx(), "Script"), null, 0);
} // ScriptEditor
/**
* Constructor
*
* @param title Field Name
* @param script The Script
*/
public ScriptEditor (String title, Scriptlet script, int WindowNo)
{
super(title);
m_WindowNo = WindowNo;
if (m_WindowNo == 0)
m_WindowNo = Env.createWindowNo(this);
Log.trace(Log.l1_User, "ScriptEditor", "Window=" + m_WindowNo);
try
{
jbInit();
setScript (script);
dynInit();
AEnv.showCenterScreen(this);
toFront();
}
catch(Exception ex)
{
Log.error("ScriptEditor", ex);
}
} // ScriptEditor
/** The Script */
private Scriptlet m_script;
/** WindowNo */
private int m_WindowNo;
/** Original Script */
private String m_origScript;
// --
private CPanel mainPanel = new CPanel();
private BorderLayout borderLayout1 = new BorderLayout();
private JScrollPane editorPane = new JScrollPane();
private JTextArea editor = new JTextArea();
private JScrollPane variablesPane = new JScrollPane();
private JTextPane variables = new JTextPane();
private TitledBorder titledBorder1;
private TitledBorder titledBorder2;
private CPanel northPanel = new CPanel();
private CPanel southPanel = new CPanel();
private BorderLayout southLayout = new BorderLayout();
private CPanel okPanel = new CPanel();
private JButton bOK = ConfirmPanel.createOKButton(true);
private JButton bCancel = ConfirmPanel.createCancelButton(true);
private CPanel resultPanel = new CPanel();
private JButton bProcess = ConfirmPanel.createProcessButton(true);
private JLabel lResult = new JLabel();
private JTextField fResult = new JTextField();
private CPanel resultVariablePanel = new CPanel();
private BorderLayout northLayout = new BorderLayout();
private JLabel lResultVariable = new JLabel();
private JTextField fResultVariable = new JTextField();
private CPanel helpPanel = new CPanel();
private JButton bHelp = ConfirmPanel.createHelpButton(true);
private GridBagLayout resultVariableLayout = new GridBagLayout();
private FlowLayout okLayout = new FlowLayout();
private GridBagLayout resultLayout = new GridBagLayout();
private JSplitPane centerPane = new JSplitPane();
/**
* Static Layout
* @throws Exception
*/
void jbInit() throws Exception
{
this.setIconImage(Env.getImage("Bean16.gif"));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
titledBorder1 = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(148, 145, 140)),
Msg.getMsg(Env.getCtx(), "ScriptVariables"));
titledBorder2 = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(148, 145, 140)),
Msg.getMsg(Env.getCtx(), "ScriptEditor"));
mainPanel.setLayout(borderLayout1);
editor.setLineWrap(true);
editor.setTabSize(4);
editor.setWrapStyleWord(true);
bOK.addActionListener(this);
bCancel.addActionListener(this);
bHelp.addActionListener(this);
bProcess.addActionListener(this);
variables.setBackground(Color.lightGray);
variables.setEditable(false);
variables.setContentType("text/html");
variablesPane.setBorder(titledBorder1);
editorPane.setBorder(titledBorder2);
centerPane.setPreferredSize(new Dimension(500, 500));
centerPane.setLeftComponent(editorPane);
centerPane.setRightComponent(variablesPane);
southPanel.setLayout(southLayout);
resultPanel.setLayout(resultLayout);
lResult.setText(Msg.getMsg(Env.getCtx(), "ScriptResult"));
fResult.setBackground(Color.lightGray);
fResult.setEditable(false);
fResult.setText("");
northPanel.setLayout(northLayout);
lResultVariable.setText(Msg.getMsg(Env.getCtx(), "ScriptResultVariable"));
fResultVariable.setBackground(Color.lightGray);
fResultVariable.setEditable(false);
resultVariablePanel.setLayout(resultVariableLayout);
okPanel.setLayout(okLayout);
northPanel.add(resultVariablePanel, BorderLayout.CENTER);
getContentPane().add(mainPanel);
editorPane.getViewport().add(editor, null);
variablesPane.getViewport().add(variables, null);
mainPanel.add(northPanel, BorderLayout.NORTH);
mainPanel.add(southPanel, BorderLayout.SOUTH);
southPanel.add(okPanel, BorderLayout.EAST);
okPanel.add(bCancel, null);
okPanel.add(bOK, null);
southPanel.add(resultPanel, BorderLayout.CENTER);
resultPanel.add(bProcess, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
resultPanel.add(lResult, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
resultPanel.add(fResult, new GridBagConstraints(2, 0, 1, 1, 1.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
mainPanel.add(centerPane, BorderLayout.CENTER);
resultVariablePanel.add(lResultVariable, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
resultVariablePanel.add(fResultVariable, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
northPanel.add(helpPanel, BorderLayout.EAST);
helpPanel.add(bHelp, null);
centerPane.setDividerLocation(350);
} // jbInit
/**
* Set Script
* @param script The Script
*/
public void setScript (Scriptlet script)
{
if (script == null)
m_script = new Scriptlet (Scriptlet.VARIABLE, ";", Env.getCtx(), m_WindowNo);
else
m_script = script;
//
fResultVariable.setText(m_script.getVariable());
m_origScript = m_script.getScript();
editor.setText(m_script.getScript());
//
StringBuffer sb = new StringBuffer("<HTML><BODY>");
HashMap ctx = m_script.getEnvironment();
String[] pp = new String[ctx.size()];
ctx.keySet().toArray(pp);
Arrays.sort(pp);
for (int i = 0; i < pp.length; i++)
{
String key = pp[i].toString();
Object value = ctx.get(key);
sb.append("<font color=").append('"').append(getColor(value)).append('"').append(">")
.append(key)
.append(" (")
.append(value)
.append(")</font><br>");
}
sb.append("</BODY></HTML>");
variables.setText(sb.toString());
variables.setCaretPosition(0);
} // setScript
/**
* Get Color Code
* @param value the object
* @return HTML color code
*/
private String getColor (Object value)
{
if (value instanceof String)
return "#009900"; // "green";
else if (value instanceof Integer)
return "#0000FF"; // "blue";
else if (value instanceof Double)
return "#00FFFF"; // "cyan";
else if (value instanceof Timestamp)
return "#FF00FF"; // "magenta";
else if (value instanceof Boolean)
return "#FF9900"; // "orange";
return "#FF0000"; // "red";
} // getColor
/**
* Dynamic Init
*/
private void dynInit()
{
} // dynInit
/**
* Action Listener
* @param e
*/
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == bOK)
dispose();
else if (e.getSource() == bCancel)
{
m_script.setScript(m_origScript);
dispose();
}
else if (e.getSource() == bProcess)
actionProcess();
else if (e.getSource() == bHelp)
{
Help h = new Help (this ,
Msg.getMsg(Env.getCtx(), "ScriptHelp"),
getClass().getResource("Script.html"));
h.setVisible(true);
}
} // actionPerformed
/**
* Process Script
*/
private void actionProcess()
{
m_script.setScript(editor.getText());
Exception e = m_script.execute();
if (e != null)
ADialog.error(m_WindowNo, this, "ScriptError", e.toString());
Object result = m_script.getResult(false);
fResult.setText(result == null ? "" : result.toString());
} // actionProcess
/*************************************************************************/
/**
* Start ScriptEditor
*
* @param header Title
* @param script ScriptCode
* @param editable
* @return updated Script
*/
public static String start (String header, String script, boolean editable, int WindowNo)
{
Scriptlet scr = new Scriptlet (Scriptlet.VARIABLE, script, Env.getCtx(), WindowNo);
ScriptEditor se = new ScriptEditor (header, scr, WindowNo);
return scr.getScript();
} // start
} // ScriptEditor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -