我也來玩OSGI(二)

在 src 中新建 org.vwpolo.login.service 包,如果修改Activator這個控制插件生命週期的這個類,爲了閱讀方便,將他重命名了

package org.vwpolo.login.service;

import
 org.osgi.framework.BundleActivator;
import
 org.osgi.framework.BundleContext;
import
 org.osgi.util.tracker.ServiceTracker;
import
 org.vwpolo.services.LoginService;

public class StartLoginActivator implements BundleActivator 
{

    
private BundleContext context = null
;
    
private ServiceTracker tracker = null
;
    
private LoginDialog loginDialog = new LoginDialog(null
);
    
    
/*
     * (non-Javadoc)
     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
     
*/

    
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();
    }


    
/*
     * (non-Javadoc)
     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
     
*/

    
public void stop(BundleContext context) throws Exception {
        tracker.close();
    }


}

 

//登陸服務跟蹤器,記錄登陸情況
package org.vwpolo.login.service;

import
 org.osgi.framework.BundleContext;
import
 org.osgi.framework.ServiceReference;
import
 org.osgi.util.tracker.ServiceTrackerCustomizer;
import
 org.vwpolo.services.LoginService;
/**
 * 
@author 劉堯興
 *
 
*/

public class LoginServiceTracker implements ServiceTrackerCustomizer {
    
private
 LoginDialog loginDialog;
    
private
 BundleContext bundleContext;
    
    
public LoginServiceTracker(BundleContext bundleContext,LoginDialog loginDialog) 
{
        
this.loginDialog =
 loginDialog;
        
this.bundleContext =
 bundleContext;
    }


    @Override
    
public Object addingService(ServiceReference reference) {
        LoginService service 
=
 (LoginService)bundleContext.getService(reference);
        loginDialog.addLoginService(service);
        
return
 service;
    }


    @Override
    
public void modifiedService(ServiceReference reference, Object serviceObject) {
        LoginService service 
=
 (LoginService)bundleContext.getService(reference);
        loginDialog.setLoginService(service);
    }


    @Override
    
public void removedService(ServiceReference reference, Object serviceObject) {
        LoginService service 
=
 (LoginService)bundleContext.getService(reference);
        loginDialog.removeLoginService(service);
    }

}

 

//登陸對話框
package org.vwpolo.login.service;

import
 java.util.ArrayList;

public class LoginDialog extends TitleAreaDialog 
{

    
private
 Text passwordText;
    
private
 Text userNameText;
    
private
 LoginService loginService;
    
private List<LoginService> loginServiceList = new ArrayList<LoginService>
();
    
/**
     * Create the dialog
     * 
@param parentShell
     
*/

    
public LoginDialog(Shell parentShell) {
        
super
(parentShell);
    }

    
    
/**
     * Create the dialog
     * 
@param parentShell
     
*/

    
public LoginDialog(Shell parentShell, LoginService loginService) {
        
super
(parentShell);
        
        
this.loginService =
 loginService;
    }


    
/**
     * 
@param service
     
*/

    
public void addLoginService(LoginService service) {
        loginServiceList.add(service);
        
this.loginService =
 service;
    }


    
/**
     * 
@param service
     
*/

    
public void setLoginService(LoginService service) {
        
this.loginService =
 service;
    }


    
/**
     * 
@param service
     
*/

    
public void removeLoginService(LoginService service) {
        loginServiceList.remove(service);
        
if(loginServiceList.size() == 0
)
            loginService 
= null
;
        
else
 
           
this.loginService = loginServiceList.get(loginServiceList.size() - 1
);
    }

    
    
/**
     * Create contents of the dialog
     * 
@param parent
     
*/

    @Override
    
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));

        
final Label label = new
 Label(container, SWT.NONE);
        label.setText(
"用戶名"
);

        userNameText 
= new
 Text(container, SWT.BORDER);
        
final GridData gd_userNameText = new GridData(SWT.FILL, SWT.CENTER, truefalse
);
        userNameText.setLayoutData(gd_userNameText);

        
final Label label_1 = new
 Label(container, SWT.NONE);
        label_1.setText(
"密 碼"
);

        passwordText 
= new
 Text(container, SWT.BORDER);
        
final GridData gd_passwordText = new GridData(SWT.FILL, SWT.CENTER, truefalse
);
        passwordText.setLayoutData(gd_passwordText);
        setTitle(
"歡迎登錄"
);
        setMessage(
"請輸入用戶名和密碼"
);
        
//
        return
 area;
    }


    
/**
     * Create contents of the button bar
     * 
@param parent
     
*/

    @Override
    
protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, 
"登錄"
,
                
true
);
        createButton(parent, IDialogConstants.CANCEL_ID,
                
"取消"false
);
    }


    
/**
     * Return the initial size of the dialog
     
*/

    @Override
    
protected Point getInitialSize() {
        
return new Point(359221
);
    }

    
protected void configureShell(Shell newShell) {
        
super
.configureShell(newShell);
        newShell.setText(
"歡迎登錄"
);
    }

    
protected void buttonPressed(int buttonId) {
        
if (buttonId == IDialogConstants.OK_ID) 
{
            
if(!doLogin()) 
{
                setErrorMessage(
"用戶名或密碼錯誤!"
);
                
return
;
            }

        }

    }


    
private boolean doLogin() {
        String userName 
=
 userNameText.getText().trim();
        String password 
=
 passwordText.getText().trim();
        
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

發佈了31 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章