Formatted Intercepting Filter source code.

This commit is contained in:
Ilkka Seppala
2015-04-04 21:22:13 +03:00
parent d0feb3c8d5
commit a381a43f2e
11 changed files with 158 additions and 118 deletions

View File

@ -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];
} }
} }

View File

@ -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);
} }
} }

View File

@ -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);
} }
} }

View File

@ -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];
} }
} }

View File

@ -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];
} }
} }

View File

@ -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);
} }

View File

@ -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...";
} }

View File

@ -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);
} }
} }

View File

@ -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];
} }
} }

View File

@ -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];
} }
} }

View File

@ -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);
} }
} }