Statistics
| Branch: | Revision:

m2u-upass-core / src / my / com / upass / maybank / MaybankFacadeImpl.java @ 70:be137fe903ee

History | View | Annotate | Download (12.9 KB)

1
package my.com.upass.maybank;
2

    
3
import java.text.ParseException;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.Date;
7
import java.util.HashMap;
8
import java.util.LinkedList;
9
import java.util.List;
10
import java.util.Map;
11

    
12
import javax.jws.WebService;
13

    
14
import my.com.upass.MinimalConstants;
15
import my.com.upass.UPassControllerV2;
16
import my.com.upass.UPassException;
17
import my.com.upass.generic.hibernate.GenericDAOHibernate;
18
import my.com.upass.generic.hibernate.HibernateUtils;
19
import my.com.upass.maybank.entities.IbccUser;
20
import my.com.upass.maybank.entities.Im2uUser;
21
import my.com.upass.maybank.entities.M2uUser;
22
import my.com.upass.maybank.entities.StockUser;
23
import my.com.upass.maybank.entities.TicketingUser;
24
import my.com.upass.maybank.entities.UserProfile;
25
import my.com.upass.pojo.ClientApp;
26
import my.com.upass.pojo.MinimalUserBean;
27
import my.com.upass.pojo.UserAppAccess;
28
import my.com.upass.util.MapWrapper;
29

    
30
import org.apache.log4j.Logger;
31
import org.hibernate.Session;
32

    
33
/**
34
 * @author Hadi
35
 * 
36
 */
37
@WebService(
38
                serviceName = "MaybankFacade",
39
                endpointInterface = "my.com.upass.maybank.MaybankFacade")
40
//
41
public class MaybankFacadeImpl
42
                extends MinimalMaybankFacadeImpl
