1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.broadcastproxy.service;
35
36 import java.util.Arrays;
37 import java.util.HashMap;
38 import java.util.List;
39 import java.util.Map;
40
41 import org.apache.commons.lang3.StringUtils;
42
43 import com.fasterxml.jackson.databind.JsonNode;
44 import com.fasterxml.jackson.databind.ObjectMapper;
45
46 import fr.paris.lutece.plugins.broadcastproxy.business.SubscriptionLink;
47 import fr.paris.lutece.plugins.broadcastproxy.business.SubscriptionLinkHome;
48 import fr.paris.lutece.plugins.broadcastproxy.business.providers.dolist.DolistConstants;
49 import fr.paris.lutece.portal.service.daemon.Daemon;
50 import fr.paris.lutece.portal.service.util.AppLogService;
51 import fr.paris.lutece.portal.service.util.AppPropertiesService;
52
53
54
55
56
57
58 public class BroadcastDaemon extends Daemon
59 {
60
61
62 private static final String JSON_NODE_ITEMLIST = AppPropertiesService.getProperty( "dolist.jsonNode.ItemList" );
63 private static final String JSON_NODE_GROUP = AppPropertiesService.getProperty( "dolist.jsonNode.item.Group" );
64 private static final String JSON_NODE_GROUP_ID = AppPropertiesService.getProperty( "dolist.jsonNode.item.GroupId" );
65 private static final String JSON_NODE_INTEREST_LIST = AppPropertiesService.getProperty( "dolist.jsonNode.item.InterestList" );
66 private static final String JSON_NODE_GROUP_NAME = AppPropertiesService.getProperty( "dolist.jsonNode.group.Name" );
67 private static final String JSON_NODE_DELETE_DATE = AppPropertiesService.getProperty( "dolist.jsonNode.interest.isActive" );
68 private static final String PROPERTY_ACCOUNT_ID = AppPropertiesService.getProperty( "dolist.CONSTANTE_ACCOUNT_ID" );
69 private static final String PROPERTY_GROUP_IDS = AppPropertiesService.getProperty( "dolist.list.group_ids" );
70
71 @Override
72 public void run( )
73 {
74 loadSubscription( PROPERTY_ACCOUNT_ID );
75 }
76
77
78
79
80 private void loadSubscription( String strAccountId )
81 {
82 BroadcastService broadcastService = BroadcastService.getInstance( );
83 String jsonAllSubscriptionsInterest = broadcastService.getAllSubscriptionByGroup( DolistConstants.TYPE_INTEREST, strAccountId );
84 String subscriptionsInJson = broadcastService.getAllSubscriptionByGroup( DolistConstants.TYPE_SUBSCRIPTION, strAccountId );
85
86 ObjectMapper mapper = new ObjectMapper( );
87 String groupName = StringUtils.EMPTY;
88 Map<String, String> subscriptionsMapIdName = new HashMap<>( );
89 List<String> listGroupIds = Arrays.asList( PROPERTY_GROUP_IDS.split( ";" ) );
90
91 try
92 {
93
94 JsonNode nodesSub = mapper.readTree( subscriptionsInJson );
95
96 JsonNode itemListNodeSub = nodesSub.get( JSON_NODE_ITEMLIST );
97
98 for ( JsonNode node : itemListNodeSub )
99 {
100 if ( node.get( "IsEnabled" ).asBoolean( ) )
101 {
102 subscriptionsMapIdName.put( node.get( JSON_NODE_GROUP_NAME ).asText( ), node.get( "ID" ).asText( ) );
103 }
104 }
105
106
107 JsonNode nodes = mapper.readTree( jsonAllSubscriptionsInterest );
108 if ( !nodes.get( JSON_NODE_ITEMLIST ).isNull( ) )
109 {
110 JsonNode itemListNode = nodes.get( JSON_NODE_ITEMLIST );
111
112 for ( JsonNode itemNode : itemListNode )
113 {
114 JsonNode groupData = itemNode.get( JSON_NODE_GROUP );
115
116 if( listGroupIds.contains( groupData.get( JSON_NODE_GROUP_ID ).asText( ) ) )
117 {
118 groupName = groupData.get( JSON_NODE_GROUP_NAME ).asText( );
119
120 if ( groupName.substring( 0, 1 ).equals( "[" ) && groupName.substring( groupName.length( ) - 1, groupName.length( ) ).equals( "]" ) && groupName.length( ) > 2 )
121 {
122 String[] splitDlGrName = groupName.split( "\\]" );
123 groupName = splitDlGrName[0].substring( 1, splitDlGrName[0].length( ) );
124 }
125
126 for ( JsonNode node : itemNode.get( JSON_NODE_INTEREST_LIST ) )
127 {
128 createSubscriptionLink( subscriptionsMapIdName, groupName, node );
129 }
130 }
131
132 }
133 }
134 } catch ( Exception e )
135 {
136 String strError = "Error occured while building list of all subscription.";
137 AppLogService.error( strError + e.getMessage( ), e );
138 }
139 }
140
141 private void createSubscriptionLink( Map<String, String> subscriptionsMapIdName, String groupName, JsonNode node )
142 {
143 String strName = node.get( JSON_NODE_GROUP_NAME ).asText( );
144
145 if ( subscriptionsMapIdName.containsKey( strName ) && !node.has( JSON_NODE_DELETE_DATE )
146 && !SubscriptionLinkHome.findBySubscriptionId( Integer.parseInt( subscriptionsMapIdName.get( strName ) ) ).isPresent( ) )
147 {
148 SubscriptionLinkproxy/business/SubscriptionLink.html#SubscriptionLink">SubscriptionLink subLink = new SubscriptionLink( );
149
150 subLink.setSubscriptionId( Integer.parseInt( subscriptionsMapIdName.get( strName ) ) );
151 subLink.setInterestId( node.get( "ID" ).asInt( ) );
152 subLink.setGroupId( node.get( "GroupID" ).asInt( ) );
153 subLink.setDescription( StringUtils.EMPTY );
154 subLink.setLabel( strName );
155 subLink.setPictogramme( StringUtils.EMPTY );
156 subLink.setFrequency( StringUtils.EMPTY );
157 subLink.setEnabled( true );
158 subLink.setGroup( groupName );
159
160 SubscriptionLinkHome.create( subLink );
161 }
162
163 }
164
165 }