Сценарий
У меня есть чистое приложение E4, в котором я хочу выбрать начальную перспективу для пользователя в зависимости от ролей пользователя. Поэтому у меня есть перспектива для начала, которая содержит только одну часть. В этой части я использую @PostConstruct-Method для проверки ролей пользователя, а затем запускаю команду для переключения перспективы:
Начальный вид
@Inject
private IEclipseContext eclipseContext;
@PostConstruct
public void initialize() {
// checking credentials and retrieving roles come here which is pretty long
// that's why switching perspective is a seperate method
// and EclipseContext is injected to instance instead of method
this.switchPerspective(_usersInitialPerspectiveId)
}
private void switchPerspective(String pTargetPerspectiveId) {
final ECommandService _commandService = this.eclipseContext.get(ECommandService.class);
final EHandlerService _handlerService = this.eclipseContext.get(EHandlerService.class);
final Map<String, Object> _commandParameter = new HashMap<>();
_commandParameter.put(PluginIdConstants.ID_OF_PARAMETER_FOR_SWITCH_PERSPEKTIVE,
pZielPerspektiveId);
final ParameterizedCommand _switchPerspectiveCommand =
_commandService.createCommand(COMMAND_ID_FOR_SWITCH_PERSPECTIVE,
_commandParameter);
_handlerService.executeHandler(_switchPerspectiveCommand);
}
Для переключения перспективы отсюда я использую тот же обработчик, что и для пунктов меню, настроенных в Application.e4xmi
, который выглядит так:
Обработчик переключения перспективы
@Execute
public void execute(final MWindow pWindow,
final EPartService pPartService,
final EModelService pModelService,
@Named(PluginIdConstants.ID_OF_PARAMETER_FOR_SWITCH_PERSPEKTIVE)
final String pPerspectiveId) {
final List<MPerspective> _perspectives =
pModelService.findElements(pWindow, pPerspectiveId, MPerspective.class, null);
if (!(_perspectives.isEmpty())) {
// Show perspective for looked up id
pPartService.switchPerspective(_perspectives.get(0));
}
}
Эта проблема
Проблема довольно проста: при использовании вышеуказанного обработчика, запускаемого пунктом меню, он работает как положено и меняет перспективу. Но использование того же обработчика в моем первоначальном представлении (запуск его программно) не меняет перспективу. Я отладил код, чтобы проверить, получает ли обработчик одинаковую информацию в обоих случаях, и это так.
Может у меня приложение не до конца запустилось и поэтому обработчик не действует, но если проблема в этом, то как мне это проверить?
Любые идеи о том, что я, возможно, пропустил, приветствуются!
pPartService.switchPerspective
вызывается в обоих случаях? - person greg-449   schedule 06.07.2016