在 src 中新建 org.vwpolo.login.service 包,如果修改Activator这个控制插件生命周期的这个类,为了阅读方便,将他重命名了
package
org.vwpolo.login.service;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
org.osgi.framework.BundleActivator;
import
org.osgi.framework.BundleContext;
import
org.osgi.util.tracker.ServiceTracker;
import
org.vwpolo.services.LoginService;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public class StartLoginActivator implements BundleActivator ...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private BundleContext context = null;
private ServiceTracker tracker = null;
private LoginDialog loginDialog = new LoginDialog(null);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void start(BundleContext context) throws Exception ...{
this.context = context;
tracker = new ServiceTracker(context, LoginService.class.getName(),
new LoginServiceTracker(context,loginDialog));
tracker.open();
loginDialog.open();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void stop(BundleContext context) throws Exception ...{
tracker.close();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
//登陆服务跟踪器,记录登陆情况
package
org.vwpolo.login.service;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
org.osgi.framework.BundleContext;
import
org.osgi.framework.ServiceReference;
import
org.osgi.util.tracker.ServiceTrackerCustomizer;
import
org.vwpolo.services.LoginService;
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
* @author 刘尧兴
*
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public class LoginServiceTracker implements ServiceTrackerCustomizer ...
{
private LoginDialog loginDialog;
private BundleContext bundleContext;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public LoginServiceTracker(BundleContext bundleContext,LoginDialog loginDialog) ...{
this.loginDialog = loginDialog;
this.bundleContext = bundleContext;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public Object addingService(ServiceReference reference) ...{
LoginService service = (LoginService)bundleContext.getService(reference);
loginDialog.addLoginService(service);
return service;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void modifiedService(ServiceReference reference, Object serviceObject) ...{
LoginService service = (LoginService)bundleContext.getService(reference);
loginDialog.setLoginService(service);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void removedService(ServiceReference reference, Object serviceObject) ...{
LoginService service = (LoginService)bundleContext.getService(reference);
loginDialog.removeLoginService(service);
}
}
//登陆对话框
package
org.vwpolo.login.service;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.util.ArrayList;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public class LoginDialog extends TitleAreaDialog ...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private Text passwordText;
private Text userNameText;
private LoginService loginService;
private List<LoginService> loginServiceList = new ArrayList<LoginService>();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Create the dialog
* @param parentShell
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public LoginDialog(Shell parentShell) ...{
super(parentShell);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Create the dialog
* @param parentShell
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public LoginDialog(Shell parentShell, LoginService loginService) ...{
super(parentShell);
this.loginService = loginService;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* @param service
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void addLoginService(LoginService service) ...{
loginServiceList.add(service);
this.loginService = service;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* @param service
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setLoginService(LoginService service) ...{
this.loginService = service;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* @param service
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void removeLoginService(LoginService service) ...{
loginServiceList.remove(service);
if(loginServiceList.size() == 0)
loginService = null;
else
this.loginService = loginServiceList.get(loginServiceList.size() - 1);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Create contents of the dialog
* @param parent
*/
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
protected Control createDialogArea(Composite parent) ...{
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
container.setLayout(gridLayout);
container.setLayoutData(new GridData(GridData.FILL_BOTH));
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
final Label label = new Label(container, SWT.NONE);
label.setText("用户名");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
userNameText = new Text(container, SWT.BORDER);
final GridData gd_userNameText = new GridData(SWT.FILL, SWT.CENTER, true, false);
userNameText.setLayoutData(gd_userNameText);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
final Label label_1 = new Label(container, SWT.NONE);
label_1.setText("密 码");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
passwordText = new Text(container, SWT.BORDER);
final GridData gd_passwordText = new GridData(SWT.FILL, SWT.CENTER, true, false);
passwordText.setLayoutData(gd_passwordText);
setTitle("欢迎登录");
setMessage("请输入用户名和密码");
//
return area;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Create contents of the button bar
* @param parent
*/
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
protected void createButtonsForButtonBar(Composite parent) ...{
createButton(parent, IDialogConstants.OK_ID, "登录",
true);
createButton(parent, IDialogConstants.CANCEL_ID,
"取消", false);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Return the initial size of the dialog
*/
@Override
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
protected Point getInitialSize() ...{
return new Point(359, 221);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
protected void configureShell(Shell newShell) ...{
super.configureShell(newShell);
newShell.setText("欢迎登录");
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
protected void buttonPressed(int buttonId) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (buttonId == IDialogConstants.OK_ID) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(!doLogin()) ...{
setErrorMessage("用户名或密码错误!");
return;
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private boolean doLogin() ...{
String userName = userNameText.getText().trim();
String password = passwordText.getText().trim();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(loginService == null) ...{
System.out.println("登录服务不可用!");
return false;
}
boolean success = loginService.login(userName, password);
if(success)
System.out.println("登录成功!");
else
System.out.println("登录失败!");
return success;
}
MANIFEST.MF文件内容为:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: StartLoginBundle Plug-in
Bundle-SymbolicName: StartLoginBundle
Bundle-Version: 1.0.0
Bundle-Activator: org.vwpolo.login.service.StartLoginActivator
Import-Package: org.eclipse.jface,
org.eclipse.jface.dialogs,
org.eclipse.jface.window,
org.eclipse.swt,
org.eclipse.swt.events,
org.eclipse.swt.graphics,
org.eclipse.swt.layout,
org.eclipse.swt.widgets,
org.osgi.framework;version="1.3.0",
org.osgi.util.tracker;version="1.3.3",
org.vwpolo.services
Eclipse-LazyStart: true
Export-Package: org.vwpolo.login.service