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.childpages.business.portlet;
35
36 import java.util.ArrayList;
37 import java.util.List;
38
39 import fr.paris.lutece.portal.business.page.Page;
40 import fr.paris.lutece.portal.business.page.PageHome;
41 import fr.paris.lutece.portal.business.portlet.Portlet;
42 import fr.paris.lutece.portal.business.portlet.PortletHome;
43 import fr.paris.lutece.portal.service.page.PageEvent;
44 import fr.paris.lutece.portal.service.page.PageEventListener;
45 import fr.paris.lutece.portal.service.page.PageService;
46
47
48
49
50 public class EventListener implements PageEventListener
51 {
52
53
54
55 private final ThreadLocal<Boolean> secondaryEvent;
56
57
58
59
60 public EventListener( )
61 {
62 secondaryEvent = new ThreadLocal<Boolean>( ) {
63
64 @Override
65 protected Boolean initialValue( )
66 {
67 return false;
68 }
69
70 };
71 PageService.addPageEventListener( this );
72 }
73
74
75
76
77
78 @Override
79 public void processPageEvent( PageEvent event )
80 {
81 if ( secondaryEvent.get( ) )
82 {
83
84
85 return;
86 }
87
88
89 secondaryEvent.set( true );
90 try {
91 int parentPageId = event.getPage( ).getParentPageId( );
92 if ( parentPageId == 0 )
93 {
94
95 return;
96 }
97 List<Integer> parentPageIds = new ArrayList<Integer>( 2 );
98 parentPageIds.add( parentPageId );
99 if ( parentPageId != event.getPage( ).getOrigParentPageId( ) )
100 {
101 parentPageIds.add( event.getPage( ).getOrigParentPageId( ) );
102 }
103 for ( Integer pageId : parentPageIds )
104 {
105
106 Page parentPage = PageHome.findByPrimaryKey( pageId );
107 List<Portlet> portlets = parentPage.getPortlets( );
108 String childPagesPortletId = ChildPagesPortletHome.getInstance( ).getPortletTypeId( );
109 for ( Portlet aPortlet : portlets )
110 {
111 if ( aPortlet.getPortletTypeId( ).equals( childPagesPortletId ) )
112 {
113 ChildPagesPortlet../../fr/paris/lutece/plugins/childpages/business/portlet/ChildPagesPortlet.html#ChildPagesPortlet">ChildPagesPortlet cpPortlet = ( ChildPagesPortlet ) aPortlet;
114 if ( cpPortlet.getParentPageId( ) == 0 )
115 {
116 PortletHome.invalidate( aPortlet );
117 }
118 }
119 }
120
121 List<ChildPagesPortlet> childPagesportlets = ChildPagesPortletHome.getChildPagesPortlets( pageId );
122 for ( ChildPagesPortlet aPortlet : childPagesportlets )
123 {
124 PortletHome.invalidate( aPortlet );
125 }
126 }
127 } finally
128 {
129
130 secondaryEvent.set( false );
131 }
132 }
133 }