forked from Coded/SIPRP
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							157 lines
						
					
					
						
							4.9 KiB
						
					
					
				
			
		
		
	
	
							157 lines
						
					
					
						
							4.9 KiB
						
					
					
				| /*
 | |
|  * UserDataProvider.java
 | |
|  *
 | |
|  * Created on 8 de Novembro de 2004, 18:38
 | |
|  */
 | |
| 
 | |
| package siprp.clientes;
 | |
| 
 | |
| import java.util.*;
 | |
| 
 | |
| import com.evolute.utils.*;
 | |
| import com.evolute.utils.arrays.*;
 | |
| import com.evolute.utils.data.*;
 | |
| import com.evolute.utils.db.*;
 | |
| import com.evolute.utils.metadb.*;
 | |
| import com.evolute.utils.ui.search.*;
 | |
| import com.evolute.utils.sql.*;
 | |
| 
 | |
| import siprp.*;
 | |
| /**
 | |
|  *
 | |
|  * @author  fpalma
 | |
|  */
 | |
| public class UserDataProvider extends MetaProvider
 | |
| {
 | |
| 	private static final String RESERVED_ROLES_MANAGER = "manager";
 | |
| 	private static final String RESERVED_ROLES_ADMIN = "admin";
 | |
| 	private static final Object LOCK = new Object();
 | |
| 	private static UserDataProvider instance = null;
 | |
| 	private final Executer executer;
 | |
| 	
 | |
| 	protected final Expression excludeReserved;
 | |
| 
 | |
| 	/** Creates a new instance of UserDataProvider */
 | |
| 	public UserDataProvider()
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		boolean webAware = ( ( Boolean ) Singleton.getInstance( SingletonConstants.WEB_AWARE ) ).booleanValue();
 | |
| 		DBManager dbm;
 | |
| 		if( webAware )
 | |
| 		{
 | |
| 			String url = ( String ) Singleton.getInstance( SingletonConstants.WEB_URL_PREFIX );
 | |
| 			url += ( String ) Singleton.getInstance( SingletonConstants.WEB_URL ) + "/";
 | |
| 			url += ( String ) Singleton.getInstance( SingletonConstants.WEB_DB_NAME ) + "/";
 | |
| 			String user = ( String ) Singleton.getInstance( SingletonConstants.WEB_USER );
 | |
| 			String pwd = ( String ) Singleton.getInstance( SingletonConstants.WEB_PASSWORD );
 | |
| 			dbm = new JDBCManager( url, user, pwd, 10, 8, 8, null );
 | |
| 			executer = dbm.getSharedExecuter( this );
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			dbm = null;
 | |
| 			executer = null;
 | |
| 		}
 | |
| 		excludeReserved = new Field( "role" ).isDifferent( RESERVED_ROLES_MANAGER ).and(
 | |
| 			new Field( "role" ).isDifferent( RESERVED_ROLES_ADMIN ) );
 | |
| 	}
 | |
| 	
 | |
| 	public static MetaProvider getProvider()
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		synchronized( LOCK )
 | |
| 		{
 | |
| 			if( instance == null )
 | |
| 			{
 | |
| 				instance = new UserDataProvider();
 | |
| 			}
 | |
| 		}
 | |
| 		return instance;
 | |
| 	}
 | |
| 	
 | |
| 	public String getUserName( Integer empresaID )
 | |
| 		throws Exception
 | |
| 	{
 | |
| System.out.println( "getUserName( " +empresaID+ " )" ) ;
 | |
| 		Select select = new Select( new String[]{ "roles" }, new String[]{ "username" },
 | |
| 				new Field( "role" ).isEqual( empresaID == null ? "siprpuser" : empresaID.toString() ) );
 | |
| 		Virtual2DArray array = executer.executeQuery( select );
 | |
| 		if( array.columnLength() == 0 )
 | |
| 		{
 | |
| 			return null;
 | |
| 		}
 | |
| 		return array.get( 0, 0 ).toString();
 | |
| 	}
 | |
| 	
 | |
| 	public void saveUser( String userName, String password, Integer empresaID, boolean isNew )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		if( isNew )
 | |
| 		{
 | |
| 			Insert insert = 
 | |
| 				new Insert( "roles", 
 | |
| 					new Assignment[]{ new Assignment( new Field( "username" ), userName ),
 | |
| 										new Assignment( new Field( "role" ), empresaID == null ? "siprpuser" : empresaID.toString() ) } );
 | |
| 			executer.executeQuery( insert, null );
 | |
| 			insert = 
 | |
| 				new Insert( "users", 
 | |
| 					new Assignment[]{ new Assignment( new Field( "username" ), userName ),
 | |
| 										new Assignment( new Field( "password" ), password ) } );
 | |
| 			executer.executeQuery( insert, null );
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			Select select = new Select( new String[]{ "roles" }, new String[]{ "username" },
 | |
| 				new Field( "role" ).isEqual( empresaID == null ? "siprpuser" : empresaID.toString() ) );
 | |
| 			Virtual2DArray array = executer.executeQuery( select );
 | |
| 			if( array.columnLength() == 0 )
 | |
| 			{
 | |
| 				saveUser( userName, password, empresaID, true );
 | |
| 				return;
 | |
| 			}
 | |
| 			String oldName = array.get( 0, 0 ).toString();
 | |
| 			Update update = 
 | |
| 				new Update( "roles", 
 | |
| 					new Assignment[]{ new Assignment( new Field( "username" ), userName ),
 | |
| 										new Assignment( new Field( "role" ), empresaID == null ? "siprpuser" : empresaID.toString() ) },
 | |
| 				new Field( "username" ).isEqual( oldName ).and( excludeReserved ) );
 | |
| 			executer.executeQuery( update );
 | |
| 			update = 
 | |
| 				new Update( "users", 
 | |
| 					new Assignment[]{ new Assignment( new Field( "username" ), userName ),
 | |
| 										new Assignment( new Field( "password" ), password ) },
 | |
| 				new Field( "username" ).isEqual( oldName ) );
 | |
| 			executer.executeQuery( update );
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	public boolean checkNewName( String name, Integer empresaID )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		Select select = new Select( new String[]{ "roles" }, new String[]{ "username" },
 | |
| 				new Field( "role" ).isDifferent( empresaID == null ? "siprpuser" : empresaID.toString() ).and(
 | |
| 				new Field( "lower( username )" ).isEqual( new Field( "lower( '" + name + "' )" ) ) ) );
 | |
| 		Virtual2DArray array = executer.executeQuery( select );
 | |
| 		if( array.columnLength() != 0 )
 | |
| 		{
 | |
| 			if( empresaID != null )
 | |
| 			{
 | |
| 				return false;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				select = new Select( new String[]{ "roles" }, new String[]{ "username" },
 | |
| 					new Field( "role" ).isEqual( empresaID == null ? "siprpuser" : empresaID.toString() ).and(
 | |
| 					new Field( "lower( username )" ).isEqual( new Field( "lower( '" + name + "' )" ) ) ) );
 | |
| 				array = executer.executeQuery( select );
 | |
| 				if( array.columnLength() == 0 )
 | |
| 				{
 | |
| 					return false;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		return true;
 | |
| 	}
 | |
| }
 |