43
                implements MaybankFacade {
44

    
45
        private static final Logger LOGGER = Logger.getLogger(MaybankFacadeImpl.class);
46

    
47
        private final UPassControllerV2 upcV2;
48

    
49
        //
50

    
51
        public MaybankFacadeImpl() {
52
                upcV2 = new UPassControllerV2();
53
        }
54

    
55
        @Override
56
        public int newIbccAdminUser(
57
                        String appAccessId, String hashedSecretKey,
58
                        String username, String hashedPassword) {
59

    
60
                final MinimalUserBean minUser = new MinimalUserBean();
61
                minUser.setUsername(username);
62
                minUser.setHashedPassword(hashedPassword);
63

    
64
                return newAdminUser(appAccessId, hashedSecretKey, minUser, ClientApp.APP_ID_CCPP);
65
        }
66

    
67
        @Override
68
        public int newIbccPublicUser(
69
                        String appAccessId, String hashedSecretKey,
70
                        String username, String hashedPassword, String panCc) {
71

    
72
                final IbccUser ibccUser = new IbccUser();
73
                ibccUser.setPanCc(panCc);
74

    
75
                final MinimalUserBean minUser = new MinimalUserBean();
76
                minUser.setUsername(username);
77
                minUser.setHashedPassword(hashedPassword);
78
                ibccUser.setMinUser(minUser);
79

    
80
                return newUser(appAccessId, hashedSecretKey, ibccUser);
81
        }
82

    
83
        @Override
84
        public int newStockUser(
85
                        String appAccessId, String hashedSecretKey,
86
                        String username, String idNo) {
87

    
88
                StockUser stockUser = new StockUser();
89
                stockUser.setIdNo(idNo);
90

    
91
                MinimalUserBean minUser = new MinimalUserBean();
92
                minUser.setUsername(username);
93
                stockUser.setMinUser(minUser);
94

    
95
                return newUser(appAccessId, hashedSecretKey, stockUser);
96
        }
97

    
98
        @Override
99
        public int newIm2uUser(
100
                        String appAccessId, String hashedSecretKey, String username,
101
                        String wsFlag, String wsIdentCode, String wsMySgId, Date wsRegTimeStamp) {
102

    
103
                Im2uUser im2uUser = new Im2uUser();
104
                im2uUser.setWsFlag(wsFlag);
105
                im2uUser.setWsIdentCode(wsIdentCode);
106
                im2uUser.setWsMySgId(wsMySgId);
107
                im2uUser.setWsRegTimeStamp(wsRegTimeStamp);
108

    
109
                MinimalUserBean minUser = new MinimalUserBean();
110
                minUser.setUsername(username);
111
                im2uUser.setMinUser(minUser);
112

    
113
                return newUser(appAccessId, hashedSecretKey, im2uUser);
114
        }
115

    
116
        @Override
117
        public int newTicketingUser(
118
                        String appAccessId, String hashedSecretKey,
119
                        String username, String hashedPassword,
120
                        String fullName, String firstName, String lastName, String payeeCode) {
121

    
122
                final TicketingUser ticketingUser = new TicketingUser();
123
                ticketingUser.setFullName(fullName);
124
                ticketingUser.setFirstName(firstName);
125
                ticketingUser.setLastName(lastName);
126
                ticketingUser.setPayeeCode(payeeCode);
127

    
128
                final MinimalUserBean minUser = new MinimalUserBean();
129
                minUser.setUsername(username);
130
                minUser.setHashedPassword(hashedPassword);
131
                ticketingUser.setMinUser(minUser);
132

    
133
                return newUser(appAccessId, hashedSecretKey, ticketingUser);
134
        }
135

    
136
        /**
137
         * @deprecated
138
         * @see #lookupUsername(String, String, String)
139
         */
140
        @Override
141
        public Response lookupUsername_internal(
142
                        String appAccessId, String hashedSecretKey, String username) {
143

    
144
                throw new java.lang.UnsupportedOperationException();
145
        }
146

    
147
        @Override
148
        public ResponseElement lookupUsername(
149
                        String appAccessId, String hashedSecretKey, String username) {
150

    
151
                final Response response = super.lookupUsername_internal(
152
                                appAccessId, hashedSecretKey, username);
153

    
154
                return new ResponseElement(response);
155
        }
156

    
157
        /**
158
         * @deprecated
159
         * @see #lookupUsername(String, String, String)
160
         */
161
        @Override
162
        public Response lookupUsernameForApp_internal(
163
                        String appAccessId, String hashedSecretKey,
164
                        String username, Integer appId) {
165

    
166
                final String thisClassName = getClass().getName();
167

    
168
                StackTraceElement traceElement = Thread.currentThread().getStackTrace()[1];
169
                final String invokerClassName = traceElement.getClassName();
170

    
171
                if (invokerClassName.equals(thisClassName))
172
                        return super.lookupUsernameForApp_internal(
173
                                        appAccessId, hashedSecretKey, username, appId);
174
                else
175
                        throw new java.lang.UnsupportedOperationException();
176
        }
177

    
178
        @Override
179
        public ResponseElement lookupUsernameForApp(
180
                        String appAccessId, String hashedSecretKey,
181
                        String username, Integer appId) {
182

    
183
                final Response response = super.lookupUsernameForApp_internal(
184
                                appAccessId, hashedSecretKey, username, appId);
185

    
186
                return new ResponseElement(response);
187
        }
188

    
189
        /**
190
         * @deprecated
191
         * @see #lookupPublicUsername(String, String, String)
192
         */
193
        @Override
194
        public Response lookupPublicUsername_internal(
195
                        String appAccessId, String hashedSecretKey, String username) {
196

    
197
                throw new java.lang.UnsupportedOperationException();
198
        }
199

    
200
        @Override
201
        public ResponseElement lookupPublicUsername(
202
                        String appAccessId, String hashedSecretKey, String username) {
203

    
204
                final Response response = super.lookupPublicUsername_internal(appAccessId, hashedSecretKey, username);
205
                return new ResponseElement(response);
206
        }
207

    
208
        /**
209
         * @deprecated
210
         * @see #lookupPan1(String, String, String)
211
         */
212
        @Override
213
        public Response lookupPan1_internal(
214
                        String appAccessId, String hashedSecretKey, String pan1) {
215

    
216
                throw new java.lang.UnsupportedOperationException();
217
        }
218

    
219
        @Override
220
        public ResponseElement lookupPan1(
221
                        String appAccessId, String hashedSecretKey, String pan1) {
222

    
223
                final Response response = super.lookupPan1_internal(appAccessId, hashedSecretKey, pan1);
224
                return new ResponseElement(response);
225
        }
226

    
227
        /**
228
         * @deprecated
229
         * @see #lookupPan2(String, String, String)
230
         */
231
        @Override
232
        public Response lookupPan2_internal(
233
                        String appAccessId, String hashedSecretKey, String pan1) {
234

    
235
                throw new java.lang.UnsupportedOperationException();
236
        }
237

    
238
        @Override
239
        public ResponseElement lookupPan2(
240
                        String appAccessId, String hashedSecretKey, String pan2) {
241

    
242
                final Response response = super.lookupPan2_internal(appAccessId, hashedSecretKey, pan2);
243
                return new ResponseElement(response);
244
        }
245

    
246
        /**
247
         * @deprecated
248
         * @see #lookupPanCc(String, String, String)
249
         */
250
        @Override
251
        public Response lookupPanCc_internal(
252
                        String appAccessId, String hashedSecretKey, String panCc) {
253

    
254
                throw new java.lang.UnsupportedOperationException();
255
        }
256

    
257
        @Override
258
        public ResponseElement lookupPanCc(
259
                        String appAccessId, String hashedSecretKey, String panCc) {
260

    
261
                final Response response = super.lookupPanCc_internal(appAccessId, hashedSecretKey, panCc);
262
                return new ResponseElement(response);
263
        }
264

    
265
        @Override
266
        public int deleteUser(
267
                        String appAccessId, String hashedSecretKey,
268
                        String username) {
269

    
270
                int rc = MinimalConstants.ERR_UNKNOWN;
271
                Session session = null;
272
                try {
273
                        session = HibernateUtils.currentSession();
274
                        session.beginTransaction();
275

    
276
                        rc = upcV2.deleteUserWithTheProfile(appAccessId, hashedSecretKey, username, session);
277

    
278
                        if (rc == MinimalConstants.ERR_SUCCESS)
279
                                session.getTransaction().commit();
280
                        else
281
                                GenericDAOHibernate.rollbackTransactionIfAny(session);
282

    
283
                } catch (UPassException e) {
284
                        rc = e.getErrorCode();
285
                        e.printStackTrace();
286
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
287

    
288
                } catch (Exception e) {
289
                        LOGGER.error(e, e);
290
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
291

    
292
                } finally {
293
                        GenericDAOHibernate.closeSessionIfAny(session);
294
                }
295
                return rc;
296
        }
297

    
298
        @Override
299
        public ResponseListElement searchUserByFilter(
300
                        String appAccessId, String hashedSecretKey, MapWrapper searchFilter) {
301

    
302
                ResponseListElement res = new ResponseListElement();
303
                final List<MapWrapper> items = new LinkedList<MapWrapper>();
304

    
305
                Session session = null;
306
                try {
307
                        session = HibernateUtils.currentSession();
308

    
309
                        List<UserProfile> examples = new ArrayList<UserProfile>(5);
310
                        for (Class<? extends UserProfile> clazz : Arrays.asList(
311
                                        IbccUser.class, Im2uUser.class, M2uUser.class, StockUser.class, TicketingUser.class)) {
312

    
313
                                final UserProfile example = clazz.newInstance();
314
                                example.mapToProperties(searchFilter.getMap());
315
                                examples.add(example);
316
                        }
317
                        List<UserProfile> profiles = upcV2.listProfilesByExamples(
318
                                        appAccessId, hashedSecretKey, examples, session);
319

    
320
                        for (UserProfile profile : profiles)
321
                                items.add(new MapWrapper(profile.propertiesToMap()));
322

    
323
                        res.setItems(items);
324
                        res.setCode(MinimalConstants.ERR_SUCCESS);
325

    
326
                } catch (UPassException e) {
327
                        LOGGER.info(e, e);
328
                        res.setCode(e.getErrorCode());
329

    
330
                } catch (ParseException e) {
331
                        LOGGER.error(e, e);
332
                        res.setCode(MinimalConstants.ERR_INVALID_INPUT);
333

    
334
                } catch (Exception e) {
335
                        LOGGER.error(e, e);
336
                        res.setCode(MinimalConstants.ERR_UNKNOWN);
337

    
338
                } finally {
339
                        GenericDAOHibernate.closeSessionIfAny(session);
340
                }
341
                return res;
342
        }
343

    
344
        @Override
345
        public int changeIdNo(
346
                        String appAccessId, String hashedSecretKey,
347
                        String username, String idNo) {
348

    
349
                Session session = null;
350
                try {
351
                        session = HibernateUtils.currentSession();
352
                        session.beginTransaction();
353

    
354
                        UserProfile profile = upcV2.findProfile(
355
                                        appAccessId, hashedSecretKey, username, ClientApp.APP_ID_ONLINE_STOCK, session);
356

    
357
                        if (profile instanceof StockUser) {
358
                                StockUser stockUser = (StockUser) profile;
359
                                stockUser.setIdNo(idNo);
360

    
361
                                int rc = upcV2.updateProfileShallowly(
362
                                                appAccessId, hashedSecretKey, stockUser, session);
363

    
364
                                if (rc == MinimalConstants.ERR_SUCCESS)
365
                                        session.getTransaction().commit();
366
                                else
367
                                        GenericDAOHibernate.rollbackTransactionIfAny(session);
368

    
369
                                return rc;
370

    
371
                        } else {
372
                                GenericDAOHibernate.rollbackTransactionIfAny(session);
373
                                return MinimalConstants.ERR_INVALID_INPUT;
374
                        }
375
                } catch (UPassException e) {
376
                        LOGGER.info(e, e);
377
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
378
                        return e.getErrorCode();
379

    
380
                } catch (Exception e) {
381
                        LOGGER.error(e, e);
382
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
383
                        return MinimalConstants.ERR_UNKNOWN;
384

    
385
                } finally {
386
                        GenericDAOHibernate.closeSessionIfAny(session);
387
                }
388
        }
389

    
390
        @Override
391
        public CountResponseElement getFailedLoginsCount(
392
                        String appAccessId, String hashedSecretKey, String username) {
393

    
394
                CountResponse response = super.getFailedLoginsCount(appAccessId, hashedSecretKey, username);
395
                return new CountResponseElement(response);
396
        }
397

    
398
        public int updateIm2uUser(
399
                        String appAccessId, String hashedSecretKey,
400
                        String username, MapWrapper attributes) {
401

    
402
                Session session = null;
403
                try {
404
                        session = HibernateUtils.currentSession();
405
                        session.beginTransaction();
406

    
407
                        UserProfile profile = upcV2.findProfile(
408
                                        appAccessId, hashedSecretKey, username, ClientApp.APP_ID_IM2U, session);
409

    
410
                        if (profile != null) {
411
                                final Map<String, String> tempMap = new HashMap<String, String>();
412
                                tempMap.putAll(profile.propertiesToMap());
413

    
414
                                final Map<String, String> attributesMap = attributes.getMap();
415
                                attributesMap.remove("username");
416
                                tempMap.putAll(attributesMap);
417

    
418
                                profile.mapToProperties(tempMap, false);
419

    
420
                                int rc = upcV2.updateProfileShallowly(
421
                                                appAccessId, hashedSecretKey, profile, session);
422

    
423
                                if (rc == MinimalConstants.ERR_SUCCESS) {
424
                                        session.getTransaction().commit();
425

    
426
                                } else {
427
                                        LOGGER.warn("Unable to update user profile.");
428
                                        GenericDAOHibernate.rollbackTransactionIfAny(session);
429
                                }
430
                                return rc;
431

    
432
                        } else {
433
                                GenericDAOHibernate.rollbackTransactionIfAny(session);
434
                                return MinimalConstants.ERR_INVALID_INPUT;
435
                        }
436
                } catch (UPassException e) {
437
                        LOGGER.info(e, e);
438
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
439
                        return e.getErrorCode();
440

    
441
                } catch (Exception e) {
442
                        LOGGER.error(e, e);
443
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
444
                        return MinimalConstants.ERR_UNKNOWN;
445

    
446
                } finally {
447
                        GenericDAOHibernate.closeSessionIfAny(session);
448
                }
449
        }
450

    
451
        // Helper methods
452

    
453
        protected int newAdminUser(
454
                        String appAccessId, String hashedSecretKey, MinimalUserBean adminUser, Integer targetAppId) {
455

    
456
                int rc = MinimalConstants.ERR_UNKNOWN;
457
                Session session = null;
458
                try {
459
                        session = HibernateUtils.currentSession();
460
                        session.beginTransaction();
461

    
462
                        rc = upcV2.addUser(
463
                                        appAccessId, hashedSecretKey,
464
                                        adminUser, UserAppAccess.TYPE_ADMIN, session, true);
465

    
466
                        if (rc == MinimalConstants.ERR_SUCCESS)
467
                                session.getTransaction().commit();
468
                        else
469
                                GenericDAOHibernate.rollbackTransactionIfAny(session);
470

    
471
                } catch (Exception e) {
472
                        GenericDAOHibernate.rollbackTransactionIfAny(session);
473
                        LOGGER.error(e, e);
474

    
475
                } finally {
476
                        GenericDAOHibernate.closeSessionIfAny(session);
477
                }
478
                return rc;
479
        }
480
}