2021SC@SDUSC【软件工程应用与实践】Cocoon项目3——core文件夹分析(2)

2021SC@SDUSC

BlockContextSource.java

1、总结

TraversableSource:继承自source,它类似于一个文件系统,只有一个父类,但可以有多个子类,BlockContextSource则将直接的子类添加blockcontext:/ uri 中
继承自AbstractSource
实现了 TraversableSource接口

2、方法

public Source getChild(String name) throws SourceException

  • 获取这个source的一个子类并为其命名,返回子类的source
  • 注:返回的source可能是没有意义的,必须使用 Source.exists()进行检查

private static Source adjustName(final TraversableSource source, final String blockName)

  • 调整可遍历源,使其使用块名称作为名称,而不是块名称解析到的源中的目录名称

public Collection getChildren() throws SourceException

  • 当source属于TraversableSource时获取source的全部子类
  • 注:只有那些从collection中实际获取的source需要使用 SourceResolver释放
  • SourceResolver:按系统标识符解析source的基本接口,解析器为每个source创建一个对象,当不再需要对象时,必须使用解析器释放对象

public String getName()

  • 返回该source相对于其父类的名称

public Source getParent() throws SourceException

  • 获取source的父类并将其作为一个source对象,在该文件中实际为根节点,调用此方法返回null

public boolean isCollection()

  • 判断这个source是不是collection,即判断其是否可能产生子类。对于基于文件系统的实现,这通常意味着该source表示目录而不是文件

3、补充

1、Map:将键映射到值的对象。不能包含重复的键;每个键最多可以映射到一个值。这个接口取代了 Dictionary 类,Dictionary是一个完全抽象的类而不是一个接口。
Map 接口提供了三个集合视图,允许将map的内容视为一组键、一组值或一组键值映射。 map的顺序定义为集合视图上的迭代器返回其元素的顺序。 一些map实现,如 TreeMap 类,对它们的顺序做出特定保证; 其他的比如 HashMap 类则没有。

2、Hashmap:基于哈希表实现的Map接口。这个实现提供了所有可选的map操作,并允许空值和空键。(HashMap类大致相当于Hashtable,除了它是非同步的,并且允许为空),这个类不保证映射的顺序;特别是,它不能保证顺序随时间保持不变

BlockContextSourceFactory.java

1、总结

创建一个BlockContextSource使块的资源可用,url的形式是块状文本:/块名/路径
继承自AbstractLogEnabled
实现了Serviceable, SourceFactory, ThreadSafe接口

2、方法

public Source getSource(String location,Map parameters)

  • 对SourceFactory接口的实现,获取source对象。
  • 工厂创建一个新的source对象,可用于应用程序。但是,当不再需要此source对象时,必须使用release(Source)方法释放
  • Location—— 要解决的 URI - 此 URI 包括该计划
    Parameters——附加命名参数(可选可null)驱动对象的创建。每个实现必须指定其接受的参数

public void release(Source source)

  • 释放不再需要的source对象

ExpiresCachingSourceValidityStrategy.java

1、总结

存储过期缓存和原来source的有效性,前者决定了是否要检查后者
继承自Object
实现了CachingSourceValidityStrategy接口

2、方法

public SourceValidity[] getCacheValidities(CachingSource cachingSource,Source source)

  • 对CachingSourceValidityStrategy接口的实现。
  • 获取有效性对象。这可以包装最后的修改日期或过期的信息,如果目前无法计算此信息,则返回null

public boolean checkValidity(CachedSourceResponse response,Source source,long expires)

  • 对过期缓存进行判断,决定是否检查source或者设置新的缓存期

4、TraversableCachingSource.java

1、总结

CachingSource的其中一个版本,其中TraversableSource的实现与BlockContextSource基本相同,不再过多赘述
继承自CachingSource
实现了 TraversableSource接口

2、方法

public boolean checkValidity(CachedSourceResponse response,Source source,long expires)

  • 从source中读取元数据
  • CachingSource:这个类实现了一个类似source的代理,它使用另一个source来获取内容,此实现可以缓存给定时间段的内容
  • CachingSource.SourceMeta用于缓存source元数据的持有者

协议语法:
cached:http://www.apache.org/[?cocoon:cache-expires=60&cocoon:cache-name=main][&cocoon:cache-fail=true]

以上示例显示了如何包装真实source和缓存内容,同一source可使用多个缓存条目,过期参数的价值具有额外语义。该参数允许后续的同步请求(必须刷新)失败,以防无法联系到封装的source

private static String getChildURI(String parentURI, boolean isCollection, String childName)

  • 根据父 URI 和子名称计算缓存的子 URI
  • 将查询字符串与 parentURI 的其余部分分开,再计算子URL

private static String getParentURI(String childURI)

  • 根据子 URI 计算缓存的父 URI
  • 将查询字符串与 uri 的其余部分分开,计算无qs 的父 uri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值