使用 ObjectSet 应用程序导航对象的结构
在导入/导出中,在导航 <rule> 元素下添加了新的可选 <loadCondition> 元素。这些规则驻留在 <Windchill>\codebase\registry\ixb\object_set_handlers 下的 XML 文件中。
<loadCondition> 元素将具有完全限定的 <className> 和 <methodName>。对象导航框架将使用反射调用指定的方法。方法必须是静态的,必须返回布尔型,并且不能具有参数。如果指定的方法仅返回 true,则将加载该规则。如果不存在 <loadCondition>,则默认情况下会加载规则。
如果存在 <loadCondition> 元素,则框架首先调用指定的方法来决定是否应加载规则。
元素如下所示:
<loadCondition>
<className>xxxx</className>
<methodName>yyy</methodName>
</loadCondition>
示例:
<loadCondition>
<className>wt.ixb.objectset.ObjectSetHelper</className>
<methodName>isPDMLinkInstalled</methodName>
</loadCondition>
对象收集
将对象分配给导出进程时,ObjectSet 应用程序将完成在对象的结构中导航并收集其所有相关对象的工作。
导航的定义来自一组称为 navigation?rule 文件的 XML 文件。此外,ObjectSet 应用程序还使用称为生成器和筛选器的 Java 类来收集一组对象,这些对象将在未充分进行简单导航而需要应用某些编程逻辑时导出。
导航规则文件驻留在文件夹 <Windchill>\codebase\registry\ixb\object_set_handlers 中。
导航规则
导航规则有两种类型:生成器和筛选器。
• 生成器是应用程序用来遍历对象结构并获取其所有要导出的对象 (例如“使用”、“说明方”、“参考”等) 的规则。
• 筛选器是应用于要导出的对象的规则,以将某些对象排除在导出进程之外。例如,使用“按时间筛选”,我们可以选择导出在指定时间段内修改的对象。这是当前唯一可用的预设筛选器。
可用的 GeneratorIds 在标记为 <setGenerator> 的文件夹 <Windchill>\codebase\registry\ixb\object_set_handlers 中的 XML 文件中定义。可通过调用 IXBHelper.service.getGeneratorList() 来获得这些生成器 Id 的列表,将第一个参数传递为 false。该调用将返回系统中所有可用的生成器。
IXBHelper.service.getGeneratorList() 将第一个参数传递为 true 会返回生成器列表,该列表将显示在 GUI 中供最终用户选择。这有助于隐藏您不希望最终用户看到的生成器。要隐藏这些生成器,这些生成器的 XML 文件应将 <display> 标记设置为 false。
例如:<Windchill>\codebase\registry\ixb\object_set_handlers\product_struct.xml 中 WTPart 的 XML 文件段落。
<setGenerator>
<id>productStructureNavigator</id>
<handler>
wt.ixb.objectset.handlers.navigator.ProductStructureNavigator
</handler>
<dialogClassName>
wt.clients.ixb.exp.NavigatorSearchDialog
</dialogClassName>
<localizedName>
<localizedString>
<class>wt.ixb.objectset.objectSetResource</class>
<key>PRODUCT_STRUCTURE_NAME</key>
</localizedString>
</localizedName>
标记
对象导航
该机制是 Windchill 对象的 XML 规则驱动的“导航器”。给定种子 (顶层) 对象时,该机制使用指定规则在对象之间导航。可通过数据库链接、外键或指定方法执行导航。这是 WTPart 的规则定义的示例。种子为文件夹对象。
<Windchill>\codebase\registry\ixb\object_set_handlers\product_struct.xml
<handler>
wt.ixb.objectset.handlers.navigator.ProductStructureNavigator
</handler>
...
<schema>
...
<rule>
<for>wt.part.WTPart</for>
<go>
<byMethod>
<method>navigateFromWTPartToDescribeByDoc</method>
</byMethod>
</go>
</rule>
<rule>
<for>wt.part.WTPartDescribeLink</for>
<go>
<fromForeignKey>
<targetClass>wt.doc.WTDocument</targetClass>
<getMethodName>getDescribedBy</getMethodName>
</fromForeignKey>
</go>
</rule>
...
</schema>
上面的示例显示了两种可能的导航类型:通过导航方法从 WTPart 导航到 wt.part.WTPartDescribeLink,然后使用方法 getDescribedBy 从该位置获取描述 WTPart 的 WTDocument。然后,可以进行重要的语义步骤。
收集后,可通过一组已定义的筛选器来筛选对象。筛选器定义存储在同一对象集注册表中。以下是日期/时间筛选器的示例:
<Windchill>\codebase\registry\ixb\object_set_handlers\filter_by_time.xml
<setFilter>
<id>filterByTime</id>
<handler>wt.ixb.objectset.handlers.FilterByTime</handler>
<dialogClassName>
wt.clients.ixb.exp.FilterByTimeDialog
</dialogClassName>
<localizedName>
<localizedString>
<class>wt.ixb.objectset.objectSetResource</class>
<key>FILTER_BY_TIME_NAME</key>
</localizedString>
</localizedName>
<parameters>
</parameters>
</setFilter>
筛选机制以及对象收集在 StandardIXBService 级别与导出应用程序耦合。可将这些内容分开。
添加新导航器
要实现新导航器,在大多数情况下,您必须执行以下步骤:
1. 实现描述导航逻辑的 XML 规则文件。有关示例,请参阅 <Windchill>\codebase\registry\ixb\object_set_handlers\product_struct.xml。
2. 实现 wt.ixb.objectset.handlers.navigator.GeneralNavigator 的子类。您可能需要实现以下方法:
◦ public boolean canBeUsedAsTopLevelObject(Persistable obj)
◦ public String getTopLevelObjectLocalizedImage(Persistable obj)
此类导航方法将对象作为参数进行导航,然后返回枚举,该内容将添加到导出集中。例如,如果您指定以下规则:
<byMethod>
<method>navigateFromObject1ToObject2</method>
</byMethod>
然后,必须实现以下 Java 方法:
public Enumeration navigateFromObject1ToObject2 (Persistable ob)
throws WTException
现有生成器和筛选器列表
本附录为将使用 IX 对象收集机制的 GUI 开发人员提供了帮助,方法是调用:ObjectSetHelper.computeObjectSetForGivenGeneratorsAndFilters(generatorIds, generatorParams, filterIds, filterParams);
示例
具有所有子项的部件
genId[0] = “productStructureNavigator”;
genParams[ 0] = “wt.part.WTPart:6789”;
WTHashSet objects = (WTHashSet) ObjectSetHelper.
computeObjectSetForGivenGeneratorsAndFilters( genIds,
genParams,
new String [0 ],
new String [0 ]);
文件柜和文件夹 (包括子文件夹) 中的所有对象
genId[0] = genId[ 1] = “folderContent”;
genParams[ 0] = “wt.folder.Cabinet:1865”;
genParams[ 1] = “wt.folder.Subfolder:5674”;
WTHashSet objects = (WTHashSet) ObjectSetHelper.
computeObjectSetForGivenGeneratorsAndFilters( genIds,
genParams,
new String [0 ],
new String [0 ]);
| 警告:如果没有筛选器,则可以为 filterIds 和 filterParams 传递新的 String[0] (请勿传递空值,否则会抛出异常) |
要获取 GUI 的字符串常量,请参阅 <Windchill>Windchill\srclib\wnc\Carambola-java.jar。
生成器列表
字符串 id | 说明 | 本地化名称 - En (对于 GUI) | 参数作为字符串 |
---|
folderContent | 收集给定文件柜/文件夹 (包括子文件夹) 中的所有对象 | 文件柜和文件夹内容 | <class name:oid>,如下所示: wt.folder.Subfolder:1234 或 wt.folder.Cabinet:1234 |
productStructureNavigator | 收集给定部件的所有子项 (例如,该部件使用的部件和描述该部件的文档) | 使用活动的配置规范构建产品结构 | <class name:oid>,如下所示: wt.part.WTPart:1234,用于顶层对象。此对象必须是 WTPart 的实例 |
productStructureNavigatorEPM | 收集给定 CAD 文档的所有子项 | CAD 文档/动态文档结构 (使用最新配置规范构建) | <class name:oid>,如下所示: wt.epm.EPMDocument:1234,用于顶层对象。此对象必须是 EPMDocument 的实例 |
productStructureNavigatorWithEPM | 收集给定部件的所有子项,其中包括相关 CAD 文档 | 含 CAD 文档/动态文档的产品结构 (使用活动配置规范构建) | <class name:oid>,如下所示: wt.part.WTPart:1234,用于顶层对象。此对象必须是 WTPart 的实例 |
singleDocument | 仅接受给定文档 | 文档 | <class name:oid>,如下所示: wt.doc.WTDocument:1234 |
| 实际上,<class_name:oid> 是对象本地 id 还有其他特定于安装的生成器。 |
筛选器列表
字符串 id | 说明 | 本地化名称 - En (对于 GUI) | 参数作为字符串 |
---|
filterByTime | 筛选出修改时间在给定间隔之前/之后的对象 | 基于修改时间进行筛选 | <timeFrom#timeTo>,其中 timeFrom 和 timeTo = "null" 或 Timestamp.toString() |
有关输出/输入应用程序的示例:
当前的 Windchill 导出预设 GUI,而 StandardIXBService 是导出应用程序。
预设 Windchill 导出 GUI 是导出应用程序 (客户端),该应用程序可通过 IXBHelper 调用 StandardIXBService (导出应用程序 (服务器)) 中的导出进程。
ObjectExportParameters exportParam = new ObjectExportParameters ();
exportParam.setActionName(actorName);
exportParam.setClientFileName(jarFileName);
exportParam.setContainer(container);
exportParam.setDetailedLog(detailedLog);
exportParam.setGuiId(reqGUIid);
exportParam.setPolicyFile(policyFile);
exportParam.setPreviewOnly(isPreview);
exportParam.setRuleFile(ruleF);
exportParam.setValidation(false);
exportParam.setGenerators(generators);
exportParam.setFilters(filters);
exportParam.setLocale(RB.getLocale());
exportParam.setJarInJarFlag(jarInJar);
exportParam.getContextData().setIXApplicationContext(appContext);
try{
String formatType = WTProperties.getAppletProperties().
getProperty("wt.ixb.export.formatType");
if(formatType != null){
exportParam.setFormatType(ExportImportFormatType.
toExportImportFormatType(formatType));
}
}catch(Exception e){
}
IXBExpImpStatus status = IXBHelper.service.doExport ( exportParam);
• IXBHelper 是 wt.ixb.clientAccess 中的类。该类可调用类 StandardIXBService 的方法 doExport(…) 执行导出进程。
• IXBExpImpStatus 是 wt.ixb.clientsAccess 中的类,其中包含有关导出/导入进程的信息,可用于在服务器和客户端之间传递导出/导入状况。
• generatorIds - 请参阅上述定义。
• generatorParams 是将要导出的顶层对象的对象 Id 的数组。在当前的导出 GUI 中,将使用 NavigatorSearchDialog 选取这些对象。选择完成后,此对话框将返回 IXBSelectedNavInfo 的列表 (其中包含导航器 Id 和生成器 Id),并将种子对象作为 objectId。在提供对象 obj 的情况下,我们可以使用 IXBHelper.service.getObjectId(obj) 获取对象 Id。
• filterIds - 请参阅上述定义
• filterParams 是对象属性的数组,用于根据筛选器的类型来设置要从导出进程中排除或包括在导出进程中的对象。
• ruleFile 是用于导出进程的规则文件。Exporter 可使用此文件为导出进程创建调节器。
• guiId 是从中调用导出进程的 GUI 的 id。有关如何创建 GUIid 的示例,请参阅类 wt.clients.ixb.util.ExpImpServerRequest 的方法 recordGuiIdInContext()。
• detailLog 指示是否应详细提供状况消息。
• stDtd 指定将使用哪个版本的输出/输入处理程序。该项用于支持向后兼容。如果 stDtd 为空或为空白 (“”),则将基于当前 Windchill 来计算 STRING_DTD。
• 调用方法 IXBHelper.service.doExport(…) 时,该项将调用 StandardIXBService 中的方法 doExportImpl(…)。
此方法:
◦ 创建常规导出处理程序 ExportHandler 处理程序。这是 StandardIXBService 的内部类。
◦ 获取将通过调用导出的对象的列表
ObjectSetHelper.computeObjectSetForGivenGeneratorsAndFilters (
generatorIds,
generatorParams,
filterIds,
filterParams);
◦ 创建执行导出的类 (Exporter) 的实例。
◦ 根据 isPreview (true/false),导出程序将通过调用本文档的 Exporter 类中提到的 Exporter 类的方法来执行预览或实际导出。
◦ 调用 ExportHandler 处理程序的清理方法。
导入应用程序
当前的 Windchill 导入 GUI 和 StandardIXBService 是导入应用程序。当前的 Windchill 导入预设 GUI 是导入应用程序客户端,可通过 IXBHelper 在 StandardIXBService (导入应用程序服务器) 中调用导入进程。
ObjectImportParameters importParam = new ObjectImportParameters ();
importParam.setActionName(actorName);
importParam.setContainer(container);
importParam.setDataFile(dataF);
importParam.setDetailedLog(detailedLog);
importParam.setGuiId(reqGUIid);
importParam.setPolicyFile(policyFile);
importParam.setPreviewOnly(isPreview);
importParam.setRuleFile(ruleF);
importParam.setValidation(true);
importParam.setLocale(RB.getLocale());
importParam.setOverrideConflicts(overrideC);
importParam.setContainerMappingFile(containerMappingFile);
importParam.getContextData().setIXApplicationContext(appContext);
IXBExpImpStatus status = IXBHelper.service.doImport (importParam );
该客户端可调用类 StandardIXBService 的方法 doImport(…) 执行导入进程。
IXBExpImpStatus 是 wt.ixb.clientsAccess 中的类,其中包含有关导出/导入进程的信息,可用于在服务器和客户端之间传递导出/导入状况。
ruleFile 是用于导出进程的规则文件。Importer 可使用此文件为导入进程创建调节器。
dataFile 是 jar 文件,其中包含将要导入的对象的 XML 文件。
overrideConflicts 指定是否必须覆盖可覆盖的冲突。
isPreview 指定该进程是应该执行实际导入还是检查冲突并显示要导入的对象。
guiId 是从中调用导出进程的 GUI 的 id。有关如何创建 GUIid 的示例,请参阅类 wt.clients.ixb.util.ExpImpServerRequest 的方法 recordGuiIdInContext()。
detailLog 指示是否应详细提供状况消息。
creatorName 指定如何创建顶层导入对象 (例如 EPMDocument、WTDocument、WTPart)。
stDtd 指定将使用哪个版本的输出/输入处理程序。该项用于支持向后兼容。如果 stDtd 为空或为空白 (“”),则将基于当前 Windchill 系统的版本来计算 STRING_DTD。
调用方法 IXBHelper.service.doImport(…) 时,将会调用 StandardIXBService 中的方法 doImportImpl(…)。
此方法:
• 将创建者名称放入 WTContext 中,以供导入处理程序使用。
• 创建常规导入处理程序 ImportHandler 处理程序。
• 从要通过调用 jar.getFileNamesByExtension ("xml") 导入的 Jar 文件中获取 XML 文件的列表;
• 创建执行导入工作的类 (Importer) 的实例。
• 根据 isPreview (true/false),方法 doImportImpl(…) 会调用 Importer 的适当方法来执行预览或实际导入:
◦ importer.doImport(流);
◦ importer.doPreview(流);
• 其他项 (importer.doImport(fn, tag) 和 importer.doPreview(fn,tag)) 用于优化,具体取决于 XML 文件的命名方式。此功能仅适用于特定的输出/输入应用程序 (wt.clients.ixb 和 StandardIXBService)。
• 将日志消息发送回客户端。
简单导出处理程序代码示例
import java.io.File;
import java.io.PrintStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;
import wt.pom.Transaction;
import wt.content.ApplicationData;
import wt.content.ContentItem;
import wt.content.Streamed;
import wt.ixb.publicforapps.ApplicationExportHandlerTemplate;
import wt.ixb.publicforhandlers.IxbElement;
import wt.ixb.publicforapps.Exporter;
import wt.ixb.publicforapps.IxbHelper;
import wt.ixb.objectset.ObjectSetHelper;
import wt.util.WTException;
import wt.util.WTMessage;
import wt.ixb.clientAccess.IXBJarWriter;
import wt.fc.Persistable;
public class SimpleApplicationExportHandler extends ApplicationExportHand
lerTemplate{
private File targetDir = null;
private PrintStream log = null;
private IXBJarWriter jw = null;
private File resJar = null;
private int fileNum = 0; //counter for exported content files
private HashSet contentFileNames = new HashSet(); //to handle
content files with the same name
public static final String NAME_IS_TAG = "TAG";
public final static String CONTENT_SUBDIR = "CONTENTS";
public SimpleApplicationExportHandler(File tmp_storeDir, PrintStream a_log)
throws WTException{
if (!tmp_storeDir.exists()){
tmp_storeDir.mkdirs();
}
targetDir = tmp_storeDir;
log = a_log;
}
public String storeContent (Object ob) throws WTException
{
String storeName = null;
if(ob instanceof ApplicationData)
{
ApplicationData obj = (ApplicationData)ob;
String fileName = obj.getFileName();
try
{
storeName = this.computeUniqueFileName(fileName);
Streamed sd = (Streamed)obj.getStreamData().getObject();
InputStream is = sd.retrieveStream();
jw.addEntry(is, storeName);
}
catch (IOException ioe)
{
throw new WTException(ioe);
}
}
return storeName;
}
public String storeDocument(IxbElement elem, String dtd)
throws WTException
{
try {
String tag = elem.getTag();
String fn = NAME_IS_TAG+"-"+tag+"-"+(fileNum++)+".xml";
File file = new File(targetDir,fn);
FileOutputStream stream
= new FileOutputStream (file);
elem.store(stream, dtd); stream.close();
jw.addEntry(file);
file.delete();
}
catch (IOException ioe){
throw new WTException(ioe);
}
}
public void storeLogMessage(String resourceBundle,
String messageKey,
Object[] textInserts)
throws WTException{
WTMessage m = new WTMessage(resourceBundle, messageKey, textInserts);
String s = m.getLocalizedMessage();
log.println(s);
}
public void storeLogMessage(String resourceBundle, String messageKey,
Object[] textInserts, int importanceLevel)
throws WTException{
storeLogMessage (resourceBundle, messageKey, textInserts);
}
public void exportObjectContent (Object obj, Exporter exporter, Content
Item item, String exportFileName)
throws WTException {
if (item instanceof ApplicationData) {
ApplicationData ad = (ApplicationData) item;
Streamed streamedIntfc = (Streamed) ad.getStreamData().getObject();
try{
InputStream is = streamedIntfc.retrieveStream();
jw.addEntry(is, exportFileName);
}
catch (IOException ioe){
throw new WTException(ioe);
}
}
}
private String computeUniqueFileName (String fn) throws IOException {
//compute file name in jar (should be unique)
if (contentFileNames.contains(fn)) {
// if simple content's name already has been used then look for
// name in form name-123.ext
// As a result will have names like: design.doc, design-23.doc,
design-57.doc, ...
int i = fn.lastIndexOf('.');
String fn_n = ( i>0 ? fn.substring(0, i) : fn);
String fn_t = ( i>0 ? fn.substring(i+1) : "" );
while (true) {
fn = (i>0 ?
fn_n + '-' + (fileNum++) + '.' + fn_t :
fn_n + '-' + (fileNum++)
);
if (!contentFileNames.contains(fn)) break;
}
}
contentFileNames.add(fn);
String fnInJar = CONTENT_SUBDIR + "/" + fn;
return fnInJar;
}
public File doExport( WTContainerRef container,
String[] generatorIds,
String[] generatorParams,
String[] filterIds,
String[] filterParams,
File ruleFile,
File policyFile,
String actionName,
String stDtd,
File resultingJar)
throws WTException{
//init jar file
resJar = resultingJar;
try{
jw = new IXBJarWriter(resultingJar);
}
catch (IOException ioe){
throw new WTException(ioe);
}
//adopt incoming rule file
IxbElement clientSettingsElement = null;
if (ruleFile!=null) {
try{
InputStream clientSettingsStream = new FileInputStream(ruleFile);
clientSettingsElement = IxbHelper.newIxbDocument
(clientSettingsStream,
false);
}
catch(IOException ioe){
throw new WTException(ioe);
}
}
//create exporter
Exporter exporter = null;
if ( policyFile==null ) { // policy rule is null; export action is
expected ...
exporter = IxbHelper.newExporter (this, IxbHelper.STANDARD_DTD,
clientSettingsElement, null, actionName );
}
else{
exporter = IxbHelper.newExporter (this, IxbHelper.STANDARD_DTD,
clientSettingsElement, policyFile, null );
}
//gen set of items to export
Set res = ObjectSetHelper.computeObjectSetForGivenGeneratorsAndFil
ters (generatorIds, generatorParams, filterIds, filterParams);
Iterator iter = res.iterator();
Transaction trx = new Transaction();
try {
if ( !(actionName != null && actionName.equals(wt.ixb.tuner.Exp
ortActionHelper.NO_ACTION_CMD) )){
trx.start();
}
while (iter.hasNext()) {
Persistable ob = (Persistable)iter.next();
exporter.doExport(ob);
}
exporter.finalizeExport();
if ( !(actionName != null && actionName.equals(wt.ixb.tuner.Exp
ortActionHelper.NO_ACTION_CMD) )){
trx.commit();
}
trx = null;
}
finally {
if (trx != null) {
if ( !(actionName != null && actionName.equals(wt.ixb.tuner.
ExportActionHelper.NO_ACTION_CMD) )){
trx.rollback();
}
trx = null;
}
}
try{
jw.finalizeJar();
}
catch(IOException ioe){
throw new WTException (ioe);
}
return resJar;
}
}
简单导入处理程序代码示例
import java.io.File;
import java.io.PrintStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;
import wt.pom.Transaction;
import wt.content.ApplicationData;
import wt.content.ContentItem;
import wt.content.Streamed;
import wt.ixb.publicforapps.ApplicationImportHandlerTemplate;
import wt.ixb.publicforhandlers.IxbElement;
import wt.ixb.publicforhandlers.IxbHndHelper;
import wt.ixb.publicforapps.IxbDocument;
import wt.ixb.publicforapps.Importer;
import wt.ixb.publicforapps.IxbHelper;
import wt.ixb.objectset.ObjectSetHelper;
import wt.ixb.actor.actions.IxbActionsHelper;
import wt.util.WTException;
import wt.util.WTMessage;
import wt.ixb.clientAccess.IXBJarReader;
import wt.fc.Persistable;
import javax.xml.transform.stream.StreamSource;
public class SimpleApplicationImportHandler
extends ApplicationImportHandlerTemplate{
private IXBJarReader jr = null;
private PrintStream log = null;
public SimpleApplicationImportHandler(PrintStream a_log){
log = a_log;
}
public InputStream getContentAsInputStream (String contentId)
throws WTException {
try{
return jr.getStreamByName (contentId);
}
catch(IOException ioe){
throw new WTException(ioe);
}
}
public void storeLogMessage(String resourceBundle,
String messageKey, Object[] textInserts)
throws WTException{
WTMessage m = new WTMessage(resourceBundle, messageKey, textInserts);
log.println(m.getLocalizedMessage());
}
public void doImport(WTContainerRef container,
File ruleFile,
File dataFile,
boolean _overrideConflicts,
String actorName,
File policyFile,
File containerMappingFile)
throws WTException{
try{
jr = new IXBJarReader(dataFile);
}
catch(IOException ioe){
throw new WTException (ioe);
}
//prepare rule file
String ruleFileName = (ruleFile!=null)? ruleFile.getAbsolutePath(): null;
//prepare container mapping file
String containerMappingFileName = (containerMappingFile!=null)?containerMappingFile.getAbsolutePath(): null;
//prepare policy file
String policyFileName = (policyFile!=null)?policyFile.getAbsolutePath(): null;
StreamSource xslPolicyFile = null;
if (policyFile!=null) {
xslPolicyFile = new StreamSource(policyFile.getAbsolutePath());
}
Boolean overrideConflicts = new Boolean (_overrideConflicts);
Importer importer = IxbHelper.newImporter(this,
container,
IxbHelper.STANDARD_DTD,
ruleFileName,
policyFileName,
containerMappingFileName,
actorName,
overrideConflicts,
null /*validate*/);
String [] fns = jr.getNonContentFileNamesByExtension ("xml");
boolean validate = IxbHndHelper.getIxbProperty("import.parser.validate",
false);
for (int i=0; i<fns.length; i++) {
String fn = fns[i];
InputStream stream = null;
try{
stream = jr.getStreamByName (fns[i]);
}
catch (IOException ioe){
throw new WTException (ioe);
}
IxbDocument doc = IxbHelper.newIxbDocument(stream, validate);
//if policyFile == null, apply actorName to XML Document before pass
it to importer
if (policyFile == null){
IxbElement rootElem = doc.getRootElement();
//XML_ACTION_KEY = "actionInfo/action"
IxbElement actionElement =
doc.getElement(IxbActionsHelper.XML_ACTION_KEY);
if (actionElement == null){
rootElem.addValue(IxbActionsHelper.XML_ACTION_KEY,
actorName);
}
else {
rootElem.removeChildElement( actionElement);
rootElem.addValue(IxbActionsHelper.XML_ACTION_KEY,
actorName);
}
}
else { //apply policy file
doc =
IxbActionsHelper.writeActionAndParametersToFileXML(doc,xslPolicyFile);
}
//set elem ready for import
importer.doImport(doc);
}
//perform actual import
importer.finalizeImport();
}
}