3

ドキュメント

顧客のリソース ローダーを持つオプションがあることを約束します。対応するドキュメント リンク

2015-04-15 の時点で壊れています。これに関する問題は次のように提出されています

状況をリバース エンジニアリングすると、次のような情報源が得られます。

および次のようないくつかのバグレポート:

質問: カスタム ResourceLoader の簡単な作業例はどこにありますか?

特に、リソースがファイルシステムからではなく、別のソースからロードされる場合、たとえば RESTFul Web 呼び出しを介してロードされる場合は、最小で何が実装されますか?

以下は、例がどのように見えるかのいくつかのコードスニペットです - これは有効な例ですか? コードニペットは、カスタム テンプレートがプレフィックス「カスタム」で示される「名前空間」を使用することを前提としています。したがって、@custom.test は、このカスタム ResourceLoader を介してテンプレート「test」をロードしようとします。簡単にするために、Rythmsuffix、codetype などは単純に無視されます。

CustomTemplateResourceLoader:

package org.rythm.custom;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.rythmengine.RythmEngine;
import org.rythmengine.extension.ICodeType;
import org.rythmengine.extension.ITemplateResourceLoader;
import org.rythmengine.internal.compiler.TemplateClass;
import org.rythmengine.resource.ITemplateResource;
import org.rythmengine.resource.TemplateResourceManager;
import org.rythmengine.template.ITemplate;

/**
 * a custom TemplateResourceLoader for the Rythm template engine
 */
public class CustomResourceLoader implements ITemplateResourceLoader {
 protected static Logger LOGGER = Logger.getLogger("org.rythm.custom");
 private RythmEngine engine;
 private Map<String,CustomTemplateResource> resources=new LinkedHashMap<String,CustomTemplateResource>();
 @Override
  public String getResourceLoaderRoot() {
    LOGGER.log(Level.WARNING, "getResourceLoaderRoot not implemented");
    String result = "";
    return result;
  }

/**
 * get the resource for the given path
 * @param path
 * @return
 */
 public CustomTemplateResource getResource(String path) {
   if (resources.containsKey(path)) {
     return resources.get(path);
   }
   if (path.startsWith("custom.")) {
     try {
        CustomTemplateResource template = new CustomTemplateResource(this,path);
        resources.put(path,template);
        return template;
      } catch (Exception e) {
         LOGGER.log(Level.SEVERE,e.getMessage());
      }
    }
    return null;  
 }

  @Override
  public ITemplateResource load(String path) {
    LOGGER.log(Level.WARNING, "load '" + path + "' not implemented");
    return getResource(path);
  }

  @Override
  public TemplateClass tryLoadTemplate(String tmplName, RythmEngine engine,
      TemplateClass callerClass, ICodeType codeType) {
    if (engine.templateRegistered(tmplName))
      return null;
    if (!tmplName.startsWith("custom."))
      return null;
    String rythmSuffix = engine.conf().resourceNameSuffix();
    String key = tmplName;
    TemplateClass tc = engine.classes().getByTemplate(key);
    if (tc == null) {
      try {
        CustomTemplateResource customTemplate =getResource(key);
        tc = new TemplateClass(customTemplate, engine);
        ITemplate template = tc.asTemplate(engine);
        if (null != template) {
           engine.registerTemplate(key, template);
        }
      } catch (Exception e) {
         LOGGER.log(Level.SEVERE,e.getMessage()):
      }
    }
    return tc;
  }

  @Override
  public void scan(TemplateResourceManager manager) {
    LOGGER.log(Level.WARN,"scan not implemented");
  }


  @Override
  public void setEngine(RythmEngine engine) {
    this.engine = engine;
  }

  @Override
  public RythmEngine getEngine() {
    return this.engine;
  }

}

CustomTemplateResourceLoader:

package org.rythm.custom;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.rythmengine.resource.ITemplateResource;
import org.rythmengine.resource.TemplateResourceBase;

/**
 * 
 * @author wf
 *
 */
public class CustomTemplateResource extends TemplateResourceBase implements ITemplateResource{
  /**
   * 
   */
  private static final long serialVersionUID = 67049021377257267L;
  protected static Logger LOGGER = Logger.getLogger("org.rythm.custom");

  String key;

  /**
   * 
   * @param customTemplateResourceLoader 
   * @param tmplName
   * @throws Exception 
   */
  public CustomTemplateResource(CustomTemplateResourceLoader wikiTemplateResourceLoader, String tmplName) throws Exception {
    super(customTemplateResourceLoader);
    key=tmplName;
  }

  @Override
  public Object getKey() {
    return key;
  }

  @Override
  public boolean isValid() {
     return true;
  }

  @Override
  protected long defCheckInterval() {
    // 5 minutes?
    long result=1000 * 300;
    return result;
  }

  @Override
  protected long lastModified() {
    return 0;
  }

  @Override
  protected String reload() {
    String pageContent=null;
    ... get the pageContent with the key here 
    return pageContent;
  }

}
4

0 に答える 0