//***************************************************************************************************************************************************
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.rmi.registry.LocateRegistry ;
import java.rmi.server.UnicastRemoteObject ;
import java.sql.Statement ;
import java.sql.ResultSet ;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
//***************************************************************************************************************************************************
//***************************************************************************************************************************************************
public class ServerUtilitiesImplementation implements ServerUtilitiesInterface
{
//=================================================================================================================================================
Statement statement;
BufferedWriter file;
DateFormat dateFormat;
Date date;
//=================================================================================================================================================
public ServerUtilitiesImplementation()
{
dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/ceng443" ;
String username = "root";
String password = "root";
try
{
file = new BufferedWriter( new FileWriter( "log.txt" ) ) ;
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' Start Connecting to Mysql in adress '"+ url +"'" ) ;
file.newLine() ;
file.flush();
Class.forName( driver ) ;
Connection connection = DriverManager.getConnection( url , username , password );
statement = connection.createStatement();
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' Connecting is successful " ) ;
file.newLine() ;
file.flush();
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem with Connecting to Mysql " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
}
//=================================================================================================================================================
@Override
public String getMimeType ( String fileExtension )
{
ResultSet resultset = null;
try
{
resultset = statement.executeQuery(" select cMimeType from mimetypes where cFileExtension = '"+ fileExtension +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Select' query to get type of '"+ fileExtension +"' " ) ;
file.newLine() ;
file.flush();
while ( resultset.next() )
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the asked file extention is: '"+ fileExtension +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' the mime type is: '"+ resultset.getString( "cMimeType" ) +"' " ) ;
file.newLine() ;
file.flush();
return resultset.getString( "cMimeType" ) ;
}
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to get type of '"+ fileExtension +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
return null;
}
//=================================================================================================================================================
@Override
public String getStatusReason ( int statusCode )
{
ResultSet resultset = null;
try
{
resultset = statement.executeQuery(" select cReason from statusreasons where cStatusCode = '"+ statusCode +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Select' query to get status reason of '"+ statusCode +"' " ) ;
file.newLine() ;
file.flush();
while ( resultset.next() )
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the asked status code is: '"+ statusCode +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' the status reason is '"+ resultset.getString( "cReason" ) +"' " ) ;
file.newLine() ;
file.flush();
return resultset.getString( "cReason" ) ;
}
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to get status reason of '"+ statusCode +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
return null;
}
//=================================================================================================================================================
@Override
public boolean isAdPage ( String fileName )
{
ResultSet resultset = null;
try
{
resultset = statement.executeQuery(" select cPage from hitcounts ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Select' query to checking isAdPage of '"+ fileName +"' " ) ;
file.newLine() ;
file.flush();
while ( resultset.next() )
{
if( resultset.getString( "cPage" ).equals(fileName))
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the asked page is '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' the result for this page is TRUE " ) ;
file.newLine() ;
file.flush();
return true;
}
}
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to checking isAdPage of '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the asked page is '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' the result for this page is FALSE " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
return false;
}
//=================================================================================================================================================
@Override
public int getHitCount ( String fileName )
{
ResultSet resultset = null;
try
{
resultset = statement.executeQuery(" select cCount from hitcounts where cPage = '"+ fileName +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Select' query to get hit counts of '"+ fileName +"' " ) ;
file.newLine() ;
file.flush();
while ( resultset.next() )
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the hit counts of asked file is '"+ resultset.getInt( "cCount" ) +"' " ) ;
file.newLine() ;
file.flush();
return resultset.getInt( "cCount" ) ;
}
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to get hit counts of '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
return -1;
}
//=================================================================================================================================================
@Override
public void incrementHitCount ( String fileName )
{
int tempHitCounts = 0;
tempHitCounts = getHitCount(fileName) + 1;
try
{
statement.executeUpdate(" update hitcounts set cCount = '"+ tempHitCounts +"' where cPage = '"+ fileName +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Update' query to increase hit counts of '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' the hit counts of requested file now increase to '"+ tempHitCounts +"' " ) ;
file.newLine() ;
file.flush();
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to increase hit counts of '"+ fileName +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
}
//=================================================================================================================================================
@Override
public String getNextAd ( String category )
{
ResultSet resultset = null;
String firstCase = null;
try
{
resultset = statement.executeQuery(" select * from advertisements ");
while ( resultset.next() )
{
String result = resultset.getString( "cAdvertisement" );
String parts [] = result.split( "/" );
String adCategory = parts[0].trim();
if( adCategory.equals(category) && firstCase == null)
{
firstCase = result;
}
if( adCategory.equals(category) && resultset.getInt("cFlag") == 0)
{
statement.executeUpdate(" update advertisements set cFlag = '1' where cAdvertisement = '"+ result +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' getting the next advertisment in '"+ category +"' category " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' next advertisment in '"+ category +"' category is '"+ result +"' " ) ;
file.newLine() ;
file.flush();
return result;
}
}
statement.executeUpdate(" update advertisements set cFlag = '0' where cAdvertisement like '"+ category + "%" +"'");
statement.executeUpdate(" update advertisements set cFlag = '1' where cAdvertisement = '"+ firstCase +"' ");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' getting the next advertisment in '"+ category +"' category " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' next advertisment in '"+ category +"' category is '"+ firstCase +"' " ) ;
file.newLine() ;
file.flush();
return firstCase;
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in getting next advertisment of '"+ category +"' category " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
return null;
}
//=================================================================================================================================================
@Override
public String getAllExtensions ( String type )
{
ResultSet resultset = null;
String extensions = "";
try
{
resultset = statement.executeQuery(" select cFileExtension from mimetypes where cMimeType like '"+ type + "%" +"'");
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' send 'Select' query to get all extensions of '"+ type +"' " ) ;
file.newLine() ;
file.flush();
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' the asked file types extension is: '"+ type +"' " ) ;
file.newLine() ;
while ( resultset.next() )
{
file.write( "'"+ dateFormat.format(date) +"' one of extensions is: '"+ resultset.getString( "cFileExtension" ) +"' " ) ;
file.newLine() ;
file.flush();
extensions = extensions + " " + resultset.getString( "cFileExtension" ) ;
}
return extensions;
}
catch (Exception ex)
{
System.err.println( "Error: " + ex.toString() ) ;
try
{
date = new Date();
file.write( "'"+ dateFormat.format(date) +"' problem in sending query to get all extensions of '"+ type +"' " ) ;
file.newLine() ;
file.write( "'"+ dateFormat.format(date) +"' Error:'"+ ex.toString()+"' " ) ;
file.newLine() ;
file.flush();
}
catch ( Exception exception ){System.err.println( "Error: " + exception.toString() ) ;}
}
return null;
}
//=================================================================================================================================================
public static void main ( String args[] ) throws Exception
{
String name = "ServerUtilitiesImplementation" ;
ServerUtilitiesImplementation obj = new ServerUtilitiesImplementation();
ServerUtilitiesInterface stub = (ServerUtilitiesInterface) UnicastRemoteObject.exportObject( obj , 0 );
LocateRegistry.getRegistry().rebind( name , stub ) ;
System.out.println( "RMI server ready" ) ;
}
//=================================================================================================================================================
}
//***************************************************************************************************************************************************