//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Filter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Filter interface Filters perform certain tasks prior or after execution of
* request by request handler.In this case,before the request is handled by
* the target,the request undergoes through each Filter
*
*/
public interface Filter {
/**
* Execute order processing filter.
* @param order
* @return empty string on success,otherwise error message.
*/
public String execute(Order order);
/**
* Set next filter in chain after this.
* @param filter
*/
public void setNext(Filter filter);
/**
* Get next filter in chain after this.
* @return
*/
public Filter getNext();
/**
* Get last filter in the chain.
* @return
*/
public Filter getLast();
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : AbstractFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* 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;
}
public Filter getNext(){
return next;
}
public void setNext(Filter next){
this.next = next;
}
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 "";
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : ContactFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Concrete implementation of filter
* This filter checks for the contact field in which it checks of the input consist of numbers
* and it also checks if the input follows the length constraint (11 digits)
*
*/
public class ContactFilter extends AbstractFilter {
public String execute(Order order) {
String result = super.execute(order);
if(order.getContactNumber() == null
|| order.getContactNumber().isEmpty()
|| order.getContactNumber().matches(".*[^\\d]+.*")
|| order.getContactNumber().length() != 11){
return result + "Invalid contact number! ";
} else {
return result;
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : DepositFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Concrete implementation of filter
* This checks for the deposit code
*
*/
public class DepositFilter extends AbstractFilter {
public String execute(Order order) {
String result = super.execute(order);
if(order.getDepositNumber() == null || order.getDepositNumber().isEmpty())
{
return result + "Invalid deposit number! ";
} else {
return result;
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : OrderFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Concrete implementation of filter This checks for the order field
*/
public class OrderFilter extends AbstractFilter {
public String execute(Order order) {
String result = super.execute(order);
if(order.getOrder() == null || order.getOrder().isEmpty())
{
return result + "Invalid order! ";
} else {
return result;
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : AddressFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Concrete implementation of filter
* This filter is responsible for checking/filtering the input in the address field.
*
*/
public class AddressFilter extends AbstractFilter {
public String execute(Order order) {
String result = super.execute(order);
if(order.getAddress() == null || order.getAddress().isEmpty())
{
return result + "Invalid address! ";
} else {
return null;
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : NameFilter.java
// @ Date : 2016/9/5
// @ Author :
//
//
/**
* Concrete implementation of filter This filter checks if the input in the Name
* field is valid.(alphanumeric)
*
*/
public class NameFilter extends AbstractFilter {
public String execute(Order order) {
String result = super.execute(order);
if(order.getName() == null || order.getName().isEmpty() || order.getName().matches(".*[^\\w|\\s]+.*"))
{
return result + "Invalid order!";
} else {
return result;
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Order.java
// @ Date : 2016/9/5
// @ Author :
//
//
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;
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : FilterChain.java
// @ Date : 2016/9/5
// @ Author :
//
//
public class FilterChain {
private Filter chain;
private final Target target;
public FilterChain(Target target) {
this.target = target;
}
public void addFilter(Filter filter) {
if(chain == null)
chain = filter;
else
chain.getLast().setNext(filter);
}
public String execute(Order order) {
if(chain != null){
return chain.execute(order);
} else
return "RUNNING...";
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : FilterManager.java
// @ Date : 2016/9/5
// @ Author :
//
//
public class FilterManager {
private FilterChain filterChain;
public FilterManager(Target target) {
filterChain = new FilterChain(target);
}
public void addFilter(Filter filter) {
filterChain.addFilter(filter);
}
public String filterRequest(Order order) {
return filterChain.execute(order);
}
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
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;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Client.java
// @ Date : 2016/9/5
// @ Author :
//
//
public class Client extends JFrame {
/**
*
*/
private static final long serialVersionUID = 5940738358347108291L;
private FilterManager filterManager;
private JLabel jl;
private JTextField[] jtFields;
private JTextArea[] jtAreas;
private JButton clearButton;
private JButton processButton;
public Client() {
super("Client System");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 300);
jl = new JLabel("RUNNING...");
jtFields = new JTextField[3];
for (int i = 0; i < 3; i++) {
jtFields[i] = new JTextField();
}
jtAreas = new JTextArea[2];
for (int i = 0; i < 2; i++) {
jtAreas[i] = new JTextArea();
}
clearButton = new JButton("Clear");
processButton = new JButton("Process");
setup();
}
private void setup() {
setLayout(new BorderLayout());
JPanel panel = new JPanel();
add(jl, BorderLayout.SOUTH);
add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(6, 2));
panel.add(new JLabel("Name"));
panel.add(jtFields[0]);
panel.add(new JLabel("Contact Number"));
panel.add(jtFields[1]);
panel.add(new JLabel("Address"));
panel.add(jtAreas[0]);
panel.add(new JLabel("Deposit Number"));
panel.add(jtFields[2]);
panel.add(new JLabel("Order"));
panel.add(jtAreas[1]);
panel.add(clearButton);
panel.add(processButton);
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (JTextArea i : jtAreas) {
i.setText("");
}
for (JTextField i : jtFields) {
i.setText("");
}
}
});
processButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Order order = new Order(jtFields[0].getText(), jtFields[1]
.getText(), jtAreas[0].getText(),
jtFields[2].getText(), jtAreas[1].getText());
jl.setText(sendRequest(order));
}
});
JRootPane rootPane = SwingUtilities.getRootPane(processButton);
rootPane.setDefaultButton(processButton);
setVisible(true);
}
public void setFilterManager(FilterManager filterManager) {
this.filterManager = filterManager;
}
public String sendRequest(Order order) {
return filterManager.filterRequest(order);
}
}
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
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;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Target.java
// @ Date : 2016/9/5
// @ Author :
//
//
public class Target extends JFrame {
private static final long serialVersionUID = 1404005204378123519L;
private JTable jt;
private JScrollPane jsp;
private DefaultTableModel dtm;
private JButton del;
public Target(){
super("Order System");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(640,480);
dtm = new DefaultTableModel(new Object[]{"Name", "Contact Number",
"Address", "Deposit Number", "Order"},0);
jt = new JTable(dtm);
del = new JButton("Delete");
setup();
}
private void setup() {
setLayout(new BorderLayout());
JPanel bot = new JPanel();
add(jt.getTableHeader(),BorderLayout.NORTH);
bot.setLayout(new BorderLayout());
bot.add(del,BorderLayout.EAST);
add(bot,BorderLayout.SOUTH);
jsp = new JScrollPane(jt);
jsp.setPreferredSize(new Dimension(500,250));;
add(jsp,BorderLayout.CENTER);
del.addActionListener(new DListener());
JRootPane rootPane = SwingUtilities.getRootPane(del);
rootPane.setDefaultButton(del);
setVisible(true);
}
public void execute(String[] request) {
dtm.addRow(new Object[]{
request[0],request[1],request[2],request[3],request[4]
});
}
private class DListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
int temp = jt.getSelectedRow();
if(temp == -1)
return ;
int temp2 = jt.getSelectedRowCount();
for(int i = 0;i < temp2; i++)
{
dtm.removeRow(temp);
}
}
}
}
/**
* This is an app that checks whether the order request is valid through pre-processing done via Filters
* Each field has its own corresponding Filter
*
*/
public class App {
public static void main(String[] args) {
FilterManager filterManager = new FilterManager(new Target());
filterManager.addFilter(new NameFilter());
filterManager.addFilter(new ContactFilter());
filterManager.addFilter(new AddressFilter());
filterManager.addFilter(new DepositFilter());
filterManager.addFilter(new OrderFilter());
Client client = new Client();
client.setFilterManager(filterManager);
}
}
java设计模式进阶_intercepting-filter
最新推荐文章于 2020-07-29 13:52:27 发布