]> source.dussan.org Git - archiva.git/blob
b768807fdfbfc9b43b7e307559fe0bd5ff541caf
[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( 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( Properties properties, String resourceName )
100         throws IOException
101     {
102         InputStream is = null;
103
104         try
105         {
106             is = Thread.currentThread().getContextClassLoader().getResourceAsStream( resourceName.toString() );
107             if ( is != null )
108             {
109                 properties.load( is );
110             }
111         }
112         finally
113         {
114             IOUtils.closeQuietly( is );
115         }
116     }
117
118     public String getAllI18nResources( String locale )
119         throws ArchivaRestServiceException
120     {
121         try
122         {
123             String redbackProps = utilServices.getI18nResources( locale );
124             String archivaProps = getI18nResources( locale );
125             Properties properties = new Properties();
126             loadFromString( redbackProps, properties );
127             loadFromString( archivaProps, properties );
128             return fromProperties( properties );
129         }
130         catch ( RedbackServiceException e )
131         {
132             throw new ArchivaRestServiceException( e.getMessage(), e.getHttpErrorCode() );
133         }
134     }
135
136     private void loadFromString( String propsStr, Properties properties )
137         throws ArchivaRestServiceException
138     {
139
140         StringReader stringReader = null;
141         try
142         {
143             stringReader = new StringReader( propsStr );
144             properties.load( stringReader );
145         }
146         catch ( IOException e )
147         {
148             throw new ArchivaRestServiceException( e.getMessage(),
149                                                    Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
150         }
151         finally
152         {
153             IOUtils.closeQuietly( stringReader );
154         }
155     }
156 }