📄 muser.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.mail.internet.*;
import javax.naming.*;
import javax.naming.directory.*;
import org.compiere.util.*;
/**
* User Model
*
* @author Jorg Janke
* @version $Id: MUser.java,v 1.9 2006/01/23 04:55:23 jjanke Exp $
*/
public class MUser extends X_AD_User
{
/**
* Get active Users of BPartner
* @param ctx context
* @param C_BPartner_ID id
* @return array of users
*/
public static MUser[] getOfBPartner (Properties ctx, int C_BPartner_ID)
{
ArrayList<MUser> list = new ArrayList<MUser>();
String sql = "SELECT * FROM AD_User WHERE C_BPartner_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, C_BPartner_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MUser(ctx, rs, null));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MUser[] retValue = new MUser[list.size ()];
list.toArray (retValue);
return retValue;
} // getOfBPartner
/**
* Get Users with Role
* @param role role
* @return array of users
*/
public static MUser[] getWithRole (MRole role)
{
ArrayList<MUser> list = new ArrayList<MUser>();
String sql = "SELECT * FROM AD_User u "
+ "WHERE u.IsActive='Y'"
+ " AND EXISTS (SELECT * FROM AD_User_Roles ur "
+ "WHERE ur.AD_User_ID=u.AD_User_ID AND ur.AD_Role_ID=? AND ur.IsActive='Y')";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, role.getAD_Role_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MUser(role.getCtx(), rs, null));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MUser[] retValue = new MUser[list.size ()];
list.toArray (retValue);
return retValue;
} // getWithRole
/**
* Get User (cached)
* Also loads Admninistrator (0)
* @param ctx context
* @param AD_User_ID id
* @return user
*/
public static MUser get (Properties ctx, int AD_User_ID)
{
Integer key = new Integer(AD_User_ID);
MUser retValue = (MUser)s_cache.get(key);
if (retValue == null)
{
retValue = new MUser (ctx, AD_User_ID, null);
if (AD_User_ID == 0)
{
String trxName = null;
retValue.load(trxName); // load System Record
}
s_cache.put(key, retValue);
}
return retValue;
} // get
/**
* Get Current User (cached)
* @param ctx context
* @return user
*/
public static MUser get (Properties ctx)
{
return get(ctx, Env.getAD_User_ID(ctx));
} // get
/**
* Get User
* @param ctx context
* @param name name
* @param password password
* @return user or null
*/
public static MUser get (Properties ctx, String name, String password)
{
if (name == null || name.length() == 0 || password == null || password.length() == 0)
{
s_log.warning ("Invalid Name/Password = " + name + "/" + password);
return null;
}
int AD_Client_ID = Env.getAD_Client_ID(ctx);
MUser retValue = null;
String sql = "SELECT * FROM AD_User "
+ "WHERE Name=? AND Password=? AND IsActive='Y' AND AD_Client_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setString (1, name);
pstmt.setString (2, password);
pstmt.setInt(3, AD_Client_ID);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
{
retValue = new MUser (ctx, rs, null);
if (rs.next())
s_log.warning ("More then one user with Name/Password = " + name);
}
else
s_log.fine("No record");
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return retValue;
} // get
/**
* Get Name of AD_User
* @param AD_User_ID System User
* @return Name of user or ?
*/
public static String getNameOfUser (int AD_User_ID)
{
String name = "?";
// Get ID
String sql = "SELECT Name FROM AD_User WHERE AD_User_ID=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_User_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
name = rs.getString(1);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, sql, e);
}
return name;
} // getNameOfUser
/**
* User is SalesRep
* @param AD_User_ID user
* @return true if sales rep
*/
public static boolean isSalesRep (int AD_User_ID)
{
if (AD_User_ID == 0)
return false;
String sql = "SELECT MAX(AD_User_ID) FROM AD_User u"
+ " INNER JOIN C_BPartner bp ON (u.C_BPartner_ID=bp.C_BPartner_ID) "
+ "WHERE bp.IsSalesRep='Y' AND AD_User_ID=?";
int no = DB.getSQLValue(null, sql, AD_User_ID);
return no == AD_User_ID;
} // isSalesRep
/** Cache */
static private CCache<Integer,MUser> s_cache = new CCache<Integer,MUser>("AD_User", 30, 60);
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MUser.class);
/**************************************************************************
* Default Constructor
* @param ctx context
* @param AD_User_ID id
*/
public MUser (Properties ctx, int AD_User_ID, String trxName)
{
super (ctx, AD_User_ID, trxName); // 0 is also System
if (AD_User_ID == 0)
{
setIsFullBPAccess (true);
setNotificationType(NOTIFICATIONTYPE_EMail);
}
} // MUser
/**
* Parent Constructor
* @param partner partner
*/
public MUser (X_C_BPartner partner)
{
this (partner.getCtx(), 0, partner.get_TrxName());
setClientOrg(partner);
setC_BPartner_ID (partner.getC_BPartner_ID());
setName(partner.getName());
} // MUser
/**
* Load Constructor
* @param ctx context
* @param rs current row of result set to be loaded
*/
public MUser (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MUser
/** Roles of User with Org */
private MRole[] m_roles = null;
/** Roles of User with Org */
private int m_rolesAD_Org_ID = -1;
/** Is Administrator */
private Boolean m_isAdministrator = null;
/** User Access Rights */
private X_AD_UserBPAccess[] m_bpAccess = null;
/**
* Add to Description
* @param description description to be added
*/
public void addDescription (String description)
{
if (description == null || description.length() == 0)
return;
String descr = getDescription();
if (descr == null || descr.length() == 0)
setDescription (description);
else
setDescription (descr + " - " + description);
} // addDescription
/**
* String Representation
* @return Info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MUser[")
.append(get_ID())
.append(",Name=").append(getName())
.append(",EMailUserID=").append(getEMailUser())
.append ("]");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -