Package org.apache.oodt.cas.filemgr.browser.view.prompts

Source Code of org.apache.oodt.cas.filemgr.browser.view.prompts.QueryBuilderPrompt$BuiltQueryPane

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.oodt.cas.filemgr.browser.view.prompts;

import org.apache.oodt.cas.filemgr.structs.RangeQueryCriteria;
import org.apache.oodt.cas.filemgr.structs.TermQueryCriteria;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

import org.apache.oodt.cas.filemgr.browser.controller.WindowListener;
import org.apache.oodt.cas.filemgr.browser.model.CasDB;

public class QueryBuilderPrompt extends JFrame {

  protected CasDB database;
  protected WindowListener listener;

  protected TypePanel tPanel;
  protected QuerySelectionPanel qPanel;
  protected JScrollPane scrollPane;
  protected BuiltQueryPane builtPanel;
  protected SearchPanel sPanel;

  public QueryBuilderPrompt(CasDB db, WindowListener l) {

    database = db;
    listener = l;

    this.setName("Query Builder");
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    Dimension d = new Dimension(500, 400);
    this.setMinimumSize(d);
    this.setMaximumSize(d);
    this.setPreferredSize(d);

    this.getContentPane().setLayout(
        new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
    this.getContentPane().setBackground(Color.WHITE);

    tPanel = new TypePanel(this);
    qPanel = new QuerySelectionPanel(this);
    sPanel = new SearchPanel(this);
    builtPanel = new BuiltQueryPane(this);

    scrollPane = new JScrollPane(qPanel);
    Dimension scrollDim = new Dimension(500, 220);
    scrollPane.setMaximumSize(scrollDim);
    scrollPane.setMinimumSize(scrollDim);
    scrollPane.setPreferredSize(scrollDim);

    this.getContentPane().add(tPanel);
    this.getContentPane().add(scrollPane);
    this.getContentPane().add(builtPanel);
    this.getContentPane().add(sPanel);
  }

  public org.apache.oodt.cas.filemgr.structs.Query getQuery() {
    return qPanel.getCasQuery();
  }

  public String getQueryString() {
    return qPanel.getQuery();
  }

  public String getProductType() {
    return tPanel.getType();
  }

  private class QueryPanel extends JPanel {

    private JComboBox elements;
    private JComboBox ops;
    private JPanel placeholder;
    private boolean showOp;

    public QueryPanel(QueryBuilderPrompt prompt) {
      Dimension d = new Dimension(460, 35);
      this.setMaximumSize(d);
      this.setMinimumSize(d);
      this.setPreferredSize(d);
      this.setBackground(Color.WHITE);
      this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

      showOp = false;
      ops = new JComboBox(new String[] { "AND", "OR", "NOT" });
      Dimension opsDim = new Dimension(75, 25);
      ops.setMaximumSize(opsDim);
      ops.setMinimumSize(opsDim);
      ops.setPreferredSize(opsDim);
      ops.setBackground(Color.WHITE);
      ops.setVisible(false);

      placeholder = new JPanel();
      placeholder.setBackground(Color.WHITE);
      placeholder.setMaximumSize(opsDim);
      placeholder.setMinimumSize(opsDim);
      placeholder.setPreferredSize(opsDim);

      elements = new JComboBox(prompt.database
          .getAvailableElements(prompt.tPanel.getType()));
      elements.setBackground(Color.WHITE);
      Dimension dElem = new Dimension(150, 25);
      elements.setMaximumSize(dElem);
      elements.setMinimumSize(dElem);
      elements.setPreferredSize(dElem);

      this.add(ops);
      this.add(placeholder);
      this.add(elements);
    }

    public void addOp() {
      showOp = true;
      ops.setVisible(true);
      placeholder.setVisible(false);
    }

    public String getElement() {
      return elements.getSelectedItem().toString();
    }

    public String getOp() {
      String op = "";
      if (showOp) {
        op = ops.getSelectedItem().toString();
      }
      return op;
    }
  }

  private class TermQueryPanel extends QueryPanel {

    private JTextField text;

    public TermQueryPanel(QueryBuilderPrompt prompt) {
      super(prompt);

      text = new JTextField();
      Dimension dText = new Dimension(150, 25);
      text.setPreferredSize(dText);
      text.setMaximumSize(dText);
      text.setMinimumSize(dText);
      text.setBackground(Color.WHITE);
      text.addFocusListener(prompt.builtPanel);
      text.addActionListener(prompt.builtPanel);

      this.add(new JLabel("  Matches  "));
      this.add(text);
    }

    public String getText() {
      return text.getText();
    }

  }

  private class RangeQueryPanel extends QueryPanel {

    private JTextField start;
    private JTextField stop;

    public RangeQueryPanel(QueryBuilderPrompt prompt) {
      super(prompt);

      start = new JTextField();
      stop = new JTextField();

      Dimension dText = new Dimension(60, 25);
      start.setMaximumSize(dText);
      start.setMinimumSize(dText);
      start.setPreferredSize(dText);
      start.addFocusListener(prompt.builtPanel);
      start.addActionListener(prompt.builtPanel);

      stop.setMaximumSize(dText);
      stop.setMinimumSize(dText);
      stop.setPreferredSize(dText);
      stop.addFocusListener(prompt.builtPanel);
      stop.addActionListener(prompt.builtPanel);

      this.add(new JLabel("  Between  "));
      this.add(start);
      this.add(new JLabel(" And "));
      this.add(stop);
    }

    public String getStart() {
      return start.getText();
    }

    public String getStop() {
      return stop.getText();
    }

  }

  private class QuerySelectionPanel extends JPanel implements ActionListener {

    private JButton addTerm;
    private JButton addRange;
    private QueryBuilderPrompt prompt;

    public QuerySelectionPanel(QueryBuilderPrompt prompt) {
      this.prompt = prompt;
      this.setBackground(Color.WHITE);

      EmptyBorder line1 = new EmptyBorder(2, 2, 2, 2);
      LineBorder line2 = new LineBorder(Color.BLACK, 1);
      CompoundBorder cp = new CompoundBorder(line1, line2);
      this.setBorder(cp);
      this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

      JPanel buttonPanel = new JPanel();
      Dimension buttonDim = new Dimension(460, 30);
      buttonPanel.setMaximumSize(buttonDim);
      buttonPanel.setMinimumSize(buttonDim);
      buttonPanel.setPreferredSize(buttonDim);
      buttonPanel.setBackground(Color.WHITE);
      buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));

      addTerm = new JButton("Add Term Criteria");
      addTerm.setBackground(Color.WHITE);
      addTerm.addActionListener(this);

      addRange = new JButton("Add Range Criteria");
      addRange.setBackground(Color.WHITE);
      addRange.addActionListener(this);

      buttonPanel.add(addTerm);
      buttonPanel.add(addRange);
      this.add(buttonPanel);
    }

