Changes

Jump to: navigation, search

Teams Winter 2011/team6/lab2

10,158 bytes added, 15:52, 12 April 2011
Install and run the Service Consumer Bundle
='''Lab 2 OSGI Tutorial='''
:After downloading the “Eclipse classic” from [http://www.eclipse.org/downloads/ Eclipse] then proceed with the following steps to create Chat Program with OSGi.
===Define MANIFEST.MF===
 
:a) Select the MANIFEST.MF
:b) In the Dependencies tab select Add for Required Plug-ins
:c) Add cs.dps914.osgilab.chatinterface
 
:[[==image:11PManifest.png|600px]]
 
 
 
===Create Java Classes Required===
:a) Create 2 Java Classes (SimpleMessage and SimpleChatSystem)
:b) Make sure the package is defined correctly (cs.dps914.osgi.lab.provider.internals)
:[[image:12PClass.png |300px]]
:c) Fill Java Classes with following Data
 
::SimpleMessage.java
::
 
import java.util.Calendar;
import java.util.Date;
import cs.dps914.osgi.lab.chatinterface.IMessage;
public class SimpleMessage implements IMessage {
private String source;
private Date time;
private String message;
public SimpleMessage(String src,String msg) {
setSource(src);
setTime(Calendar.getInstance().getTime());
setMessage(msg);
}
public void setSource(String src) {
if (src!=null) {
source=src;
} else {
source="";
}
}
public String getSource() {
return source;
}
public void setTime(Date time) {
if (time!=null) {
this.time=time;
} else {
this.time=Calendar.getInstance().getTime();
}
}
public Date getTime() {
return time;
}
public void setMessage(String msg) {
if (msg!=null) {
message=msg;
} else {
message="";
}
}
public String getMessage() {
return message;
}
}
 
SimpleChatSystem.java
 
import java.util.ArrayList;
import cs.dps914.osgi.lab.chatinterface.IChatClient;
import cs.dps914.osgi.lab.chatinterface.IChatSystem;
import cs.dps914.osgi.lab.chatinterface.IMessage;
public class SimpleChatSystem implements IChatSystem {
public static ArrayList<IChatClient> clientList=new ArrayList<IChatClient>();
public static ArrayList<IMessage> messageList=new ArrayList<IMessage>();
public void registerClient(IChatClient client) {
clientList.add(client);
}
public ArrayList<IMessage> appendMessage(String src, String msg) {
IMessage newMsg=new SimpleMessage(src,msg);
messageList.add(newMsg);
for (IChatClient client:clientList) {
client.receiveMessage(newMsg);
}
return messageList;
}
}
 
===Edit ChatActivator.java to add the following:===
 
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import cs.dps914.osgi.lab.chatinterface.IChatSystem;
import cs.dps914.osgi.lab.provider.internals.SimpleChatSystem;
 
and
 
public void start(BundleContext bundleContext) throws Exception {
ChatActivator.context = bundleContext;
IChatSystem vs=new SimpleChatSystem();
context.registerService(IChatSystem.class.getName(),vs,null);
}
 
 
===Install and Run the Chat Provider Bundle===
 
 
: a) Right click on MAINFEST.MF of the Provider, and go to Run As then Run Configuration
: b) Right click on OSGI Framework and create a new Configuration
: c) In Workspace, check the chatinterface bundle and the provider bundle.
: d) Deselect Target Platform and click on Add Required Bundles, then check the Only show selected.
: e) Make sure "validate bundles automatically..." is selected
: f) Click apply
[[image:13RunProvider.png |500px]]
 
 
==Implement Chat Client==
The Chat Client is dependent on the Chat Interface and Provider.
===Define the MANIFEST.MF for the service consumer bundle===
:a) Create a new Plug-in Project
:b) Name your Plug-in Project (cs.dps914.osgi.lab.provider) again be sure to select the target platform correctly
:c) This time you can leave the Activator checked as you will need it. (Change the name of the activator to cs.dps914.osgi.lab.provider.ClientActivator)
:d) Edit the MANIFEST.MF dependencies to add the chat interface (similar to Provider)
:e) Edit the MANIFEST.MF
[[image:14CManifest.png | 500px]]
 
===Use the Client Activator to find the service===
 
:add the following code to ClientActivator
 
public void start(BundleContext bundleContext) throws Exception {
ClientActivator.context = bundleContext;
ServiceReference reference=context
.getServiceReference(IChatSystem.class.getName());
if (reference!=null) {
chatService=(IChatSystem)context.getService(reference);
if (chatService!=null) {
ChatApp.setup(chatService);
context.ungetService(reference);
}
}
}
 
