/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.beans; import java.util.*; import javax.swing.*; import org.eclipse.persistence.expressions.*; import org.eclipse.persistence.mappings.*; import org.eclipse.persistence.descriptors.ClassDescriptor; /** * Reusable visual component for editing expressions. */ public class ExpressionPanel extends JPanel { protected Expression expression; protected ClassDescriptor descriptor; private JButton ivjAndButton = null; private JComboBox ivjAttributeCombo = null; private JLabel ivjAttributeLabel = null; private JButton ivjClearButton = null; private JTree ivjExpressionTree = null; private JScrollPane ivjExpressionTreeScroll = null; private JButton ivjNotBuuton = null; private JComboBox ivjOperatorCombo = null; private JLabel ivjOperatorLabel = null; private JButton ivjOrButton = null; private JToolBar ivjToolBar = null; private JLabel ivjValueLabel = null; private JTextField ivjValueText = null; IvjEventHandler ivjEventHandler = new IvjEventHandler(); /** * Constructor */ public ExpressionPanel() { super(); initialize(); } /** * ExpressionPanel constructor comment. * @param layout java.awt.LayoutManager */ public ExpressionPanel(java.awt.LayoutManager layout) { super(layout); } /** * ExpressionPanel constructor comment. * @param layout java.awt.LayoutManager * @param isDoubleBuffered boolean */ public ExpressionPanel(java.awt.LayoutManager layout, boolean isDoubleBuffered) { super(layout, isDoubleBuffered); } /** * ExpressionPanel constructor comment. * @param isDoubleBuffered boolean */ public ExpressionPanel(boolean isDoubleBuffered) { super(isDoubleBuffered); } public void andExpression() { Expression newExpression = buildExpressionNode(); if (newExpression == null) { return; } if (getExpression() == null) { setExpression(newExpression); } else { setExpression(getExpression().and(newExpression)); } } public Expression buildExpressionNode() { ExpressionBuilder builder; if (getExpression() == null) { builder = new ExpressionBuilder(); } else { builder = getExpression().getBuilder(); } String attribute = (String)getAttributeCombo().getSelectedItem(); if (attribute == null) { return null; } String operator = (String)getOperatorCombo().getSelectedItem(); String method = ExpressionNode.getMethod(operator); String value = getValueText().getText(); Class[] types = new Class[1]; types[0] = Object.class; Object[] arguments = new Object[1]; arguments[0] = value; Expression queryKey = builder.get(attribute); try { return (Expression)queryKey.getClass().getMethod(method, types).invoke(queryKey, arguments); } catch (Exception exception) { try { types[0] = String.class; return (Expression)queryKey.getClass().getMethod(method, types).invoke(queryKey, arguments); } catch (Exception e) { handleException(e); return null; } } } public void clearExpression() { setExpression(null); } /** * connEtoC1: (OrButton.action.actionPerformed(java.awt.event.ActionEvent) --> ExpressionPanel.orExpression()V) * @param arg1 java.awt.event.ActionEvent */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void connEtoC1(java.awt.event.ActionEvent arg1) { try { // user code begin {1} // user code end this.orExpression(); // user code begin {2} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {3} // user code end handleException(ivjExc); } } /** * connEtoC2: (AndButton.action.actionPerformed(java.awt.event.ActionEvent) --> ExpressionPanel.andExpression()V) * @param arg1 java.awt.event.ActionEvent */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void connEtoC2(java.awt.event.ActionEvent arg1) { try { // user code begin {1} // user code end this.andExpression(); // user code begin {2} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {3} // user code end handleException(ivjExc); } } /** * connEtoC3: (NotBuuton.action.actionPerformed(java.awt.event.ActionEvent) --> ExpressionPanel.notExpression()V) * @param arg1 java.awt.event.ActionEvent */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void connEtoC3(java.awt.event.ActionEvent arg1) { try { // user code begin {1} // user code end this.notExpression(); // user code begin {2} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {3} // user code end handleException(ivjExc); } } /** * connEtoC4: (ClearButton.action.actionPerformed(java.awt.event.ActionEvent) --> ExpressionPanel.clearExpression()V) * @param arg1 java.awt.event.ActionEvent */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void connEtoC4(java.awt.event.ActionEvent arg1) { try { // user code begin {1} // user code end this.clearExpression(); // user code begin {2} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {3} // user code end handleException(ivjExc); } } /** * Return the AddButton property value. * @return javax.swing.JButton */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JButton getAndButton() { if (ivjAndButton == null) { try { ivjAndButton = new javax.swing.JButton(); ivjAndButton.setName("AndButton"); ivjAndButton.setText("And"); ivjAndButton.setBackground(java.awt.SystemColor.control); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjAndButton; } /** * Return the AttributeCombo property value. * @return javax.swing.JComboBox */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JComboBox getAttributeCombo() { if (ivjAttributeCombo == null) { try { ivjAttributeCombo = new javax.swing.JComboBox(); ivjAttributeCombo.setName("AttributeCombo"); ivjAttributeCombo.setBackground(java.awt.SystemColor.window); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjAttributeCombo; } /** * Return the AttributeLabel property value. * @return javax.swing.JLabel */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JLabel getAttributeLabel() { if (ivjAttributeLabel == null) { try { ivjAttributeLabel = new javax.swing.JLabel(); ivjAttributeLabel.setName("AttributeLabel"); ivjAttributeLabel.setText("Attribute:"); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjAttributeLabel; } /** * Return the RemoveButton property value. * @return javax.swing.JButton */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JButton getClearButton() { if (ivjClearButton == null) { try { ivjClearButton = new javax.swing.JButton(); ivjClearButton.setName("ClearButton"); ivjClearButton.setText("Clear"); ivjClearButton.setBackground(java.awt.SystemColor.control); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjClearButton; } public ClassDescriptor getDescriptor() { return descriptor; } public Expression getExpression() { return expression; } /** * Return the ExpressionTree property value. * @return javax.swing.JTree */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JTree getExpressionTree() { if (ivjExpressionTree == null) { try { ivjExpressionTree = new javax.swing.JTree(); ivjExpressionTree.setName("ExpressionTree"); //ivjExpressionTree.setBorder(new javax.swing.plaf.basic.BasicBorders.MarginBorder()); ivjExpressionTree.setBounds(0, 0, 76, 36); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjExpressionTree; } /** * Return the ExpressionTreeScroll property value. * @return javax.swing.JScrollPane */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JScrollPane getExpressionTreeScroll() { if (ivjExpressionTreeScroll == null) { try { ivjExpressionTreeScroll = new javax.swing.JScrollPane(); ivjExpressionTreeScroll.setName("ExpressionTreeScroll"); getExpressionTreeScroll().setViewportView(getExpressionTree()); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjExpressionTreeScroll; } /** * Return the NotBuuton property value. * @return javax.swing.JButton */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JButton getNotBuuton() { if (ivjNotBuuton == null) { try { ivjNotBuuton = new javax.swing.JButton(); ivjNotBuuton.setName("NotBuuton"); ivjNotBuuton.setText("Not"); ivjNotBuuton.setBackground(java.awt.SystemColor.control); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjNotBuuton; } /** * Return the OperatorCombo property value. * @return javax.swing.JComboBox */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JComboBox getOperatorCombo() { if (ivjOperatorCombo == null) { try { ivjOperatorCombo = new javax.swing.JComboBox(); ivjOperatorCombo.setName("OperatorCombo"); ivjOperatorCombo.setBackground(java.awt.SystemColor.window); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjOperatorCombo; } /** * Return the OperatorLabel property value. * @return javax.swing.JLabel */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JLabel getOperatorLabel() { if (ivjOperatorLabel == null) { try { ivjOperatorLabel = new javax.swing.JLabel(); ivjOperatorLabel.setName("OperatorLabel"); ivjOperatorLabel.setText("Operator:"); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjOperatorLabel; } /** * Return the OrButton property value. * @return javax.swing.JButton */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JButton getOrButton() { if (ivjOrButton == null) { try { ivjOrButton = new javax.swing.JButton(); ivjOrButton.setName("OrButton"); ivjOrButton.setText("Or"); ivjOrButton.setBackground(java.awt.SystemColor.control); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjOrButton; } /** * Return the ToolBar property value. * @return javax.swing.JToolBar */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JToolBar getToolBar() { if (ivjToolBar == null) { try { ivjToolBar = new javax.swing.JToolBar(); ivjToolBar.setName("ToolBar"); ivjToolBar.setBackground(java.awt.SystemColor.control); getToolBar().add(getAndButton(), getAndButton().getName()); getToolBar().add(getOrButton(), getOrButton().getName()); getToolBar().add(getNotBuuton(), getNotBuuton().getName()); ivjToolBar.addSeparator(); getToolBar().add(getClearButton(), getClearButton().getName()); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjToolBar; } /** * Return the ValueLabel property value. * @return javax.swing.JLabel */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JLabel getValueLabel() { if (ivjValueLabel == null) { try { ivjValueLabel = new javax.swing.JLabel(); ivjValueLabel.setName("ValueLabel"); ivjValueLabel.setText("Value:"); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjValueLabel; } /** * Return the ValueText property value. * @return javax.swing.JTextField */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ javax.swing.JTextField getValueText() { if (ivjValueText == null) { try { ivjValueText = new javax.swing.JTextField(); ivjValueText.setName("ValueText"); // user code begin {1} // user code end } catch (java.lang.Throwable ivjExc) { // user code begin {2} // user code end handleException(ivjExc); } } return ivjValueText; } /** * Called whenever the part throws an exception. * @param exception java.lang.Throwable */ private void handleException(Throwable exception) { MessageDialog.displayException(exception, this); } /** * Initializes connections */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void initConnections() throws java.lang.Exception { // user code begin {1} // user code end getOrButton().addActionListener(ivjEventHandler); getAndButton().addActionListener(ivjEventHandler); getNotBuuton().addActionListener(ivjEventHandler); getClearButton().addActionListener(ivjEventHandler); } /** * Initialize the class. */ private /* WARNING: THIS METHOD WILL BE REGENERATED. */ void initialize() { try { // user code begin {1} // user code end setName("ExpressionPanel"); setLayout(new java.awt.GridBagLayout()); setBackground(java.awt.SystemColor.control); setSize(742, 472); java.awt.GridBagConstraints constraintsAttributeLabel = new java.awt.GridBagConstraints(); constraintsAttributeLabel.gridx = 0; constraintsAttributeLabel.gridy = 0; constraintsAttributeLabel.anchor = java.awt.GridBagConstraints.SOUTHWEST; constraintsAttributeLabel.insets = new java.awt.Insets(2, 2, 0, 2); add(getAttributeLabel(), constraintsAttributeLabel); java.awt.GridBagConstraints constraintsValueText = new java.awt.GridBagConstraints(); constraintsValueText.gridx = 2; constraintsValueText.gridy = 1; constraintsValueText.fill = java.awt.GridBagConstraints.HORIZONTAL; constraintsValueText.weightx = 0.2; constraintsValueText.ipadx = 20; constraintsValueText.insets = new java.awt.Insets(0, 2, 2, 2); add(getValueText(), constraintsValueText); java.awt.GridBagConstraints constraintsAttributeCombo = new java.awt.GridBagConstraints(); constraintsAttributeCombo.gridx = 0; constraintsAttributeCombo.gridy = 1; constraintsAttributeCombo.fill = java.awt.GridBagConstraints.HORIZONTAL; constraintsAttributeCombo.weightx = 0.2; constraintsAttributeCombo.insets = new java.awt.Insets(0, 2, 2, 2); add(getAttributeCombo(), constraintsAttributeCombo); java.awt.GridBagConstraints constraintsOperatorCombo = new java.awt.GridBagConstraints(); constraintsOperatorCombo.gridx = 1; constraintsOperatorCombo.gridy = 1; constraintsOperatorCombo.fill = java.awt.GridBagConstraints.HORIZONTAL; constraintsOperatorCombo.weightx = 0.2; constraintsOperatorCombo.insets = new java.awt.Insets(0, 2, 2, 2); add(getOperatorCombo(), constraintsOperatorCombo); java.awt.GridBagConstraints constraintsOperatorLabel = new java.awt.GridBagConstraints(); constraintsOperatorLabel.gridx = 1; constraintsOperatorLabel.gridy = 0; constraintsOperatorLabel.anchor = java.awt.GridBagConstraints.SOUTHWEST; constraintsOperatorLabel.insets = new java.awt.Insets(2, 2, 0, 2); add(getOperatorLabel(), constraintsOperatorLabel); java.awt.GridBagConstraints constraintsValueLabel = new java.awt.GridBagConstraints(); constraintsValueLabel.gridx = 2; constraintsValueLabel.gridy = 0; constraintsValueLabel.anchor = java.awt.GridBagConstraints.SOUTHWEST; constraintsValueLabel.insets = new java.awt.Insets(2, 2, 0, 2); add(getValueLabel(), constraintsValueLabel); java.awt.GridBagConstraints constraintsExpressionTreeScroll = new java.awt.GridBagConstraints(); constraintsExpressionTreeScroll.gridx = 0; constraintsExpressionTreeScroll.gridy = 3; constraintsExpressionTreeScroll.gridwidth = 10; constraintsExpressionTreeScroll.fill = java.awt.GridBagConstraints.BOTH; constraintsExpressionTreeScroll.weightx = 1.0; constraintsExpressionTreeScroll.weighty = 0.6; constraintsExpressionTreeScroll.insets = new java.awt.Insets(2, 2, 2, 2); add(getExpressionTreeScroll(), constraintsExpressionTreeScroll); java.awt.GridBagConstraints constraintsToolBar = new java.awt.GridBagConstraints(); constraintsToolBar.gridx = 0; constraintsToolBar.gridy = 2; constraintsToolBar.gridwidth = 3; constraintsToolBar.fill = java.awt.GridBagConstraints.BOTH; add(getToolBar(), constraintsToolBar); initConnections(); } catch (java.lang.Throwable ivjExc) { handleException(ivjExc); } // user code begin {2} reset(); // user code end } public void notExpression() { if (getExpression() != null) { setExpression(getExpression().not()); } } public void orExpression() { Expression newExpression = buildExpressionNode(); if (newExpression == null) { return; } if (getExpression() == null) { setExpression(newExpression); } else { setExpression(getExpression().or(newExpression)); } } public void reset() { resetAttributes(); if (getOperatorCombo().getItemCount() == 0) { resetOperators(); } setExpression(null); } public void resetAttributes() { if (getAttributeCombo().getItemCount() > 0) { getAttributeCombo().removeAllItems(); } if (getDescriptor() != null) { for (Enumeration mappingsEnum = getDescriptor().getMappings().elements(); mappingsEnum.hasMoreElements(); ) { DatabaseMapping mapping = (DatabaseMapping)mappingsEnum.nextElement(); if (mapping.isDirectToFieldMapping()) { getAttributeCombo().addItem(mapping.getAttributeName()); } } } } public void resetOperators() { getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.Equal)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.NotEqual)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.LessThan)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.LessThanEqual)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.GreaterThan)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.GreaterThanEqual)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.Like)); getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.NotLike)); //getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.In)); //getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.NotIn)); //getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.Between)); //getOperatorCombo().addItem(ExpressionNode.getOperator(ExpressionOperator.NotBetween)); getOperatorCombo().addItem(ExpressionNode.KeyWordAll); getOperatorCombo().addItem(ExpressionNode.KeyWordAny); } public void setDescriptor(ClassDescriptor descriptor) { this.descriptor = descriptor; reset(); } public void setExpression(Expression expression) { this.expression = expression; ExpressionTreeModel model = new ExpressionTreeModel(new ExpressionNode(expression)); getExpressionTree().setModel(model); for (int index = 0; index < getExpressionTree().getRowCount(); index++) { getExpressionTree().expandRow(index); } getExpressionTree().repaint(); } class IvjEventHandler implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent e) { if (e.getSource() == ExpressionPanel.this.getOrButton()) { connEtoC1(e); } if (e.getSource() == ExpressionPanel.this.getAndButton()) { connEtoC2(e); } if (e.getSource() == ExpressionPanel.this.getNotBuuton()) { connEtoC3(e); } if (e.getSource() == ExpressionPanel.this.getClearButton()) { connEtoC4(e); } } } }