1+ import java .util .*;
2+ import javax .swing .*;
3+ import javax .swing .table .*;
4+ import java .awt .*;
5+ import java .awt .event .*;
6+ public class App {
7+ public static void main (String [] args ){
8+ FilterManager filterManager = new FilterManager (new Target ());
9+ filterManager .setFilter (new NameFilter ());
10+ filterManager .setFilter (new ContactFilter ());
11+ filterManager .setFilter (new AddressFilter ());
12+ filterManager .setFilter (new DepositFilter ());
13+ filterManager .setFilter (new OrderFilter ());
14+
15+ Client client = new Client ();
16+ client .setFilterManager (filterManager );
17+ }
18+ }
19+
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 );
88+
89+ del .addActionListener (new DListener ());
90+
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+ }
112+
113+ class FilterChain {
114+ private ArrayList <Filter > filters = new ArrayList <Filter >();
115+ private Target target ;
116+
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+ }
151+
152+ public void setTarget (Target target ){
153+ this .target = target ;
154+ }
155+ }
156+
157+ class FilterManager {
158+ FilterChain filterChain ;
159+
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+ }
171+
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" );
194+
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 ]);
215+
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+ });
227+
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+ });
234+
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