/*==========================================================================*\ | $Id: PreviewQueryBuilder.java,v 1.1 2010/05/11 15:52:46 aallowat Exp $ |*-------------------------------------------------------------------------*| | Copyright (C) 2006-2008 Virginia Tech | | This file is part of Web-CAT. | | Web-CAT is free software; you can redistribute it and/or modify | it under the terms of the GNU Affero General Public License as published | by the Free Software Foundation; either version 3 of the License, or | (at your option) any later version. | | Web-CAT is distributed in the hope that it will be useful, | but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | GNU General Public License for more details. | | You should have received a copy of the GNU Affero General Public License | along with Web-CAT; if not, see <http://www.gnu.org/licenses/>. \*==========================================================================*/ package org.webcat.oda.designer.preview; import java.text.MessageFormat; import java.util.ArrayList; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.webcat.oda.designer.i18n.Messages; //------------------------------------------------------------------------ /** * TODO: real description * * @author Tony Allevato (Virginia Tech Computer Science) * @version $Id: PreviewQueryBuilder.java,v 1.1 2010/05/11 15:52:46 aallowat Exp $ */ public class PreviewQueryBuilder extends TitleAreaDialog implements IPreviewQueryClauseEventHandler { public PreviewQueryBuilder(Shell parentShell, String entityType, PreviewQueryClause[] clauses) { super(parentShell); this.entityType = entityType; this.clauses = clauses; clausePanels = new ArrayList<PreviewQueryClausePanel>(); } // ----------------------------------------------------------------------- /** * */ @Override protected void setShellStyle(int newShellStyle) { newShellStyle |= SWT.MAX | SWT.RESIZE; super.setShellStyle(newShellStyle); } @Override protected Control createContents(Composite parent) { Control control = super.createContents(parent); setTitle(Messages.QUERY_BUILDER_TITLE); setMessage(Messages.QUERY_BUILDER_DESCRIPTION); return control; } // ----------------------------------------------------------------------- /** * */ @Override protected Control createDialogArea(Composite parent) { GridData gd; Composite composite = (Composite) super.createDialogArea(parent); Composite mainArea = new Composite(composite, SWT.NONE); gd = new GridData(SWT.FILL, SWT.FILL, true, true); mainArea.setLayoutData(gd); GridLayout layout = new GridLayout(1, true); layout.marginWidth = 10; layout.marginHeight = 10; layout.verticalSpacing = 10; mainArea.setLayout(layout); Label label = new Label(mainArea, SWT.NONE); String format = Messages.QUERY_BUILDER_INSTRUCTION; label.setText(MessageFormat.format(format, entityType)); gd = new GridData(SWT.FILL, SWT.TOP, true, false); label.setLayoutData(gd); createEditor(mainArea); return composite; } private void createEditor(Composite parent) { GridData gd; scroller = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.widthHint = 750; gd.heightHint = 250; scroller.setLayoutData(gd); scroller.setExpandHorizontal(true); scroller.setExpandVertical(true); panelContainer = new Composite(scroller, SWT.NONE); GridLayout layout = new GridLayout(1, true); layout.verticalSpacing = 0; layout.horizontalSpacing = 0; layout.marginWidth = 0; layout.marginHeight = 0; panelContainer.setLayout(layout); scroller.setContent(panelContainer); if (clauses == null) { addEmptyPanel(0); } else { addPanelsForClauses(); } } private void addPanelsForClauses() { for (PreviewQueryClause clause : clauses) { PreviewQueryClausePanel panel = addEmptyPanel(clausePanels.size()); panel.setClause(clause); } } private int indexOfClausePanel(PreviewQueryClausePanel panel) { int index = -1; for (int i = 0; i < clausePanels.size(); i++) { if (panel == clausePanels.get(i)) { index = i; break; } } return index; } public void addClauseBelow(PreviewQueryClausePanel panel) { int index = indexOfClausePanel(panel); addEmptyPanel(index + 1); } public void removeClause(PreviewQueryClausePanel panel) { int index = indexOfClausePanel(panel); PreviewQueryClausePanel toDispose = clausePanels.remove(index); toDispose.dispose(); panelContainer.layout(); if (clausePanels.size() == 0) { addEmptyPanel(clausePanels.size()); } else { scroller.setMinSize(panelContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } } private PreviewQueryClausePanel addEmptyPanel(int beforeIndex) { PreviewQueryClausePanel p = new PreviewQueryClausePanel(panelContainer, this, entityType); GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false); p.setLayoutData(gd); p.setFocus(); clausePanels.add(beforeIndex, p); PreviewQueryClausePanel belowPanel = null; if (beforeIndex > 0 && beforeIndex <= clausePanels.size()) { belowPanel = clausePanels.get(beforeIndex - 1); } p.moveBelow(belowPanel); panelContainer.layout(); scroller.setMinSize(panelContainer .computeSize(SWT.DEFAULT, SWT.DEFAULT)); return p; } protected void okPressed() { ArrayList<PreviewQueryClause> clauses = new ArrayList<PreviewQueryClause>(); for (PreviewQueryClausePanel panel : clausePanels) { PreviewQueryClause clause = panel.getClause(); if (clause != null) clauses.add(clause); } PreviewQueryClause[] clauseArray = new PreviewQueryClause[clauses .size()]; clauses.toArray(clauseArray); this.clauses = clauseArray; super.okPressed(); } public PreviewQueryClause[] getClauses() { return clauses; } private PreviewQueryClause[] clauses; private String entityType; private ScrolledComposite scroller; private Composite panelContainer; private ArrayList<PreviewQueryClausePanel> clausePanels; }