View Javadoc
1   /*
2    * Copyright (c) 2002-2017, 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.deployment.service;
35  
36  import fr.paris.lutece.plugins.deployment.business.Application;
37  import fr.paris.lutece.plugins.deployment.business.Environment;
38  import fr.paris.lutece.plugins.deployment.business.FtpInfo;
39  import fr.paris.lutece.plugins.deployment.business.IAction;
40  import fr.paris.lutece.plugins.deployment.business.ServerApplicationInstance;
41  import fr.paris.lutece.plugins.deployment.util.ConstanteUtils;
42  import fr.paris.lutece.plugins.deployment.util.DeploymentUtils;
43  import fr.paris.lutece.portal.service.i18n.I18nService;
44  import fr.paris.lutece.portal.service.spring.SpringContextService;
45  import fr.paris.lutece.portal.service.util.AppLogService;
46  import fr.paris.lutece.portal.service.util.AppPropertiesService;
47  
48  import java.util.ArrayList;
49  import java.util.HashMap;
50  import java.util.List;
51  import java.util.Locale;
52  
53  import javax.inject.Inject;
54  
55  public class ServerApplicationService implements IServerApplicationService
56  {
57      private static HashMap<String, ServerApplicationInstance> _hashServerApplicationInstance;
58      @Inject
59      private IEnvironmentService _environmentService;
60      @Inject
61      private IActionService _actionService;
62  
63      // public void setActionService(IActionService actionService) {
64      // _actionService = actionService;
65      // }
66  
67      /*
68       * (non-Javadoc)
69       * 
70       * @see fr.paris.lutece.plugins.deployment.service.IEnvironmentService#getListServerApplicationInstance(java.lang.String, java.lang.String)
71       */
72      public HashMap<String, List<ServerApplicationInstance>> getHashServerApplicationInstance( Application application, String strServerApplicationType,
73              Locale locale, boolean withActions, boolean withStatus )
74      {
75          HashMap<String, List<ServerApplicationInstance>> hashServerApplicationInstance = new HashMap<String, List<ServerApplicationInstance>>( );
76          List<Environment> listEnvironments = _environmentService.getListEnvironments( application.getCode( ), locale );
77  
78          if ( listEnvironments != null )
79          {
80              List<ServerApplicationInstance> listServerApplicationInstance;
81  
82              for ( Environment environment : listEnvironments )
83              {
84                  listServerApplicationInstance = new ArrayList<ServerApplicationInstance>( );
85                  listServerApplicationInstance.addAll( getListServerApplicationInstanceByEnvironment( application, environment.getCode( ),
86                          strServerApplicationType, locale, withActions, withStatus ) );
87                  hashServerApplicationInstance.put( environment.getCode( ), listServerApplicationInstance );
88              }
89          }
90  
91          return hashServerApplicationInstance;
92      }
93  
94      public List<ServerApplicationInstance> getListServerApplicationInstanceByEnvironment( Application application, String strCodeEnvironment,
95              String strServerApplicationType, Locale locale, boolean withActions, boolean withStatus )
96      {
97          String strPlateformEnvironmentBaseUrl = AppPropertiesService.getProperty( ConstanteUtils.PROPERTY_ENVIRONMENT_PLATEFORM_BASE_URL );
98          List<ServerApplicationInstance> listServerApplicationInstance = new ArrayList<ServerApplicationInstance>( );
99          List<String> listStrServerApplicationInstance;
100         String strWebserviceServerApplicationJsonObjectName = AppPropertiesService
101                 .getProperty( ConstanteUtils.PROPERTY_WEBSERVICE_SERVER_APPLICATION_INSTANCES_JSON_OBJECT_NAME );
102         String strWebserviceServerApplicationJsonDictionaryName = AppPropertiesService
103                 .getProperty( ConstanteUtils.PROPERTY_WEBSERVICE_SERVER_APPLICATION_INSTANCES_JSON_DICTIONARY_NAME );
104         String strJSONServerApplicationInstances = null;
105 
106         try
107         {
108             strJSONServerApplicationInstances = DeploymentUtils.callPlateformEnvironmentWs( strPlateformEnvironmentBaseUrl
109                     + ConstanteUtils.CONSTANTE_SEPARATOR_SLASH
110                     + DeploymentUtils.getPlateformUrlServerApplicationInstances( application.getCode( ), strCodeEnvironment, strServerApplicationType ) );
111         }
112         catch( Exception e )
113         {
114             AppLogService.error( e );
115         }
116 
117         if ( strJSONServerApplicationInstances != null )
118         {
119             listStrServerApplicationInstance = DeploymentUtils.getJSONDictionary( strWebserviceServerApplicationJsonObjectName,
120                     strWebserviceServerApplicationJsonDictionaryName, strJSONServerApplicationInstances );
121 
122             for ( String strServerApplicationInstance : listStrServerApplicationInstance )
123             {
124                 listServerApplicationInstance.add( getServerApplicationInstance( application, strServerApplicationInstance.toLowerCase( ), strCodeEnvironment,
125                         strServerApplicationType, locale, withActions, withStatus ) );
126             }
127         }
128 
129         return listServerApplicationInstance;
130     }
131 
132     public ServerApplicationInstance getServerApplicationInstance( Application application, String strServerInstanceCode, String strCodeEnvironment,
133             String strServerType, Locale locale, boolean withActions, boolean withStatus )
134     {
135         if ( _hashServerApplicationInstance == null )
136         {
137             initHashServerApplicationInstance( );
138         }
139 
140         ServerApplicationInstance defaultServerApplicationInstance = _hashServerApplicationInstance.get( strServerType
141                 + ConstanteUtils.CONSTANTE_SEPARATOR_POINT + strServerInstanceCode );
142         ServerApplicationInstance serverApplicationInstance = newServerApplicationInstance( defaultServerApplicationInstance.getBeanName( ), locale );
143         serverApplicationInstance.setCodeEnvironment( strCodeEnvironment );
144         serverApplicationInstance.setName( I18nService.getLocalizedString( serverApplicationInstance.getI18nKeyName( ), locale ) );
145         setFtpInfo( serverApplicationInstance, application.getCode( ) );
146 
147         if ( withActions )
148         {
149             serverApplicationInstance.setListServerApplicationAction( _actionService.getListActionByServerApplicationInstance( application,
150                     serverApplicationInstance, locale ) );
151         }
152 
153         if ( withStatus )
154         {
155             serverApplicationInstance.setStatus( getStatus( application, serverApplicationInstance ) );
156         }
157 
158         return serverApplicationInstance;
159     }
160 
161     public void setFtpInfo( ServerApplicationInstance serverApplicationInstance, String strCodeApplication )
162     {
163         // serverApplicationInstance.setFtpDirectoryTarget(DeploymentUtils.getDeployDirectoryTarget(strCodeApplication,serverApplicationInstance.getCodeEnvironment()
164         // , serverApplicationInstance.getCode()));
165         FtpInfo ftpInfo = new FtpInfo( );
166         ftpInfo.setHost( AppPropertiesService.getProperty( ConstanteUtils.PROPERTY_DEPLOYMENT_SERVER_APPLICATION_FTP_HOST ) );
167         ftpInfo.setPort( AppPropertiesService.getPropertyInt( ConstanteUtils.PROPERTY_DEPLOYMENT_SERVER_APPLICATION_FTP_PORT, 21 ) );
168         ftpInfo.setUserLogin( AppPropertiesService.getProperty( ConstanteUtils.PROPERTY_DEPLOYMENT_SERVER_APPLICATION_FTP_USER_LOGIN ) );
169         ftpInfo.setUserPassword( AppPropertiesService.getProperty( ConstanteUtils.PROPERTY_DEPLOYMENT_SERVER_APPLICATION_FTP_USER_PASSWORD ) );
170         serverApplicationInstance.setFtpInfo( ftpInfo );
171     }
172 
173     private void initHashServerApplicationInstance( )
174     {
175         List<ServerApplicationInstance> listServerApplicationInstance = SpringContextService.getBeansOfType( ServerApplicationInstance.class );
176         _hashServerApplicationInstance = new HashMap<String, ServerApplicationInstance>( );
177 
178         if ( listServerApplicationInstance != null )
179         {
180             for ( ServerApplicationInstance serverApplicationInstance : listServerApplicationInstance )
181             {
182                 _hashServerApplicationInstance.put(
183                         serverApplicationInstance.getType( ) + ConstanteUtils.CONSTANTE_SEPARATOR_POINT + serverApplicationInstance.getCode( ),
184                         serverApplicationInstance );
185             }
186         }
187     }
188 
189     private ServerApplicationInstance newServerApplicationInstance( String strBeanName, Locale locale )
190     {
191         return (ServerApplicationInstance) SpringContextService.getBean( strBeanName );
192     }
193 
194     private Integer getStatus( Application application, ServerApplicationInstance serverApplicationInstance )
195     {
196         if ( ( serverApplicationInstance != null ) && ( serverApplicationInstance.getListServerApplicationAction( ) != null ) )
197         {
198             for ( IAction action : serverApplicationInstance.getListServerApplicationAction( ) )
199             {
200                 if ( action.isUsedForStatus( ) )
201                 {
202                     boolean bResultOk = _actionService.executeAction( application, action, serverApplicationInstance, null );
203 
204                     return new Integer( new Boolean( bResultOk ) ? 1 : 0 );
205                 }
206             }
207         }
208 
209         return null;
210     }
211 }