com.ibm.as400.vaccess.SQLQueryOrderPane Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: SQLQueryOrderPane.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.vaccess;
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import javax.swing.Box;
import javax.swing.JComponent;
/**
The SQLQueryOrderPane class represents a panel which allows a
user to dynamically build the ORDER BY portion of an SQL query.
This panel is used for a page of the SQLQueryBuilderPane notebook.
**/
class SQLQueryOrderPane
extends JComponent
implements Serializable //@B0A - added it for consistency
{
private static final String copyright = "Copyright (C) 1997-2000 International Business Machines Corporation and others.";
// The variables and methods which have private commented out
// had to be made package scope since currently Internet Explorer
// does not allow inner class to access private items in their
// containing class.
// GUI components
private SQLQueryBuilderPane parent_;
private transient DoubleClickList selectItems_; //@B0C - made transient
/*private*/ DoubleClickList otherList_;
private SQLQueryClause clause_;
// Indicates if the selected items has changed.
/*private*/ boolean selectChanged_ = false;
// The fields that are selected
private String[] selectFields_;
// Listen to changes in the selected items.
protected SelectListener_ selectListener_ = null;
//@B0A: Has this table been init()-ed yet? (Used upon de-serialization)
private boolean inited_ = false; //@B0A
private static final String [] otherChoices = {"ASC", "DESC"};
/**
Constructs a SQLQueryOrderPane object.
init must be called to build the GUI contents.
@param parent The parent of this panel.
**/
public SQLQueryOrderPane (SQLQueryBuilderPane parent)
{
super();
parent_ = parent;
initializeTransient(); //@B0A
}
/**
Returns the sql clause for this panel.
@return The sql clause for this panel.
**/
public String getClause()
{
if (clause_ == null)
return null;
return clause_.getText();
}
/**
Build the panel GUI.
**/
public void init()
{
// Add listener to changes to selected items.
selectListener_ = new SelectListener_();
parent_.addSelectListener(selectListener_);
// Set up GUI.
setupPane();
inited_ = true; //@B0A - so we know what state we are in if deserialized
}
//@B0A
/**
Initializes the transient data.
**/
private void initializeTransient ()
{
addFocusListener(new SerializationListener(this)); // for safe serialization next time
if (inited_) init(); // preserve state of object upon deserialization
}
/**
Called when an item in the other list is double-clicked on.
The request is processed, and the completed item is added
to the clause.
@param item The item that was chosen.
**/
/*private*/ void otherPicked(String item)
{
// Add to clause
clause_.appendText(item);
otherList_.setEnabled(false);
}
//@B0A
/**
Restores the state of the object from an input stream.
This is used when deserializing an object.
@param in The input stream.
**/
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException
{
in.defaultReadObject();
initializeTransient();
}
/**
Adds the field to the clause.
@param index Index of the row in the table that was clicked upon.
**/
protected void rowPicked()
{
String item = (String)((Object[])selectItems_.getSelectedObjects())[0];
clause_.appendTextWithComma(item);
otherList_.setEnabled(true);
}
/**
Returns whether the item is a field name.
@return true if the item is a field name, false otherwise.
**/
private boolean isField(String item)
{
for (int i=0; i < selectFields_.length; ++i)
{
if (item.equals(selectFields_[i]))
return true;
}
return false;
}
/**
Builds the panel GUI components and sets up connections
between the components by using listeners.
**/
protected void setupPane()
{
// Select items.
selectFields_ = parent_.getSelectedFields();
selectItems_ = new DoubleClickList(parent_.getSelectedItems());
selectItems_.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
rowPicked();
}
});
// Other list.
otherList_ = new DoubleClickList(otherChoices);
otherList_.setVisibleRowCount(2);
otherList_.setEnabled(false);
otherList_.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
otherPicked((String)event.getItem());
}
});
// Arrange top row.
Box topRow = Box.createHorizontalBox();
topRow.add(new LabelledComponent("DBQUERY_COLUMN_SELECT", selectItems_));
topRow.add(new LabelledComponent("DBQUERY_LABEL_OTHER", otherList_));
// Query clause.
clause_ = new SQLQueryClause(5);
// Overall layout.
Box overallBox = Box.createVerticalBox();
overallBox.add(topRow);
overallBox.add(new LabelledComponent("DBQUERY_LABEL_CLAUSE_ORDER", new ScrollingTextPane(clause_)));
setLayout(new BorderLayout());
add("Center", overallBox);
}
/**
Update the selectItems_ if needed.
**/
public void update()
{
if (selectChanged_)
{
selectItems_.setListData(parent_.getSelectedItems());
// update the selected fields
selectFields_ = parent_.getSelectedFields();
selectChanged_ = false;
}
}
/**
Class to listen for property changes on the selected items.
**/
private class SelectListener_
implements PropertyChangeListener
{
public void propertyChange(PropertyChangeEvent event)
{
selectChanged_ = true;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy