Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
  */
 package org.apache.shindig.gadgets;
 
 
 import  com.google.inject.Inject;
 import  com.google.inject.Singleton;
 import  com.google.inject.name.Named;
 
Default implementation of a message bundle factory. Containers wishing to implement custom bundle fetching behavior should override fetchBundle.
 
 @Singleton
 public class DefaultMessageBundleFactory implements MessageBundleFactory {
   private static final Locale ALL_ALL = new Locale("all""ALL");
   public static final String CACHE_NAME = "messageBundles";
   static final Logger LOG = Logger.getLogger(DefaultMessageBundleFactory.class.getName());
   private final RequestPipeline pipeline;
   private final long refresh;
 
   @Inject
                                      CacheProvider cacheProvider,
                                      @Named("shindig.cache.xml.refreshInterval"long refresh) {
     this. = pipeline;
     Cache<StringMessageBundlebaseCache = cacheProvider.createCache();
     this. = new SoftExpiringCache<StringMessageBundle>(baseCache);
     this. = refresh;
   }
 
   public MessageBundle getBundle(GadgetSpec specLocale localeboolean ignoreCache)
       throws GadgetException {
 
     if (ignoreCache) {
       return getNestedBundle(speclocaletrue);
     }
 
     String key = spec.getUrl().toString() + '.' + locale.toString();
     CachedObject<MessageBundlecached = .getElement(key);
 
     MessageBundle bundle;
     if (cached == null || cached.isExpired) {
       try {
         bundle = getNestedBundle(speclocaleignoreCache);
       } catch (GadgetException e) {
         // Enforce negative caching.
         if (cached != null) {
           .info("MessageBundle fetch failed for " + key + " - using cached.");
           bundle = cached.obj;
         } else {
           // We create this dummy spec to avoid the cost of re-parsing when a remote site is out.
           .info("MessageBundle fetch failed for " + key + " - using default.");
           bundle = .;
         }
       }
       .addElement(keybundle);
     } else {
       bundle = cached.obj;
     }
 
     return bundle;
   }
 
   private MessageBundle getNestedBundle(GadgetSpec specLocale localeboolean ignoreCache)
       throws GadgetException {
    MessageBundle parent = getParentBundle(speclocaleignoreCache);
    MessageBundle child = null;
    LocaleSpec localeSpec = spec.getModulePrefs().getLocale(locale);
    if (localeSpec == null) {
      return parent == null ? . : parent;
    }
    Uri messages = localeSpec.getMessages();
    if (messages == null || messages.toString().length() == 0) {
      child = localeSpec.getMessageBundle();
    } else {
      child = fetchBundle(localeSpecignoreCache);
    }
    return new MessageBundle(parentchild);
  }
  private MessageBundle getParentBundle(GadgetSpec specLocale localeboolean ignoreCache)
      throws GadgetException {
    if (locale.getLanguage().equalsIgnoreCase("all")) {
      // Top most locale already.
      return null;
    }
    if (locale.getCountry().equalsIgnoreCase("ALL")) {
      return getBundle(specignoreCache);
    }
    return getBundle(specnew Locale(locale.getLanguage(), "ALL"), ignoreCache);
  }
  protected MessageBundle fetchBundle(LocaleSpec localeboolean ignoreCache)
      throws GadgetException {
    Uri url = locale.getMessages();
    HttpRequest request = new HttpRequest(url).setIgnoreCache(ignoreCache);
    // Since we don't allow any variance in cache time, we should just force the cache time
    // globally. This ensures propagation to shared caches when this is set.
    request.setCacheTtl((int) ( / 1000));
    HttpResponse response = .execute(request);
    if (response.getHttpStatusCode() != .) {
          "Unable to retrieve message bundle xml. HTTP error " +
          response.getHttpStatusCode());
    }
    return new MessageBundle(localeresponse.getResponseAsString());
  }
New to GrepCode? Check out our FAQ X