    public void actionPerformed(ActionEvent arg0) {
      if (arg0.getActionCommand().equals("Add Term Criteria")) {
        TermQueryPanel tq = new TermQueryPanel(prompt);
        if (this.getComponentCount() > 1)
          tq.addOp();
        int insertOrder = this.getComponentCount() - 1;
        if (insertOrder < 0)
          insertOrder = 0;
        this.add(tq, insertOrder);
        this.validate();
        prompt.scrollPane.validate();
      } else if (arg0.getActionCommand().equals("Add Range Criteria")) {
        RangeQueryPanel rq = new RangeQueryPanel(prompt);
        if (this.getComponentCount() > 1)
          rq.addOp();
        int insertOrder = this.getComponentCount() - 1;
        if (insertOrder < 0)
          insertOrder = 0;
        this.add(rq, insertOrder);
        this.validate();
        prompt.scrollPane.validate();
      }
    }

    public String getQuery() {
      String q = new String();
      for (int i = 0; i < this.getComponentCount(); i++) {
        Component c = this.getComponent(i);
        if (c instanceof TermQueryPanel) {
          q += ((TermQueryPanel) c).getOp() + " ";
          q += ((TermQueryPanel) c).getElement() + ":";
          q += ((TermQueryPanel) c).getText() + " ";
        } else if (c instanceof RangeQueryPanel) {
          q += ((RangeQueryPanel) c).getOp() + " ";
          q += ((RangeQueryPanel) c).getElement() + ":[";
          q += ((RangeQueryPanel) c).getStart() + " TO ";
          q += ((RangeQueryPanel) c).getStop() + "] ";
        }
      }

      return q;
    }

