]> source.dussan.org Git - archiva.git/blob
2400e0ce49fe20d4a976ef0b6622a09bd949e066
[archiva.git] /
1 package org.apache.archiva.rest.services;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
22 import org.apache.archiva.rest.api.services.CommonServices;
23 import org.apache.commons.io.IOUtils;
24 import org.apache.commons.lang.StringUtils;
25 import org.codehaus.redback.rest.api.services.RedbackServiceException;
26 import org.codehaus.redback.rest.api.services.UtilServices;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import org.springframework.stereotype.Service;
30
31 import javax.inject.Inject;
32 import javax.ws.rs.core.Response;
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.io.StringReader;
36 import java.util.Map;
37 import java.util.Properties;
38
39 /**
40  * @author Olivier Lamy
41  */
42 @Service( "commonServices#rest" )
43 public class DefaultCommonServices
44     implements CommonServices
45 {
46
47     private Logger log = LoggerFactory.getLogger( getClass() );
48
49     @Inject
50     private UtilServices utilServices;
51
52     public String getI18nResources( String locale )
53         throws ArchivaRestServiceException
54     {
55         Properties properties = new Properties();
56
57         StringBuilder resourceName = new StringBuilder( "org/apache/archiva/i18n/default" );
58         try
59         {
60
61             loadResource( properties, resourceName, locale );
62
63         }
64         catch ( IOException e )
65         {
66             log.warn( "skip error loading properties {}", resourceName.toString() );
67         }
68
69         return fromProperties( properties );
70     }
71
72     private void loadResource( Properties properties, StringBuilder resourceName, String locale )
73         throws IOException
74     {
75         // load default
76         loadResource( properties, new StringBuilder( resourceName ).append( ".properties" ).toString() );
77         // if locale override with locale content
78         if ( StringUtils.isNotEmpty( locale ) )
79         {
80             loadResource( properties,
81                           new StringBuilder( resourceName ).append( "_" + locale ).append( ".properties" ).toString() );
82         }
83
84     }
85
86     private String fromProperties( final Properties properties )
87     {
88         StringBuilder output = new StringBuilder();
89
90         for ( Map.Entry<Object, Object> entry : properties.entrySet() )
91         {
92             output.append( (String) entry.getKey() ).append( '=' ).append( (String) entry.getValue() );
93             output.append( '\n' );
94         }
95
96         return output.toString();
97     }
98
99     private void loadResource( final Properties finalProperties, String resourceName )
100         throws IOException
101     {
102         InputStream is = null;
103         Properties properties = new Properties();
104         try
105         {
106             is = Thread.currentThread().getContextClassLoader().getResourceAsStream( resourceName.toString() );
107             if ( is != null )
108             {
109                 properties.load( is );
110                 finalProperties.putAll( properties );
111             }
112             else
113             {
114                 log.info( "cannot load resource {}", resourceName );
115             }
116         }
117         finally
118         {
119             IOUtils.closeQuietly( is );
120         }
121     }
122
123     public String getAllI18nResources( String locale )
124         throws ArchivaRestServiceException
125     {
126         try
127         {
128             String redbackProps = utilServices.getI18nResources( locale );
129             String archivaProps = getI18nResources( locale );
130             Properties properties = new Properties();
131             loadFromString( redbackProps, properties );
132             loadFromString( archivaProps, properties );
133             return fromProperties( properties );
134         }
135         catch ( RedbackServiceException e )
136         {
137             throw new ArchivaRestServiceException( e.getMessage(), e.getHttpErrorCode() );
138         }
139     }
140
141     private void loadFromString( String propsStr, Properties properties )
142         throws ArchivaRestServiceException
143     {
144
145         StringReader stringReader = null;
146         try
147         {
148             stringReader = new StringReader( propsStr );
149             properties.load( stringReader );
150         }
151         catch ( IOException e )
152         {
153             throw new ArchivaRestServiceException( e.getMessage(),
154                                                    Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
155         }
156         finally
157         {
158             IOUtils.closeQuietly( stringReader );
159         }
160     }
161 }