/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.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.jkiss.dbeaver.ext.oracle.tools; import org.eclipse.osgi.util.NLS; import org.jkiss.dbeaver.ext.oracle.OracleMessages; import org.jkiss.dbeaver.ext.oracle.model.OracleConstants; import org.jkiss.dbeaver.ext.oracle.model.OracleDataSource; import org.jkiss.dbeaver.ext.oracle.model.dict.OracleConnectionType; import org.jkiss.dbeaver.ext.oracle.oci.OCIUtils; import org.jkiss.dbeaver.ext.oracle.oci.OracleHomeDescriptor; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.dbeaver.ui.dialogs.tools.AbstractScriptExecuteWizard; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard<OracleDataSource,OracleDataSource> { private OracleScriptExecuteWizardPageSettings mainPage; public OracleScriptExecuteWizard(OracleDataSource oracleSchema) { super(Collections.singleton(oracleSchema), OracleMessages.tools_script_execute_wizard_page_name); this.mainPage = new OracleScriptExecuteWizardPageSettings(this); } @Override public void addPages() { addPage(mainPage); super.addPages(); } @Override public void fillProcessParameters(List<String> cmd, OracleDataSource arg) throws IOException { String sqlPlusExec = RuntimeUtils.getNativeBinaryName("sqlplus"); //$NON-NLS-1$ File sqlPlusBinary = new File(getClientHome().getHomePath(), "bin/" + sqlPlusExec); //$NON-NLS-1$ if (!sqlPlusBinary.exists()) { sqlPlusBinary = new File(getClientHome().getHomePath(), sqlPlusExec); } if (!sqlPlusBinary.exists()) { throw new IOException(NLS.bind(OracleMessages.tools_script_execute_wizard_error_sqlplus_not_found, getClientHome().getDisplayName())); } String dumpPath = sqlPlusBinary.getAbsolutePath(); cmd.add(dumpPath); } @Override public OracleHomeDescriptor findServerHome(String clientHomeId) { return OCIUtils.getOraHome(clientHomeId); } @Override public Collection<OracleDataSource> getRunInfo() { return getDatabaseObjects(); } @Override protected List<String> getCommandLine(OracleDataSource arg) throws IOException { List<String> cmd = new ArrayList<>(); fillProcessParameters(cmd, arg); DBPConnectionConfiguration conInfo = getConnectionInfo(); String url; if ("TNS".equals(conInfo.getProviderProperty(OracleConstants.PROP_CONNECTION_TYPE))) { //$NON-NLS-1$ url = conInfo.getServerName(); } else { boolean isSID = OracleConnectionType.SID.name().equals(conInfo.getProviderProperty(OracleConstants.PROP_SID_SERVICE)); String port = conInfo.getHostPort(); if (isSID) { url = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=" + conInfo.getHostName() + ")(Port=" + port + "))(CONNECT_DATA=(SID=" + conInfo.getDatabaseName() + ")))"; } else { url = "//" + conInfo.getHostName() + (port != null ? ":" + port : "") + "/" + conInfo.getDatabaseName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } } final String role = conInfo.getProviderProperty(OracleConstants.PROP_INTERNAL_LOGON); if (role != null) { url += (" AS " + role); } cmd.add(conInfo.getUserName() + "/" + conInfo.getUserPassword() + "@" + url); //$NON-NLS-1$ //$NON-NLS-2$ /* if (toolWizard.isVerbose()) { cmd.add("-v"); } cmd.add("-q"); cmd.add(toolWizard.getDatabaseObjects().getName()); */ return cmd; } }