/******************************************************************************* * Copyright (c) 2016 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.rdb.core.dialog.export.sqltoapplication.composites.axisj; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import com.hangum.tadpole.commons.util.TadpoleWidgetUtils; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.utils.EditorDefine; import com.hangum.tadpole.rdb.core.Messages; import com.hangum.tadpole.rdb.core.dialog.export.sqltoapplication.SQLToLanguageConvert; import com.hangum.tadpole.rdb.core.dialog.export.sqltoapplication.application.SQLToAxisjConvert; import com.hangum.tadpole.rdb.core.dialog.export.sqltoapplication.composites.AbstractSQLToComposite; /** * axisj composite * * @author hangum * */ public class AxisjComposite extends AbstractSQLToComposite { private static final Logger logger = Logger.getLogger(AxisjComposite.class); private Text textConvert; private Text textVariable; private SQLToLanguageConvert slt; private Text textTheme; private Spinner spinnerFixedCol; private Button btnCheckFit2Width; private CCombo comboHeadAlign; private CCombo comboMergeCell; private CCombo comboHeight; private CCombo comboSort; private CCombo comboHeadTool; private CCombo comboViewMode; private TableViewer tableViewer; private CTabFolder tabFolder; private Browser browserPreview; private List<AxisjHeaderDAO> listAxisjHeader = new ArrayList<AxisjHeaderDAO>(); /** * Create the composite. * @param parent * @param style */ public AxisjComposite(Composite tabFolderObject, UserDBDAO userDB, String strTitle, final String sql, EditorDefine.SQL_TO_APPLICATION type) { super(tabFolderObject, SWT.NONE, userDB, sql, type); CTabItem tbtmTable = new CTabItem((CTabFolder)tabFolderObject, SWT.NONE); tbtmTable.setText(strTitle); tbtmTable.setData(type); Composite compositeBody = new Composite(tabFolderObject, SWT.NONE); tbtmTable.setControl(compositeBody); compositeBody.setLayout(new GridLayout(1, false)); compositeBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Composite compositeTitle = new Composite(compositeBody, SWT.NONE); compositeTitle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); compositeTitle.setLayout(new GridLayout(4, false)); Label lblVariable = new Label(compositeTitle, SWT.NONE); lblVariable.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblVariable.setText(Messages.get().Variable); slt = new SQLToLanguageConvert(userDB, type); textVariable = new Text(compositeTitle, SWT.BORDER); textVariable.setToolTipText("Target DIV ID"); textVariable.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); textVariable.setText(slt.getDefaultVariable()); Button btnConvertSQL = new Button(compositeTitle, SWT.NONE); btnConvertSQL.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { sqlToStr(); if(StringUtils.equalsIgnoreCase("Browser", tabFolder.getSelection().getText())){ refreshBrowser(); } } }); btnConvertSQL.setText(String.format(Messages.get().SQLToStringDialog_btnNewButton_text, type)); Button btnOriginalText = new Button(compositeTitle, SWT.NONE); btnOriginalText.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { textConvert.setText(sql); tabFolder.setSelection(0); } }); btnOriginalText.setText(Messages.get().SQLToStringDialog_4); Composite composite = new Composite(compositeBody, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); composite.setLayout(new GridLayout(6, false)); Label lblTheme = new Label(composite, SWT.NONE); lblTheme.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblTheme.setText("Theme"); textTheme = new Text(composite, SWT.BORDER); textTheme.setText("AXGrid"); textTheme.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblNewLabel = new Label(composite, SWT.NONE); lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel.setText("Fixed Column"); spinnerFixedCol = new Spinner(composite, SWT.BORDER); Label lblFitToWidth = new Label(composite, SWT.NONE); lblFitToWidth.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblFitToWidth.setText("Fit to Width"); btnCheckFit2Width = new Button(composite, SWT.CHECK); btnCheckFit2Width.setSelection(true); Label lblHeaderAlign = new Label(composite, SWT.NONE); lblHeaderAlign.setAlignment(SWT.RIGHT); lblHeaderAlign.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblHeaderAlign.setText("Header Align"); comboHeadAlign = new CCombo(composite, SWT.BORDER); comboHeadAlign.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboHeadAlign.setItems(new String[] {"Left", "Center", "Right"}); comboHeadAlign.setText("Center"); comboHeadAlign.setEditable(false); Label lblNewLabel_1 = new Label(composite, SWT.NONE); lblNewLabel_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel_1.setText("Merge Cells"); comboMergeCell = new CCombo(composite, SWT.BORDER); comboMergeCell.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboMergeCell.setItems(new String[] {"True", "False"}); comboMergeCell.setText("False"); Label lblNewLabel_2 = new Label(composite, SWT.NONE); lblNewLabel_2.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel_2.setText("Grid Height"); comboHeight = new CCombo(composite, SWT.BORDER); comboHeight.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboHeight.setItems(new String[] {"Auto", "300", "500", "600", "800"}); comboHeight.setText("500"); Label lblSort = new Label(composite, SWT.NONE); lblSort.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblSort.setAlignment(SWT.RIGHT); lblSort.setText("Sort"); comboSort = new CCombo(composite, SWT.BORDER); comboSort.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboSort.setItems(new String[] {"True", "False"}); comboSort.setText("True"); comboSort.setEditable(false); Label lblNewLabel_3 = new Label(composite, SWT.NONE); lblNewLabel_3.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); lblNewLabel_3.setText("Head Tool"); comboHeadTool = new CCombo(composite, SWT.BORDER); comboHeadTool.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboHeadTool.setItems(new String[] {"True", "False"}); comboHeadTool.setText("True"); comboHeadTool.setEditable(false); Label lblNewLabel_4 = new Label(composite, SWT.NONE); lblNewLabel_4.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel_4.setText("View Mode"); comboViewMode = new CCombo(composite, SWT.BORDER); comboViewMode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); comboViewMode.setItems(new String[] {"Grid", "Icon", "Mobile"}); comboViewMode.setText("Grid"); comboViewMode.setEditable(false); SashForm sashForm = new SashForm(compositeBody, SWT.VERTICAL); sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); tableViewer = new TableViewer(sashForm, SWT.BORDER | SWT.FULL_SELECTION /* | SWT.VIRTUAL */); Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); createTaleColumn(); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new AxisJLabelProvider()); tableViewer.setInput(listAxisjHeader); this.listAxisjHeader = SQLToAxisjConvert.initializeHead(listAxisjHeader, this.userDB, this.sql); tableViewer.refresh(); tabFolder = new CTabFolder(sashForm, SWT.BORDER | SWT.BOTTOM); tabFolder.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // selected preview if(tabFolder.getSelectionIndex() == 1) { refreshBrowser(); } } }); tabFolder.setSelectionBackground(Display.getCurrent().getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT)); tabFolder.setSelectionBackground(TadpoleWidgetUtils.getTabFolderBackgroundColor(), TadpoleWidgetUtils.getTabFolderPercents()); CTabItem tbtmHtml = new CTabItem(tabFolder, SWT.NONE); tbtmHtml.setText("HTML"); textConvert = new Text(tabFolder, SWT.NONE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL); tbtmHtml.setControl(textConvert); textConvert.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); CTabItem tabBrowser = new CTabItem(tabFolder, SWT.NONE); tabBrowser.setText("Browser"); browserPreview = new Browser(tabFolder, SWT.NONE | SWT.H_SCROLL | SWT.V_SCROLL); tabBrowser.setControl(browserPreview); tabFolder.setSelection(0); sqlToStr(); sashForm.setWeights(new int[] {4, 5}); } private void refreshBrowser(){ try { String STR_PREVIEW_TEMPLATE = IOUtils.toString(AxisjConsts.class.getResource("AXISJ.PREVIEW.html")); STR_PREVIEW_TEMPLATE = StringUtils.replaceOnce(STR_PREVIEW_TEMPLATE, "_TDB_TEMPLATE_TITLE_", textVariable.getText()); STR_PREVIEW_TEMPLATE = StringUtils.replaceOnce(STR_PREVIEW_TEMPLATE, "_AXISJ_JS_BLOCK_", textConvert.getText()); browserPreview.setText(STR_PREVIEW_TEMPLATE); } catch (IOException e1) { logger.error("AXISJ preview exception", e1); } } private void createTaleColumn() { for (int i = 0; i < AxisjConsts.sizes.length; i++) { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnColumnName = tableViewerColumn.getColumn(); tblclmnColumnName.setWidth(AxisjConsts.sizes[i]); tblclmnColumnName.setText(AxisjConsts.names[i]); //tableViewerColumn.setLabelProvider(labelProvider); tableViewerColumn.setEditingSupport(new AxisjEditingSupport(tableViewer, i)); } } /** * sql to str */ private void sqlToStr() { StringBuffer sbStr = new StringBuffer(); String[] sqls = parseSQL(); if(StringUtils.isEmpty(textVariable.getText())){ textVariable.setText(textVariable.getText()); } HashMap<String, String> options = new HashMap<String, String>(); options.put("name", textVariable.getText()); options.put("theme", textTheme.getText()); if (StringUtils.isEmpty(spinnerFixedCol.getText())) { options.put("fixedColSeq", "0"); }else{ options.put("fixedColSeq", spinnerFixedCol.getText()); } options.put("fitToWidth", btnCheckFit2Width.getSelection() ?"true":"false" ); options.put("colHeadAlign", comboHeadAlign.getText().toLowerCase()); if(StringUtils.containsIgnoreCase(comboMergeCell.getText(),"true") ){//전체셀 병합 options.put("mergeCells", "true"); }else if (StringUtils.containsIgnoreCase(comboMergeCell.getText(),"false") ){// 병합안함. options.put("mergeCells", "false"); }else{//지정된 인덱스만 try{ String[] array = StringUtils.split(comboMergeCell.getText(), ','); if (array.length > 0){ StringBuffer sb = new StringBuffer(); for (String idx : array) { sb.append(Integer.valueOf(idx) + ","); //컬럼 인덱스를 숫자로 입력했는지 확인. } options.put("mergeCells", "[" + StringUtils.removeEnd(sb.toString(), ",") +"]"); }else{ // 지정된 인덱스가 없을경우. options.put("mergeCells", "false"); } }catch (Exception e){ options.put("mergeCells", "false"); } } if(StringUtils.containsIgnoreCase(comboHeight.getText(), "auto")) { options.put("height", "\"auto\""); }else{ options.put("height", comboHeight.getText()); } options.put("sort", comboSort.getText().toLowerCase()); options.put("colHeadTool", comboHeadTool.getText().toLowerCase()); options.put("viewMode", comboViewMode.getText().toLowerCase()); for(int i=0; i < sqls.length; i++) { if("".equals(StringUtils.trimToEmpty(sqls[i]))) continue; //$NON-NLS-1$ if(i ==0){ sbStr.append( slt.sqlToString(sqls[i], options, listAxisjHeader)); }else{ options.put("name", textVariable.getText() + "_" + i); sbStr.append( slt.sqlToString(sqls[i], options, listAxisjHeader)); } // 쿼리가 여러개일 경우 하나씩 한개를 준다. sbStr.append("\r\n"); //$NON-NLS-1$ } textConvert.setText(sbStr.toString()); } }