0

我们正在使用 Rational Software Architect 来建模和生成 java 工件。截至目前,我们正在手动运行转换。

我们现在的要求是自动化转换。我的意思是要一起运行多个转换并记录错误(如果有)。

我试图从下面的代码运行转换。但是当我运行它时,它显示了一个错误:

我正在尝试加载当前工作区中不存在的 service.tc。

    IPath path = new Path("**D://RSA_NewWorkSpace//UML_MODEL_POC/service.tc**"); 

    IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); 
    System.out.println("file >> "+file); 

    ITransformConfig config = TransformConfigUtil.loadConfiguration(file); 

    System.out.println("inside testExecute 3 config >> "+config); 

    IStatus status = TransformController.getInstance().execute(config, null, false, null); 

    System.out.println("status >> "+status);

错误 :

file >> L/RSA_NewWorkSpace/UML_MODEL_POC/service.tc 

IOException >>java.io.FileNotFoundException: The transformation configuration file /RSA_NewWorkSpace/UML_MODEL_POC/service.tc does not exist. Verify the correct file path was specified. 

是否可以从其他工作区(而不是当前工作区)引用转换文件并加载和执行?

我正在尝试从D://RSA_NewWorkSpace//UML_MODEL_POC/service.tc 加载转换文件。


下面是我一直在尝试从外部工作区以及 SOP 加载转换文件 (service.tc) 的最新代码

for.eg 工作区目录结构

D:\RSA_NewWorkSpace\UML_MODEL_POC\ 。项目

D:\RSA_NewWorkSpace\UML_MODEL_POC\service.tc

我得到config is null。你能帮我如何获得配置的价值吗?

公共静态无效获取链接(){

    try {

        String projectName = "UML_MODEL_POC";

        IProject project = getIProject(getWorkspaceFullPath() + IPath.SEPARATOR + projectName,projectName);

        IFile linkFile = project.getFile("service.tc");

        if(linkFile.exists())

            linkFile.refreshLocal(1, null); 

        else {

            createLink(project, linkFile);

        }

        **ITransformConfig config = TransformConfigUtil.loadConfiguration(linkFile);**

        IStatus status = TransformController.getInstance().execute(config, null, false, null);

        System.out.println("status >> "+status);


    }

    catch(Exception e) {

        throw new WrappedException(e);

    }

}

公共静态 IProject getIProject(String projectFullPath, String projectName) {

IProjectDescription 描述;

        try {

            File projectFile = new File(projectFullPath + IPath.SEPARATOR +  ".project");

            if (projectFile.exists()) {

                description = ResourcesPlugin.getWorkspace().loadProjectDescription(new Path(getWorkspaceFullPath() + IPath.SEPARATOR + projectName + IPath.SEPARATOR +  ".project"));

                IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName());

                return project;

            } 

        } catch (CoreException e) {

            MessageDialog.openError(null, "Project already exists", "Issue when trying to add project \"" + projectName + "\" to workspace.");
            e.printStackTrace();
        }

        return null;

    }

公共静态字符串 getWorkspaceFullPath() {

        return ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();

    }

标准操作程序:

项目 = P/UML_MODEL_POC

链接文件 = L/UML_MODEL_POC/service.tc

配置=空

状态 = 状态取消:未知代码 = 1 空

4

2 回答 2

0

IFile只能访问当前工作空间中的文件。

IWorkspaceRoot.getFile(path)始终将路径视为相对于工作空间根目录。

IWorkspaceRoot.getFileForLocation(path)接受绝对路径,但如果路径不属于工作区,则返回 null。

您可以使用IFile.createLink在工作区中创建指向工作区外部文件的链接,因此这可能对您有用。

于 2014-07-16T15:14:17.210 回答
0

@user2057006 为什么要将 tc 文件从不同的工作区运行到这个工作区?即使您成功地闲置了 Tc,运行转换仍然会失败,因为 Tc 中引用的模型项目都不会在您的新工作区中可用。还有其他运行多个 tc 的方法,例如复合 tc 或 ant 构建或 Transformrunner 应用程序。如果您提供有关您要实现的目标的更多信息,我将能够为您提供帮助

于 2014-07-30T18:09:58.917 回答