Tutorial
Prerequisites
- Download Eclipse Classic
Creating and Setting the Interface Bundle
- Run Eclipse
- Select/Enter your preferred workspace in the text box provided and click okay
- After Eclipse has completed loaded, create a plug-in by clicking on "File" on the menu bar then scroll to New->Project->Plug-in
- Enter the following information that is seen in the image below
- Click Next->Finish
- Now open the src folder, open the package inside, remove the activator file currently residing in it, and create a class called "Weather" and an interface called "WeatherSystem"
- Copy and paste the following code to their respective file
Weather
package ecl.team2.lab2.weather; public class Weather { private String city; private float tempInCelcius; private float rainInMM; private float snowInMM; private float windspeedInKM; private char windDirection; public Weather(String pcity, float ptemp, float prain, float psnow, float pwspeed, char pwdirection){ this.setCity(pcity); this.setTempInCelcius(ptemp); this.setRainInMM(prain); this.setSnowInMM(psnow); this.setWindspeedInKM(pwspeed); this.setWindDirection(pwdirection); } public void setWindDirection(char windDirection) { this.windDirection = windDirection; } public char getWindDirection() { return windDirection; } public void setWindspeedInKM(float windspeedInKM) { this.windspeedInKM = windspeedInKM; } public float getWindspeedInKM() { return windspeedInKM; } public void setSnowInMM(float snowInMM) { this.snowInMM = snowInMM; } public float getSnowInMM() { return snowInMM; } public void setRainInMM(float rainInMM) { this.rainInMM = rainInMM; } public float getRainInMM() { return rainInMM; } public void setTempInCelcius(float tempInCelcius) { this.tempInCelcius = tempInCelcius; } public float getTempInCelcius() { return tempInCelcius; } public void setCity(String city) { this.city = city; } public String getCity() { return city; } }
WeatherSystem
package ecl.team2.lab2.weather; public interface WeatherSystem { Weather getWeather(String city) throws Exception; }
- Save and close both files and now open the manifest file
- Click on the runtime tab then click on add in the "export packages" panel.
- click on the ecl.... package and click okay
- Now close the manifest and save all changes
Creating and Setting the Provide Bundle
- Follow the same steps for creating a new plug-in projects but instead supply the name "ecl.team2.lab2.weathersystem.provider"
- Remove all contents within the src->current package and add a class file called "ProviderActivator"
- Add a new package to the current project we're dealing with and name it "ecl.team2.lab2.weathersystem.provider.internal" and within it create a class called "SimpleWeatherSystem"
- Copy and paste the following code to their respective file
ProviderActivator
package ecl.team2.lab2.weathersystem.provider; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import ecl.team2.lab2.weather.WeatherSystem; import ecl.team2.lab2.weathersystem.provider.internal.SimpleWeatherSystem; public class ProviderActivator implements BundleActivator { private static BundleContext context; static BundleContext getContext() { return context; } /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ public void start(BundleContext bundleContext) throws Exception { ProviderActivator.context = bundleContext; SimpleWeatherSystem sws = new SimpleWeatherSystem(); context.registerService(WeatherSystem.class.getName(), sws, null); System.out.println("Weather Station On !"); } /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext bundleContext) throws Exception { ProviderActivator.context = null; System.out.println("Weather Station Off !"); } }
SimpleWeatherSystem
package ecl.team2.lab2.weathersystem.provider.internal; import ecl.team2.lab2.weather.WeatherSystem; import ecl.team2.lab2.weather.Weather; import java.util.ArrayList; import java.util.Random; public class SimpleWeatherSystem implements WeatherSystem { ArrayList<Weather> weathers = new ArrayList<Weather>(); public SimpleWeatherSystem(){ ArrayList<String> cities = new ArrayList<String>(); cities.add("Toronto"); cities.add("New York"); cities.add("Calgary"); cities.add("Ottawa"); cities.add("Vancouver"); cities.add("Regina"); cities.add("Winnipeg"); cities.add("St. John"); cities.add("Fredericton"); cities.add("Halifax"); cities.add("Quebec City"); cities.add("Whitehorse"); cities.add("Yellowknife"); for(String c:cities){ Random randomGenerator = new Random(); float temp = randomGenerator.nextFloat()+35; float rain = randomGenerator.nextFloat()+10; float snow = randomGenerator.nextFloat()+10; float windspeed = randomGenerator.nextFloat()+50; char winddirection = '.'; int r = randomGenerator.nextInt(4); switch(r){ case 0: winddirection = 'E'; break; case 1: winddirection = 'W'; break; case 2: winddirection = 'N'; break; case 3: winddirection = 'S'; break; } Weather w = new Weather(c, temp, rain, snow, windspeed, winddirection); this.weathers.add(w); System.out.println(w.toString()); } } public Weather getWeather(String city) throws Exception { // TODO Auto-generated method stub Weather found = null; for(Weather w:this.weathers){ city = city.toLowerCase(); String wcity =w.getCity().toLowerCase(); if(city.equals(wcity)){ found = w; return found; } } return found; } }
- Save and close both files and now open the manifest file
- Click on the dependencies tab then click on add in the "import packages" panel.
- In the search field, enter "ecl", then click on "ecl.team2.lab2.weather", and afterwords click okay