/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* 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.model;
import org.eclipse.equinox.security.storage.ISecurePreferences;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
import org.jkiss.dbeaver.model.app.DBPPlatform;
import org.jkiss.dbeaver.model.connection.DBPClientHome;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.data.DBDPreferences;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.net.DBWNetworkHandler;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRProgressListener;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectFilter;
import org.jkiss.dbeaver.model.virtual.DBVModel;
import java.util.Collection;
/**
* DBPDataSourceContainer
*/
public interface DBPDataSourceContainer extends DBSObject, DBDPreferences, DBPNamedObject2
{
/**
* Container unique ID
* @return id
*/
@NotNull
String getId();
/**
* Associated driver
* @return driver descriptor reference
*/
@NotNull
DBPDriver getDriver();
@NotNull
DBPPlatform getPlatform();
/**
* Connection configuration.
* @return connection details
*/
@NotNull
DBPConnectionConfiguration getConnectionConfiguration();
/**
* Actual connection configuration. Contains actual parameters used to connect to this datasource.
* Differs from getConnectionConfiguration() in case if tunnel or proxy was used.
* @return actual connection configuration.
*/
@NotNull
DBPConnectionConfiguration getActualConnectionConfiguration();
boolean isProvided();
boolean isTemporary();
boolean isShowSystemObjects();
boolean isShowUtilityObjects();
boolean isConnectionReadOnly();
boolean isDefaultAutoCommit();
void setDefaultAutoCommit(boolean autoCommit, DBCExecutionContext updateContext, boolean updateConnection, Runnable onFinish)
throws DBException;
@Nullable
DBPTransactionIsolation getActiveTransactionsIsolation();
@Nullable
Integer getDefaultTransactionsIsolation();
void setDefaultTransactionsIsolation(DBPTransactionIsolation isolationLevel)
throws DBException;
/**
* Search for object filter which corresponds specified object type and parent object.
* Search filter which match any super class or interface implemented by specified type.
* @param type object type
* @param parentObject parent object (in DBS objects hierarchy)
* @return object filter or null if not filter was set for specified type
*/
@Nullable
DBSObjectFilter getObjectFilter(Class<?> type, @Nullable DBSObject parentObject, boolean firstMatch);
void setObjectFilter(Class<?> type, DBSObject parentObject, DBSObjectFilter filter);
DBVModel getVirtualModel();
DBPClientHome getClientHome();
DBWNetworkHandler[] getActiveNetworkHandlers();
/**
* Checks this data source is connected.
* Do not check whether underlying connection is alive or not.
*/
boolean isConnected();
/**
* Initiate connection job.
*/
void initConnection(DBRProgressMonitor monitor, DBRProgressListener onFinish);
/**
* Connects to datasource.
* This is async method and returns immediately.
* Connection will be opened in separate job, so no progress monitor is required.
* @param monitor progress monitor
* @param initialize initialize datasource after connect (call DBPDataSource.initialize)
* @param reflect notify UI about connection state change
* @throws DBException on error
*/
boolean connect(DBRProgressMonitor monitor, boolean initialize, boolean reflect) throws DBException;
/**
* Disconnects from datasource.
* This is async method and returns immediately.
* Connection will be closed in separate job, so no progress monitor is required.
* @param monitor progress monitor
* @throws DBException on error
* @return true on disconnect, false if disconnect action was canceled
*/
boolean disconnect(DBRProgressMonitor monitor) throws DBException;
/**
* Reconnects datasource.
* @param monitor progress monitor
* @return true on reconnect, false if reconnect action was canceled
* @throws org.jkiss.dbeaver.DBException on any DB error
*/
boolean reconnect(DBRProgressMonitor monitor) throws DBException;
@Nullable
DBPDataSource getDataSource();
@Nullable
DBPDataSourceFolder getFolder();
void setFolder(@Nullable DBPDataSourceFolder folder);
Collection<DBPDataSourceUser> getUsers();
void acquire(DBPDataSourceUser user);
void release(DBPDataSourceUser user);
void fireEvent(DBPEvent event);
/**
* Preference store associated with this datasource
* @return preference store
*/
@NotNull
DBPPreferenceStore getPreferenceStore();
@NotNull
DBPDataSourceRegistry getRegistry();
void persistConfiguration();
@NotNull
ISecurePreferences getSecurePreferences();
}