1    package com.instantbank.collections.collectionsActivities.web;
2    
3    import java.io.ByteArrayInputStream;
4    import java.io.IOException;
5    import java.io.PrintWriter;
6    import java.rmi.RemoteException;
7    import javax.ejb.CreateException;
8    import javax.naming.NamingException;
9    import javax.servlet.RequestDispatcher;
10   import javax.servlet.ServletConfig;
11   import javax.servlet.ServletContext;
12   import javax.servlet.ServletException;
13   import javax.servlet.http.HttpServlet;
14   import javax.servlet.http.HttpServletRequest;
15   import javax.servlet.http.HttpServletResponse;
16   import javax.servlet.http.HttpSession;
17   import org.w3c.dom.Element;
18   import org.w3c.dom.NodeList;
19   import oracle.xml.parser.v2.DOMParser;
20   import oracle.xml.parser.v2.XMLDocument;
21   import oracle.xml.parser.v2.XMLNode;
22   import com.instantbank.collections.creditInfo.ejb.AccountInfoServices;
23   import com.instantbank.collections.creditInfo.ejb.AccountInfoServicesHome;
24   import com.instantbank.collections.util.FilterChain;
25   import com.instantbank.collections.util.InstantbankException;
26   import com.instantbank.collections.util.ServiceLocator;
27   
28   
29   public class SearchAccountController extends HttpServlet {
30   
31     AccountInfoServices accountInfoServices;
32     AccountInfoServicesHome ahome;
33     PrintWriter out;
34     HttpSession session;
35   
36   
37     public void init(ServletConfig config) throws ServletException {
38       super.init(config);
39       try {
40         ahome = (AccountInfoServicesHome)
41           ServiceLocator.instance().createEJB("AccountInfoServicesHome", AccountInfoServicesHome.class, false);
42         accountInfoServices = ahome.create();
43       }
44       catch(Exception e) {
45       }
46     }
47   
48   
49     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
50       doPost(request, response);
51     }
52   
53   
54     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
55       String action = "";
56       com.instantbank.collections.util.FilterChain chain;
57   
58       try {
59         action = request.getParameter("action");
60         session = request.getSession(false);
61         session.setAttribute("hasException", "0");
62         try {
63           chain = new com.instantbank.collections.util.FilterChain(true, getServletConfig().getServletContext());
64           if(chain.processFilter(request, response)) {
65             return;
66           }
67           if(action.equals("initialize")) {
68             initialize(request, response);
69           }
70           else if(action.equals("search")) {
71             search(request, response);
72           }
73           else {
74             throw new InstantbankException("522007", "Action " + action + " not supported");
75           }
76         }
77         catch(Exception e) {
78           throw new InstantbankException(e, "522007", "Failed to execute controller action " + action);
79         }
80       }
81       catch(InstantbankException e) {
82         session.setAttribute("hasException", "1");
83         session.setAttribute("Exception", e);
84         if(response.isCommitted()) {
85           return;
86         }
87         response.sendRedirect("../main_web/ControllerError.jsp?showTechnical=0");
88       }
89     }
90   
91   
92     private void initialize(HttpServletRequest request, HttpServletResponse response) throws InstantbankException, IOException, ServletException {
93       ServletContext sctx = getServletConfig().getServletContext();
94       session.setAttribute("NextWrkiStatus", " ");
95       session.setAttribute("firstWI", new Long("0"));
96       RequestDispatcher rd = sctx.getRequestDispatcher("/collectionsActivities_web/SearchAccountView.jsp");
97       rd.forward(request, response);
98     }
99   
100  
101    private void search(HttpServletRequest request, HttpServletResponse response) throws Exception, CreateException, NamingException, RemoteException, InstantbankException {
102      Long companyId;
103      String criteria;
104      String data;
105      XMLDocument dataXml;
106      DOMParser docParser = new DOMParser();
107      XMLNode firstNode;
108      String firstNodeAccount;
109      String lastRownum;
110      String nodeAccount;
111      NodeList nodeList;
112      Integer numberOfRows = null;
113      Element root;
114      Long rownum;
115      ServletContext sctx = getServletConfig().getServletContext();
116      boolean showOne;
117      ByteArrayInputStream stream;
118      XMLNode theNode;
119  
120      rownum = new Long(request.getParameter("rownum"));
121      criteria = request.getParameter("criteria");
122      lastRownum = request.getParameter("lastRownum");
123      companyId = (Long)session.getAttribute("companyId");
124      numberOfRows = new Integer(request.getParameter("numberOfRows"));
125      data = accountInfoServices.searchAccount(companyId, criteria, rownum, numberOfRows);
126      stream = new ByteArrayInputStream(data.getBytes());
127      docParser.setValidationMode(false);
128      docParser.parse(stream);
129      dataXml = docParser.getDocument();
130  
131      root = dataXml.getDocumentElement();
132      nodeList = root.getChildNodes();
133      request.setAttribute("tab", "Details");
134      if(nodeList.getLength() == 0) {
135        RequestDispatcher rd = sctx.getRequestDispatcher("/collectionsActivities_web/SearchAccountView.jsp");
136        request.setAttribute("message", "No Accounts Found.");
137        request.setAttribute("lastRownum", lastRownum);
138        request.setAttribute("criteria", criteria);
139        rd.forward(request, response);
140      }
141      else if((nodeList.getLength() == 1) && (rownum.equals(new Long(0)))) {
142        RequestDispatcher rd = sctx.getRequestDispatcher("/main_web/MainDispatcher?module=searchAccount&useCase=ReviewAccount&optionCollections=0&optionCompany=0&agrmId=" + dataXml.valueOf("Accounts/Account/id"));
143        rd.forward(request, response);
144      }
145      else {
146        showOne = true;
147        firstNode = (XMLNode)nodeList.item(0);
148        firstNodeAccount = firstNode.valueOf("accountnumber");
149        ;
150        for(int i = 1; i < nodeList.getLength(); i++) {
151          theNode = (XMLNode)nodeList.item(i);
152          nodeAccount = theNode.valueOf("accountnumber");
153          if(!firstNodeAccount.equals(nodeAccount)) {
154            showOne = false;
155            i = nodeList.getLength();
156          }
157        }
158        if(showOne) {
159          RequestDispatcher rd = sctx.getRequestDispatcher("/main_web/MainDispatcher?module=searchAccount&useCase=ReviewAccount&optionCollections=0&optionCompany=0&agrmId=" + dataXml.valueOf("Accounts/Account/id"));
160          rd.forward(request, response);
161        }
162        else {
163          RequestDispatcher rd = sctx.getRequestDispatcher("/collectionsActivities_web/SearchAccountView.jsp");
164          request.setAttribute("lastRownum", lastRownum);
165          request.setAttribute("data", data);
166          request.setAttribute("criteria", criteria);
167          rd.forward(request, response);
168        }
169      }
170    }
171  
172  
173    public String getServletInfo() {
174      return "com.instantbank.collectionsActions.web.SearchAccountController Information";
175    }
176  }
177  
178