X Tutup
Skip to content

Commit 6d4e473

Browse files
committed
added intercepting filter
1 parent f753d68 commit 6d4e473

File tree

14 files changed

+310
-289
lines changed

14 files changed

+310
-289
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ Presentation Tier patterns are the top-most level of the application, this is co
430430
## <a name="intercepting-filter">Intercepting Filter</a> [&#8593;](#list-of-design-patterns)
431431
**Intent:** Provide pluggable filters to conduct necessary pre-processing and post-processing to requests from a client to a target
432432

433-
![alt text](https://github.com/joshzambales/java-design-patterns/blob/master/intercepting-filter/etc/Intercepting-filter.png "Intercepting Filter")
433+
![alt text](https://github.com/iluwatar/java-design-patterns/blob/master/intercepting-filter/etc/Intercepting-filter.png "Intercepting Filter")
434434

435435
**Applicability:** Use the Intercepting Filter pattern when
436436
* a system uses pre-processing or post-processing requests

intercepting-filter/pom.xml

Lines changed: 18 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,18 @@
1-
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3-
<modelVersion>4.0.0</modelVersion>
4-
5-
<groupId>com.iluwatar</groupId>
6-
<artifactId>java-design-patterns</artifactId>
7-
<version>1.0-SNAPSHOT</version>
8-
<packaging>pom</packaging>
9-
10-
<properties>
11-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12-
</properties>
13-
<modules>
14-
<module>abstract-factory</module>
15-
<module>builder</module>
16-
<module>factory-method</module>
17-
<module>prototype</module>
18-
<module>singleton</module>
19-
<module>adapter</module>
20-
<module>bridge</module>
21-
<module>composite</module>
22-
<module>decorator</module>
23-
<module>facade</module>
24-
<module>flyweight</module>
25-
<module>proxy</module>
26-
<module>chain</module>
27-
<module>command</module>
28-
<module>interpreter</module>
29-
<module>iterator</module>
30-
<module>mediator</module>
31-
<module>memento</module>
32-
<module>model-view-presenter</module>
33-
<module>observer</module>
34-
<module>state</module>
35-
<module>strategy</module>
36-
<module>template-method</module>
37-
<module>visitor</module>
38-
<module>double-checked-locking</module>
39-
<module>servant</module>
40-
<module>service-locator</module>
41-
<module>null-object</module>
42-
<module>event-aggregator</module>
43-
<module>callback</module>
44-
<module>execute-around</module>
45-
<module>property</module>
46-
</modules>
47-
48-
<dependencyManagement>
49-
<dependencies>
50-
<dependency>
51-
<groupId>junit</groupId>
52-
<artifactId>junit</artifactId>
53-
<version>4.11</version>
54-
<scope>test</scope>
55-
</dependency>
56-
</dependencies>
57-
</dependencyManagement>
58-
59-
<build>
60-
<plugins>
61-
<!-- Tell maven to compile using Java 1.7 -->
62-
<plugin>
63-
<groupId>org.apache.maven.plugins</groupId>
64-
<artifactId>maven-compiler-plugin</artifactId>
65-
<version>3.0</version>
66-
<configuration>
67-
<source>1.7</source>
68-
<target>1.7</target>
69-
</configuration>
70-
</plugin>
71-
</plugins>
72-
</build>
73-
74-
</project>
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.iluwatar</groupId>
7+
<artifactId>java-design-patterns</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>intercepting-filter</artifactId>
11+
<dependencies>
12+
<dependency>
13+
<groupId>junit</groupId>
14+
<artifactId>junit</artifactId>
15+
<scope>test</scope>
16+
</dependency>
17+
</dependencies>
18+
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
/**
3+
* Concrete implementation of filter
4+
*
5+
* @author joshzambales
6+
*
7+
*/
8+
public class AddressFilter implements Filter{
9+
public String execute(String[] request){
10+
if(request[2].equals("")){
11+
return null;
12+
}else return request[2];
13+
}
14+
}

intercepting-filter/src/main/App.java

Lines changed: 7 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
import javax.swing.table.*;
44
import java.awt.*;
55
import java.awt.event.*;
6+
/**
7+
*
8+
* This is an app that checks whether the order request is valid through pre-processing done via Filters
9+
* Each field has its own corresponding Filter
10+
* @author joshzambales
11+
*
12+
*/
613
public class App{
714
public static void main(String[] args){
815
FilterManager filterManager = new FilterManager(new Target());
@@ -17,229 +24,15 @@ public static void main(String[] args){
1724
}
1825
}
1926

20-
interface Filter{
21-
public String execute(String[] request);
22-
}
23-
24-
class NameFilter implements Filter{
25-
public String execute(String[] request){
26-
if(request[0].equals("") || request[0].matches(".*[^\\w|\\s]+.*")){
27-
return null;
28-
}else return request[0];
29-
}
30-
}
31-
32-
class ContactFilter implements Filter{
33-
public String execute(String[] request){
34-
if(request[1].equals("") || request[1].matches(".*[^\\d]+.*") || request[1].length() != 11){
35-
return null;
36-
}else return request[1];
37-
}
38-
}
39-
40-
class AddressFilter implements Filter{
41-
public String execute(String[] request){
42-
if(request[2].equals("")){
43-
return null;
44-
}else return request[2];
45-
}
46-
}
47-
48-
class DepositFilter implements Filter{
49-
public String execute(String[] request){
50-
if(request[3].equals("")){
51-
return null;
52-
}else return request[3];
53-
}
54-
}
55-
56-
class OrderFilter implements Filter{
57-
public String execute(String[] request){
58-
if(request[4].equals("")){
59-
return null;
60-
}else return request[4];
61-
}
62-
}
63-
64-
class Target extends JFrame{
65-
JTable jt;
66-
JScrollPane jsp;
67-
DefaultTableModel dtm;
68-
JButton del;
69-
public Target(){
70-
super("Order System");
71-
setDefaultCloseOperation(EXIT_ON_CLOSE);
72-
setSize(640,480);
73-
dtm = new DefaultTableModel(new Object[]{"Name", "Contact Number", "Address", "Deposit Number", "Order"},0);
74-
jt = new JTable(dtm);
75-
del = new JButton("Delete");
76-
setup();
77-
}
78-
private void setup(){
79-
setLayout(new BorderLayout());
80-
JPanel bot = new JPanel();
81-
add(jt.getTableHeader(), BorderLayout.NORTH);
82-
bot.setLayout(new BorderLayout());
83-
bot.add(del, BorderLayout.EAST);
84-
add(bot, BorderLayout.SOUTH);
85-
jsp = new JScrollPane(jt);
86-
jsp.setPreferredSize(new Dimension(500,250));
87-
add(jsp, BorderLayout.CENTER);
8827

89-
del.addActionListener(new DListener());
9028

91-
JRootPane rootPane = SwingUtilities.getRootPane(del);
92-
rootPane.setDefaultButton(del);
93-
setVisible(true);
94-
}
95-
public void execute(String[] request){
96-
//System.out.println(request[4]);
97-
dtm.addRow(new Object[]{request[0],request[1],request[2],request[3],request[4]});
98-
}
99-
100-
class DListener implements ActionListener{
101-
@Override
102-
public void actionPerformed(ActionEvent e){
103-
int temp = jt.getSelectedRow();
104-
if(temp == -1) return;
105-
int temp2 = jt.getSelectedRowCount();
106-
for(int i = 0; i < temp2; i++){
107-
dtm.removeRow(temp);
108-
}
109-
}
110-
}
111-
}
11229

113-
class FilterChain{
114-
private ArrayList<Filter> filters = new ArrayList<Filter>();
115-
private Target target;
11630

117-
public void addFilter(Filter filter){
118-
filters.add(filter);
119-
}
120-
121-
public String execute(String request){
122-
String tempout[] = new String[filters.size()];
123-
124-
String tempin[] = request.split("&");
125-
int i = 0;
126-
try{
127-
for(Filter filter:filters){
128-
tempout[i] = null;
129-
tempout[i++] = filter.execute(tempin);
130-
//System.out.println(tempout[i]);
131-
}
132-
}catch(Exception e){
133-
return "NOT ENOUGHT INPUT";
134-
}
135-
136-
if(tempout[4] == null){
137-
return "INVALID ORDER!";
138-
}else if(tempout[3] == null){
139-
return "INVALID DEPOSIT NUMBER!";
140-
}else if(tempout[2] == null){
141-
return "INVALID ADRDESS!";
142-
}else if(tempout[1] == null){
143-
return "INVALID Contact Number!";
144-
}else if(tempout[0] == null){
145-
return "INVALID Name!";
146-
}else{
147-
target.execute(tempout);
148-
return "RUNNING...";
149-
}
150-
}
15131

152-
public void setTarget(Target target){
153-
this.target = target;
154-
}
155-
}
15632

157-
class FilterManager{
158-
FilterChain filterChain;
15933

160-
public FilterManager(Target target){
161-
filterChain = new FilterChain();
162-
filterChain.setTarget(target);
163-
}
164-
public void setFilter(Filter filter){
165-
filterChain.addFilter(filter);
166-
}
167-
public String filterRequest(String request){
168-
return filterChain.execute(request);
169-
}
170-
}
17134

172-
class Client extends JFrame{
173-
FilterManager filterManager;
174-
JLabel jl;
175-
JTextField[] jtfarr;
176-
JTextArea[] jtaarr;
177-
JButton[] buttarr;
178-
public Client(){
179-
super("Client System");
180-
setDefaultCloseOperation(EXIT_ON_CLOSE);
181-
setSize(300,300);
182-
jl = new JLabel("RUNNING...");
183-
jtfarr = new JTextField[3];
184-
for(int i = 0; i < 3; i++){
185-
jtfarr[i] = new JTextField();
186-
}
187-
jtaarr = new JTextArea[2];
188-
for(int i = 0; i < 2; i++){
189-
jtaarr[i] = new JTextArea();
190-
}
191-
buttarr = new JButton[2];
192-
buttarr[0] = new JButton("Clear");
193-
buttarr[1] = new JButton("Process");
19435

195-
setup();
196-
}
197-
private void setup(){
198-
setLayout(new BorderLayout());
199-
JPanel panel = new JPanel();
200-
add(jl,BorderLayout.SOUTH);
201-
add(panel, BorderLayout.CENTER);
202-
panel.setLayout(new GridLayout(6,2));
203-
panel.add(new JLabel("Name"));
204-
panel.add(jtfarr[0]);
205-
panel.add(new JLabel("Contact Number"));
206-
panel.add(jtfarr[1]);
207-
panel.add(new JLabel("Address"));
208-
panel.add(jtaarr[0]);
209-
panel.add(new JLabel("Deposit Number"));
210-
panel.add(jtfarr[2]);
211-
panel.add(new JLabel("Order"));
212-
panel.add(jtaarr[1]);
213-
panel.add(buttarr[0]);
214-
panel.add(buttarr[1]);
21536

216-
buttarr[0].addActionListener(new ActionListener(){
217-
@Override
218-
public void actionPerformed(ActionEvent e){
219-
for(JTextArea i : jtaarr){
220-
i.setText("");
221-
}
222-
for(JTextField i : jtfarr){
223-
i.setText("");
224-
}
225-
}
226-
});
22737

228-
buttarr[1].addActionListener(new ActionListener(){
229-
@Override
230-
public void actionPerformed(ActionEvent e){
231-
jl.setText(sendRequest(jtfarr[0].getText()+"&"+jtfarr[1].getText()+"&"+jtaarr[0].getText()+"&"+jtfarr[2].getText()+"&"+jtaarr[1].getText()));
232-
}
233-
});
23438

235-
JRootPane rootPane = SwingUtilities.getRootPane(buttarr[1]);
236-
rootPane.setDefaultButton(buttarr[1]);
237-
setVisible(true);
238-
}
239-
public void setFilterManager(FilterManager filterManager){
240-
this.filterManager = filterManager;
241-
}
242-
public String sendRequest(String request){
243-
return filterManager.filterRequest(request);
244-
}
245-
}

0 commit comments

Comments
 (0)
X Tutup