Project

General

Profile

1
package eu.dnetlib.uoaadmintools.controllers;
2

    
3
import eu.dnetlib.uoaadmintools.configuration.properties.SecurityConfig;
4
import eu.dnetlib.uoaadmintools.dao.PortalSubscribersDAO;
5
import eu.dnetlib.uoaadmintools.dao.SubscriberDAO;
6
import eu.dnetlib.uoaadmintools.entities.subscriber.PortalSubscribers;
7
import eu.dnetlib.uoaadmintools.entities.subscriber.Subscriber;
8
import eu.dnetlib.uoaadmintoolslibrary.handlers.ContentNotFoundException;
9
import eu.dnetlib.uoaadmintools.handlers.utils.AuthorizationUtils;
10
import eu.dnetlib.uoaadmintools.handlers.utils.UserInfo;
11
import eu.dnetlib.uoaadmintools.responses.SingleValueWrapperResponse;
12
import eu.dnetlib.uoaadmintoolslibrary.dao.PortalDAO;
13
import org.apache.log4j.Logger;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.web.bind.annotation.*;
16

    
17
import java.util.ArrayList;
18
import java.util.Iterator;
19
import java.util.List;
20

    
21
/**
22
 * Created by argirok on 2/3/2018.
23
 */
24
@RestController
25
@CrossOrigin(origins = "*")
26
public class PortalSubscribersController {
27
    @Autowired
28
    PortalSubscribersDAO portalSubscribersDAO;
29
    @Autowired
30
    SubscriberDAO subscriberDAO;
31
    @Autowired
32
    PortalDAO portalDAO;
33

    
34
    @Autowired
35
    private SecurityConfig securityConfig;
36

    
37
    private final Logger log = Logger.getLogger(this.getClass());
38

    
39
    @RequestMapping(value = "/community/{pid}/subscribers/count", method = RequestMethod.GET)
40
    public SingleValueWrapperResponse<Integer> getNumberOfSubscribersPerPortal(@PathVariable(value="pid", required = true) String pid) throws ContentNotFoundException {
41
        SingleValueWrapperResponse<Integer> singleValueWrapperResponse = new SingleValueWrapperResponse(0);
42

    
43
        PortalSubscribers portalSubscribers = portalSubscribersDAO.findByPid(pid);
44
        if(portalSubscribers != null){
45
            if(portalSubscribers.getSubscribers() != null) {
46
                singleValueWrapperResponse.setValue(portalSubscribers.getSubscribers().size());
47
            }
48
        }else{
49
            throw new ContentNotFoundException("Portal Subscribers not found");
50

    
51
        }
52
        return singleValueWrapperResponse;
53
    }
54

    
55
    @RequestMapping(value = "/community/subscribers", method = RequestMethod.GET)
56
    public List<PortalSubscribers> getAllPortalSubscribers(){
57
        return portalSubscribersDAO.findAll();
58
    }
59

    
60
    @RequestMapping(value = "/community/{pid}/subscribers", method = RequestMethod.GET)
61
    public PortalSubscribers getSubscribersPerPortal(@PathVariable(value="pid", required = true) String pid) throws ContentNotFoundException {
62
        PortalSubscribers portalSubscribers = portalSubscribersDAO.findByPid(pid);
63
        if(portalSubscribers != null){
64
            return portalSubscribers;
65
        }else{
66
            throw new ContentNotFoundException("Portal Subscribers not found");
67

    
68
        }
69

    
70
    }
71
//    @RequestMapping(value = "/community/{pid}/subscribers", method = RequestMethod.POST)
72
//    public PortalSubscribers addSubscriberInPortal(@PathVariable(value="pid", required = true) String pid, @RequestBody Subscriber subscriber) throws ContentNotFoundException {
73
//        PortalSubscribers portalSubscribers = portalSubscribersDAO.findByPid(pid);
74
//        if(portalSubscribers == null){
75
//            throw new ContentNotFoundException("Portal Subscribers not found");
76
//        }
77
//
78
//        Subscriber savedSubscriber = subscriberDAO.findByEmail(subscriber.getEmail());
79
//        if(savedSubscriber==null){
80
//            savedSubscriber = subscriberDAO.save(subscriber);
81
//        }
82
//        for(Subscriber sub: portalSubscribers.getSubscribers()){
83
//            if(sub.getEmail().equals(subscriber.getEmail())){
84
//                //already subscribed
85
//                return portalSubscribers;
86
//            }
87
//        }
88
//        //not subscribed yet
89
//        portalSubscribers.getSubscribers().add(savedSubscriber);
90
//        return portalSubscribersDAO.save(portalSubscribers);
91
//
92
//    }
93

    
94
    @RequestMapping(value = "/community/{pid}/is-subscriber", method = RequestMethod.GET)
95
    public Boolean getIsSubscribedToPortal(@PathVariable(value="pid", required = true) String pid,
96
                                              //@RequestBody String email,
97
                                              @RequestHeader("X-XSRF-TOKEN") String token) throws ContentNotFoundException {
98
        AuthorizationUtils helper = new AuthorizationUtils();
99
        helper.setUserInfoUrl(securityConfig.getUserInfoUrl());
100
        UserInfo userInfo = helper.getUserInfo(token);
101

    
102
        if(userInfo != null) {
103
            String email = userInfo.getEmail();
104
            PortalSubscribers communitySubscribers = portalSubscribersDAO.findByPid(pid);
105
            if (communitySubscribers != null) {
106
                if (communitySubscribers.getSubscribers() != null) {
107
                    for (Subscriber subscriber : communitySubscribers.getSubscribers()) {
108
                        if (subscriber.getEmail().equals(email)) {
109
                            return true;
110
                        }
111
                    }
112
                }
113
            } else {
114
                throw new ContentNotFoundException("Portal Subscribers not found");
115

    
116
            }
117
        }
118
        return false;
119
    }
120

    
121
    @RequestMapping(value = "/community/{pid}/subscriber", method = RequestMethod.POST)
122
    public Boolean addSubscriberInPortal(@PathVariable(value="pid", required = true) String pid,
123
                                         @RequestHeader("X-XSRF-TOKEN") String token) throws ContentNotFoundException {
124
        AuthorizationUtils helper = new AuthorizationUtils();
125
        helper.setUserInfoUrl(securityConfig.getUserInfoUrl());
126
        UserInfo userInfo = helper.getUserInfo(token);
127

    
128
        if(userInfo != null) {
129
            String email = userInfo.getEmail();
130
            Subscriber subscriber = new Subscriber(email);
131

    
132
            PortalSubscribers communitySubscribers = portalSubscribersDAO.findByPid(pid);
133
            if (communitySubscribers == null) {
134
                throw new ContentNotFoundException("Community Subscribers not found");
135
            }
136

    
137
            Subscriber savedSubscriber = subscriberDAO.findByEmail(email);
138
            if (savedSubscriber == null) {
139
                savedSubscriber = subscriberDAO.save(subscriber);
140
            }
141
            for (Subscriber sub : communitySubscribers.getSubscribers()) {
142
                if (sub.getEmail().equals(subscriber.getEmail())) {
143
                    //already subscribed
144
                    return false;
145
                }
146
            }
147
            //not subscribed yet
148
            communitySubscribers.getSubscribers().add(savedSubscriber);
149
            portalSubscribersDAO.save(communitySubscribers);
150
            return true;
151
        }
152
        return false;
153

    
154
    }
155
    @RequestMapping(value = "/community/{pid}/subscriber/delete", method = RequestMethod.POST)
156
    public Boolean deleteSubscriberFromPortal(@PathVariable(value="pid", required = true) String pid,
157
                                                 @RequestHeader("X-XSRF-TOKEN") String token) throws ContentNotFoundException {
158
        AuthorizationUtils helper = new AuthorizationUtils();
159
        helper.setUserInfoUrl(securityConfig.getUserInfoUrl());
160
        UserInfo userInfo = helper.getUserInfo(token);
161

    
162
        if(userInfo != null) {
163
            String email = userInfo.getEmail();
164

    
165
            PortalSubscribers communitySubscribers = portalSubscribersDAO.findByPid(pid);
166
            if (communitySubscribers == null) {
167
                throw new ContentNotFoundException("Community Subscribers not found");
168
            }
169

    
170
            Iterator<Subscriber> subscriberIterator = communitySubscribers.getSubscribers().iterator();
171
            while(subscriberIterator.hasNext()) {
172
                Subscriber subscriber = subscriberIterator.next();
173
                if(subscriber.getEmail().equals(email)) {
174
                    subscriberIterator.remove();
175
                    portalSubscribersDAO.save(communitySubscribers);
176
                    return true;
177
                }
178
            }
179
        }
180
        return false;
181
    }
182

    
183
    @RequestMapping(value = "/community/{pid}/subscribers", method = RequestMethod.POST)
184
    public PortalSubscribers addSubscriberInPortalByEmail(@PathVariable(value="pid", required = true) String pid, @RequestBody Subscriber subscriber) throws ContentNotFoundException {
185
        PortalSubscribers communitySubscribers = portalSubscribersDAO.findByPid(pid);
186
        if(communitySubscribers == null){
187
            throw new ContentNotFoundException("Community Subscribers not found");
188
        }
189

    
190
        Subscriber savedSubscriber = subscriberDAO.findByEmail(subscriber.getEmail());
191
        if(savedSubscriber==null){
192
            savedSubscriber = subscriberDAO.save(subscriber);
193
        }
194
        for(Subscriber sub:communitySubscribers.getSubscribers()){
195
            if(sub.getEmail().equals(subscriber.getEmail())){
196
                //already subscribed
197
                return communitySubscribers;
198
            }
199
        }
200
        //not subscribed yet
201
        communitySubscribers.getSubscribers().add(savedSubscriber);
202
        return portalSubscribersDAO.save(communitySubscribers);
203

    
204
    }
205
    @RequestMapping(value = "/community/{pid}/subscribers/delete", method = RequestMethod.POST)
206
    public PortalSubscribers deleteSubscriberFromPortalByEmail(@PathVariable(value="pid", required = true) String pid, @RequestBody List<String> emails) throws ContentNotFoundException {
207
        PortalSubscribers communitySubscribers = portalSubscribersDAO.findByPid(pid);
208
        if(communitySubscribers == null){
209
            throw new ContentNotFoundException("Community Subscribers not found");
210
        }
211
        List<Subscriber> list = new ArrayList<>();
212
        for(Subscriber s:communitySubscribers.getSubscribers()){
213
            if(emails.indexOf(s.getEmail())==-1){
214
                list.add(s);
215
            }
216
        }
217
        communitySubscribers.setSubscribers(list);
218
        return portalSubscribersDAO.save(communitySubscribers);
219
    }
220

    
221
    @RequestMapping(value = "/subscriber/communities", method = RequestMethod.GET)
222
    public List<String> getPortalsPerSubcriber(//@RequestParam(value="email", required = true) String email,
223
                                                   @RequestHeader("X-XSRF-TOKEN") String token) {
224
        AuthorizationUtils helper = new AuthorizationUtils();
225
        helper.setUserInfoUrl(securityConfig.getUserInfoUrl());
226
        UserInfo userInfo = helper.getUserInfo(token);
227

    
228
        List<String> list = new ArrayList<>();
229

    
230
        if (userInfo != null) {
231
            String email = userInfo.getEmail();
232
            List<PortalSubscribers> communitySubscribers = portalSubscribersDAO.findAll();
233

    
234
            for (PortalSubscribers s : communitySubscribers) {
235
                for (Subscriber sub : s.getSubscribers()) {
236
                    if (sub.getEmail().equals(email)) {
237
                        list.add(s.getPid());
238
                        break;
239
                    }
240
                }
241
            }
242
        }
243
        return list;
244
    }
245
}
(8-8/11)