hello everyone, here is nice tutorial for all ADF techies-
i have developed an application in ADF that retrieves weather information of a country's weather stations.
as-temperature, humidity, dew, rain rate, wind speed etc using wunderground-core
API . This API fetch weather data for a weater station by given month and year or data for all the stations of a country.
Feature of this wunderground-core-
- Very simple to use
- Date Listener support
- Fetch weather data for all stations of country
- can be used with desktop or web application
- Ajax supported
- Real Time weather values
Snap-
Change Country-
Download wunderground-core API- https://code.google.com/p/wunderground-core/downloads/list
and download jar distribution with all dependencies
- Now start , create a fusion web application and add jar file to classpath
- Now create a bounded taskflow and a .jsff page inside this , now see the simple code to get all weather station of acountry and their weather data
- I have used this code on my af:commandButton for getting weather data, and a table on page to show this information on page using list (arrayList) , rest is same and simple like other ADF Application
- Download Sample Application and see it, you will also learn that how to show a table using List(Java) Sample ADF Application
- See source of .jsff page for tables'use and values-
- And see managed bean code to populate data in tables on page, other than manged bean i have used a java bean to populate value in list and then in table
- WeatherReportBean.java-
- Report.java- bean class to populate list
/* create an instance of WeatherStationService */ WeatherStationService weatherStationService = new WeatherStationService(); /* find all weather stations */ List<WeatherStation> stations = weatherStationService.findAllWeatherStationsByCountry("INDIA"); for (WeatherStation weatherStation : stations) { System.out.println(weatherStation.getStationId() + "\t" + "\t" + weatherStation.getCity() + "\t" + weatherStation.getCountry()); HttpDataReaderService dataReader = new HttpDataReaderService(); dataReader.setWeatherStation(weatherStation); DataSet current = dataReader.getCurrentData(); System.out.println(current.getDateTime() + "Temperature- " + current.getTemperature() + "Humidity-" + current.getHumidity());
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:f="http://java.sun.com/jsf/core"> <af:panelBox text="Weather Report App-www.javadrive.co.in" id="pb1" showDisclosure="false"> <f:facet name="toolbar"/> <af:panelFormLayout id="pfl1"> <af:inputText label="Country Name" id="it1" contentStyle="text-transform:upperCase;color:green;font-weight:bold;" binding="#{WeatherReportBean.cntryNameBind}"/> <af:commandButton text="Get Report" id="cb1" actionListener="#{WeatherReportBean.getWeatherReportButton}" inlineStyle="font-weight:bold;"/> </af:panelFormLayout> <af:popup childCreation="deferred" autoCancel="disabled" id="p1"> <af:dialog id="d1" title="User-User4" type="none"> <f:facet name="buttonBar"/> <af:message id="m1" message="You are not authorize to make an order of 25000, your limit is 20000 !!!" messageType="error"/> </af:dialog> </af:popup> <af:panelGroupLayout id="pgl1" layout="horizontal"> <af:table var="row" rowBandingInterval="1" id="t1" value="#{WeatherReportBean.stations}" partialTriggers="::cb1" contentDelivery="immediate" width="500"> <af:column sortable="false" headerText="Country" id="c3"> <af:spacer width="10" height="10" id="s2"/> <af:outputText value="#{row.country}" id="ot3" inlineStyle="font-weight:bold;color:red;"/> <af:spacer width="10" height="10" id="s1"/> </af:column> <af:column sortable="false" headerText="Locality" id="c4" width="150"> <af:outputText value="#{row.neighborhood}" id="ot4"/> </af:column> <af:column sortable="false" headerText="City" id="c2"> <af:outputText value="#{row.city}" id="ot2" inlineStyle="font-weight:bold;color:darkgreen;"/> </af:column> <af:column sortable="false" headerText="Station Id" id="c1"> <af:outputText value="#{row.stationId}" id="ot1" inlineStyle="font-weight:bold;color:darkblue;"/> </af:column> </af:table> <af:table value="#{WeatherReportBean.reportL}" var="row" rowBandingInterval="1" id="t2" contentDelivery="immediate" partialTriggers="::t1 ::cb1" styleClass="AFStretchWidth" width="800"> <af:column sortable="false" headerText="Date" align="start" id="c5"> <af:spacer width="10" height="10" id="s4"/> <af:outputText value="#{row.currDate}" id="ot5" inlineStyle="font-weight:bold;"> <af:convertDateTime pattern="dd/MMM/yyyy"/> </af:outputText> <af:spacer width="10" height="10" id="s3"/> </af:column> <af:column sortable="false" headerText="Temperature" align="end" id="c6" width="70"> <af:outputText value="#{row.temp} C" id="ot6" inlineStyle="font-weight:bold;color:teal;"/> </af:column> <af:column id="c7" headerText="Humidity" align="right" width="70"> <af:outputText value="#{row.humid}" id="ot7" inlineStyle="font-weight:bold;color:orange;"/> </af:column> <af:column id="c8" headerText="Dew Point" align="right" width="70"> <af:outputText value="#{row.dewR}" id="ot8" inlineStyle="font-weight:bold;color:green;"/> </af:column> <af:column id="c9" headerText="Wind Direction" align="right" width="70"> <af:outputText value="#{row.windDirec}" id="ot9" inlineStyle="font-weight:bold; color:Olive;"/> </af:column> <af:column id="c10" headerText="Wind Speed (Km/H)" align="right"> <af:outputText value="#{row.windSpd}" id="ot10" inlineStyle="color:ActiveCaption;font-weight:bold;"/> </af:column> <af:column id="c11" headerText="Rain Rate" align="right" width="70"> <af:outputText value="#{row.rainRt}" id="ot11" inlineStyle="font-weight:bold;color:maroon;"/> </af:column> <af:column id="c12"> <af:image shortDesc="Weather" id="i1" source="#{row.temp >35 ? resource['images:sun.png'] : resource['images:sun_slush.png']}"/> </af:column> </af:table> </af:panelGroupLayout> </af:panelBox> </jsp:root>
package weather.view.bean; import de.mbenning.weather.wunderground.api.domain.DataSet; import de.mbenning.weather.wunderground.api.domain.WeatherStation; import de.mbenning.weather.wunderground.impl.services.HttpDataReaderService; import de.mbenning.weather.wunderground.impl.services.WeatherStationService; import java.io.Serializable; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.faces.event.ActionEvent; import oracle.adf.view.rich.component.rich.input.RichInputText; import oracle.jbo.domain.Date; public class WeatherReportBean implements Serializable { private RichInputText cntryNameBind; public WeatherReportBean() { } WeatherStationService weatherStationService = new WeatherStationService(); List<WeatherStation> stations; List<Report> reportL; public void getWeatherReportButton(ActionEvent actionEvent) throws SQLException { if (cntryNameBind.getValue() != null) { String cntryName = cntryNameBind.getValue().toString(); stations = weatherStationService.findAllWeatherStationsByCountry(cntryName); reportL = new ArrayList<Report>(50); for (WeatherStation weatherStation : stations) { HttpDataReaderService dataReader = new HttpDataReaderService(); dataReader.setWeatherStation(weatherStation); DataSet current = dataReader.getCurrentData(); java.util.Date b = new java.util.Date(); Double c = new Double(0); Integer humidity = 0; Double dew = new Double(0); String windDir = ""; Double windSp = new Double(0); Double rainRate = new Double(0); if (current != null) { if (current.getDateTime() != null) { b = current.getDateTime(); c = current.getTemperature(); humidity = current.getHumidity(); dew = current.getDewPoint(); windDir = current.getWindDirection(); windSp = current.getWindSpeedKmh(); rainRate = current.getRainRateHourlyMm(); System.out.println("Humidity is-->" + current.getHumidity() + "dew point-->" + current.getDewPoint() + "wind -->" + current.getWindDirection() + "speed--" + current.getWindSpeedKmh()); } } reportL.add(new Report(b, c, humidity, dew, windDir, windSp, rainRate)); } } } public void setStations(List<WeatherStation> stations) { this.stations = stations; } public List<WeatherStation> getStations() { return stations; } public void setReportL(List<Report> reportL) { this.reportL = reportL; } public List<Report> getReportL() { return reportL; } public void setCntryNameBind(RichInputText cntryNameBind) { this.cntryNameBind = cntryNameBind; } public RichInputText getCntryNameBind() { return cntryNameBind; } }
package weather.view.bean; import java.util.Date; public class Report { private Date CurrDate; private double temp; Integer humid; Double dewR; String windDirec; Double windSpd; Double rainRt; public Report(Date date, Double double1, Integer hum, Double de, String windD, Double windS, Double Rain) { System.out.println("date is-->" + date + "and temp is-->" + double1); this.CurrDate = date; setTemp(double1); this.humid = hum; this.dewR = de; this.windDirec = windD; this.windSpd = windS; this.rainRt = Rain; } public void setCurrDate(Date CurrDate) { this.CurrDate = CurrDate; } public Date getCurrDate() { return CurrDate; } public void setTemp(double temp) { this.temp = temp; } public double getTemp() { return temp; } public void setHumid(Integer humid) { this.humid = humid; } public Integer getHumid() { return humid; } public void setDewR(Double dewR) { this.dewR = dewR; } public Double getDewR() { return dewR; } public void setWindDirec(String windDirec) { this.windDirec = windDirec; } public String getWindDirec() { return windDirec; } public void setWindSpd(Double windSpd) { this.windSpd = windSpd; } public Double getWindSpd() { return windSpd; } public void setRainRt(Double rainRt) { this.rainRt = rainRt; } public Double getRainRt() { return rainRt; } }
nice post t
ReplyDeleteHi; I downloaded the Sample, bu it returns no station for any country. Is there a problem with the service?
ReplyDeleteThank you.