Formatted Intercepting Filter source code.
This commit is contained in:
@ -1,14 +1,16 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter
|
||||||
* This filter is responsible for checking/filtering the input in the address field, returns null if field is empty
|
* This filter is responsible for checking/filtering the input in the address field, returns null if field is empty
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class AddressFilter implements Filter{
|
public class AddressFilter implements Filter {
|
||||||
public String execute(String[] request){
|
public String execute(String[] request) {
|
||||||
if(request[2].equals("")){
|
if (request[2].equals("")) {
|
||||||
return null;
|
return null;
|
||||||
}else return request[2];
|
} else
|
||||||
|
return request[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,5 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.table.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* This is an app that checks whether the order request is valid through pre-processing done via Filters
|
* This is an app that checks whether the order request is valid through pre-processing done via Filters
|
||||||
@ -12,7 +8,7 @@ import java.awt.event.*;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class App{
|
public class App{
|
||||||
public static void main(String[] args){
|
public static void main(String[] args) {
|
||||||
FilterManager filterManager = new FilterManager(new Target());
|
FilterManager filterManager = new FilterManager(new Target());
|
||||||
filterManager.setFilter(new NameFilter());
|
filterManager.setFilter(new NameFilter());
|
||||||
filterManager.setFilter(new ContactFilter());
|
filterManager.setFilter(new ContactFilter());
|
||||||
@ -24,12 +20,3 @@ public class App{
|
|||||||
client.setFilterManager(filterManager);
|
client.setFilterManager(filterManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,18 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
import java.awt.BorderLayout;
|
||||||
import javax.swing.table.*;
|
import java.awt.GridLayout;
|
||||||
import java.awt.*;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.*;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JRootPane;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Client class is responsible for handling the input and running them through filters inside the filterManager
|
* The Client class is responsible for handling the input and running them through filters inside the filterManager
|
||||||
@ -13,36 +22,41 @@ import java.awt.event.*;
|
|||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Client extends JFrame{
|
public class Client extends JFrame {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private FilterManager filterManager;
|
private FilterManager filterManager;
|
||||||
private JLabel jl;
|
private JLabel jl;
|
||||||
private JTextField[] jtFields;
|
private JTextField[] jtFields;
|
||||||
private JTextArea[] jtAreas;
|
private JTextArea[] jtAreas;
|
||||||
private JButton clearButton, processButton;
|
private JButton clearButton, processButton;
|
||||||
public Client(){
|
|
||||||
|
public Client() {
|
||||||
super("Client System");
|
super("Client System");
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
setSize(300,300);
|
setSize(300, 300);
|
||||||
jl = new JLabel("RUNNING...");
|
jl = new JLabel("RUNNING...");
|
||||||
jtFields = new JTextField[3];
|
jtFields = new JTextField[3];
|
||||||
for(int i = 0; i < 3; i++){
|
for (int i = 0; i < 3; i++) {
|
||||||
jtFields[i] = new JTextField();
|
jtFields[i] = new JTextField();
|
||||||
}
|
}
|
||||||
jtAreas = new JTextArea[2];
|
jtAreas = new JTextArea[2];
|
||||||
for(int i = 0; i < 2; i++){
|
for (int i = 0; i < 2; i++) {
|
||||||
jtAreas[i] = new JTextArea();
|
jtAreas[i] = new JTextArea();
|
||||||
}
|
}
|
||||||
clearButton = new JButton("Clear");
|
clearButton = new JButton("Clear");
|
||||||
processButton = new JButton("Process");
|
processButton = new JButton("Process");
|
||||||
|
|
||||||
setup();
|
setup();
|
||||||
}
|
}
|
||||||
private void setup(){
|
|
||||||
|
private void setup() {
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
add(jl,BorderLayout.SOUTH);
|
add(jl, BorderLayout.SOUTH);
|
||||||
add(panel, BorderLayout.CENTER);
|
add(panel, BorderLayout.CENTER);
|
||||||
panel.setLayout(new GridLayout(6,2));
|
panel.setLayout(new GridLayout(6, 2));
|
||||||
panel.add(new JLabel("Name"));
|
panel.add(new JLabel("Name"));
|
||||||
panel.add(jtFields[0]);
|
panel.add(jtFields[0]);
|
||||||
panel.add(new JLabel("Contact Number"));
|
panel.add(new JLabel("Contact Number"));
|
||||||
@ -56,22 +70,25 @@ public class Client extends JFrame{
|
|||||||
panel.add(clearButton);
|
panel.add(clearButton);
|
||||||
panel.add(processButton);
|
panel.add(processButton);
|
||||||
|
|
||||||
clearButton.addActionListener(new ActionListener(){
|
clearButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e) {
|
||||||
for(JTextArea i : jtAreas){
|
for (JTextArea i : jtAreas) {
|
||||||
i.setText("");
|
i.setText("");
|
||||||
}
|
}
|
||||||
for(JTextField i : jtFields){
|
for (JTextField i : jtFields) {
|
||||||
i.setText("");
|
i.setText("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
processButton.addActionListener(new ActionListener(){
|
processButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e) {
|
||||||
String request = String.format("%s&%s&%s&%s&%s",jtFields[0].getText(),jtFields[1].getText(),jtAreas[0].getText(),jtFields[2].getText(),jtAreas[1].getText());
|
String request = String.format("%s&%s&%s&%s&%s",
|
||||||
|
jtFields[0].getText(), jtFields[1].getText(),
|
||||||
|
jtAreas[0].getText(), jtFields[2].getText(),
|
||||||
|
jtAreas[1].getText());
|
||||||
|
|
||||||
jl.setText(sendRequest(request));
|
jl.setText(sendRequest(request));
|
||||||
}
|
}
|
||||||
@ -81,10 +98,12 @@ public class Client extends JFrame{
|
|||||||
rootPane.setDefaultButton(processButton);
|
rootPane.setDefaultButton(processButton);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
public void setFilterManager(FilterManager filterManager){
|
|
||||||
|
public void setFilterManager(FilterManager filterManager) {
|
||||||
this.filterManager = filterManager;
|
this.filterManager = filterManager;
|
||||||
}
|
}
|
||||||
public String sendRequest(String request){
|
|
||||||
|
public String sendRequest(String request) {
|
||||||
return filterManager.filterRequest(request);
|
return filterManager.filterRequest(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter
|
||||||
* This filter checks for the contact field in which it checks if the input consist of numbers and it also checks if the input follows the length constraint (11 digits)
|
* This filter checks for the contact field in which it checks if the input consist of numbers and it also checks if the input follows the length constraint (11 digits)
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class ContactFilter implements Filter{
|
public class ContactFilter implements Filter {
|
||||||
public String execute(String[] request){
|
public String execute(String[] request) {
|
||||||
if(request[1].equals("") || request[1].matches(".*[^\\d]+.*") || request[1].length() != 11){
|
if (request[1].equals("") || request[1].matches(".*[^\\d]+.*")
|
||||||
|
|| request[1].length() != 11) {
|
||||||
return null;
|
return null;
|
||||||
}else return request[1];
|
} else
|
||||||
|
return request[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter
|
||||||
*
|
*
|
||||||
@ -6,10 +7,11 @@ package com.iluwatar;
|
|||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DepositFilter implements Filter{
|
public class DepositFilter implements Filter {
|
||||||
public String execute(String[] request){
|
public String execute(String[] request) {
|
||||||
if(request[3].equals("")){
|
if (request[3].equals("")) {
|
||||||
return null;
|
return null;
|
||||||
}else return request[3];
|
} else
|
||||||
|
return request[3];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter interface
|
* Filter interface
|
||||||
* Filters perform certain tasks prior or after execution of request by request handler.
|
* Filters perform certain tasks prior or after execution of request by request handler.
|
||||||
@ -6,6 +7,6 @@ package com.iluwatar;
|
|||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface Filter{
|
public interface Filter {
|
||||||
public String execute(String[] request);
|
public String execute(String[] request);
|
||||||
}
|
}
|
||||||
|
@ -1,46 +1,49 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter Chain carries multiple filters and help to execute them in defined order on target.
|
* Filter Chain carries multiple filters and help to execute them in defined order on target.
|
||||||
*
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*/
|
*/
|
||||||
public class FilterChain{
|
public class FilterChain {
|
||||||
private ArrayList<Filter> filters = new ArrayList<Filter>();
|
private ArrayList<Filter> filters = new ArrayList<Filter>();
|
||||||
private final Target target;
|
private final Target target;
|
||||||
|
|
||||||
public FilterChain(Target target){
|
public FilterChain(Target target) {
|
||||||
this.target = target;
|
this.target = target;
|
||||||
}
|
}
|
||||||
public void addFilter(Filter filter){
|
|
||||||
|
public void addFilter(Filter filter) {
|
||||||
filters.add(filter);
|
filters.add(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String execute(String request){
|
public String execute(String request) {
|
||||||
String tempout[] = new String[filters.size()];
|
String tempout[] = new String[filters.size()];
|
||||||
|
|
||||||
String tempin[] = request.split("&");
|
String tempin[] = request.split("&");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
try{
|
try {
|
||||||
for(Filter filter:filters){
|
for (Filter filter : filters) {
|
||||||
tempout[i] = null;
|
tempout[i] = null;
|
||||||
tempout[i++] = filter.execute(tempin);
|
tempout[i++] = filter.execute(tempin);
|
||||||
}
|
}
|
||||||
}catch(Exception e){
|
} catch (Exception e) {
|
||||||
return "NOT ENOUGHT INPUT";
|
return "NOT ENOUGHT INPUT";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tempout[4] == null){
|
if (tempout[4] == null) {
|
||||||
return "INVALID ORDER!";
|
return "INVALID ORDER!";
|
||||||
}else if(tempout[3] == null){
|
} else if (tempout[3] == null) {
|
||||||
return "INVALID DEPOSIT NUMBER!";
|
return "INVALID DEPOSIT NUMBER!";
|
||||||
}else if(tempout[2] == null){
|
} else if (tempout[2] == null) {
|
||||||
return "INVALID ADRDESS!";
|
return "INVALID ADRDESS!";
|
||||||
}else if(tempout[1] == null){
|
} else if (tempout[1] == null) {
|
||||||
return "INVALID Contact Number!";
|
return "INVALID Contact Number!";
|
||||||
}else if(tempout[0] == null){
|
} else if (tempout[0] == null) {
|
||||||
return "INVALID Name!";
|
return "INVALID Name!";
|
||||||
}else{
|
} else {
|
||||||
target.execute(tempout);
|
target.execute(tempout);
|
||||||
return "RUNNING...";
|
return "RUNNING...";
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,23 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.table.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
/**
|
/**
|
||||||
* Filter Manager manages the filters and Filter Chain.
|
* Filter Manager manages the filters and Filter Chain.
|
||||||
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class FilterManager{
|
public class FilterManager {
|
||||||
private FilterChain filterChain;
|
private FilterChain filterChain;
|
||||||
|
|
||||||
public FilterManager(Target target){
|
public FilterManager(Target target) {
|
||||||
filterChain = new FilterChain(target);
|
filterChain = new FilterChain(target);
|
||||||
}
|
}
|
||||||
public void setFilter(Filter filter){
|
|
||||||
|
public void setFilter(Filter filter) {
|
||||||
filterChain.addFilter(filter);
|
filterChain.addFilter(filter);
|
||||||
}
|
}
|
||||||
public String filterRequest(String request){
|
|
||||||
|
public String filterRequest(String request) {
|
||||||
return filterChain.execute(request);
|
return filterChain.execute(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter This filter checks if the input in the Name
|
||||||
* This filter checks if the input in the Name field is valid. (alphanumeric)
|
* field is valid. (alphanumeric)
|
||||||
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class NameFilter implements Filter{
|
public class NameFilter implements Filter {
|
||||||
public String execute(String[] request){
|
public String execute(String[] request) {
|
||||||
if(request[0].equals("") || request[0].matches(".*[^\\w|\\s]+.*")){
|
if (request[0].equals("") || request[0].matches(".*[^\\w|\\s]+.*")) {
|
||||||
return null;
|
return null;
|
||||||
}else return request[0];
|
} else
|
||||||
|
return request[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,15 +1,17 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter This checks for the order field, returns
|
||||||
* This checks for the order field, returns null when order field is empty
|
* null when order field is empty
|
||||||
*
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class OrderFilter implements Filter{
|
public class OrderFilter implements Filter {
|
||||||
public String execute(String[] request){
|
public String execute(String[] request) {
|
||||||
if(request[4].equals("")){
|
if (request[4].equals("")) {
|
||||||
return null;
|
return null;
|
||||||
}else return request[4];
|
} else
|
||||||
|
return request[4];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,30 +1,46 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
import java.awt.BorderLayout;
|
||||||
import javax.swing.table.*;
|
import java.awt.Dimension;
|
||||||
import java.awt.*;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.*;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JRootPane;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JTable;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
import javax.swing.table.DefaultTableModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is where the requests are displayed after being validated by filters.
|
* This is where the requests are displayed after being validated by filters.
|
||||||
*
|
*
|
||||||
* @author mjoshzambales
|
* @author mjoshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Target extends JFrame{
|
public class Target extends JFrame {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private JTable jt;
|
private JTable jt;
|
||||||
private JScrollPane jsp;
|
private JScrollPane jsp;
|
||||||
private DefaultTableModel dtm;
|
private DefaultTableModel dtm;
|
||||||
private JButton del;
|
private JButton del;
|
||||||
public Target(){
|
|
||||||
|
public Target() {
|
||||||
super("Order System");
|
super("Order System");
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
setSize(640,480);
|
setSize(640, 480);
|
||||||
dtm = new DefaultTableModel(new Object[]{"Name", "Contact Number", "Address", "Deposit Number", "Order"},0);
|
dtm = new DefaultTableModel(new Object[] { "Name", "Contact Number",
|
||||||
|
"Address", "Deposit Number", "Order" }, 0);
|
||||||
jt = new JTable(dtm);
|
jt = new JTable(dtm);
|
||||||
del = new JButton("Delete");
|
del = new JButton("Delete");
|
||||||
setup();
|
setup();
|
||||||
}
|
}
|
||||||
private void setup(){
|
|
||||||
|
private void setup() {
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
JPanel bot = new JPanel();
|
JPanel bot = new JPanel();
|
||||||
add(jt.getTableHeader(), BorderLayout.NORTH);
|
add(jt.getTableHeader(), BorderLayout.NORTH);
|
||||||
@ -32,7 +48,7 @@ public class Target extends JFrame{
|
|||||||
bot.add(del, BorderLayout.EAST);
|
bot.add(del, BorderLayout.EAST);
|
||||||
add(bot, BorderLayout.SOUTH);
|
add(bot, BorderLayout.SOUTH);
|
||||||
jsp = new JScrollPane(jt);
|
jsp = new JScrollPane(jt);
|
||||||
jsp.setPreferredSize(new Dimension(500,250));
|
jsp.setPreferredSize(new Dimension(500, 250));
|
||||||
add(jsp, BorderLayout.CENTER);
|
add(jsp, BorderLayout.CENTER);
|
||||||
|
|
||||||
del.addActionListener(new DListener());
|
del.addActionListener(new DListener());
|
||||||
@ -41,17 +57,20 @@ public class Target extends JFrame{
|
|||||||
rootPane.setDefaultButton(del);
|
rootPane.setDefaultButton(del);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
public void execute(String[] request){
|
|
||||||
dtm.addRow(new Object[]{request[0],request[1],request[2],request[3],request[4]});
|
public void execute(String[] request) {
|
||||||
|
dtm.addRow(new Object[] { request[0], request[1], request[2],
|
||||||
|
request[3], request[4] });
|
||||||
}
|
}
|
||||||
|
|
||||||
class DListener implements ActionListener{
|
class DListener implements ActionListener {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e) {
|
||||||
int temp = jt.getSelectedRow();
|
int temp = jt.getSelectedRow();
|
||||||
if(temp == -1) return;
|
if (temp == -1)
|
||||||
|
return;
|
||||||
int temp2 = jt.getSelectedRowCount();
|
int temp2 = jt.getSelectedRowCount();
|
||||||
for(int i = 0; i < temp2; i++){
|
for (int i = 0; i < temp2; i++) {
|
||||||
dtm.removeRow(temp);
|
dtm.removeRow(temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user