Fixes "Intercepting Filter example needs some improvement" #43
This commit is contained in:
parent
717cb53f2b
commit
e03bd818ec
@ -0,0 +1,46 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for order processing filters.
|
||||||
|
* Handles chain management.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractFilter implements Filter {
|
||||||
|
|
||||||
|
private Filter next;
|
||||||
|
|
||||||
|
public AbstractFilter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractFilter(Filter next) {
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNext(Filter filter) {
|
||||||
|
this.next = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Filter getNext() {
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Filter getLast() {
|
||||||
|
Filter last = this;
|
||||||
|
while (last.getNext() != null) {
|
||||||
|
last = last.getNext();
|
||||||
|
}
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(Order order) {
|
||||||
|
if (getNext() != null) {
|
||||||
|
return getNext().execute(order);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,15 +2,18 @@ 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.
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class AddressFilter implements Filter {
|
public class AddressFilter extends AbstractFilter {
|
||||||
public String execute(String[] request) {
|
|
||||||
if (request[2].equals("")) {
|
@Override
|
||||||
return null;
|
public String execute(Order order) {
|
||||||
|
String result = super.execute(order);
|
||||||
|
if (order.getAddress() == null || order.getAddress().isEmpty()) {
|
||||||
|
return result + "Invalid address! ";
|
||||||
} else
|
} else
|
||||||
return request[2];
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,13 +8,14 @@ package com.iluwatar;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
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.addFilter(new NameFilter());
|
||||||
filterManager.setFilter(new ContactFilter());
|
filterManager.addFilter(new ContactFilter());
|
||||||
filterManager.setFilter(new AddressFilter());
|
filterManager.addFilter(new AddressFilter());
|
||||||
filterManager.setFilter(new DepositFilter());
|
filterManager.addFilter(new DepositFilter());
|
||||||
filterManager.setFilter(new OrderFilter());
|
filterManager.addFilter(new OrderFilter());
|
||||||
|
|
||||||
Client client = new Client();
|
Client client = new Client();
|
||||||
client.setFilterManager(filterManager);
|
client.setFilterManager(filterManager);
|
||||||
|
@ -85,12 +85,10 @@ public class Client extends JFrame {
|
|||||||
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",
|
Order order = new Order(jtFields[0].getText(), jtFields[1]
|
||||||
jtFields[0].getText(), jtFields[1].getText(),
|
.getText(), jtAreas[0].getText(),
|
||||||
jtAreas[0].getText(), jtFields[2].getText(),
|
jtFields[2].getText(), jtAreas[1].getText());
|
||||||
jtAreas[1].getText());
|
jl.setText(sendRequest(order));
|
||||||
|
|
||||||
jl.setText(sendRequest(request));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -103,7 +101,7 @@ public class Client extends JFrame {
|
|||||||
this.filterManager = filterManager;
|
this.filterManager = filterManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String sendRequest(String request) {
|
public String sendRequest(Order order) {
|
||||||
return filterManager.filterRequest(request);
|
return filterManager.filterRequest(order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,23 @@ 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 extends AbstractFilter {
|
||||||
public String execute(String[] request) {
|
|
||||||
if (request[1].equals("") || request[1].matches(".*[^\\d]+.*")
|
@Override
|
||||||
|| request[1].length() != 11) {
|
public String execute(Order order) {
|
||||||
return null;
|
String result = super.execute(order);
|
||||||
} else
|
if (order.getContactNumber() == null
|
||||||
return request[1];
|
|| order.getContactNumber().isEmpty()
|
||||||
|
|| order.getContactNumber().matches(".*[^\\d]+.*")
|
||||||
|
|| order.getContactNumber().length() != 11) {
|
||||||
|
return result + "Invalid contact number! ";
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,19 @@ package com.iluwatar;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter
|
* Concrete implementation of filter
|
||||||
*
|
* This checks for the deposit code
|
||||||
* This checks for the deposit code, returns null when deposit field is empty
|
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DepositFilter implements Filter {
|
public class DepositFilter extends AbstractFilter {
|
||||||
public String execute(String[] request) {
|
|
||||||
if (request[3].equals("")) {
|
@Override
|
||||||
return null;
|
public String execute(Order order) {
|
||||||
} else
|
String result = super.execute(order);
|
||||||
return request[3];
|
if (order.getDepositNumber() == null || order.getDepositNumber().isEmpty()) {
|
||||||
|
return result + "Invalid deposit number! ";
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,37 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter interface
|
* Filter interface Filters perform certain tasks prior or after execution of
|
||||||
* Filters perform certain tasks prior or after execution of request by request handler.
|
* request by request handler. In this case, before the request is handled by
|
||||||
* In this case, before the request is handled by the target, the request undergoes through each Filter
|
* the target, the request undergoes through each Filter
|
||||||
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface Filter {
|
public interface Filter {
|
||||||
public String execute(String[] request);
|
|
||||||
|
/**
|
||||||
|
* Execute order processing filter.
|
||||||
|
* @param order
|
||||||
|
* @return empty string on success, otherwise error message.
|
||||||
|
*/
|
||||||
|
String execute(Order order);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set next filter in chain after this.
|
||||||
|
* @param filter
|
||||||
|
*/
|
||||||
|
void setNext(Filter filter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get next filter in chain after this.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Filter getNext();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get last filter in the chain.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Filter getLast();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
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.
|
||||||
@ -8,7 +7,9 @@
|
|||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*/
|
*/
|
||||||
public class FilterChain {
|
public class FilterChain {
|
||||||
private ArrayList<Filter> filters = new ArrayList<Filter>();
|
|
||||||
|
private Filter chain;
|
||||||
|
|
||||||
private final Target target;
|
private final Target target;
|
||||||
|
|
||||||
public FilterChain(Target target) {
|
public FilterChain(Target target) {
|
||||||
@ -16,37 +17,47 @@ public class FilterChain {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addFilter(Filter filter) {
|
public void addFilter(Filter filter) {
|
||||||
filters.add(filter);
|
if (chain == null) {
|
||||||
}
|
chain = filter;
|
||||||
|
} else {
|
||||||
public String execute(String request) {
|
chain.getLast().setNext(filter);
|
||||||
String tempout[] = new String[filters.size()];
|
}
|
||||||
|
}
|
||||||
String tempin[] = request.split("&");
|
|
||||||
int i = 0;
|
public String execute(Order order) {
|
||||||
try {
|
|
||||||
for (Filter filter : filters) {
|
if (chain != null) {
|
||||||
tempout[i] = null;
|
return chain.execute(order);
|
||||||
tempout[i++] = filter.execute(tempin);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
return "NOT ENOUGHT INPUT";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tempout[4] == null) {
|
|
||||||
return "INVALID ORDER!";
|
|
||||||
} else if (tempout[3] == null) {
|
|
||||||
return "INVALID DEPOSIT NUMBER!";
|
|
||||||
} else if (tempout[2] == null) {
|
|
||||||
return "INVALID ADRDESS!";
|
|
||||||
} else if (tempout[1] == null) {
|
|
||||||
return "INVALID Contact Number!";
|
|
||||||
} else if (tempout[0] == null) {
|
|
||||||
return "INVALID Name!";
|
|
||||||
} else {
|
} else {
|
||||||
target.execute(tempout);
|
|
||||||
return "RUNNING...";
|
return "RUNNING...";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// String tempout[] = new String[filters.size()];
|
||||||
|
//
|
||||||
|
// String tempin[] = request.split("&");
|
||||||
|
// int i = 0;
|
||||||
|
// try {
|
||||||
|
// for (Filter filter : filters) {
|
||||||
|
// tempout[i] = null;
|
||||||
|
// tempout[i++] = filter.execute(tempin);
|
||||||
|
// }
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// return "NOT ENOUGHT INPUT";
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (tempout[4] == null) {
|
||||||
|
// return "INVALID ORDER!";
|
||||||
|
// } else if (tempout[3] == null) {
|
||||||
|
// return "INVALID DEPOSIT NUMBER!";
|
||||||
|
// } else if (tempout[2] == null) {
|
||||||
|
// return "INVALID ADRDESS!";
|
||||||
|
// } else if (tempout[1] == null) {
|
||||||
|
// return "INVALID Contact Number!";
|
||||||
|
// } else if (tempout[0] == null) {
|
||||||
|
// return "INVALID Name!";
|
||||||
|
// } else {
|
||||||
|
// target.execute(tempout);
|
||||||
|
// return "RUNNING...";
|
||||||
|
// }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,17 +7,18 @@ package com.iluwatar;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
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 addFilter(Filter filter) {
|
||||||
filterChain.addFilter(filter);
|
filterChain.addFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String filterRequest(String request) {
|
public String filterRequest(Order order) {
|
||||||
return filterChain.execute(request);
|
return filterChain.execute(order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,15 @@ package com.iluwatar;
|
|||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class NameFilter implements Filter {
|
public class NameFilter extends AbstractFilter {
|
||||||
public String execute(String[] request) {
|
|
||||||
if (request[0].equals("") || request[0].matches(".*[^\\w|\\s]+.*")) {
|
@Override
|
||||||
return null;
|
public String execute(Order order) {
|
||||||
} else
|
String result = super.execute(order);
|
||||||
return request[0];
|
if (order.getName() == null || order.getName().isEmpty() || order.getName().matches(".*[^\\w|\\s]+.*")) {
|
||||||
|
return result + "Invalid order! ";
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
65
intercepting-filter/src/main/java/com/iluwatar/Order.java
Normal file
65
intercepting-filter/src/main/java/com/iluwatar/Order.java
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order class carries the order data.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Order {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String contactNumber;
|
||||||
|
private String address;
|
||||||
|
private String depositNumber;
|
||||||
|
private String order;
|
||||||
|
|
||||||
|
public Order() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order(String name, String contactNumber, String address, String depositNumber, String order) {
|
||||||
|
this.name = name;
|
||||||
|
this.contactNumber = contactNumber;
|
||||||
|
this.address = address;
|
||||||
|
this.depositNumber = depositNumber;
|
||||||
|
this.order = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContactNumber() {
|
||||||
|
return contactNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContactNumber(String contactNumber) {
|
||||||
|
this.contactNumber = contactNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepositNumber() {
|
||||||
|
return depositNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepositNumber(String depositNumber) {
|
||||||
|
this.depositNumber = depositNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrder() {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(String order) {
|
||||||
|
this.order = order;
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,20 @@
|
|||||||
package com.iluwatar;
|
package com.iluwatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concrete implementation of filter This checks for the order field, returns
|
* Concrete implementation of filter This checks for the order field
|
||||||
* null when order field is empty
|
|
||||||
*
|
*
|
||||||
* @author joshzambales
|
* @author joshzambales
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class OrderFilter implements Filter {
|
public class OrderFilter extends AbstractFilter {
|
||||||
public String execute(String[] request) {
|
|
||||||
if (request[4].equals("")) {
|
@Override
|
||||||
return null;
|
public String execute(Order order) {
|
||||||
} else
|
String result = super.execute(order);
|
||||||
return request[4];
|
if (order.getOrder() == null || order.getOrder().isEmpty()) {
|
||||||
|
return result + "Invalid order! ";
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user