Зарезолвленный таким образом файл открыть было проще простого:
IWorkbenchPage page = ...;
IFile file = ...;
IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(file.getName());
page.openEditor(new FileEditorInput(file), desc.getId());
Первыми граблями на которые я наступила стала линка.
IFolder#createLink(IPath localLocation, int updateFlags,IProgressMonitor monitor);
При этом линку хотелось создать непременно с таким же именем что носил реальный файл, лежащий в том же проекте. Для чего был использован флаг:
IResource.REPLACE
Все бы ничего если бы мне вдруг не приспичило получить location этого одноименного файла (очень уж хотелось открыть этот файлик и поредактировать обычными средствами IO):) Так много я никогда не материлась, зато с тех пор я читаю доки внимательно, а не как обычно:) При использвании флага REPLACE одноименный файл замещается в воркспейсе линкой !
В итоге был сооружен костыль:
IWorkspaceRoot root = ;
IProject project = root.getProject(name);
IPath location = project.getLocation().append(fileName);
Некрасиво, но заработало :) Если честно не знаю, что будет если открывать такой файл в эдиторе обычным способом: скорее всего он откроется, ибо файл сам по себе резолвится.
Ладно, с файлами которые (хотя бы просто географически) лежат внутри воркспейса все более или менее понятно. Но как открыть файл который лежит где-нибудь у черта на куличках? Лично я со своим воркспейс подходом к ресурсам впала в некоторый ступор :) Зарезолвить такой фал нельзя (то есть получить удобоваримую и такую милую сердцу ссылочку на IFile). В голове тут же пронеслась масса вариантов с созданием ссылки на удаленный файл, однако все оказалось куда проще:
IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IDE.openEditorOnFileStore( page, fileStore );
Заметьте, этот код откроет дефолтный эдитор, хотя там же в IDE есть метод для открытия файла по его URI, в эдиторе с заданным ID. Вобщем, настоятельно рекомендую поразглядывать классик IDE - можно узнать кое что полезное.
Пока все:)
Комментариев нет:
Отправить комментарий