Rhapsody API 重载项目
Rhapsody API reload project
我正在创建一个 Rhapsody JavaAPI 插件,它将清理当前的项目文件并复制到一个新模型中。这是为了为开发人员提供一个全新的工作副本,这样他们就不必关闭狂想曲并手动复制干净的模型。
我的困境是当我关闭活动项目时,它会按预期将其从 Rhapsody 视图中删除。当我尝试重新加载新的 rpy 文件时,视图没有改变,模型也没有重新加载。
我将如何重新加载项目?
这是我的插件(请注意 class 调用工作正常。它在方法 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();
}
}
}
没有抛出异常,但正如所述,项目确实关闭了,我可以直观地看到文件被删除和复制,但之后狂想曲没有任何反应。
我能够通过删除以下行来解决问题:
rpyApp.activeProject.close();
和 rpyApp.insertProject(this.rpyFile.toAbsolutePath().toString());
我正在创建一个 Rhapsody JavaAPI 插件,它将清理当前的项目文件并复制到一个新模型中。这是为了为开发人员提供一个全新的工作副本,这样他们就不必关闭狂想曲并手动复制干净的模型。
我的困境是当我关闭活动项目时,它会按预期将其从 Rhapsody 视图中删除。当我尝试重新加载新的 rpy 文件时,视图没有改变,模型也没有重新加载。
我将如何重新加载项目?
这是我的插件(请注意 class 调用工作正常。它在方法 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();
}
}
}
没有抛出异常,但正如所述,项目确实关闭了,我可以直观地看到文件被删除和复制,但之后狂想曲没有任何反应。
我能够通过删除以下行来解决问题:
rpyApp.activeProject.close();
和 rpyApp.insertProject(this.rpyFile.toAbsolutePath().toString());