深入浅出 jackrabbit 三 创建 document
2009-09-17 00:00:00 来源:WEB开发网重点:最后一个需要说明的field是下面这段代码产生的field:
Java代码
InternalValue[] values = propState.getValues();
for (int i = 0; i < values.length; i++) {
addValue(doc, values[i], propState.getName());
}
这段代码ahuaxuan之前已经加了一点注释,下面我们来深入到方法的内部来看看这个方法究竟会创建什么样的field。下面这个方法看上去有点长,好像很会创建很多种field的样子,非也,下面这段代码其实只会创建3种field。
Java代码
private void addValue(Document doc, InternalValue value, Name name) {
String fieldName = name.getLocalName();
try {
fieldName = resolver.getJCRName(name);
} catch (NamespaceException e) {
// will never happen
}
switch (value.getType()) {
case PropertyType.BINARY:
if (isIndexed(name)) {
//很重要,如果是二进制的property,那么在这个方法里会被解析
addBinaryValue(doc, fieldName, value.getBLOBFileValue());
}
break;
case PropertyType.BOOLEAN:
if (isIndexed(name)) {
addBooleanValue(doc, fieldName, Boolean.valueOf(value.getBoolean()));
}
break;
case PropertyType.DATE:
if (isIndexed(name)) {
addCalendarValue(doc, fieldName, value.getDate());
}
break;
case PropertyType.DOUBLE:
if (isIndexed(name)) {
addDoubleValue(doc, fieldName, new Double(value.getDouble()));
}
break;
case PropertyType.LONG:
if (isIndexed(name)) {
addLongValue(doc, fieldName, new Long(value.getLong()));
}
break;
case PropertyType.REFERENCE:
if (isIndexed(name)) {
addReferenceValue(doc, fieldName, value.getUUID());
}
break;
case PropertyType.PATH:
if (isIndexed(name)) {
addPathValue(doc, fieldName, value.getPath());
}
break;
case PropertyType.STRING:
//很重要,普通string的property也会成为一种field,而binary和//string之间的case其实都是一种field。也就是说这个方法里负责创建3种//field。
if (isIndexed(name)) {
// never fulltext index jcr:uuid String
if (name.equals(NameConstants.JCR_UUID)) {
addStringValue(doc, fieldName, value.getString(),
false, false, DEFAULT_BOOST);
} else {
addStringValue(doc, fieldName, value.getString(),
true, isIncludedInNodeIndex(name),
getPropertyBoost(name));
}
}
break;
case PropertyType.NAME:
// jcr:primaryType and jcr:mixinTypes are required for correct
// node type resolution in queries
if (isIndexed(name) ||
name.equals(NameConstants.JCR_PRIMARYTYPE) ||
name.equals(NameConstants.JCR_MIXINTYPES)) {
addNameValue(doc, fieldName, value.getQName());
}
break;
default:
throw new IllegalArgumentException("illegal internal value type");
}
}
Tags:深入浅出 jackrabbit 创建
编辑录入:爽爽 [复制链接] [打 印]- ››深入浅出实战攻防恶意PDF文档
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
- ››创建 Android 系统步骤简介
- ››创建 Android SD Card 映像的方法
更多精彩
赞助商链接