    public org.apache.oodt.cas.filemgr.structs.Query getCasQuery() {
      org.apache.oodt.cas.filemgr.structs.Query q = new org.apache.oodt.cas.filemgr.structs.Query();
      for (int i = 0; i < this.getComponentCount(); i++) {
        Component c = this.getComponent(i);
        String element;
        if (c instanceof TermQueryPanel) {
          element = database.getElementID(((TermQueryPanel) c).getElement());
          String criteria = ((TermQueryPanel) c).getText();
          if (!element.equals("") && !criteria.equals("")) {
            TermQueryCriteria tc = new TermQueryCriteria();
            tc.setElementName(element);
            tc.setValue(criteria);
            q.addCriterion(tc);
          }
        } else if (c instanceof RangeQueryPanel) {
          element = database.getElementID(((RangeQueryPanel) c).getElement());
          String startCriteria = ((RangeQueryPanel) c).getStart();
          String stopCriteria = ((RangeQueryPanel) c).getStop();
          if (!element.equals("") && !startCriteria.equals("")
              && !stopCriteria.equals("")) {
            RangeQueryCriteria rt = new RangeQueryCriteria();
            rt.setElementName(element);
            rt.setStartValue(startCriteria);
            rt.setEndValue(stopCriteria);
            q.addCriterion(rt);
          }
        }
      }

      return q;
    }

  }

  private class SearchPanel extends JPanel {
    private JButton search;

    public SearchPanel(QueryBuilderPrompt prompt) {
      Dimension d = new Dimension(500, 40);
      this.setMaximumSize(d);
      this.setMinimumSize(d);
      this.setPreferredSize(d);
      EmptyBorder line1 = new EmptyBorder(2, 2, 2, 2);
      LineBorder line2 = new LineBorder(Color.BLACK, 1);
      CompoundBorder cp = new CompoundBorder(line1, line2);
      this.setBorder(cp);
      this.setLayout(new BorderLayout());
      this.setBackground(Color.WHITE);

      search = new JButton("Search");
      search.setName("AdvancedQuery");
      search.addActionListener(prompt.listener);
      search.setBackground(Color.WHITE);

      JPanel buttonPanel = new JPanel();
      buttonPanel.setBackground(Color.WHITE);
      buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
      buttonPanel.add(search);
      this.add(buttonPanel, BorderLayout.EAST);
    }

  }

  private class TypePanel extends JPanel {

    private JComboBox types;

    public TypePanel(QueryBuilderPrompt prompt) {

      Dimension d = new Dimension(500, 40);
      this.setMaximumSize(d);
      this.setMinimumSize(d);
      this.setPreferredSize(d);
      EmptyBorder line1 = new EmptyBorder(2, 2, 2, 2);
      LineBorder line2 = new LineBorder(Color.BLACK, 1);
      CompoundBorder cp = new CompoundBorder(line1, line2);
      this.setBorder(cp);

      types = new JComboBox(database.getAvailableTypes());
      types.setBackground(Color.WHITE);
      Dimension tDim = new Dimension(200, 30);
      types.setMaximumSize(tDim);
      types.setMinimumSize(tDim);
      types.setPreferredSize(tDim);

      this.setBackground(Color.WHITE);
      this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

      JLabel label = new JLabel("        Product Type:   ");

      this.add(label);
      this.add(types);
    }

    public String getType() {
      return types.getSelectedItem().toString();
    }
  }

  private class BuiltQueryPane extends JPanel implements FocusListener,
      ActionListener {

    private QueryBuilderPrompt p;
    private JTextArea field;

    public BuiltQueryPane(QueryBuilderPrompt prompt) {

      Dimension d = new Dimension(500, 75);
      this.setMaximumSize(d);
      this.setMinimumSize(d);
      this.setPreferredSize(d);

      EmptyBorder line1 = new EmptyBorder(2, 2, 2, 2);
      LineBorder line2 = new LineBorder(Color.BLACK, 1);
      CompoundBorder cp = new CompoundBorder(line1, line2);
      this.setBorder(cp);
      this.setLayout(new BorderLayout());

      field = new JTextArea();
      Font font = new Font("san-serif", Font.PLAIN, 10);
      field.setFont(font);
      field.setBackground(Color.WHITE);
      field.setLineWrap(true);
      field.setWrapStyleWord(true);

      this.add(field, BorderLayout.CENTER);
    }

    public void focusGained(FocusEvent arg0) {
    }

    public void focusLost(FocusEvent arg0) {
      field.setText(qPanel.getQuery());
    }

    public void actionPerformed(ActionEvent arg0) {
      field.setText(qPanel.getQuery());
    }
  }

}
TOP

Related Classes of org.apache.oodt.cas.filemgr.browser.view.prompts.QueryBuilderPrompt$BuiltQueryPane

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.