Rational Software Architect - загрузить пользовательский файл преобразования из другой локальной рабочей области и выполнить

Мы используем 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.


Ниже приведен последний код, который я пытался загрузить файл преобразования (service.tc) из внешней рабочей области, а также SOP

структура каталогов for.eg Workspace

D: \ RSA_NewWorkSpace \ UML_MODEL_POC \. проект

D:\RSA_NewWorkSpace\UML_MODEL_POC\service.tc

Я получаю конфиг нулевой. Не могли бы вы помочь мне, как получить значение для конфигурации.

public static void receiveLink () {

    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);

    }

}

public static IProject getIProject (String projectFullPath, String projectName) {

IProjectDescription description;

        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;

    }

public static String getWorkspaceFullPath () {

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

    }

СОП:

проект = P / UML_MODEL_POC

linkFile = L / UML_MODEL_POC / service.tc

config = null

статус = статус ОТМЕНА: неизвестный код =1 ноль

2 ответа

@user2057006 почему вы хотите запустить tc-файл из другого рабочего пространства в это? Даже если вы успешно загрузите Tc, выполнение преобразования все равно будет неудачным, потому что ни один из проектов моделей, указанных в Tc, не будет доступен в вашем новом рабочем пространстве. Существуют и другие способы запуска нескольких tcs, такие как составной tc, сборка ant или приложение Transformrunner. Если вы предоставите немного больше информации о том, чего вы пытаетесь достичь, я смогу вам помочь

IFile может получить доступ только к файлам в текущем рабочем пространстве.

IWorkspaceRoot.getFile(path) всегда обрабатывает путь относительно корня рабочей области.

IWorkspaceRoot.getFileForLocation(path) принимает абсолютный путь, но вернет ноль, если путь не является частью рабочей области.

Ты можешь использовать IFile.createLink создать ссылку в рабочей области на файл вне рабочей области, так что это может сработать для вас.

Другие вопросы по тегам