RCP客户端实现保存不同用户的界面状态

在一个多用户的系统中,每个用户都有自己的喜好例如,视图的位置、大小、以及显隐状态,都要对其进行保存,我们可以在工作台初始化的方法进行设置:

@Override
public void initialize(IWorkbenchConfigurer configurer)
{
super.initialize(configurer);
configurer.setSaveAndRestore(true);
}

但是保存的都是最后一个用户登录以后设置的界面,这样之前用户保存的状态就被覆盖了,
本来想研究一下Eclipse是如何获取到这些信息并且保存的,但是时间紧迫,急于实现效果,
所以出此下策,把自己的想法实践了一下,目的达到了,但是似乎有些山寨,拿来和大家分享一下吧,望请高手指教!

设计思路:
当Application的start方法运行的时候,这里是我们写登录的代码,在用户登成功,用户名便获取到,我们以用户名加上"_workbench.xml"作为该用户的配置文件名称,用一个File对象判断其是否存在,如果存在将它读入到内存中,然后不管默认的workbench.xml是否存在都将其覆盖,ApplicationWorkbenchAdvisor被创建的时候,才会去加载用户的配置文件,用户的配置顺理成章的被工程所加载,说道这里前提是先保存用户的配置文件。


int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());

这段代码是start方法中默认的一行代码,在中行代码结束时,也就是工程关闭时候,具体的说是workbench.xml文件已经被改写完毕的时候,我们将内容读取到内存中,根据当前登录的用户名加上"_workbench.xml"做为新的配置文件,将默认配置文件中的数据写入到该文件中进行保存,然后将默认的配置文件删除(如果不删除也可以,后果是当一个从来没有登录过系统的用户来说,第一次登录的时候,享用的是上一次用户配置的界面)。
具体实施:

package rcptest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;

/**
* This class controls all aspects of the application's execution
*/
public class Application implements IApplication
{

/*
* (non-Javadoc)
*
* @seeorg.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.
* IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception
{
Display display = PlatformUI.createDisplay();
try
{

//工作空间根路径
String rootPath = Platform.getInstanceLocation().getURL().getPath() ;
//工作空间配置文件所在路径
String childPath = ".metadata/.plugins/org.eclipse.ui.workbench/";
//加在一起等于配置文件放置都绝对路径
String workBenchPath = rootPath + childPath;

//默认配置文件名
String defaultName = "workbench.xml";
//路径全名称
String absolutePath = workBenchPath + defaultName;

//登录的用户名,启动第一次后尝试更换名称看效果
String loginUser = "SystemManager";
//用户专有的配置文件名称
String userCfgPath = workBenchPath + loginUser +"_"+ defaultName;

//判断配置路径是否存在
File path = new File(workBenchPath);
if(path.exists())
{
File f = new File(userCfgPath);
if (f.isFile())
{
// 文件存在则将用户的配置文件中的数据,写入到默认的配置文件中
FileInputStream fis = new FileInputStream(f);
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();
FileOutputStream fos = new FileOutputStream(absolutePath);
fos.write(data);
fos.close();
}
}
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());

//工程关闭后改变配置文件名
File f = new File(absolutePath);
if(f.isFile())
{
//如果默认的配置文件存在(肯定是存在的,判断一下安全),将默认的配置文件数据写入到用户配置文件中
FileInputStream fis = new FileInputStream(f);
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();
FileOutputStream fos = new FileOutputStream(userCfgPath);
fos.write(data);
fos.close();
//删除默认的配置文件,如果不删除则当一个没有登录过系统的用户来说,第一次登录享用的是上一次用户配置的界面
f.deleteOnExit();
}
if (returnCode == PlatformUI.RETURN_RESTART)
return IApplication.EXIT_RESTART;
else
return IApplication.EXIT_OK;
}
finally
{
display.dispose();
}

}

/*
* (non-Javadoc)
*
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop()
{
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench == null)
return;
final Display display = workbench.getDisplay();
display.syncExec(new Runnable()
{
public void run()
{
if (!display.isDisposed())
workbench.close();
}
});
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值