Я создаю плагин Rhapsody JavaAPI, который будет очищать файлы текущего проекта и копировать в новую модель.Это должно иметь свежую рабочую копию для разработчиков, чтобы им не приходилось закрывать рапсодию и копировать в чистые модели вручную.
Моя дилемма - когда я закрываю активный проект, он удаляет его из рапсодии какожидается.Когда я пытаюсь перезагрузить новый rpy-файл, представление не меняется и модель не перезагружается.
Как мне выполнить перезагрузку проекта?
Вот мой плагин (обратите внимание на вызов классаработает нормально. Это в методе clean, что у меня возникают проблемы).
public class CMMCleaner {
private Path rootDir;
private Path rpyFile;
private IRPApplication rpyApp;
public CMMCleaner(final Path rootDir, final IRPApplication rpyApp) {
this.rootDir = rootDir;
if (!Files.exists(rootDir)) throw new IllegalArgumentException(rootDir + " does not exist");
this.rpyApp = rpyApp;
this.rpyFile = Paths.get(this.rpyApp.activeProject().getCurrentDirectory()).resolve(this.rpyApp.activeProject().getFilename());
}
public void clean() {
try {
rpyApp.activeProject.close();
Path cleanDir = this.rootDir.resolve("CMM_starting_model");
Path oldDir = this.rootDir.resolve("CMM_model");
Files.walk(oldDir)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
Files.walk(cleanDir)
.filter(p -> Files.isRegularFile(p))
.forEach(cleanFile -> {
Path path = oldDir.resolve(cleanDir.relativize(cleanFile));
try {
Files.createDirectories(path.getParent());
Files.copy(cleanFile, path, StandardCopyOption.REPLACE_EXISTING);
} catch (Exception ex) {
ex.printStackTrace();
}
});
rpyApp.openProject(this.rpyFile.toAbsolutePath().toString());
rpyApp.insertProject(this.rpyFile.toAbsolutePath().toString());
rpyApp.activeProject();
rpyApp.refreshAllViews();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Никаких исключений не выдается, но, как указано, проект закрывается, и я могу визуально видеть файлы, которые удаляются и копируются, нопосле этого в рапсодии ничего не происходит.