===Implement classes required to consume the service===
 
:a) Create 2 Java Classes (ChatApp and ChatDialog)
:b) Make sure the package is defined correctly (cs.dps914.osgi.lab.client.app and cs.dps914.osgi.lab.client.gui respectively)
 
:c) Fill Java Classes with following Data
'''ChatApp.java'''
import java.util.ArrayList;
import javax.swing.SwingUtilities;
import cs.dps914.osgi.lab.chatinterface.IChatClient;
import cs.dps914.osgi.lab.chatinterface.IChatSystem;
import cs.dps914.osgi.lab.chatinterface.IMessage;
import cs.dps914.osgi.lab.client.gui.ChatDialog;
public class ChatApp implements IChatClient {
private IChatSystem service;
private ChatDialog dialog;
public ChatApp(IChatSystem sys,ChatDialog gui) {
service=sys;
service.registerClient(this);
dialog=gui;
gui.setApp(this);
}
public ArrayList<IMessage> sendMessage(
String src, String msg) {
return service.appendMessage(src,msg);
}
public void receiveMessage(IMessage msg) {
dialog.displayMessage(msg.getSource(),
msg.getMessage(),msg.getTime());
}
public static void exit() {
System.exit(0);
}
public static void setup(final IChatSystem service) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ChatDialog window=new ChatDialog();
new ChatApp(service,window);
window.pack();
window.setVisible(true);
}
});
}
}
 
'''ChatDialog.java'''
 
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import cs.dps914.osgi.lab.client.app.ChatApp;
public class ChatDialog extends JFrame {
private static final long serialVersionUID = -4817932904935871995L;
private ChatApp app;
private JScrollPane sp_display;
private JTextArea ta_display;
private JTextField tf_name;
private JTextArea ta_msg;
public ChatDialog() {
super("Talk-to-Self Chat App");
setLayout(new GridLayout(1,2));
getContentPane().add(makeDisplayArea());
getContentPane().add(makeCompositionArea());
setJMenuBar(makeMenu());
}
private JPanel makeDisplayArea() {
JPanel panel=new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(
"Messages"));
panel.setLayout(new BorderLayout());
ta_display=new JTextArea();
ta_display.setEnabled(false);
sp_display=new JScrollPane(ta_display);
panel.add(sp_display,BorderLayout.CENTER);
JButton bt_clear=new JButton("Clear");
bt_clear.setToolTipText("Clear message display");
bt_clear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta_display.setText("");
}
});
panel.add(bt_clear,BorderLayout.PAGE_END);
return panel;
}
private JPanel makeCompositionArea() {
JPanel panel=new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(
"Compose"));
panel.setLayout(new BorderLayout());
tf_name=new JTextField();
tf_name.setBorder(BorderFactory.createTitledBorder(
"Your Name"));
panel.add(tf_name,BorderLayout.PAGE_START);
JPanel pn_msg=new JPanel();
pn_msg.setLayout(new BorderLayout());
pn_msg.setBorder(BorderFactory.createTitledBorder(
"Your Message"));
ta_msg=new JTextArea();
JScrollPane sp_msg=new JScrollPane(ta_msg);
pn_msg.add(sp_msg);
panel.add(pn_msg,BorderLayout.CENTER);
JButton bt_send=new JButton("Send");
bt_send.setToolTipText("Send messages to yourself");
bt_send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
app.sendMessage(tf_name.getText(),
ta_msg.getText());
ta_msg.setText("");
}
});
panel.add(bt_send,BorderLayout.PAGE_END);
return panel;
}
private JMenuBar makeMenu() {
// Setup menu bar
JMenuBar menuBar = new JMenuBar();
// Setup menu options
JMenu fileMenu = new JMenu("File");
fileMenu.setMnemonic('F');
menuBar.add(fileMenu);
// File menu
JMenuItem fileClose = new JMenuItem("Quit");
fileClose.setAccelerator(KeyStroke.getKeyStroke("ctrl W") );
fileClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ChatApp.exit();
}
});
fileMenu.add(fileClose);
return menuBar;
}
public void setApp(ChatApp app) {
this.app=app;
}
public void displayMessage(String source,
String message,Date time) {
ta_display.append(source+" ("+time.toString()+"): "+
message+"\n\n");
}
}
===Install and run the Chat Client Bundle===
:a) Go to Run Configuration then OSGi Framework and make sure the client provider and interface are selected.
:b) Select Add Required Bundles
1
edit

Navigation menu