View Javadoc
1   /*
2    * Copyright (c) 2002-2015, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.quotientfamille.web;
35  
36  import fr.paris.lutece.plugins.quotientfamille.business.FormData;
37  import fr.paris.lutece.plugins.quotientfamille.dataclient.RevenuDataClient;
38  import fr.paris.lutece.plugins.quotientfamille.dataclient.UserDataClient;
39  import fr.paris.lutece.plugins.quotientfamille.service.DirectoryData;
40  import fr.paris.lutece.plugins.quotientfamille.service.DirectoryDataService;
41  import fr.paris.lutece.plugins.quotientfamille.service.RedirectUtils;
42  import fr.paris.lutece.plugins.franceconnect.oidc.UserInfo;
43  import fr.paris.lutece.plugins.franceconnect.service.DataClientService;
44  import fr.paris.lutece.plugins.quotientfamille.business.QuotientFamilial;
45  import fr.paris.lutece.portal.service.security.LuteceUser;
46  import fr.paris.lutece.portal.service.security.SecurityService;
47  import fr.paris.lutece.portal.service.security.UserNotSignedException;
48  import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
49  import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
50  import fr.paris.lutece.portal.util.mvc.xpage.MVCApplication;
51  import fr.paris.lutece.portal.util.mvc.xpage.annotations.Controller;
52  import fr.paris.lutece.portal.web.xpages.XPage;
53  
54  import java.util.Map;
55  
56  import javax.servlet.http.HttpServletRequest;
57  
58  
59  /**
60   * This class provides a simple implementation of an XPage
61   */
62  @Controller( xpageName = "quotientfamille", pageTitleI18nKey = "quotientfamille.xpage.quotientfamille.pageTitle", pagePathI18nKey = "quotientfamille.xpage.quotientfamille.pagePathLabel" )
63  public class FranceConnectSampleApp extends MVCApplication
64  {
65      // VIEWS
66      public static final String VIEW_HOME = "home";
67      public static final String VIEW_DEMARCHE_FORM = "demarcheForm";
68      public static final String VIEW_DEMARCHE_ETAPE2 = "demarcheEtape2";
69      public static final String VIEW_DEMARCHE_FIN = "demarcheFin";
70  
71      // ACTIONS
72      public static final String ACTION_START_DEMARCHE = "startDemarche";
73      public static final String ACTION_PROCESS_FORM = "processForm";
74  
75      // TEMPLATES
76      private static final String TEMPLATE_XPAGE = "/skin/plugins/quotientfamille/home.html";
77      private static final String TEMPLATE_DEMARCHE_FORM = "/skin/plugins/quotientfamille/demarche-form.html";
78      private static final String TEMPLATE_DEMARCHE_ETAPE2 = "/skin/plugins/quotientfamille/demarche-etape2.html";
79      private static final String TEMPLATE_DEMARCHE_FIN = "/skin/plugins/quotientfamille/demarche-etape-fin.html";
80      private static final String MARK_LASTNAME = "lastname";
81      private static final String MARK_GENDER = "gender";
82      private static final String MARK_FIRSTNAME = "firstname";
83      private static final String MARK_FORM_DATA = "form";
84      private static final String MARK_QUOTIENT_FAMILIAL = "qf";
85      private static final String MARK_ADDRESS = "address";
86      private static final String DATACLIENT_USER = "quotientfamille.user";
87      private static final String DATACLIENT_REVENU = "quotientfamille.revenu";
88      private static final long serialVersionUID = 1L;
89      private UserInfo _userInfo;
90      private QuotientFamilial _quotientFamilial;
91      private FormData _formData;
92      private DirectoryData _directoryData=new DirectoryData();;
93  
94      /**
95       * Returns the content of the page quotientfamille.
96       * @param request The HTTP request
97       * @return The view
98       */
99      @View( value = VIEW_HOME, defaultView = true )
100     public XPage viewHome( HttpServletRequest request )
101     {
102         return getXPage( TEMPLATE_XPAGE, request.getLocale(  ) );
103     }
104 
105     /**
106      * Start the process by connecting to FranceConnect
107      * @param request The HTTP request
108      * @return Redirection
109      */
110     @Action( ACTION_START_DEMARCHE )
111     public XPage startDemarche( HttpServletRequest request )
112     {
113         _userInfo = (UserInfo) request.getSession(  ).getAttribute( UserDataClient.ATTRIBUTE_USERINFO );
114 
115         if ( _userInfo == null )
116         {
117             String strUrl = DataClientService.instance(  ).getDataClientUrl( DATACLIENT_USER );
118 
119             return redirect( request, strUrl );
120         }
121 
122         return redirectView( request, VIEW_DEMARCHE_FORM );
123     }
124 
125     /**
126      * Returns the content of the page quotientfamille.
127      * @param request The HTTP request
128      * @return The view
129      */
130     @View( VIEW_DEMARCHE_FORM )
131     public XPage viewDemarcheForm( HttpServletRequest request )
132     {
133         _userInfo = (UserInfo) request.getSession(  ).getAttribute( UserDataClient.ATTRIBUTE_USERINFO );
134 
135         if ( _userInfo == null )
136         {
137             return redirect( request, RedirectUtils.getActionUrl( request, ACTION_START_DEMARCHE ) );
138         }
139 
140         Map<String, Object> model = getModel(  );
141         model.put( MARK_FIRSTNAME, _userInfo.getGivenName(  ) );
142         model.put( MARK_LASTNAME, _userInfo.getFamilyName(  ) );
143         model.put( MARK_GENDER, _userInfo.getGender(  ) );
144         _directoryData.setPrenom(_userInfo.getGivenName(  ));
145         _directoryData.setNomFamille(_userInfo.getFamilyName(  ));
146         return getXPage( TEMPLATE_DEMARCHE_FORM, request.getLocale(  ), model );
147     }
148 
149     /**
150      * Process the form
151      * @param request The HTTP request
152      * @return Redirection
153      */
154     @Action( ACTION_PROCESS_FORM )
155     public XPage processForm( HttpServletRequest request )
156     {
157         _formData = new FormData(  );
158         populate( _formData, request );
159 
160         if ( !validateBean( _formData ) )
161         {
162             // TODO Process error
163         }
164 
165         System.out.println( "Données du formulaire : " + _formData.getPrenomEnfant(  ) + " " +
166             _formData.getNomEnfant(  ) );
167 
168         return redirect( request, DataClientService.instance(  ).getDataClientUrl( DATACLIENT_REVENU ) );
169     }
170 
171     /**
172      * Display the view Etape2
173      * @param request The HTTP request
174      * @return The XPage
175      */
176     @View( VIEW_DEMARCHE_ETAPE2 )
177     public XPage viewDemarcheEtape2( HttpServletRequest request )
178     {
179         _userInfo = (UserInfo) request.getSession(  ).getAttribute( UserDataClient.ATTRIBUTE_USERINFO );
180 
181         Map<String, Object> model = getModel(  );
182         model.put( MARK_FORM_DATA, _formData );
183         model.put( MARK_FIRSTNAME, _userInfo.getGivenName(  ) );
184         model.put( MARK_LASTNAME, _userInfo.getFamilyName(  ) );
185         model.put( MARK_ADDRESS , request.getSession(  ).getAttribute(RevenuDataClient.ATTRIBUTE_ADDRESSEFISCALE ));
186         _quotientFamilial = (QuotientFamilial) request.getSession(  ).getAttribute(RevenuDataClient.ATTRIBUTE_QUOTIENTFAMILIAL );
187         if ( _quotientFamilial != null ) {
188             model.put( MARK_QUOTIENT_FAMILIAL, _quotientFamilial );
189             _directoryData.setRevenuFiscal( Integer.toString( _quotientFamilial.getRevenuFiscalReference(  ) ) );
190             _directoryData.setNombrePart( Double.toString( _quotientFamilial.getNombreParts(  ) ) );
191             _directoryData.setCivilite("XXX");
192             LuteceUser user;
193             try {
194               user = SecurityService.getInstance().getRemoteUser(request);
195               if (user != null) {
196                 _directoryData.setMail(user.getName());
197               } else {
198                 _directoryData.setMail("user@paris.fr");
199               }
200             } catch (Exception e) {
201               e.printStackTrace();
202               _directoryData.setMail("user@paris.fr");
203             }
204             _directoryData.setNumero(Integer.toString((int)(Math.random()*10000)));
205             _directoryData.setUsage("XXX");
206 
207             DirectoryDataService.pushInDirectory(_directoryData, request);
208         }
209 
210         return getXPage( TEMPLATE_DEMARCHE_ETAPE2, request.getLocale(  ), model );
211     }
212 
213     /**
214      * Display the view Etape FIN
215      * @param request The HTTP request
216      * @return The XPage
217      */
218     @View( VIEW_DEMARCHE_FIN )
219     public XPage viewDemarcheFin( HttpServletRequest request )
220     {
221         return getXPage( TEMPLATE_DEMARCHE_FIN, request.getLocale(  ) );
222     }
223 }