/******************************************************************************* * 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: * nilriri - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.rdb.core.dialog.java; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.graphics.Point; 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.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import com.hangum.tadpole.commons.dialogs.message.dao.RequestResultDAO; import com.hangum.tadpole.commons.google.analytics.AnalyticCaller; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.commons.util.GlobalImageUtils; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.rdb.OracleJavaDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.ExecuteDDLCommand; import com.hangum.tadpole.rdb.core.Messages; import com.ibatis.sqlmap.client.SqlMapClient; /** * Java object 실행 다이얼로그. * * @author nilriri * */ public class CreateJavaDialog extends Dialog { private static final Logger logger = Logger.getLogger(CreateJavaDialog.class); protected int ID_CREATE_JAVA = IDialogConstants.CLIENT_ID + 1; protected int ID_CHANGE_JAVA = IDialogConstants.CLIENT_ID + 2; protected int ID_DROP_JAVA = IDialogConstants.CLIENT_ID + 3; private UserDBDAO userDB; private OracleJavaDAO javaDao; private Button btnCreateJava; private Button btnDropJava; private Text textScript; private Group grpTables; private Label lblJavaName; private Text textJavaName; /** * Create the dialog. * * @param parentShell * @param userDB * @param javaDao */ public CreateJavaDialog(Shell parentShell, UserDBDAO userDB, OracleJavaDAO javaDao) { super(parentShell); setShellStyle(SWT.MAX | SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL); this.userDB = userDB; this.javaDao = javaDao; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Java Object Manager"); newShell.setImage(GlobalImageUtils.getTadpoleIcon()); } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite containerInput = (Composite) super.createDialogArea(parent); GridLayout gl_containerInput = (GridLayout) containerInput.getLayout(); gl_containerInput.verticalSpacing = 1; gl_containerInput.horizontalSpacing = 1; gl_containerInput.marginHeight = 1; gl_containerInput.marginWidth = 1; Composite compositeHead = new Composite(containerInput, SWT.NONE); compositeHead.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); compositeHead.setLayout(new GridLayout(2, false)); lblJavaName = new Label(compositeHead, SWT.NONE); lblJavaName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblJavaName.setText("Java Name"); textJavaName = new Text(compositeHead, SWT.BORDER); textJavaName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); textJavaName.setText(this.javaDao.getObjectName()); SashForm sashForm = new SashForm(containerInput, SWT.VERTICAL); sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); grpTables = new Group(sashForm, SWT.NONE); GridLayout gl_grpTables = new GridLayout(1, false); gl_grpTables.horizontalSpacing = 2; gl_grpTables.verticalSpacing = 2; gl_grpTables.marginHeight = 2; gl_grpTables.marginWidth = 2; grpTables.setLayout(gl_grpTables); grpTables.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); grpTables.setText("Java Source"); textScript = new Text(grpTables, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI); textScript.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); textScript.setText(getJavaSource()); // google analytic AnalyticCaller.track(this.getClass().getName()); return containerInput; } private String getJavaSource() { SqlMapClient sqlClient; StringBuffer result = new StringBuffer(); try { sqlClient = TadpoleSQLManager.getInstance(userDB); Map<String, String> param = new HashMap<String, String>(); param.put("schema_name", javaDao.getSchema_name()); param.put("object_name", javaDao.getObjectName()); List<String> source = sqlClient.queryForList("getJavaSource", param); //$NON-NLS-1$ for (String line : source) { if (StringUtils.isBlank(line)) { result.append("\n"); } else { result.append(line + "\n"); } } return result.toString(); } catch (Exception e) { logger.error("java object", e); return ""; } } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { if (StringUtils.isBlank(javaDao.getObjectName())) { btnCreateJava = createButton(parent, ID_CREATE_JAVA, Messages.get().CreateJava, false); } else { btnCreateJava = createButton(parent, ID_CREATE_JAVA, Messages.get().ChangeJava, false); btnDropJava = createButton(parent, ID_DROP_JAVA, Messages.get().DropJava, false); } createButton(parent, IDialogConstants.OK_ID, CommonMessages.get().Close, false); } private String getCreateScript() { StringBuffer script = new StringBuffer(); StringBuffer source = new StringBuffer(); //strSQL = "begin execute immediate '" + strSQL.replace("'", "''") + "'; dbms_output.put_line(sqlerrm); end;"; String object_name = (StringUtils.isBlank(this.javaDao.getSchema_name()) ? userDB.getSchema() : this.javaDao.getSchema_name()); object_name += ".\"" + this.textJavaName.getText().trim() + "\""; source.append("CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED " + object_name + " as\n"); source.append(this.textScript.getText()); script.append("begin\n"); script.append(String.format("EXECUTE IMMEDIATE '%s';\n", source)); script.append("dbms_output.put_line(sqlerrm);"); script.append("end;\n"); return script.toString(); } @Override protected void buttonPressed(int buttonId) { if (buttonId == ID_CREATE_JAVA) { RequestResultDAO reqReResultDAO = new RequestResultDAO(); try { String create_stmt = getCreateScript(); ExecuteDDLCommand.executSQL(userDB, reqReResultDAO, create_stmt); } catch (Exception e) { logger.error(e); } if (PublicTadpoleDefine.SUCCESS_FAIL.F.name().equals(reqReResultDAO.getResult())) { MessageDialog.openError(this.getShell(),CommonMessages.get().Error, Messages.get().CreateOrChangedErrorJavaObject + reqReResultDAO.getMesssage() + reqReResultDAO.getException().getMessage()); } else { MessageDialog.openInformation(this.getShell(), CommonMessages.get().Information, Messages.get().CreateOrChangedJavaObject); this.okPressed(); } } else if (buttonId == ID_DROP_JAVA) { RequestResultDAO reqReResultDAO = new RequestResultDAO(); try { String drop_stmp = ""; drop_stmp = "DROP JAVA SOURCE " + javaDao.getFullName() + " "; ExecuteDDLCommand.executSQL(userDB, reqReResultDAO, drop_stmp); } catch (Exception e) { logger.error(e); } if (PublicTadpoleDefine.SUCCESS_FAIL.F.name().equals(reqReResultDAO.getResult())) { MessageDialog.openError(this.getShell(),CommonMessages.get().Error, Messages.get().DeletedErrorJavaObject + reqReResultDAO.getMesssage() + reqReResultDAO.getException().getMessage()); }else{ MessageDialog.openInformation(this.getShell(), CommonMessages.get().Information, Messages.get().DeletedJavaObject); this.okPressed(); } } else { okPressed(); } } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(700, 700); } }