Skip to content

Commit 29830b4

Browse files
Added handler and Main.java
1 parent 373c621 commit 29830b4

File tree

9 files changed

+389
-0
lines changed

9 files changed

+389
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/target/
2+
*.class
3+
.settings
4+
.project
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.cmpe202.individualproject.handlers;
2+
3+
import com.cmpe202.individualproject.main.CreditCardEntry;
4+
5+
public class Amex implements CreditCardHandler {
6+
CreditCardHandler nextHandler;
7+
8+
/**
9+
* Default constructor for the Amex class.
10+
* It sets the next handler in the chain to Discover.
11+
*/
12+
public Amex() {
13+
nextHandler = new Discover();
14+
}
15+
16+
/**
17+
* Checks the credit card type for an American Express card.
18+
* If the card number matches the pattern, it returns "AmericanExpress".
19+
* Otherwise, it delegates the request to the next handler in the chain.
20+
*
21+
* @param creditCardEntry The credit card entry to check.
22+
* @return The credit card type, or delegates to the next handler.
23+
*/
24+
@Override
25+
public String checkCreditCardType(CreditCardEntry creditCardEntry) {
26+
String number = creditCardEntry.getCardNumber();
27+
String result = "";
28+
String fDigit = number.substring(0, 1);
29+
int sDigit = Integer.parseInt(number.substring(1, 2));
30+
31+
System.out.println(number + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Amex");
32+
33+
if (fDigit.equals("3") && number.length() == 15 && (sDigit == 4 || sDigit == 7)) {
34+
result = "AmericanExpress";
35+
} else {
36+
return nextHandler.checkCreditCardType(creditCardEntry);
37+
}
38+
39+
return result;
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.cmpe202.individualproject.handlers;
2+
3+
import com.cmpe202.individualproject.main.CreditCardEntry;
4+
5+
/**
6+
* The CreditCardHandler interface defines the contract for classes that handle credit card type identification.
7+
*/
8+
public interface CreditCardHandler {
9+
/**
10+
* Checks the credit card type for the given CreditCardEntry.
11+
*
12+
* @param creditCardEntry The credit card entry to check.
13+
* @return The credit card type as a string.
14+
*/
15+
String checkCreditCardType(CreditCardEntry creditCardEntry);
16+
}
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.cmpe202.individualproject.handlers;
2+
3+
import com.cmpe202.individualproject.main.CreditCardEntry;
4+
5+
public class Discover implements CreditCardHandler {
6+
CreditCardHandler nextHandler;
7+
8+
public Discover() {
9+
}
10+
11+
@Override
12+
public String checkCreditCardType(CreditCardEntry creditCardEntry) {
13+
// Get the credit card number from the CreditCardEntry
14+
String a = creditCardEntry.getCardNumber();
15+
String number = a.toString();
16+
String result = "";
17+
// Extract the first four digits from the credit card number
18+
String fourDigit = number.substring(0, 4);
19+
int sDigit = Integer.parseInt(number.substring(1, 2));
20+
System.out.println(a + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Discover");
21+
22+
// Check various conditions to determine the credit card type
23+
if (a.length() > 16) {
24+
result = "Invalid: more than 19 digits";
25+
} else if (!a.matches("[0-9]+")) {
26+
result = "Invalid: non numeric characters";
27+
} else if (a.equals("") || a.length() == 0) {
28+
result = "Invalid: empty/null card number";
29+
} else if (fourDigit.equals("6011") && number.length() == 16) {
30+
result = "Discover";
31+
} else {
32+
result = "Invalid: Not a possible card number";
33+
}
34+
return result;
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.cmpe202.individualproject.handlers;
2+
3+
import com.cmpe202.individualproject.main.CreditCardEntry;
4+
5+
public class MasterCard implements CreditCardHandler {
6+
CreditCardHandler nextHandler;
7+
8+
public MasterCard() {
9+
nextHandler = new Visa();
10+
}
11+
12+
@Override
13+
public String checkCreditCardType(CreditCardEntry creditCardEntry) {
14+
// Get the credit card number from the CreditCardEntry
15+
String a = creditCardEntry.getCardNumber();
16+
String number = a.toString();
17+
String result = "";
18+
System.out.println(a + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MC" + number + " " + a.length());
19+
20+
// Check various conditions to determine the credit card type
21+
if (a.equalsIgnoreCase("null")) {
22+
return "Invalid: No Card Number";
23+
} else if (a.length() > 19) {
24+
return "Invalid: more than 19 digits";
25+
} else if (a.length() == 0) {
26+
return "Invalid: empty/null card number";
27+
} else if (!a.matches("[0-9]+")) {
28+
return "Invalid: non-numeric characters";
29+
} else if (number.length() <= 19 && number.length() > 0) {
30+
String fDigit = number.substring(0, 1);
31+
int sDigit = Integer.parseInt(number.substring(1, 2));
32+
// Check if the credit card number starts with '5', the second digit is between 1 and 5,
33+
// and the length is 16 to determine it as a MasterCard
34+
if (fDigit.equals("5") && sDigit >= 1 && sDigit <= 5 && number.length() == 16) {
35+
result = "MasterCard";
36+
} else {
37+
// If the conditions are not met, delegate to the next credit card handler
38+
return nextHandler.checkCreditCardType(creditCardEntry);
39+
}
40+
} else {
41+
System.out.println("Invalid card type!");
42+
}
43+
return result;
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.cmpe202.individualproject.handlers;
2+
3+
import com.cmpe202.individualproject.main.CreditCardEntry;
4+
5+
public class Visa implements CreditCardHandler {
6+
CreditCardHandler nextHandler;
7+
8+
public Visa() {
9+
nextHandler = new Amex();
10+
}
11+
12+
@Override
13+
public String checkCreditCardType(CreditCardEntry creditCardEntry) {
14+
// Get the credit card number from the CreditCardEntry
15+
String a = creditCardEntry.getCardNumber();
16+
String number = a.toString();
17+
String result = "";
18+
String fDigit = number.substring(0, 1);
19+
20+
System.out.println(a + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Visa");
21+
22+
// Check various conditions to determine the credit card type
23+
if (a.length() > 19) {
24+
return "Invalid: more than 19 digits";
25+
} else if (a.length() == 0) {
26+
return "Invalid: empty/null card number";
27+
} else if (fDigit.equals("4") && (number.length() == 13 || number.length() == 16)) {
28+
// Check if the credit card number starts with '4' and has a length of either 13 or 16
29+
// to determine it as a Visa card
30+
result = "Visa";
31+
} else {
32+
// If the conditions are not met, delegate to the next credit card handler
33+
return nextHandler.checkCreditCardType(creditCardEntry);
34+
}
35+
return result;
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.cmpe202.individualproject.main;
2+
3+
import com.cmpe202.individualproject.handlers.CreditCardHandler;
4+
import com.cmpe202.individualproject.handlers.MasterCard;
5+
import com.cmpe202.individualproject.reader.CSVReader;
6+
import com.cmpe202.individualproject.reader.JSONReader;
7+
import com.cmpe202.individualproject.reader.Reader;
8+
import com.cmpe202.individualproject.reader.XMLReader;
9+
import com.cmpe202.individualproject.writer.CSVWriter;
10+
import com.cmpe202.individualproject.writer.JSONWriter;
11+
import com.cmpe202.individualproject.writer.Writer;
12+
import com.cmpe202.individualproject.writer.XMLWriter;
13+
14+
import java.io.File;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import java.util.Scanner;
18+
19+
20+
public class App {
21+
public static String getFileType(String inputFile) {
22+
int lastDotIndex = inputFile.lastIndexOf('.'); // Find the index of the last dot in the file name
23+
if (lastDotIndex > 0 && lastDotIndex < inputFile.length() - 1) { // Ensure the dot is not the first or last character
24+
return inputFile.substring(lastDotIndex + 1); // Extract the file extension after the dot
25+
}
26+
return ""; // Return an empty string if no valid file extension is found
27+
}
28+
29+
public static void main(String[] args) {
30+
String outputFile, inputFile;
31+
String inputFileType = "";
32+
String outputFileType = "";
33+
Reader fileReader;
34+
Writer fileWriter = null;
35+
List<CreditCardEntry> creditCardEntries = new ArrayList<>();
36+
List<OutputEntry> finalEntries = new ArrayList<>();
37+
38+
Scanner scanner = new Scanner(System.in);
39+
40+
// Get input file path from the user
41+
System.out.print("Enter the input file path: ");
42+
inputFile = scanner.nextLine();
43+
44+
// Get output file path from the user
45+
System.out.print("Enter the output file path: ");
46+
outputFile = scanner.nextLine();
47+
48+
// Extract the input and output file extensions
49+
inputFileType = inputFile.substring(inputFile.indexOf("."));
50+
outputFileType = outputFile.substring(outputFile.indexOf("."));
51+
52+
if (!inputFileType.equals(outputFileType)) {
53+
System.out.println("Input and Output extensions are not the same");
54+
System.exit(0);
55+
} else {
56+
System.out.println("Input and output extensions " + inputFileType + " and " + outputFileType + " are the same");
57+
}
58+
59+
// Get the file type (extension) of the input file
60+
String fileType = getFileType(inputFile);
61+
System.out.println("File type: " + fileType);
62+
63+
// Initialize the appropriate reader and writer based on the file type
64+
switch (fileType.toLowerCase()) {
65+
case "csv":
66+
fileReader = new CSVReader(new File(inputFile));
67+
fileWriter = new CSVWriter();
68+
break;
69+
case "json":
70+
fileReader = new JSONReader(new File(inputFile));
71+
fileWriter = new JSONWriter();
72+
break;
73+
case "xml":
74+
System.out.println("Processing XML file");
75+
fileReader = new XMLReader(new File(inputFile));
76+
fileWriter = new XMLWriter();
77+
break;
78+
default:
79+
System.out.println("Unsupported file type: " + fileType);
80+
return;
81+
}
82+
83+
// Read the credit card entries from the input file
84+
creditCardEntries = fileReader.readFile(inputFile);
85+
86+
// Process each credit card entry and write the results to the output file
87+
for (CreditCardEntry eachCreditCardEntry : creditCardEntries) {
88+
CreditCardHandler ccHandler = new MasterCard();
89+
String creditCardType = ccHandler.checkCreditCardType(eachCreditCardEntry);
90+
String ccNumber = eachCreditCardEntry.getCardNumber();
91+
finalEntries.add(new OutputEntry(ccNumber, creditCardType));
92+
}
93+
fileWriter.writeToFile(finalEntries, outputFile);
94+
}
95+
96+
97+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.cmpe202.individualproject.main;
2+
3+
import java.util.Date;
4+
5+
public class CreditCardEntry {
6+
7+
private String cardNumber; // Card number
8+
private Date expirationDate; // Expiration date of the card
9+
private String nameOfCardholder; // Name of the cardholder
10+
11+
// Constructor with card number, expiration date, and cardholder name
12+
public CreditCardEntry(String cardNumber, Date expirationDate, String nameOfCardholder) {
13+
this.cardNumber = cardNumber;
14+
this.expirationDate = expirationDate;
15+
this.nameOfCardholder = nameOfCardholder;
16+
}
17+
18+
// Constructor with card number and cardholder name
19+
public CreditCardEntry(String cardNumber, String nameOfCardholder) {
20+
this.cardNumber = cardNumber;
21+
this.nameOfCardholder = nameOfCardholder;
22+
}
23+
24+
// Getter for card number
25+
public String getCardNumber() {
26+
return cardNumber;
27+
}
28+
29+
// Setter for card number
30+
public void setCardNumber(String cardNumber) {
31+
this.cardNumber = cardNumber;
32+
}
33+
34+
// Getter for expiration date
35+
public Date getExpirationDate() {
36+
return expirationDate;
37+
}
38+
39+
// Setter for expiration date
40+
public void setExpirationDate(Date expirationDate) {
41+
this.expirationDate = expirationDate;
42+
}
43+
44+
// Getter for cardholder name
45+
public String getNameOfCardholder() {
46+
return nameOfCardholder;
47+
}
48+
49+
// Setter for cardholder name
50+
public void setNameOfCardholder(String nameOfCardholder) {
51+
this.nameOfCardholder = nameOfCardholder;
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.cmpe202.individualproject.main;
2+
3+
public class OutputEntry {
4+
String cardNumber;
5+
String type;
6+
7+
/**
8+
* Default constructor for OutputEntry class.
9+
*/
10+
public OutputEntry() {
11+
}
12+
13+
/**
14+
* Constructor for creating an OutputEntry object with card number and type.
15+
*
16+
* @param cardNumber The card number.
17+
* @param type The type of the card.
18+
*/
19+
public OutputEntry(String cardNumber, String type) {
20+
this.cardNumber = cardNumber;
21+
this.type = type;
22+
}
23+
24+
/**
25+
* Retrieves the card number.
26+
*
27+
* @return The card number.
28+
*/
29+
public String getCardNumber() {
30+
return cardNumber;
31+
}
32+
33+
/**
34+
* Sets the card number.
35+
*
36+
* @param cardNumber The card number to set.
37+
*/
38+
public void setCardNumber(String cardNumber) {
39+
this.cardNumber = cardNumber;
40+
}
41+
42+
/**
43+
* Retrieves the card type.
44+
*
45+
* @return The card type.
46+
*/
47+
public String getType() {
48+
return type;
49+
}
50+
51+
/**
52+
* Sets the card type.
53+
*
54+
* @param type The card type to set.
55+
*/
56+
public void setType(String type) {
57+
this.type = type;
58+
}
59+
}

0 commit comments

Comments
 (0)