/*******************************************************************************
*
* Pentaho Big Data
*
* Copyright (C) 2002-2012 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed 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.pentaho.di.trans.steps.cassandraoutput;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.pentaho.di.core.Const;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.ui.core.PropsUI;
import org.pentaho.di.ui.core.gui.GUIResource;
import org.pentaho.di.ui.core.gui.WindowProperty;
import org.pentaho.di.ui.core.widget.StyledTextComp;
import org.pentaho.di.ui.spoon.job.JobGraph;
import org.pentaho.di.ui.trans.step.BaseStepDialog;
import org.pentaho.di.ui.trans.steps.tableinput.SQLValuesHighlight;
/**
* Provides a popup dialog for editing CQL commands.
*
* @author Mark Hall (mhall{[at]}pentaho{[dot]}com)
* @version $Revision$
*/
public class EnterCQLDialog extends Dialog {
private static Class<?> PKG = EnterCQLDialog.class; // for i18n purposes, needed by Translator2!! $NON-NLS-1$
protected String m_title;
protected String m_originalCQL;
protected String m_currentCQL;
protected Shell m_parent;
protected Shell m_shell;
protected Button m_ok;
protected Button m_cancel;
protected Listener m_lsCancel;
protected Listener m_lsOK;
// protected SelectionAdapter m_lsDef;
protected PropsUI m_props;
protected StyledTextComp m_cqlText;
protected TransMeta m_transMeta;
protected ModifyListener m_lsMod;
public EnterCQLDialog(Shell parent, TransMeta transMeta, ModifyListener lsMod,
String title, String cql) {
super(parent, SWT.NONE);
m_parent = parent;
m_props = PropsUI.getInstance();
m_title = title;
m_originalCQL = cql;
m_transMeta = transMeta;
m_lsMod = lsMod;
}
public String open() {
Display display = m_parent.getDisplay();
m_shell = new Shell(m_parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN | SWT.APPLICATION_MODAL);
m_props.setLook(m_shell);
m_shell.setImage(GUIResource.getInstance().getImageSpoon());
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = Const.FORM_MARGIN;
formLayout.marginHeight = Const.FORM_MARGIN;
m_shell.setLayout(formLayout);
m_shell.setText(m_title);
int margin = Const.MARGIN;
m_cqlText = new StyledTextComp(m_transMeta, m_shell,
SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL, "");
m_props.setLook(m_cqlText, m_props.WIDGET_STYLE_FIXED);
m_cqlText.setText(m_originalCQL);
m_currentCQL = m_originalCQL;
FormData fd = new FormData();
fd.left = new FormAttachment(0, 0);
fd.top = new FormAttachment(0, 0);
fd.right = new FormAttachment(100, -2 * margin);
fd.bottom = new FormAttachment(100, -50);
m_cqlText.setLayoutData(fd);
m_cqlText.addModifyListener(m_lsMod);
m_cqlText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
m_cqlText.setToolTipText(m_transMeta.environmentSubstitute(m_cqlText.getText()));
}
});
// Text Highlighting
m_cqlText.addLineStyleListener(new SQLValuesHighlight());
// Some buttons
m_ok = new Button(m_shell, SWT.PUSH);
m_ok.setText(BaseMessages.getString(PKG, "System.Button.OK"));
m_cancel = new Button(m_shell, SWT.PUSH);
m_cancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
BaseStepDialog.positionBottomButtons(m_shell, new Button[] { m_ok, m_cancel }, margin, null);
// Add listeners
m_lsCancel = new Listener() { public void handleEvent(Event e) { cancel(); } };
m_lsOK = new Listener() { public void handleEvent(Event e) { ok(); } };
m_ok.addListener(SWT.Selection, m_lsOK);
m_cancel.addListener(SWT.Selection, m_lsCancel);
// Detect [X] or ALT-F4 or something that kills this window...
m_shell.addShellListener( new ShellAdapter() { public void shellClosed(ShellEvent e) { checkCancel(e); } } );
BaseStepDialog.setSize(m_shell);
m_shell.open();
while (!m_shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
return m_currentCQL;
}
public void dispose() {
m_props.setScreen(new WindowProperty(m_shell));
m_shell.dispose();
}
protected void ok() {
m_currentCQL = m_cqlText.getText();
dispose();
}
protected void cancel() {
m_currentCQL = m_originalCQL;
dispose();
}
public void checkCancel(ShellEvent e) {
String newText = m_cqlText.getText();
if (!newText.equals(m_originalCQL)) {
int save = JobGraph.showChangedWarning(m_shell, m_title);
if (save == SWT.CANCEL) {
e.doit = false;
} else if (save == SWT.YES) {
ok();
} else {
cancel();
}
} else {
cancel();
}
}
}