2021SC@SDUSC
core文件夹分析(2)
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