If you are reloading a workbench instance, most of that should be taken care of. Especially any tree viewers, the content providers should be able to provide the content. Just make sure you enable saving the workbench state. It would be something like workbench.setSaveState(true). (That's not it but it is something along those lines).

Otherwise if it is for the case of a new workbench instance, just set the default perspective to your desired perspective.

So the primary issue I would focus on is what perspective is initially displayed. Everything else (views / viewers / commands / etc.. ), should be independent of the workbench state and react to the perspective.

Not sure what you mean by open projects. Typically, the user is responsible for creating/importing new projects into the workspace, or the workspace loads with the previous list of projects.

If you want a situation where projects are opened and closed depending upon the perspective, then what comes to mind is some type of processing in the PerspectiveFactory. However, IMHO I am not comfortable with that at all.

Remember that views and editors are shared. When you switch perspectives all you are really doing is changing what views are immediately visible. (Nothing is actually closed)