/*******************************************************************************
* 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.workbench.mappingsplugin.ui.query.relational;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContextHolder;
import org.eclipse.persistence.tools.workbench.framework.ui.view.AbstractPanel;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.MWQueryable;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWBatchReadItem;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWJoinedItem;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWQueryItem;
import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.Ordering;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.query.QueryGeneralPanel;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.query.QueryQuickViewItem;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.query.QuickViewPanel;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ObjectListSelectionModel;
import org.eclipse.persistence.tools.workbench.utility.filters.Filter;
/**
* DescriptorPropertiesQueryPage holds on to QueryPanel
* QueryPanel is just used to set up the tab panels for a query
*
*/
final class RelationalReadAllQueryPanel
extends AbstractPanel
{
private PropertyValueModel queryHolder;
private JTabbedPane tabbedPane;
private QueryGeneralPanel queryGeneralPanel;
private JPanel queryFormatPanel;
private OrderingAttributesPanel queryOrderingPanel;
private ReadAllQueryOptimizationPanel queryOptimizationPanel;
private RelationalQueryOptionsPanel queryOptionsPanel;
RelationalReadAllQueryPanel(PropertyValueModel queryHolder, ObjectListSelectionModel querySelectionModel, WorkbenchContextHolder contextHolder){
super(contextHolder);
this.queryHolder = queryHolder;
initializeLayout(querySelectionModel);
}
private Filter buildOrderingChooseableFilter() {
return new Filter() {
public boolean accept(Object o) {
return ((MWQueryable) o).isValidForReadAllQueryOrderable();
}
};
}
private Filter buildOrderingTraversableFilter() {
return new Filter() {
public boolean accept(Object o) {
return ((MWQueryable) o).isTraversableForReadAllQueryOrderable();
}
};
}
private void initializeLayout(ObjectListSelectionModel querySelectionModel) {
GridBagConstraints constraints = new GridBagConstraints();
this.tabbedPane = new JTabbedPane();
this.queryGeneralPanel = new QueryGeneralPanel(this.queryHolder, querySelectionModel, getWorkbenchContextHolder());
this.queryFormatPanel = new QuerySelectionCriteriaPanel(this.queryHolder, getWorkbenchContextHolder());
this.queryOrderingPanel = new OrderingAttributesPanel(this.queryHolder, buildOrderingTraversableFilter(), buildOrderingChooseableFilter(), getWorkbenchContextHolder());
this.queryOptimizationPanel = new ReadAllQueryOptimizationPanel(this.queryHolder, getWorkbenchContextHolder());
this.queryOptionsPanel = new RelationalQueryOptionsPanel(this.queryHolder, getWorkbenchContextHolder());
//this.partialAttributesPanel = new MWQueryPartialAttributesPanel(this);
this.tabbedPane.addTab(resourceRepository().getString("GENERAL_TAB"), this.queryGeneralPanel);
this.tabbedPane.addTab(resourceRepository().getString("FORMAT_TAB"), this.queryFormatPanel);
this.tabbedPane.addTab(resourceRepository().getString("ORDER_TAB"), this.queryOrderingPanel);
this.tabbedPane.addTab(resourceRepository().getString("OPTIMIZATION_TAB"), this.queryOptimizationPanel);
this.tabbedPane.addTab(resourceRepository().getString("OPTIONS_TAB"), this.queryOptionsPanel);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 1;
constraints.weighty = 1;
constraints.fill = GridBagConstraints.BOTH;
constraints.anchor = GridBagConstraints.CENTER;
constraints.insets = new Insets(0, 0, 0, 0);
add(this.tabbedPane, constraints);
}
protected QuickViewPanel.QuickViewItem buildBatchReadAttributeQuickViewItem(MWBatchReadItem queryItem) {
return new QueryQuickViewItem(queryItem) {
public void select() {
RelationalReadAllQueryPanel.this.tabbedPane.setSelectedComponent(RelationalReadAllQueryPanel.this.queryOptimizationPanel);
RelationalReadAllQueryPanel.this.queryOptimizationPanel.selectBatchReadItem((MWBatchReadItem) getValue());
}
};
}
protected QuickViewPanel.QuickViewItem buildJoinedAttributeQuickViewItem(MWJoinedItem queryItem) {
return new QueryQuickViewItem(queryItem) {
public void select() {
RelationalReadAllQueryPanel.this.tabbedPane.setSelectedComponent(RelationalReadAllQueryPanel.this.queryOptimizationPanel);
RelationalReadAllQueryPanel.this.queryOptimizationPanel.selectJoinedItem((MWJoinedItem) getValue());
}
};
}
protected QuickViewPanel.QuickViewItem buildOrderingAttributeQuickViewItem(Ordering queryItem) {
return new QueryQuickViewItem(queryItem) {
public void select() {
RelationalReadAllQueryPanel.this.tabbedPane.setSelectedComponent(RelationalReadAllQueryPanel.this.queryOrderingPanel);
RelationalReadAllQueryPanel.this.queryOrderingPanel.select((MWQueryItem) getValue());
}
};
}
protected void selectQueryOptimizationTab() {
this.tabbedPane.setSelectedComponent(this.queryOptimizationPanel);
}
protected void selectQueryOrderingTab() {
this.tabbedPane.setSelectedComponent(this.queryOrderingPanel);
}
protected QueryGeneralPanel getQueryGeneralPanel() {
return this.queryGeneralPanel;
}
protected JTabbedPane getQueryTabbedPane() {
return this.tabbedPane;
}
/*protected void setQueryIsPartialAttributeQuery(boolean isPartialAttributeQuery)
{
if (isPartialAttributeQuery)
this.queryPropertiesPane.addTab("Partial Attributes", this.partialAttributesPanel);
//might need to populate the panel from here. I could not remove the partial attribute info if the user
//unchecks the check box. Then when they recheck it, we could populate the panel again. At conversion time,
//I would check if the isPartialAttributeQuery boolean is true or false. I would specify the partial attributes
//in the toplink project based on that
else
this.queryPropertiesPane.removeTabAt(4);
}*/
}