/*
* 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.ext.oracle.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.access.DBAUser;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.IPropertyCacheValidator;
import org.jkiss.dbeaver.model.meta.LazyProperty;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectLazy;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Collection;
/**
* OracleUser
*/
public class OracleUser extends OracleGrantee implements DBAUser, DBSObjectLazy<OracleDataSource>
{
private static final Log log = Log.getLog(OracleUser.class);
private long id;
private String name;
private String externalName;
private String status;
private Timestamp createDate;
private Timestamp lockDate;
private Timestamp expiryDate;
private Object defaultTablespace;
private Object tempTablespace;
private Object profile;
private String consumerGroup;
private transient String password;
public OracleUser(OracleDataSource dataSource)
{
super(dataSource);
}
public OracleUser(OracleDataSource dataSource, ResultSet resultSet) {
super(dataSource);
this.id = JDBCUtils.safeGetLong(resultSet, "USER_ID");
this.name = JDBCUtils.safeGetString(resultSet, "USERNAME");
this.externalName = JDBCUtils.safeGetString(resultSet, "EXTERNAL_NAME");
this.status = JDBCUtils.safeGetString(resultSet, "ACCOUNT_STATUS");
this.createDate = JDBCUtils.safeGetTimestamp(resultSet, "CREATED");
this.lockDate = JDBCUtils.safeGetTimestamp(resultSet, "LOCK_DATE");
this.expiryDate = JDBCUtils.safeGetTimestamp(resultSet, "EXPIRY_DATE");
this.defaultTablespace = JDBCUtils.safeGetString(resultSet, "DEFAULT_TABLESPACE");
this.tempTablespace = JDBCUtils.safeGetString(resultSet, "TEMPORARY_TABLESPACE");
this.profile = JDBCUtils.safeGetString(resultSet, "PROFILE");
this.consumerGroup = JDBCUtils.safeGetString(resultSet, "INITIAL_RSRC_CONSUMER_GROUP");
}
@Property(order = 1)
public long getId()
{
return id;
}
@NotNull
@Override
@Property(viewable = true, order = 2)
public String getName() {
return name;
}
public void setName(String name)
{
this.name = name;
}
@Property(order = 3)
public String getExternalName()
{
return externalName;
}
@Property(viewable = true, order = 4)
public String getStatus()
{
return status;
}
@Property(viewable = true, order = 5)
public Timestamp getCreateDate()
{
return createDate;
}
@Property(order = 6)
public Timestamp getLockDate()
{
return lockDate;
}
@Property(order = 7)
public Timestamp getExpiryDate()
{
return expiryDate;
}
@Property(order = 8)
@LazyProperty(cacheValidator = OracleTablespace.TablespaceReferenceValidator.class)
public Object getDefaultTablespace(DBRProgressMonitor monitor) throws DBException
{
return OracleTablespace.resolveTablespaceReference(monitor, this, "defaultTablespace");
}
@Property(order = 9)
@LazyProperty(cacheValidator = OracleTablespace.TablespaceReferenceValidator.class)
public Object getTempTablespace(DBRProgressMonitor monitor) throws DBException
{
return OracleTablespace.resolveTablespaceReference(monitor, this, "tempTablespace");
}
@Override
public Object getLazyReference(Object propertyId)
{
if ("defaultTablespace".equals(propertyId)) {
return defaultTablespace;
} else if ("tempTablespace".equals(propertyId)) {
return tempTablespace;
} else if ("profile".equals(propertyId)) {
return profile;
} else {
return null;
}
}
@Property(order = 10)
@LazyProperty(cacheValidator = ProfileReferenceValidator.class)
public Object getProfile(DBRProgressMonitor monitor) throws DBException
{
return OracleUtils.resolveLazyReference(monitor, getDataSource(), getDataSource().profileCache, this, "profile");
}
@Property(order = 11)
public String getConsumerGroup()
{
return consumerGroup;
}
/**
* Passwords are never read from database. It is used to create/alter schema/user
* @return password or null
*/
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
@Override
@Association
public Collection<OraclePrivRole> getRolePrivs(DBRProgressMonitor monitor) throws DBException
{
return rolePrivCache.getAllObjects(monitor, this);
}
@Nullable
@Override
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException {
return super.refreshObject(monitor);
}
public static class ProfileReferenceValidator implements IPropertyCacheValidator<OracleUser> {
@Override
public boolean isPropertyCached(OracleUser object, Object propertyId)
{
return
object.getLazyReference(propertyId) instanceof OracleUserProfile ||
object.getLazyReference(propertyId) == null ||
object.getDataSource().profileCache.isFullyCached();
}
}
}