Deliver centralized role management feature
[portal.git] / ecomp-portal-widget-ms / widget-ms / src / main / java / org / openecomp / portalapp / widget / service / impl / WidgetCatalogServiceImpl.java
1 package org.openecomp.portalapp.widget.service.impl;
2
3 import java.util.List;
4 import java.util.Set;
5
6 import javax.transaction.Transactional;
7
8 import org.hibernate.Criteria;
9 import org.hibernate.Query;
10 import org.hibernate.Session;
11 import org.hibernate.SessionFactory;
12 import org.hibernate.Transaction;
13 import org.hibernate.criterion.Restrictions;
14 import org.openecomp.portalapp.widget.domain.MicroserviceData;
15 import org.openecomp.portalapp.widget.domain.RoleApp;
16 import org.openecomp.portalapp.widget.domain.WidgetCatalog;
17 import org.openecomp.portalapp.widget.service.WidgetCatalogService;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.context.annotation.EnableAspectJAutoProxy;
22 import org.springframework.stereotype.Service;
23
24 @Service("widgetCatalogService")
25 @Transactional
26 @org.springframework.context.annotation.Configuration
27 @EnableAspectJAutoProxy
28 public class WidgetCatalogServiceImpl implements WidgetCatalogService {
29
30         private static final Logger logger = LoggerFactory.getLogger(WidgetCatalogServiceImpl.class);
31         
32         @Autowired
33         private SessionFactory sessionFactory;
34         
35         @SuppressWarnings("unchecked")
36         @Override
37         @Transactional
38         public List<WidgetCatalog> getWidgetCatalog(){          
39                 Session session = sessionFactory.getCurrentSession();
40                 Criteria criteria = session.createCriteria(WidgetCatalog.class)
41                                 .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
42                 List<WidgetCatalog> widgets = criteria.list();
43                 logger.debug("WidgetCatalogServiceImpl.getWidgetCatalog: result={}", widgets);
44                 return widgets;
45         }
46         
47         @SuppressWarnings("unchecked")
48         @Transactional
49         public List<WidgetCatalog> getUserWidgetCatalog(String loginName){
50                 Session session = sessionFactory.getCurrentSession();
51                 StringBuilder sql = new StringBuilder()
52                                 
53
54                                 .append("  select userWidgets.widget_id, userWidgets.wdg_name, userWidgets.wdg_desc, b.x, b.status_cd, b.y, b.height, b.width  from                                        ") 
55                                 .append("  (                                                                                                                                                               ")
56                                 .append("  select distinct w.widget_id, w.wdg_name, w.wdg_desc from                                                                                                                                                        ")                    
57                                 .append("  ep_widget_catalog w,                                                                                                                                            ")
58                                 .append("  ep_widget_catalog_role wr,                                                                                                                                              ")
59                                 .append("  fn_user_role ur,                                                                                                                                                                                                                                                                                ")
60                                 .append("  fn_app app,                                                                                                                                                                                                                                                                             ")
61                                 .append("  fn_user u                                                                                                                                                               ")
62                                 .append("  where                                                                                                                                                   ")
63                                 .append("  w.widget_id = wr.WIDGET_ID and                                                                                                                                                                                                                                                  ")
64                                 .append("  ur.app_id = app.app_id and                                                                                                                                                                                                                                              ")
65                                 .append("  app.enabled = 'Y' and                                                                                                                                                                                                                                                   ")
66                                 .append("  wr.role_id = ur.role_id and                                                                                                                                                                                                                                             ")                                                                                                            
67                                 .append("  ur.user_id = u.user_id and                                                                                                                                                                                                                                              ")                                                                                                              
68                                 .append("  u.login_id = '" + loginName + "' and (w.all_user_flag = 'N' or w.all_user_flag is null)                                                                 ")                   
69                                 .append("                                                                                                                                                              ") 
70                                 .append("       union all                                                                                                                                              ") 
71                                 .append("                                                                                                                                                              ") 
72                                 .append("                                                                                                                                                              ") 
73                                 .append("  select distinct w.widget_id, w.wdg_name, w.wdg_desc from                                                                                                                        ") 
74                                 .append("       ep_widget_catalog w                                                                                                                                    ") 
75                                 .append("       where w.all_user_flag = 'Y'                                                                                                                            ") 
76                                 .append("                                                                                                                                                              ") 
77                                 .append("        ) userWidgets                                                                                                                                         ") 
78                                 .append("                                                                                                                                                              ") 
79                                 .append("  left join                                                                                                                                               ") 
80                                 .append("                                                                                                                                                              ") 
81                                 .append("  (                                                                                                                                                       ") 
82                                 .append("               select case when pers.user_id is null then sel.user_id else pers.user_id end as 'user_id', case when sel.widget_id is null then                    ") 
83                                 .append("                       pers.widget_id else sel.widget_id end as  'widget_id', pers.x, sel.status_cd, pers.y, pers.height, pers.width                                  ") 
84                                 .append("                               from (select * from ep_pers_user_widget_placement where user_id = (select user_id from fn_user where login_id = '" + loginName + "')) pers ") 
85                                 .append("                                       left outer join                                                                                                                        ") 
86                                 .append("                               (select * from ep_pers_user_widget_sel where user_id = (select user_id from fn_user where login_id = '" + loginName + "')) sel             ") 
87                                 .append("               on (pers.user_id = sel.user_id and pers.widget_id = sel.widget_id)                                                                                 ") 
88                                 .append("                                                                                                                                                                      ") 
89                                 .append("               union                                                                                                                                              ") 
90                                 .append("                                                                                                                                                                      ") 
91                                 .append("                select case when pers.user_id is null then sel.user_id else pers.user_id end as 'user_id',  case when sel.widget_id is null                       ") 
92                                 .append("                       then pers.widget_id else sel.widget_id end as  'widget_id', pers.x, sel.status_cd, pers.y, pers.height, pers.width                             ") 
93                                 .append("                               from (select * from ep_pers_user_widget_placement where user_id = (select user_id from fn_user where login_id = '" + loginName + "')) pers ") 
94                                 .append("                                       right outer join                                                                                                                       ") 
95                                 .append("                               (select * from ep_pers_user_widget_sel where user_id = (select user_id from fn_user where login_id = '" + loginName + "')) sel             ") 
96                                 .append("               on (pers.user_id = sel.user_id and pers.widget_id = sel.widget_id)                                                                                 ") 
97                                 .append("                                                                                                                                                                  ") 
98                                 .append("                order by user_id, widget_id                                                                                                                       ") 
99                                 .append(" )b                                                                                                                                                       ") 
100                                 .append("  on                                                                                                                                                      ") 
101                                 .append("  (userWidgets.widget_id = b.widget_id) order by b.x;                                                                                                     ");  
102                                 
103                                 
104                                 
105                 Query query = session.createSQLQuery(sql.toString());
106                 List<WidgetCatalog> widgets = query.list();
107                 logger.debug("WidgetCatalogServiceImpl.getUserWidgetCatalog: result size={}", widgets);
108                 return widgets;         
109         }
110
111         @Override
112         public WidgetCatalog getWidgetCatalog(Long widgetCatalogId) {
113                 Session session = sessionFactory.getCurrentSession();
114                 Transaction tx = session.beginTransaction();
115                 WidgetCatalog widget = (WidgetCatalog) session.get(WidgetCatalog.class, widgetCatalogId);
116                 tx.commit();
117                 logger.debug("WidgetCatalogServiceImpl.getWidgetCatalog: getting widget={}", widget);
118                 return widget;
119         }
120         
121         @Override
122         public void deleteWidgetCatalog(long widgetCatalogId) {
123                 logger.debug("WidgetCatalogServiceImpl.deleteWidgetCatalog: deleting the widget with widgetId={}", widgetCatalogId);
124                 WidgetCatalog widget = getWidgetCatalog(widgetCatalogId);
125                 if (widget == null){
126                         logger.error("No widget found in database while performing WidgetCatalogServiceImpl.deleteWidgetCatalog.");
127                         return;
128                 }
129                 Session session = sessionFactory.getCurrentSession();
130                 Transaction tx = session.beginTransaction();
131                 Query query = session.createSQLQuery("delete from ep_pers_user_widget_sel where widget_id = :widgetId ").setParameter("widgetId", widgetCatalogId);
132                 query.executeUpdate();
133                 query = session.createSQLQuery("delete from ep_pers_user_widget_placement where widget_id = :widgetId ").setParameter("widgetId", widgetCatalogId);
134                 query.executeUpdate();
135                 query = session.createSQLQuery("delete from ep_widget_catalog_files where widget_id = :widgetId ").setParameter("widgetId", widgetCatalogId);
136                 query.executeUpdate();
137                 query = session.createSQLQuery("delete from ep_widget_catalog_parameter where widget_id = :widgetId ").setParameter("widgetId", widgetCatalogId);
138                 query.executeUpdate();
139                 session.delete(widget);
140                 tx.commit();
141         }
142         
143         @Override
144         public long saveWidgetCatalog(WidgetCatalog newWidgetCatalog) {
145                 
146                 try{
147                         if(newWidgetCatalog.getAllowAllUser().equals("1"))
148                                 newWidgetCatalog.setAllowAllUser("Y");
149                         else
150                                 newWidgetCatalog.setAllowAllUser("N");
151                         
152                         logger.debug("WidgetCatalogServiceImpl.saveWidgetCatalog: widget={}", newWidgetCatalog);
153                         Session session = sessionFactory.openSession();
154                         Transaction tx = session.beginTransaction();            
155                         session.save(newWidgetCatalog);
156                         tx.commit();
157                         session.flush();
158                         session.close();
159                         updateAppId(newWidgetCatalog.getId(), newWidgetCatalog.getWidgetRoles());
160                 }
161                 catch(Exception e){
162                         logger.error("Exception occurred while performing WidgetCatalogServiceImpl.saveWidgetCatalog in widget microservices. Details:" + e.getMessage());
163                 }
164                 return newWidgetCatalog.getId();
165         }
166
167         @Override
168         public void updateWidgetCatalog(Long widgetCatalogId, WidgetCatalog newWidgetCatalog) {
169                 logger.debug("WidgetCatalogServiceImpl.updateWidgetCatalog: widget={}", newWidgetCatalog);
170                 WidgetCatalog oldWidget = getWidgetCatalog(widgetCatalogId);
171                 try{
172                         if (newWidgetCatalog.getAllowAllUser().equals("1")) 
173                                 newWidgetCatalog.setAllowAllUser("Y");
174                         else 
175                                 newWidgetCatalog.setAllowAllUser("N");
176                         
177                         newWidgetCatalog.setId(widgetCatalogId);
178                         newWidgetCatalog.setServiceId(oldWidget.getServiceId());
179                         Session session = sessionFactory.openSession();
180                         Transaction tx = session.beginTransaction();
181                         session.update(newWidgetCatalog);
182                         tx.commit();
183                         session.flush();
184                         session.close();
185                         updateAppId(newWidgetCatalog.getId(), newWidgetCatalog.getWidgetRoles());
186                 }catch(Exception e){
187                         logger.error("Exception occurred while performing WidgetCatalogServiceImpl.updateWidgetCatalog in widget microservices. Details:" + e.getMessage());
188                 }
189                 
190         }       
191         
192         @Override
193         public Long getServiceIdByWidget(Long widgetCatalogId) {
194                 Session session = sessionFactory.getCurrentSession();
195                 WidgetCatalog widget = (WidgetCatalog) session.get(WidgetCatalog.class, widgetCatalogId);
196                 logger.debug("WidgetCatalogServiceImpl.getServiceIdByWidget: result={}", widget);
197                 return widget.getServiceId();
198         }
199         
200         @Override
201         public List<WidgetCatalog> getWidgetsByServiceId(Long serviceId) {
202                 Session session = sessionFactory.getCurrentSession();
203                 Criteria criteria = session.createCriteria(WidgetCatalog.class)
204                                 .add(Restrictions.eq("serviceId", serviceId))
205                                 .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
206                 List<WidgetCatalog> widgets = criteria.list();
207                 logger.debug("WidgetCatalogServiceImpl.getWidgetCatalog: result={}", widgets);
208                 return widgets;
209         }
210         
211         
212         
213         
214         
215         private void updateAppId(long widgetId, Set<RoleApp> roles){
216                 Session session = sessionFactory.openSession();
217                 for(RoleApp role: roles){
218                         String sql = "UPDATE ep_widget_catalog_role SET app_id = " + role.getApp().getAppId() + " WHERE widget_id = " + widgetId + " AND ROLE_ID = " + role.getRoleId() ;
219                         Query query = session.createSQLQuery(sql);
220                         query.executeUpdate();
221                 }
222                 session.flush();
223                 session.close();
224         }
225
226         @Override
227         public boolean getWidgetIdByName(String newWidgetName) {
228                 Session session = sessionFactory.openSession();
229                 Criteria criteria = session.createCriteria(WidgetCatalog.class)
230                                 .add(Restrictions.eq("name", newWidgetName))
231                                 .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
232                 
233                 List<MicroserviceData> widgets = criteria.list();
234                 logger.debug("WidgetCatalogServiceImpl.getWidgetIdByName: result={}", widgets);
235                 session.flush();
236                 session.close();
237                 
238                 return (widgets.size() > 0) ? true : false;
239         }
240
241         
242 }
243