tag:blogger.com,1999:blog-71167041920819835682024-03-14T15:23:10.430+05:30Eclipse, Java and all that JAZZ!This blog is about the open world of Eclipse, Jazz and related technologies. Its about new stuff coming your way, old stuff you didn't know existed or simply stuff that we talk about as we enter a new era in software development. All this, straight from the horse's mouth!Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-7116704192081983568.post-16312135278808856622012-07-08T22:53:00.000+05:302012-07-10T11:29:04.687+05:30Using null annotations for fields (currently beta) in Eclipse JDT Juno<div dir="ltr" style="text-align: left;" trbidi="on">
It is common knowledge by now that Eclipse Juno's JDT shipped with support for <a href="http://eclipseandjazz.blogspot.in/2011/12/inter-procedural-null-analysis-using.html">null annotations for inter-procedural null analysis</a>. This was very well-received and the work made it to several blogs about the 10 <a href="http://eclipsesource.com/blogs/2012/06/21/jdt-enhancements-top-eclipse-juno-feature-5/">most interesting Eclipse Juno features</a>. While this is only applicable to local variables/method parameters for now, I had also blogged about <a href="http://eclipseandjazz.blogspot.in/2012/01/null-analysis-for-fields-with-eclipse.html">null analysis support for fields</a> while we worked on it. However, due to the sheer complexity of dealing with problems such as aliasing, concurrency, etc with fields and the current infrastructure's limitations in dealing with these issues comprehensively, we had to <a href="http://eclipseandjazz.blogspot.in/2012/02/null-analysis-for-fields-in-eclipse-jdt.html">withdraw</a> this feature. Because of this, Juno did not come with null annotations support for fields.<br />
<br />
However, the good news is that along with the Juno release, the JDT team, with all due credits to Stephan Herrmann, also released a public beta version of null annotations support for fields. Please visit the <a href="http://wiki.eclipse.org/JDT_Core/Null_Analysis/Beta">null analysis beta wiki page</a> to learn about installation and usage of this feature. As Stephan puts it in his <a href="http://eclipse.dzone.com/articles/eclipse-jdt-understands-null">post on DZone</a>, "feedback to this experimental solution should help us to decide what will be JDT's final solution regarding null analysis for fields". So, please start using it if you've upgraded to Eclipse Juno. If not, what are you waiting for? ;)</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com2tag:blogger.com,1999:blog-7116704192081983568.post-21453143612002536892012-05-13T21:16:00.000+05:302012-06-28T15:16:48.310+05:30Monetizing your mobile apps using IBM Worklight and Ad networks - Part 2<div dir="ltr" style="text-align: left;" trbidi="on">
In <a href="http://eclipseandjazz.blogspot.in/2012/05/monetizing-your-mobile-apps-using-ibm.html">part 1 of this article</a>, we discussed how to leverage ad networks to monetize your apps by showing targeted advertisements through simple tweaks using the ad network SDKs.<br />
<br />
Another, relatively less explored way of advertising when you do not want to go through the ad networks or just want to use your app to advertise your own business, is to use IBM Worklight <a href="http://www.worklight.com/download/get-started/4.2.1/module-5">adapters</a> and <a href="http://www.worklight.com/download/get-started/4.2.1/module-21">push notifications</a>.<br />
<br />
What are Worklight adapters?<span style="font-family: inherit;"> <span style="text-indent: -0.29in;">An Adapter is a </span><span style="text-indent: -0.29in;">t</span><span style="text-indent: -0.29in;">ransport
layer used by the Worklight Platform to connect to various back-end systems. Worklight supports SQL and HTTP adapters out of the box, which means you can also do RESTful operations using the adapter.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1j00B_cwhgfaxLRHFIE0_9WBcA2he5nR87zTSJQ8aThtN9nKJXTpPJiQJaRhIIb7tNu0VvogKCSEO7FRZVNrGn9MWEOs3dfc8b9XOxzQ55gP2MpyIMAlCL7KiEDkZqipxN_atbD9lxfAQ/s1600/worklight3.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1j00B_cwhgfaxLRHFIE0_9WBcA2he5nR87zTSJQ8aThtN9nKJXTpPJiQJaRhIIb7tNu0VvogKCSEO7FRZVNrGn9MWEOs3dfc8b9XOxzQ55gP2MpyIMAlCL7KiEDkZqipxN_atbD9lxfAQ/s1600/worklight3.png" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB-ihJbY918FHEIYpuT2rM1HsAgmesAvx5S3xK-pfBZuw-QmfVyde_sLzL51q0CQiuf0mgjvuj_AtnmJi0lQEQUtHfF_YLovEmV7kym6t6e8DB2Vv2v5K0l3QO3NJrIEA2oswCJcJiuD2a/s1600/worklight2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB-ihJbY918FHEIYpuT2rM1HsAgmesAvx5S3xK-pfBZuw-QmfVyde_sLzL51q0CQiuf0mgjvuj_AtnmJi0lQEQUtHfF_YLovEmV7kym6t6e8DB2Vv2v5K0l3QO3NJrIEA2oswCJcJiuD2a/s320/worklight2.png" width="221" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB-ihJbY918FHEIYpuT2rM1HsAgmesAvx5S3xK-pfBZuw-QmfVyde_sLzL51q0CQiuf0mgjvuj_AtnmJi0lQEQUtHfF_YLovEmV7kym6t6e8DB2Vv2v5K0l3QO3NJrIEA2oswCJcJiuD2a/s1600/worklight2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a><br />
<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Some ways in which you can use adapters are:</div>
<div style="text-align: left;">
<ol style="text-align: left;">
<li>The simplest way an adapter can be used to retrieve ads is to create a UI element on a page in your application and render this UI element using the data returned from an adapter, which can fetch advertisements from a back-end enterprise database. For example, if you're working with an android app, create a web view using height as "wrap_content". You can also use other UI elements such as <i>Gallery</i> for images or <i>layouts. </i>And then call your adapter to fetch the ad-related data to be rendered in the UI element.</li>
<li>Use two or more worklight adapters to mashup data and display targetted advertisement. Eg: Get the city from a page where the user has to select his city -> use an adapter to query a database to fetch a city ID -> use another adapter which can fetch ads related to that city ID from another data source or application. The worklight city weather demo app shown below is a great example of how such a mashup can be done. Read the <a href="http://www.worklight.com/download/get-started/4.2.1/module-6.1">Worklight mashup tutorial</a> to learn more.</li>
</ol>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgakoq3eGmgq4EdbWEEWl4q6abiII6BlvvVPaUzK9G0K9pbbIsMIp7YvaeJL2WPnyna9JaX4uYZy8u4uxqHcPoQSORx6CVUIvMkZf6kPkmr8p6ym13XfDWEHCFVlUKTP2r4T24lYK77Xmmd/s1600/worklight4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgakoq3eGmgq4EdbWEEWl4q6abiII6BlvvVPaUzK9G0K9pbbIsMIp7YvaeJL2WPnyna9JaX4uYZy8u4uxqHcPoQSORx6CVUIvMkZf6kPkmr8p6ym13XfDWEHCFVlUKTP2r4T24lYK77Xmmd/s640/worklight4.png" width="640" /></a>
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPD2-kqXdd_whHdrTpo77QPNhdv_y0-3ZGIR8EUMmQcIeIaHgdykIsTnUlVgUZ16-yfLeHww4s88jEK7YNMbuLgXYtzd5Je2uaa4HfCHq4xUDV2yzi1U-cyDwd_vVh-o1qyVToIGHWksP4/s1600/worklight5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPD2-kqXdd_whHdrTpo77QPNhdv_y0-3ZGIR8EUMmQcIeIaHgdykIsTnUlVgUZ16-yfLeHww4s88jEK7YNMbuLgXYtzd5Je2uaa4HfCHq4xUDV2yzi1U-cyDwd_vVh-o1qyVToIGHWksP4/s200/worklight5.png" width="140" /></a></div>
<div style="text-align: left;">
Adapters can be combined with push notifications to yield yet another way of showing ads. How can this be done? An adapter can listen to an event source and push advertisements as notifications through the app store mediator (Google, Apple). These notifications can be in the form of a notification dialog or a badge. (A badge is a small notification which appears on the corner of the application icon - think facebook mobile app which shows notifications and message alerts right on the icon). The worklight server comes with a browser-based console that can be easily used to dispatch notifications to all devices that have the app installed and subscribed to the notifications.These ads are nice when a user has installed the app and subscribed to the notifications, although they don't provide a very powerful way of in-app advertising, which can be done using ad network integration or adapters. A good example of push notifications is special offers that your business rolls out from time to time. Eg: Christmas Offer - Upgrade to the full version of the app at just 49c. Push notifications give you the power to broadcast ads whenever you want to, thus customizing them according to the needs of your business. The figure below shows how the worklight push mechanism works. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi62jt8SzoSVGtpkW01YTMzwN3Yx_I4YJUo2pL_xJKEAQl0ujwZaRSdo_j1zWTQz0dfQsKW7gPS7GeFCwCpfGktDJgmdQEjiESBMtHXjLRI8wa5O7F_2qiQa_a5XuiL2ZHlLTYOUjPhdZHL/s1600/worklight6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi62jt8SzoSVGtpkW01YTMzwN3Yx_I4YJUo2pL_xJKEAQl0ujwZaRSdo_j1zWTQz0dfQsKW7gPS7GeFCwCpfGktDJgmdQEjiESBMtHXjLRI8wa5O7F_2qiQa_a5XuiL2ZHlLTYOUjPhdZHL/s400/worklight6.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="text-align: left;">Push notifications can be used in other ways as well. You can use them to notify users of new versions or upgrades of the app as soon as a build becomes available. This method truly combines the power of effective lifecycle management of mobile apps with the Worklight builds. This even works in the context of enterprise apps where the primary users of the app are the employees themselves. Eg: if you're using <a href="https://jazz.net/projects/rational-team-concert/?ref_content=ribbon">IBM Rational Team Concert (RTC) </a>and you build your app using </span><span style="text-align: left;">the Jazz team builds, you can create an adapter that listens to the Jazz server (or an app store) and as soon as a new build of the app is available, automatically sends push notifs to all devices with the app to upgrade to latest version. Additionally, RTC source control can help in modularizing the adapters into <i>components</i>, so that different departments/units in the company can maintain their own components independently of the apps and yet support an app which is used across departments/units.</span></div>
<div style="text-align: left;">
<br /></div>
<div>
<i><span style="font-size: x-small;">Note: To send push notifications to Android devices, you will need to use Android Cloud-to-Device Messaging (C2DM). You need a valid Gmail account to register to Google’s C2DM service at h<a href="ttp://code.google.com/android/c2dm/signup.html">ttp://code.google.com/android/c2dm/signup.html</a>. To send push notifications to iOS devices, you will need to use Apple Push Notifications Service (APNS).</span></i></div>
<div>
<i><br /></i></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08DsBdO2riiegPzUedooNhN1mbJ6p_QEQdJdp-yKfbsYYiTEw2erV4LnKMrAYHQd_1CK-_wyPV1Lv0svtCxta1TMSwe1rTwz8-he4cohydWH5r4ZGMH7UODZMrTpnBip2gm-hiY1iBDGj/s1600/worklight7.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08DsBdO2riiegPzUedooNhN1mbJ6p_QEQdJdp-yKfbsYYiTEw2erV4LnKMrAYHQd_1CK-_wyPV1Lv0svtCxta1TMSwe1rTwz8-he4cohydWH5r4ZGMH7UODZMrTpnBip2gm-hiY1iBDGj/s320/worklight7.png" width="320" /></a></div>
<div>
There are also other powerful tools that can help in making sure that the ads you render, either through ad networks or adapters have a look and feel of your app, and don't look forcefully shoved in. While you cannot control the way the ad will be shown, because they're creatives of a third-party, you can ensure that the UI widget in which the ad appears matches your app's look and feel. You can add custom style sheets to the UI elements if you're using say, the Javascript SDK of InMobi which integrates directly with hybrid/ mobile web apps. You can even use tools such as <a href="http://www-01.ibm.com/software/awdtools/developer/application/">IBM Rational Application Developer</a> which provide WYSIWYG editing for commonly used UI toolkits such as Dojo mobile.</div>
<div>
<br /></div>
<div>
So join the mobile bandwagon and start making money from your apps!</div>
<div>
<br />
Catch me at <a href="http://www-01.ibm.com/software/rational/innovate/">IBM Innovate 2012</a>, and hopefully not by the collar! ;)</div>
<div>
<br /></div>
<div>
<br /></div>
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com1tag:blogger.com,1999:blog-7116704192081983568.post-18874510896006492052012-05-13T19:36:00.000+05:302012-06-28T15:17:02.585+05:30Monetizing your mobile apps using IBM Worklight and Ad networks - Part 1<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
While mobile has become a platform that can no longer be ignored by businesses and developers alike and efforts are on way almost in all industry sectors to leverage this platform, it is silently becoming one of the best marketing and advertising platform of our times. Why? With 300,000+ apps and 10 billion downloads in the last 3 years alone, people are spending ever-increasing amounts of time on their smartphones. The mobile revolution has been much faster than the PC revolution in its reach and adoption. <span style="font-family: inherit;">"<span style="background-color: white; color: #333333; line-height: 17px; text-align: -webkit-auto;">Mobile media consumption is growing fast, as people worldwide are now spending more time on their mobile devices than watching TV. In the U.S., people are spending about 142 minutes a day on their devices, compared to 135 minutes for TV and 96 minutes on PCs, making mobile the primary media consumption channel in the nation.", says InMobi's Anne Frisbie. An infographic I stumbled upon recently has some even more convincing numbers. Click on the image below to see the complete infographic.</span></span><br />
<span style="font-family: inherit;"><span style="background-color: white; color: #333333; line-height: 17px; text-align: -webkit-auto;"><br /></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.mshcdn.com/wp-content/uploads/2011/03/mobile_infographic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpDevn9xNP5Bh328U6p0i5OB7RjEr80MhH3ic2n9cJ1Hg7jBNythyphenhyphen3zNVj8EEmEqzW-5Q56G6xBwkMzjO2J3HvsYohhhbjI1uHDmVAwrWmYlASbqy96GKV-JTRArEpbxMcSTf104g4teS9/s400/infographic.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;">That being said, how does an application developer or an enterprise show </span></span><span style="line-height: 17px;">targeted</span><span style="font-family: inherit;"><span style="line-height: 17px;"> ads to consumers or clients? </span></span></span><span style="background-color: white; color: #333333; font-family: inherit; line-height: 17px; text-align: -webkit-auto;">The more popular approach is to incorporate ad banners that can be used to show ads from a mobile ad network such as <a href="https://developers.google.com/mobile-ads-sdk/">Google AdMob</a> or<a href="http://www.inmobi.com/"> InMobi</a>. What are mobile ad networks? They're agencies that purchase ads from companies who want to promote their products on mobile apps. An app developer, also known as a publisher, gets paid on different pricing models if he agrees to show those ads on his app, using the SDKs or services provided by the ad networks. You can read more about the different kinds of ad networks </span><a href="http://mobithinking.com/mobile-ad-network-guide" style="background-color: white; font-family: inherit; line-height: 17px; text-align: -webkit-auto;">here</a><span style="background-color: white; color: #333333; font-family: inherit; line-height: 17px; text-align: -webkit-auto;">. </span><br />
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;"><br /></span></span></span><br />
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;">While its relatively easy to use these SDKs in native applications, its still not straightforward to do so in a hybrid or mobile web application, which are becoming more popular with the cross-platform advantage they offer. So if I'm developing, say, a hybrid app, how do I use say, the Google AdMob SDK, which is primarily for an Android app? <a href="http://www.worklight.com/">IBM Worklight</a>, part of the <a href="http://www-01.ibm.com/software/solutions/mobile-enterprise/">IBM Mobile Foundation</a> is a powerful development platform which allows you to do this easily. Here are some steps that outline how native ad SDKs can be used along with a hybrid app:</span></span></span><br />
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;"><br /></span></span></span><br />
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;">1. Create a Worklight project, adding all the common web code to the 'common' folder and overriding Android specific behavior in the 'android' folder by creating a new <a href="http://www.worklight.com/download/get-started/4.2.1/module-3.2">Android environment</a>. If you're new to Worklight, you can read the <a href="http://worklight.com/download/get-started/4.2.1/">Worklight tutorials</a> to learn how to work with a Worklight project.</span></span></span><br />
<span style="background-color: white; color: #333333; text-align: -webkit-auto;"><span style="font-family: inherit;"><span style="line-height: 17px;"><br /></span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFI15GKidGGItqCaN4vE_updKEX1k-zu6W0fb3C47Iy8BPeh9dpFp2K3UAyVVfpjhyphenhyphenPxQE_5z9ELNqguSFN_4gH2D1DDWMBb5A8AZEUnj8u-B7ZMAeQyMoxcpqEAwfZYACq9l9fU258-ua/s1600/worklight1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFI15GKidGGItqCaN4vE_updKEX1k-zu6W0fb3C47Iy8BPeh9dpFp2K3UAyVVfpjhyphenhyphenPxQE_5z9ELNqguSFN_4gH2D1DDWMBb5A8AZEUnj8u-B7ZMAeQyMoxcpqEAwfZYACq9l9fU258-ua/s200/worklight1.png" width="163" /></a></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;">2. Download the <a href="https://developers.google.com/mobile-ads-sdk/download">Google AdMob SDK for Android</a>.</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;">3. Add the SDK JAR to the<b> android>native>libs</b> folder.</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;">4. Declare<span style="font-family: 'Courier New', Courier, monospace;"> com.google.ads.AdActivity</span> in AndroidManifest.xml located in the <b>android>native</b> folder.</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;">5. Setup the required network permissions(<i>INTERNET</i> and <i>ACCESS_NETWORK</i>) in the AndroidManifest.</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<div style="text-align: -webkit-auto;">
<span style="color: #333333;"><span style="line-height: 17px;">6. Now navigate to <b>android>native>res>layout>main.xml</b> and open it in the xml view. You will see a single WebView declared in the xml. All you need to do is add an AdView to the layout right above the WebView</span></span><br />
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span><br />
<span style="color: #333333;"><span style="line-height: 17px;"><br /></span></span></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.ads.AdView android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="MY_AD_UNIT_ID"
ads:adSize="BANNER"
ads:testDevices="TEST_EMULATOR, TEST_DEVICE_ID"
ads:loadAdOnCreate="true"/>
<WebView android:id="@+id/appView"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
</LinearLayout></code></pre>
<br />
Voila! You have your add banner in the application. An alternate way of doing this would be to first generate the Android project from the Worklight project by using "Build Environment and Deploy" option, and then modify the main.xml in the native Android project using the nice UI. <br />
<br />
Any native code for the ad banner such as ad listeners etc. can be added to the Android activity class which references the main.xml or any other layout where the ad was added. For example:<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>public class HelloWorklight extends WLDroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl(getWebMainFilePath());
}
}
</code></pre>
<br />
In the same fashion, you can add <a href="https://developers.google.com/mobile-ads-sdk/docs/android/advanced">Interstitial ads</a> by combining <a href="http://www.worklight.com/download/get-started/4.2.1/module-7.6">native and web pages in the Worklight project</a>. Also, you can add ads into iOS/ Blackberry/ Other apps using the other SDKs provided by Google AdMob, InMobi and other networks.<br />
<br />
In the part two of this post, I'll discuss how to use Worklight adapters and push notifications to render ads for your own business through your database or other data sources.</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com7tag:blogger.com,1999:blog-7116704192081983568.post-28541280645236658412012-03-02T23:18:00.000+05:302012-03-02T23:18:33.632+05:30Contributing to Eclipse Java Development Tools project<div dir="ltr" style="text-align: left;" trbidi="on">
In recent times, we've been getting several contributions in the Eclipse JDT project. Thats a great thing and we want to encourage that. However, several times small issues viz. patch not based on latest code, formatting issues, whitespace issues, failing tests etc. delay the process of review and release. It is painful for both the contributor, as well as the JDT committer.<br />
<br />
In order to make sure all JDT contributions go through a standard series of steps before they make it to bugzilla, we've updated the <a href="http://wiki.eclipse.org/JDT_UI/How_to_Contribute">contributing to JDT/UI</a> and the <a href="http://wiki.eclipse.org/JDT_Core_Committer_FAQ">JDT/Core FAQ</a> page. Please spend a few minutes reading through the steps and go ahead to submit a patch on bugzilla. Looking forward to more community participation in both JDT projects.<br />
<br />
Also, whenever you start working on a bug, please drop a small comment on the bug page to say you intend to submit a patch, to avoid duplication of effort. Thanks! :)</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com0tag:blogger.com,1999:blog-7116704192081983568.post-89637886833549961532012-02-18T13:55:00.000+05:302012-02-18T18:04:24.190+05:30Null analysis for fields in Eclipse JDT withdrawn for Juno<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://eclipseandjazz.blogspot.in/2012/01/null-analysis-for-fields-with-eclipse.html">Null analysis for fields with Eclipse JDT</a> , introduced in Juno M5, has been withdrawn and will not be available in the Juno release. Only Juno M5 will contain this feature. The reason for withdrawal is the fact that becuase of implementation constraints, it could not support analysis for alien field references i.e. non-static fields of objects other than 'this'. We will rework the implementation and come back with a full fledged support for fields, including annotations to support null analysis for fields. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=247564#c176">https://bugs.eclipse.org/bugs/show_bug.cgi?id=247564#c176</a> for more details.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFoJZoxnO3V7cIO7ru2vu_2P-eQMjzL1t_HMtqEFj4-ynRjSJK3QDbVnhbxaCdwXHn_26DFxG0ogiGdO6pPCPBKPjGu2JoqPN7mbJ-2FhxJSm_37uqNGqXHW2CD8VneEKSQnOxpTrKgjrS/s1600/$1247EA8D0E910407.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFoJZoxnO3V7cIO7ru2vu_2P-eQMjzL1t_HMtqEFj4-ynRjSJK3QDbVnhbxaCdwXHn_26DFxG0ogiGdO6pPCPBKPjGu2JoqPN7mbJ-2FhxJSm_37uqNGqXHW2CD8VneEKSQnOxpTrKgjrS/s320/$1247EA8D0E910407.png" width="320" /></a></div>
<br />
<br />
Apologies to those who were looking forward to a complete null annotations support for fields as well. We are considering making the current implementation of the feature available as a plugin patch. I will keep you posted.<br />
<br />
Also, even when using annotations for method return and parameters, be careful in dealing with fields because we don't warn there. Eg:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">class A{<br /> Object o = null;</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> void goo(@NonNull Object param) {}</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> @NonNull Object foo() {</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> goo(this.o);</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> return this.o;</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">}</span></div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com2tag:blogger.com,1999:blog-7116704192081983568.post-21265540978223767902012-01-30T01:44:00.002+05:302012-01-30T13:36:57.237+05:30Null Analysis for Fields with Eclipse JDT<div dir="ltr" style="text-align: left;" trbidi="on">
It is common knowledge that Eclipse has an intra-procedural null analysis capability, augmented recently with null annotations for inter-procedural analysis in Juno M4. However, a big flaw and pain point till now was that the anlsysis would only work for local variables/parameters, and NOT for fields! Strange, innit? Well, a bunch of problems with handling fields prevented the initial null analysis implementation to be generic enough to handle fields as well. Access from different threads, through different objects, initialization of even final fields in different constructors were some of the roadblocks because of which this work was put on the backburner. However, even though we haven't found a holy grail to tackle these problems, we've come out with atleast a basic implementation of null analysis for fields! Rejoice!<br />
<br />
<b>A. The Problem</b><br />
Prior to Juno M5, the following code snippet would raise null warnings only on the local variable, but not on the field.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZjFZUKxEyzz_SofBSn4nDQpNk6-Q8iur9swtmdsSwYmHzgkLLI6G4nH4OjmQliHtytumF98tYhFway-b4DePByd7LwZl9VIba0xa2z1KlDF9AVejwNkcbTFecfQnYOu2NsRAjDbloulC-/s1600/$148A72D2718D5D18.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZjFZUKxEyzz_SofBSn4nDQpNk6-Q8iur9swtmdsSwYmHzgkLLI6G4nH4OjmQliHtytumF98tYhFway-b4DePByd7LwZl9VIba0xa2z1KlDF9AVejwNkcbTFecfQnYOu2NsRAjDbloulC-/s1600/$148A72D2718D5D18.bmp" /></a></div>
<br />
<br />
<b>B. The Solution</b><br />
See the <a href="http://download.eclipse.org/eclipse/downloads/drops4/S-4.2M5-201201271145/eclipse-news-M5.html">Juno M5 new and noteworthy page</a> for the new null analysis for fields.<br />
Note that for non-constant fields, we only raise "potential NPE" warnings even if the field has been assigned null or compared against null because we assume that there's always a chance of another thread modifying it between the assignment/comaparison and the actual reference. So consider the following snippet<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtghlGtSCG4LHo2e4IxilfK8qYx7Ml-PZ_dTvVIsk57uvRUdmbbuNhD_sDgpL3Lc-ltlCIAaCUWJLdxl9rCHpxq6k7HPJ6YL1RhQ-ay4-1ChVAPpxSJMxVTOq863mSx-35XtfAE68h9Xc/s1600/$7ACE762ED0458596.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtghlGtSCG4LHo2e4IxilfK8qYx7Ml-PZ_dTvVIsk57uvRUdmbbuNhD_sDgpL3Lc-ltlCIAaCUWJLdxl9rCHpxq6k7HPJ6YL1RhQ-ay4-1ChVAPpxSJMxVTOq863mSx-35XtfAE68h9Xc/s640/$7ACE762ED0458596.jpg" width="640" /></a></div>
<br />
<br />
<b>C. Not quite there yet?</b><br />
There are a few limitations with the current null analysis for fields:<br />
<ul style="text-align: left;">
<li>Yet to be done for final fields that are initialized at the time of declaration. This will be done with the fix for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=237236">bug 237236</a> soon.</li>
<li>The analysis only works for non-static fields of the current object or static fields of the current type ONLY. That means, in the following code snippet. you get null warnings on direct access of field1 or access via "this", but not if field1 is accessed via another object 'test'.</li>
</ul>
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">class Test{<br /> public Object field1;</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> void foo(Test test) {</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> if (field1 == null) { </span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println( field1 .toString()); // "potential" NPE warning</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> } else {</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> // do something</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println(field1.toString()); // Potential NPE warning here</span><br />
<br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> if (this.field1 == null) { </span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println( this.field1 .toString()); // "potential" NPE warning</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> } else {</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> // do something</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println(this.field1.toString()); // Potential NPE warning here</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> // access through object 'test' will raise no warnings. See below</span><br />
<br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> if (test.field1 == null) { </span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println( test.field1 .toString()); // no warning</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> } else {</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> // do something</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> System.out.println(test.field1.toString()); // no warning</span><br />
<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">}</span><br />
<br />
This is a limitation of the current code analysis infrastructure and we hope to address this sometime soon. The soon to be released<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331649"> null annotations support for fields</a> will greatly assuage this problem in the short term.<br />
<br />
Please do start using this new feature. Even with its limitations, its quite useful and we've found a long list of unsafe code patterns in the Eclipse SDK itself. <a href="http://blog.deepakazad.com/2012/01/weird-code-pattern-in-eclipse-sdk.html">Deepak's post here</a> presents one such example<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9U2McxtKA1Md6mxbksPqKy_N181juTbhozYzx9P1XJTZiKn1BpGQXfw7CcYO8wOEe_7rAODcJbmaaZVG6INo2jSMTNwsQHaNhp5TpkO6FgZ2DwnyN7lvFA8BD4rA-Fg5vWHUHvKtmytub/s1600/weird-code-pattern.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9U2McxtKA1Md6mxbksPqKy_N181juTbhozYzx9P1XJTZiKn1BpGQXfw7CcYO8wOEe_7rAODcJbmaaZVG6INo2jSMTNwsQHaNhp5TpkO6FgZ2DwnyN7lvFA8BD4rA-Fg5vWHUHvKtmytub/s1600/weird-code-pattern.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Apart from this, Juno M5 has more interesting items. See<a href="http://eclipseandjazz.blogspot.com/2012/01/faster-java-search-using-pre-built.html"> my previous post on pre-built indexes</a>, <a href="http://blog.objectteams.org/2012/01/help-the-jdt-compiler-helping-you-1-resource-leaks/">Stephan's post on Resource leak warnings</a> and the <a href="http://download.eclipse.org/eclipse/downloads/drops4/S-4.2M5-201201271145/eclipse-news-M5.html">Juno M5 new and noteworthy page</a> for more.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Stay tuned!</div>
<br />
<br />
<br /></div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com2tag:blogger.com,1999:blog-7116704192081983568.post-72615311829092852882012-01-26T18:00:00.000+05:302012-01-28T18:48:32.387+05:30Faster Java search using pre-built indexes with Eclipse JDT<div dir="ltr" style="text-align: left;" trbidi="on">
JDT indexes referenced libraries (or JARs) in your projects for use in the Java search. However, in most cases these libraries seldom change, and the indexing may be costly and take time when you invoke search for the first time after adding the JAR on the buildpath.<br />
<br />
From 3.8M5 onwards, you can avoid this redundant indexing by providing a pre-built index for each classpath entry in the classpath container. This feature was recently implemented in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356620">bug 356620</a>.<br />
<br />
So how do you generate the indexes in the first place?<br />
1. Create the JAR<br />
2. Go to Run Configurations>Eclipse Application. Give a name to the configuration, viz. indexer, and in 'Main' tab choose Run an application, and use the list to select org.eclipse.jdt.core.JavaIndexer<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiIJ76CJnJNOTCZZtUguqRyjS2k8tYLjEMtMAvp-TOwZVe5ZcKR0SCvuHfWKaSPlPhd4wJ8jCET1Ya2BtKJ8q2a7dzyAotmrabtqXKs3InLGWcSKGudmxdFWntihLir74YLQyXLxAgFjrx/s1600/indexer1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiIJ76CJnJNOTCZZtUguqRyjS2k8tYLjEMtMAvp-TOwZVe5ZcKR0SCvuHfWKaSPlPhd4wJ8jCET1Ya2BtKJ8q2a7dzyAotmrabtqXKs3InLGWcSKGudmxdFWntihLir74YLQyXLxAgFjrx/s400/indexer1.jpg" width="400" /></a></div>
<br />
3. Go to the 'Arguments' tab and use the arguments -option <indexFileLocation> <jarFileLocation> in addition to the existing ones.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5q1teS8fta5VvhsX5CRA8D20CeqBTeX7HfzmSp_Wpg6H2odZwis0Tuous-H3sAX6BvOox3LGeV0QfQMHX2cKCVZW3Mo8cw7mrlVO7y6Wm_lCMPK1rNGBWRrpUlA6LC23qanhoF0pIfyXV/s1600/indexer2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5q1teS8fta5VvhsX5CRA8D20CeqBTeX7HfzmSp_Wpg6H2odZwis0Tuous-H3sAX6BvOox3LGeV0QfQMHX2cKCVZW3Mo8cw7mrlVO7y6Wm_lCMPK1rNGBWRrpUlA6LC23qanhoF0pIfyXV/s320/indexer2.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
4. The index file will be generated at the specified location.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now when the JAR in question is being added to the build path of a project, the classpath containers can add the index location to classpath, which will look as follows:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><classpathentry kind="lib" path="C:/Users/IBM_ADMIN/Desktop/TestIndex.jar"></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span><attributes></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span><attribute name="javadoc_location" value="file://C://abc"/></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span></attributes></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"></classpathentry></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: Georgia, 'Times New Roman', serif;">Voila! JDT will no longer index the JAR and even the first search will be lightning fast!</span></div>
<br />
<i style="font-family: verdana, arial, helvetica, geneva; font-size: 13px; text-align: -webkit-auto;">Note: This feature is mainly intended for plug-ins that implement their own classpath container, not for the end user.</i>
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com1tag:blogger.com,1999:blog-7116704192081983568.post-54612542540961952862011-12-06T23:09:00.001+05:302011-12-10T01:27:10.771+05:30Inter-procedural Null analysis using annotations in Eclipse JDT<div dir="ltr" style="text-align: left;" trbidi="on">
The JDT team is extremely excited with the release of the new annotation based null analysis. Before writing anything about it I want to thank Stephan Herrmann (JDT committer from Germany) for all the hard work he has put in on this feature! Feel free to drop him a word of appreciation on stephan AT cs.tu-berlin.de<br />
<br />
<b><i>What is JDT's annotation based null analysis?</i></b><br />
To give a bit of a background, you must've noticed that JDT java compiler does some static analysis and based on that warns if you deference a variable that has been analysed to be (potentially) null at runtime, or compare a variable against null when its nullness at runtime can be determined at compile time.<br />
<br />
<span class="Apple-style-span" style="font-size: x-small;">[See line numbers to locate error messages]</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqb-PhoMKVyx25DephciQ9-taN843UQ-T_XMyIkrSw8_r6CYIXXQyCBO_iexI1uWAW3X7Zw58ebda7ZKV5J-_U4cqyperp9bNvmGx2CMZkhOJ0gq9Ww-NzKIVvHTvlCKO_nP5GRl1aR6y/s1600/snap1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqb-PhoMKVyx25DephciQ9-taN843UQ-T_XMyIkrSw8_r6CYIXXQyCBO_iexI1uWAW3X7Zw58ebda7ZKV5J-_U4cqyperp9bNvmGx2CMZkhOJ0gq9Ww-NzKIVvHTvlCKO_nP5GRl1aR6y/s640/snap1.jpg" width="608" /></a></div>
However, the warnings are only generated for local variables inside a method. There's no way to find out the change of nullness due to a method call, or for parameters of a method. Consider the example on the left. o1 is a parameter and since we don't know how foo(..) will be called and what value will be passed to o1, we can't do any analysis on it unless its state definitely changes inside foo(..). Also note that even though o1 is assigned return value of method bar(), which returns null, the compiler cannot figure that out during static analysis and assumes the return value of bar() to be an unknown value.<br />
<br />
Null annotations offer a solution here. They are a way of enforcing null contracts in your code to make sure you catch such (potential) NPE's before they occur at runtime and become a stop-ship bug for your product.<br />
<br />
<br />
<b><i>How do I use null annotations?</i></b><br />
JDT now comes bundled with a JAR (org.eclipse.jdt.annotation) containing null annotations. The types of annotations offered are:<br />
<u>NonNull annotation</u><br />
Default is <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">@org.eclipse.jdt.annotation.NonNull </span>-<br />
<ul style="text-align: left;">
<li>when this annotation occurs on a return type, it enforces a non null return value for a method.</li>
<li>when this annotation occurs on a method parameter, it enforces a non null value to be passed to the method call and that only a non null value can be assigned to this parameter inside the method.</li>
</ul>
<br />
<u>Nullable annotation</u><br />
Default is <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">@org.eclipse.jdt.annotation.Nullable</span>-<br />
<ul style="text-align: left;">
<li>when this annotation occurs on a method return type or parameter, it says that the returned value can be null, and so can be the argument.</li>
</ul>
<br />
<u>NonNullByDefault annotation</u><br />
Default is <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">@org.eclipse.jdt.annotation.NonNullByDefault</span>-<br />
<br />
<ul style="text-align: left;">
<li>This can be applied to a package (in package-info.java), class or method to enforce nullability for all enclosed elements. The annotation alone enforces non nullability of enclosed method return value and parameter values.</li>
<li>If applied with a an argument i.e. NonNullBeDefault (false), it will cancel out any global default for the particular element.</li>
</ul>
<br />
To use these annotations in your project, <b>right click Project>Build Path>Add External Archives</b> and browse to org.eclipse.jdt.annotation JAR in the "plugins" directory of your eclipse install location. (We are working on the UI for this.)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
One can also use their own annotation types as null annotations. Just make sure they are on the project's buildpath.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicNA7vo6orhkU4OjLDx5YllC01Cuw0kxzagtzgeB-UwU9s7Mkr0lLY0LpxLIdeE1JtZrNAfRhOREf_SixmWAbDciditOOTFneMAOKYzq0dGe9uguHvH26tz7mw_imn44_PtMvSyboVowBS/s1600/null-prefs.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicNA7vo6orhkU4OjLDx5YllC01Cuw0kxzagtzgeB-UwU9s7Mkr0lLY0LpxLIdeE1JtZrNAfRhOREf_SixmWAbDciditOOTFneMAOKYzq0dGe9uguHvH26tz7mw_imn44_PtMvSyboVowBS/s320/null-prefs.png" width="320" /></a></div>
To enable null annotation based analysis and specify the annotation names, navigate to Preferences>Java>Compiler>Errors/Warning>Null analysis.<br />
<br />
(Note also the "use non-null as default" option, which you can use to set a universal (workspace/project level) default to be applied to all method return types and parameters.)<br />
<br />
<br />
<br />
<b><i><br /></i></b><br />
<b><i><br /></i></b><br />
<b><i>What new errors/warnings should I expect to see with null annotations enabled?</i></b><br />
As seen in the above dialog, there are two kind of diagnostics of primary importance - violation of null specification and potential violation of null specification. In addition to these the existing null analysis gets enhanced, and now for annotated method parameters a null state is available inside a method.<br />
<br />
<b>Violation of null spec</b> is issued in cases when:<br />
1. You pass a null value as an argument to a method whose corresponding parameter is annotated with @NonNull<br />
2. You assign a @NonNull annotated parameter a null value.<br />
3. You return a null value in a method that is annotated with @NonNull<br />
4. You inherit a method annotated with @NonNull but now loosen the contract by annotating child method as @Nullable.<br />
5. You inherit a method with a parameter annotated with @Null but now tighten the contract by annotating child method's corresponding parameter as @NonNull.<br />
<br />
<span class="Apple-style-span" style="font-size: x-small;">[See line numbers to locate error messages]</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht1RdINr8WRZ97-MWUbITFbmJhbc79ZDlwRsuJgqIfnTNwMTC7v7nFo4Eaz9oEPglQIGAL-jnM7azNEZRtTIyPMnCXOQGhyNNg9OKFV4TIo_OEAUCWizygjS6_Rp_ed1hQXALleax2bNob/s1600/snap3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="636" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht1RdINr8WRZ97-MWUbITFbmJhbc79ZDlwRsuJgqIfnTNwMTC7v7nFo4Eaz9oEPglQIGAL-jnM7azNEZRtTIyPMnCXOQGhyNNg9OKFV4TIo_OEAUCWizygjS6_Rp_ed1hQXALleax2bNob/s640/snap3.jpg" width="640" /></a></div>
<span class="Apple-style-span" style="font-size: x-small;"><br /></span><br />
<br />
<b>Potential violation of null spec</b> is issued when:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
1. You pass a value evaluated to be null on some execution path as an argument to a method whose corresponding parameter is annotated with @NonNull<br />
2. You assign a @NonNull annotated parameter a value ascertained to be null on some execution path.<br />
3. You return a possibly null value in a method that is annotated with @NonNull.<br />
<br />
<span class="Apple-style-span" style="font-size: x-small;">[See line numbers to locate error messages]</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCegnEEKgjD1oK-qGQ-SsTjtmCxRswH5J8yWX2qVBadqSRdv4Yn3UKuLvhkg4lEd04Iirmb9cir9nfeQ9ZoxB9GjZo5jkGJDqsxZgA0TjnIZhWEOY39Pr_djB42QC5NcmLR0H-oCtQJyB/s1600/snap4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCegnEEKgjD1oK-qGQ-SsTjtmCxRswH5J8yWX2qVBadqSRdv4Yn3UKuLvhkg4lEd04Iirmb9cir9nfeQ9ZoxB9GjZo5jkGJDqsxZgA0TjnIZhWEOY39Pr_djB42QC5NcmLR0H-oCtQJyB/s640/snap4.jpg" width="640" /></a></div>
<br />
<br />
<b>Insufficient null info </b>is issued when there's not sufficient information to evaluate a given value to be (possibly) null and that value is passed as an argument, assigned to a parameter or returned from a method.<br />
<br />
<span class="Apple-style-span" style="font-size: x-small;">[See line numbers to locate error messages]</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRhqrV9jiiKLm9KCfOT3DVaSV-aNha1JNIvXcIJ6tIFLnHYYQK7Dw7pWkLDkzbkDXiN8jm-ZCMvifeYaQFjetUvy-F3fmUSQCAb-z5C-dy0ADMcJXXuSC0UUf7K1vhEwSHvB1DU3CjALSx/s1600/snap5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="556" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRhqrV9jiiKLm9KCfOT3DVaSV-aNha1JNIvXcIJ6tIFLnHYYQK7Dw7pWkLDkzbkDXiN8jm-ZCMvifeYaQFjetUvy-F3fmUSQCAb-z5C-dy0ADMcJXXuSC0UUf7K1vhEwSHvB1DU3CjALSx/s640/snap5.jpg" width="640" /></a></div>
<br />
<br />
<b>Redundant null annotation</b> is issued when an annotation has the same effect as one applied already in an enclosing element.<br />
<br />
<span class="Apple-style-span" style="font-size: x-small;">[See line numbers to locate error messages]</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmy2ijhUjZfpUGHw1Z8ITbJtj57adYPofecfPMBBJiydVU7lK9GBw0JqMvafjJpO7Dve5eT5V8ioV-8klEYAKZj1mvXIGWnNmlfcN4djgoZp-uF8GN4y7RhRcTM749Eex1KVrAtAuuWVG/s1600/snap6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="621" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmy2ijhUjZfpUGHw1Z8ITbJtj57adYPofecfPMBBJiydVU7lK9GBw0JqMvafjJpO7Dve5eT5V8ioV-8klEYAKZj1mvXIGWnNmlfcN4djgoZp-uF8GN4y7RhRcTM749Eex1KVrAtAuuWVG/s640/snap6.jpg" width="640" /></a></div>
<br />
Note that this is a work in progress and we will continue to polish the same for the Juno release. We're also working on ways to help people use this functionality easily (eg.: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331651">Support for nullity profiles for libraries</a> and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337977">Quick fixes for null annotations</a>. ) .<br />
For a sneak preview of this feature, drop in at the EclipseCon 2012 tutorial - <a href="http://www.eclipsecon.org/2012/sessions/how-train-jdt-dragon">How To Train the JDT Dragon</a>. If you find any issues while testing this feature, please open a <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT">bug</a>. I hope you're as excited as we are about this cool new feature!</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com7Vittal Mallya Rd, SR Nagar, Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-7116704192081983568.post-40511409545874142992011-11-14T00:46:00.001+05:302011-11-14T19:42:45.449+05:30Of Compliance and Source settings in Eclipse java compiler<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Going through a few stack overflow posts and a few bugs, I realized that there's still a lot of confusion about the source and compliance level settings available in JDT. Well, frankly, almost everyone I know was confused when they started using JDT, even the current JDT committers themselves!<br />
These settings are available in <b>Preferences>Java>Compiler</b>, or in your project's <b>.settings folder>org.eclipse.jdt.core.prefs</b> file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoq0mngGUcU4m9hT7q5DnKa2SKotMXcBRUJ_uF9aV8hy8_gBVyPyx4HUZPbmNwXN94tTzwLte_4mpgYVblllekuqYKj56rZEMmZvdhjDeMe-9jPEe1gKFh5uGRqBeDXr6wLf5K3IXcbAju/s1600/shot1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoq0mngGUcU4m9hT7q5DnKa2SKotMXcBRUJ_uF9aV8hy8_gBVyPyx4HUZPbmNwXN94tTzwLte_4mpgYVblllekuqYKj56rZEMmZvdhjDeMe-9jPEe1gKFh5uGRqBeDXr6wLf5K3IXcbAju/s400/shot1.JPG" width="400" /></a></div>
<br />
<br />
So, what do the settings imply and what do they do?<br />
<br />
<b><i>Source compatibility:</i></b><br />
This setting should be used to select upto which java version the user intends to use the language features. Eg.: setting it to 1.7 means that the user can use strings in switch, the diamond construct, etc. but setting it to 1.6 will mean that the user can not use such 1.7-only language features.<br />
For the JDT compiler itself, we use a compliance of 1.4. Yes, quite old-fashioned you'd say, but this was a conscious choice to enable people to use the JDT compiler even if they dont have a version of java higher than 1.4 installed on their machines. You can also chose a source setting for your project on such considerations.<br />
<br />
<b><i>Compiler Compliance level:</i></b><br />
This setting is a kind of a switch to make the JDT compiler "compliant" to a certain Oracle javac version. This is because not all bugs fixed in the Oracle javac compiler get backported to earlier releases. So, there are many differences between each javac version. There are even cases when only one javac version differs from the others, before and after it. So, we provided the compliance setting for users to replicate that difference in behaviour in the JDT compiler. This is to enable people who compile with ECJ and ship with javac or vice-versa, to see consistent errors (or the lack thereof).<br />
<br />
Take, for example, the following case:<br />
<br />
package com.example;<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">import java.util.List;</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">public class ErasureBug {</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> public String output(List<Integer> integers) {</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> return "";</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> public void output(List<Double> doubles) {</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"> }</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">}</span><br />
<br />
<br />
<span class="Apple-style-span" style="font-family: inherit;">This code compiles without error only in javac 6, but fails with a duplicate method erasure in both javac 5 and javac 7. </span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;">So, in Eclipse when the user sets the project "compliance" to 1.6, he/she will be able to compile the code as shown, while in 1.5 and 1.7 modes, the code will fail.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9vnS1b_qy5IFf5dwH4uBjd0s_LxuluYLK3MyAlK-o1L-5nyNLqWxF4QlXK77ekdyMfQAkgdJUikPWkW2MIsJO5Mzjx2pSAeFCRbouMuOGyhYrcogYMENPc-zFW9MV1DfxRxGuKsmSlCZm/s1600/shot2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9vnS1b_qy5IFf5dwH4uBjd0s_LxuluYLK3MyAlK-o1L-5nyNLqWxF4QlXK77ekdyMfQAkgdJUikPWkW2MIsJO5Mzjx2pSAeFCRbouMuOGyhYrcogYMENPc-zFW9MV1DfxRxGuKsmSlCZm/s400/shot2.JPG" width="400" /></a></div>
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;"><b><i>Generated .class files compatibility:</i></b></span><br />
<span class="Apple-style-span" style="font-family: inherit;">This setting changes the generated bytecode to be compatible to a certain VM version. This is required at runtime when the VM available is lower than the one for which the code is compiled. So, if you set source level at 1.3 , use 1.3 features your code and expect your clients to still be able to use the older 1.2 or lesser VM to execute your code, you should set the .class file compatibility setting to 1.2 or less. This does not work for higher java versions, because suppose you use annotations in your code which only came in 1.5, or instructions such as invokedynamic in 1.7, which introduced a new Bootstrap method attribute, earlier VM's may still not be able to execute the class files. So we cannot guarantee backward compatibility and the UI thus will not allow you to set class file compatibility lower than the source level. However, if you're using features such as generics in 1.5 source level, it's quite safe for a 1.4 VM to execute those. So, you can manually set the org.eclipse.jdt.core.compiler.codegen.targetPlatform property to 1.4 in project></span><b>settings folder>org.eclipse.jdt.core.prefs </b>file.<br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;"><i>Note that the source level cannot be more than the compliance level.</i></span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;">Hope this gives more clarity on the settings.</span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
<span class="Apple-style-span" style="font-family: inherit;"><u>EclipseCon update:</u></span><br />
<span class="Apple-style-span" style="font-family: inherit;">I have the following submissions for EclipseCon 2012. Do vote if you find them interesting:</span><br />
<br />
<ul style="text-align: left;">
<li><a href="https://www.eclipsecon.org/2012/sessions/whats-new-jdt">What's new in JDT</a></li>
<li><a href="https://www.eclipsecon.org/2012/sessions/holy-grail-mobile-development">The holy grail of mobile development</a></li>
<li><a href="https://www.eclipsecon.org/2012/sessions/agile-and-collaborative-development-mobile-apps">Agile and collaborative development of mobile apps</a></li>
</ul>
<br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span></div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com3Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-7116704192081983568.post-27377496137861204932011-10-18T02:11:00.001+05:302011-10-18T02:13:28.555+05:30Of invalid references to system libraries and execution environments<div dir="ltr" style="text-align: left;" trbidi="on">
Picture this:<br />
<br />
<ul style="text-align: left;">
<li>You have a plugin that is supposed to be compatible with systems running even on 1.4 JRE i.e. your plugin execution environment is 1.4.</li>
<li>An unsuspecting developer unintentionally checks out this plugin project into his workspace where he uses a 1.6 JRE by default.</li>
<li>He starts writing Generics and is even allowed to do so because a 1.6 library is associated with the project in his workspace. The poor guy doesn't yet know what blunder he has done! :)</li>
</ul>
<div>
See an example below where in a plugin with 1.6 compliance, a developer accidentally used Autocloseable (coming from his workspace default 1.7 JRE).</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EGEDmVqVQDmYPMg_3hbBWYU4KRUmbfRJPMptEtyHcanJYiGWogye9fbtGz9wzy4gHcAAqP3nD3cZ1s17U_-v1x9u1op2eYAok9oWzaGoufhc0DPe4W_4XCxYxweuM0gbIg5l3hbZWDEF/s1600/pic1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EGEDmVqVQDmYPMg_3hbBWYU4KRUmbfRJPMptEtyHcanJYiGWogye9fbtGz9wzy4gHcAAqP3nD3cZ1s17U_-v1x9u1op2eYAok9oWzaGoufhc0DPe4W_4XCxYxweuM0gbIg5l3hbZWDEF/s640/pic1.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
API tooling provides a mechanism to figure out such illegal references to system libraries. In order to set up API tooling for your plugin project, <b>right click on the project > PDE tools > API Tooling setup. </b>Choose your project and click <b>next</b>. When it shows "Add API nature and API analysis builder", click <b>finish</b>. Now make sure your project settings for API tooling (<b>right click > Properties > Plug-in development > API errors/warnings</b>) are set as shown below:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrgUvxvLqaVVicRLkrjRIkGku0Qb5fsZffZC8UMm6brvpy66dyAr6zlH5PReXGBckXt-E4k5dv4ThbKI-iE4lKbOyxHS-q0XAXlwWCsb4z6htgo0WMuYySwfblD3kVOhecmJuIZXcVTKgd/s1600/pic2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="568" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrgUvxvLqaVVicRLkrjRIkGku0Qb5fsZffZC8UMm6brvpy66dyAr6zlH5PReXGBckXt-E4k5dv4ThbKI-iE4lKbOyxHS-q0XAXlwWCsb4z6htgo0WMuYySwfblD3kVOhecmJuIZXcVTKgd/s640/pic2.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
By default, the "Supported Environments" will have no Execution Environments descriptions installed (From 3.8 onwards you will get an error whenever no execution environment description is installed). To install these EE descriptions, click on "<b>install them now</b>" or go to the "I<b>nstall New Software..</b>" page. Choose the "Eclipse Project update site" if already available or add the URL http://download.eclipse.org/eclipse/updates/<version> , where <version> = 3.6, 3.7, etc.</div>
<div>
Uncheck "group by category" option and search for descriptions. Install these descriptions and you're all set to go. (<i>Note: the above steps should be taken if you move to 3.8 Juno and suddenly find the "Missing EE descriptions" error in your project</i>). </div>
<div>
<br /></div>
<div>
Now with the above "invalid references to system libraries" option set to error/warning, you should get a warning for usage of Autocloseable in the above plugin project, as shown below:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbLEbShcrrShIJwaiM-1wuXIt90XevahcnLlNM3Wrr66_5olAn4eXlLGNFDvEakC-gRgIFchmgHWTtyFedvoNUi5k8iOvwH05NScjXL59FVplkyN_p21OE2Vtpqsojd2dnuFDeo5hhtMEN/s1600/pic3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbLEbShcrrShIJwaiM-1wuXIt90XevahcnLlNM3Wrr66_5olAn4eXlLGNFDvEakC-gRgIFchmgHWTtyFedvoNUi5k8iOvwH05NScjXL59FVplkyN_p21OE2Vtpqsojd2dnuFDeo5hhtMEN/s640/pic3.JPG" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
These settings when done once on the project level and released into the repository will make sure that nobody accidentally references any API/class one is not supposed to. Read <a href="http://olivier-eclipse.blogspot.com/2010/11/workspace-settings-vs-project-settings.html">Olivier's post to know more about project vs. workspace settings</a></div>
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com0Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-7116704192081983568.post-2005685921948231692011-08-01T23:10:00.002+05:302012-06-28T15:17:45.195+05:30Agile Development of mobile applications using IBM Rational Team Concert and Phonegap for Android, iOS and others<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="font-family: inherit;">
<br /></div>
<div style="font-family: inherit;">
<span style="font-size: small;">In earlier articles - <a href="https://jazz.net/library/article/505/">Developing applications for Android™ using IBM Rational Team Concert in an agile way</a> and <a href="http://eclipseandjazz.blogspot.com/2011/07/developing-applications-for-android.html">Developing applications for Android™ using IBM Rational Team Concert andRational Rhapsody in an agile way</a> we saw how to leverage the power of planning, collaboration, process, source control, build management, etc that IBM Rational Team Concert (RTC) has to offer, to develop and manage Android applications in a team working across geographies and across different platforms. We also saw how a team can model the application, specify UML class diagrams, use case diagrams, and link them with the requirements through Rational Rhapsody. The buck does not stop here. In a world where there are numerous different platforms such as iOS, Windows Mobile, Android, Meego, Blackberry, etc, how does a development team create applications that work seamlessly across different devices supporting different platforms? The brute force approach, ofcourse, is to write fresh code for each platform and then test and manage the application differently for each device or platform configuration. And as it sounds, this approach is not at all scalable and requires immense investment of resources – time, people and money. The other confounding problem that mobile developers can typically come across is how to glue together native and web components into a single mobile application(hybrid application). The way out of this conundrum is offered by new, open source technologies such as <a href="http://phonegap.com/">PhoneGap</a>.</span></div>
<div style="font-family: inherit;">
<br /></div>
<div style="font-family: inherit;">
<span style="font-size: small;"> </span><span style="font-size: small;">In this article, we explore what is PhoneGap and how does one use it. We then see, with the help of a demo, how a team can easily develop, test and maintain a cross-platform application working on Rational Team Concert's Eclipse Client and using PhoneGap APIs. This is facilitated by the MDS Applaud PhoneGap Eclipse plugin.</span> </div>
<div style="margin-bottom: 0in; margin-left: 0in; margin-right: 0in; page-break-before: always;">
<br /></div>
<hr />
<h2 class="western">
<span style="font-size: large;">About PhoneGap</span></h2>
<span style="font-size: small;"><span style="font-style: normal;">According to the <a href="http://phonegap.com/">website</a>, "PhoneGap is an open source solution for building cross-platform mobile apps with modern, standards-based Web technologies. Based on HTML5, PhoneGap leverages web technologies developers already know best... HTML and JavaScript."</span></span><br />
<br />
<span style="font-size: small;"> </span><span style="font-size: small;"><span style="font-style: normal;">The definition itself does not make things very clear though. Let us try understand a bit more. So today,</span> <span style="font-style: normal;">suppose you have a web application that you want to deploy on multiple platform, say Android, iPhone, etc. In this app, you want to use one or more of the platform services to obtain some kind of data or carry out some kind of processing. Lets take, for example, an application that lets you invite friends to a movie as soon as you book a movie ticket. The app lets you select which friends to invite directly from your phone's contacts book. That means, if you're the developer of such an app, you'll most probably have to deal with consuming the platform's contact book using the phone APIs, for doing which, each platform would obviously have its own different ways. So there are 2 problems here:<br />
<br />
1) How can you query the platform's contact book from within your web application which is being written in javascript and has no knowledge of the platform's APIs.<br />
2) How can you do so in a platform agnostic way, so that your web app works not just on Android but also on iPhone, notwithstanding the different ways of using the contacts book in both.<br />
<br />
PhoneGap aspires to be the answer to both of the above questions, and also allows creation of hybrid applications, consisting of both native and web components. How? It provides APIs which abstract the platform's contact book for you, so that you only deal with the PhoneGap API and let PhoneGap do the rest of the magic for you. </span></span> <br />
<span style="font-size: small;"> </span><br />
<hr />
<span style="font-size: small;"> </span><br />
<h2 class="western">
<span style="font-size: large;">Download and installation</span></h2>
<span style="font-size: small;"> </span><span style="font-size: small;">1) </span><span style="font-size: small;"><i>OS</i></span><span style="font-size: small;">: Windows x86 / Linux x86 .<br />
</span><span style="font-size: small;">2) </span><span style="font-size: small;"><i>IBM Rational Team Concert:</i> </span><span style="font-size: small;">Download/buy from <a href="https://jazz.net/downloads/rational-team-concert/releases/2.0.0.2iFix3">RTC downloads page</a>. Note that if you're using an existing Eclipse installation to install RTC, make sure you have Eclipse 3.5 or lower (Eclipse 3.6 is not yet supported for Android development). RTC can also be installed directly on Eclipse 3.5.x (see http://jazz.net/library/techtip/384).<br />
<br />
3) </span><span style="font-size: small;"><i>Android SDK</i></span><span style="font-size: small;">: Download the SDK from Android website - http://developer.android.com/sdk/index.html.<br />
<br />
4) </span><span style="font-size: small;"><i>Android Development Tools(ADT)</i></span><span style="font-size: small;">: This is an eclipse plugin- the equivalent of JDT(Java Development Tools)- for Android Development. ADT can be downloaded and installed using instructions given at <a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a>. Please follow the detailed instructions on this page for installing the ADT plugin, and also for setting the location of Android SDK in Eclipse.<br />
<br />
5) It is a good idea to read through the following step by step guide to set up RTC and prepare it for Android Development: <a href="http://jazzpractices.wordpress.com/2010/08/10/how-to-set-up-rtc-for-android-development/">http://jazzpractices.wordpress.com/2010/08/10/how-to-set-up-rtc-for-android-development/</a>.</span><br />
<span style="font-size: small;"> </span><br />
<h2 class="western">
<span style="font-size: small;"><i>Installing PhoneGap</i></span></h2>
<h2 class="western" style="font-family: inherit;">
<span style="font-size: small;"><span style="font-weight: normal;">Refer to my earlier <a href="http://eclipseandjazz.blogspot.com/2011/06/using-phonegap-in-eclipse-to-develop.html">blogpost on developing Phonegap applications using Eclipse</a> to read about how to install Phonegap</span><i> </i><span style="font-weight: normal;">on the RTC Eclipse client.</span></span></h2>
<h2 class="western">
</h2>
<span style="font-size: x-small;"><i>*Note: You can similarly develop Windows mobile applications using <a href="https://jazz.net/downloads/rational-team-concert/betas/VisualStudioClientBeta1">RTC's Visual Studio client</a>.</i></span><br />
<br />
<div style="margin-bottom: 0in; margin-left: 0in; margin-right: 0in;">
<br /></div>
<hr />
<h2 class="western">
<span style="font-size: large;">Creating a PhoneGap Android project</span></h2>
<div style="margin-left: 0in; margin-right: 0in;">
<span style="font-size: small;">Follow the steps below to create a hello world PhoneGap Android application:</span></div>
<span style="font-size: small;"> </span><br />
<ol>
<li><span style="font-size: small;">Create a new PhoneGap project by clicking on the PhoneGap command you see on the coolbar. </span> <br />
</li>
<li><span style="font-size: small;">If you don't have the source code for PhoneGap, check "Use Built-in PhoneGap" on the project wizard </span> <br />
</li>
<li><span style="font-size: small;">Click Next and create the new Android project in the Android project wizard.</span><br />
</li>
<li><span style="font-size: small;">Launch the new application as an Android application and you will get an application as shown below.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://wiki.phonegap.com/f/1258145435/portrait.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="http://wiki.phonegap.com/f/1258145435/portrait.png" width="400" /></a></div>
<br />
</li>
</ol>
<div style="margin-left: 0in; margin-right: 0in;">
<span style="font-size: x-small;"><i>(Note: For those who do not have the PhoneGap plugin for Eclipse, you can also simply create an Android project, making sure that the android main activity class extends PhoneGap's DroidGap class instead of Activity class. Make sure you add "phonegap.jar" as an external library to the build path.) </i></span></div>
<div style="margin-left: 0in; margin-right: 0in;">
<span style="font-size: x-small;"><i> </i></span> </div>
<div style="margin-left: 0in; margin-right: 0in;">
<span style="font-size: small;"><span style="font-style: normal;">You see that a PhoneGap app is nothing but an android app with the main Activity class extending PhoneGap's DroidGap class and it's onCreate() method loading an HTML page instead of performing any native functionality. You can replace this HTML page by one of your own choice in the assets/www folder. Check out <a href="http://mobile.tutsplus.com/tutorials/phonegap/creating-an-android-hello-world-application-with-phonegap/">this website</a> for some good examples. Similar applications can also be created on other platforms using the PhoneGap classes specific to that platform. The javascript code can be directly re-used.</span></span></div>
<hr />
<h2 class="western">
<span style="font-size: large;">The Demo</span></h2>
<span style="font-size: small;">The demo showcases how a distributed team working on a cross-platform, hybrid mobile application can leverage PhoneGap APIs, and also the functionality provided by RTC through the complete lifecycle of the application, right from planning to implementation to design and testing, and even defect tracking. </span> <br />
<span style="font-size: small;"> </span><span style="font-size: small;">In the demo, the application to be developed has a native activity to start with, which displays a list of all phone contacts. Clicking a particular contact displays the contact details in another native activity and provides a button to send an email to that contact. Clicking the button launches a web based email client (this is a PhoneGap activity), which has an option to cc more contacts from the phone's contact book. This makes use of the PhoneGap contacts API to fetch a list of the phone contacts from the web based activity. </span><br />
<span style="font-size: small;"> </span> <br />
<span style="font-size: small;"> </span><span style="font-size: small;">Check out the <a href="http://www.youtube.com/watch?v=gNE_g1YR4U0">video</a> below:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/gNE_g1YR4U0/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/gNE_g1YR4U0?f=user_uploads&c=google-webdrive-0&app=youtube_gdata" />
<param name="bgcolor" value="#FFFFFF" />
<embed width="320" height="266" src="http://www.youtube.com/v/gNE_g1YR4U0?f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash"></embed></object></div>
<br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">With the recent release of the Rational's Jazz based solution for Application Lifecycle Management, also called <a href="https://jazz.net/projects/clm">Collaborative Lifecycle Management or CLM</a>, it is possible to do much more by integrating multiple tools with RTC. To see Rational Team Concert and CLM live in action, do visit <a href="http://www-01.ibm.com/software/in/rational/innovate/">IBM Rational Innovate India 2011</a>, Bangalore. You can catch me there at the RTC solutions center. Also, if you're interested in building JavaME applications, you can also read up </span><span style="font-size: small;">my jazz.net article - <a href="https://jazz.net/library/article/678">Developing Java ME applications using Rational Team Concert inan agile way</a> to see how to do so using RTC.</span><br />
<br />
<hr />
<h2 class="western">
For more information</h2>
<ul style="text-align: left;">
<li><a href="http://developer.android.com/">Android Developer website</a><br />
</li>
<li><a href="https://jazz.net/library/article/48">Getting started with Rational Team Concert</a><br />
</li>
<li><a href="http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-androidwidget/authors.html">Developing Android applications using Eclipse</a><br />
</li>
<li><a href="http://eclipseandjazz.blogspot.com/2011/06/using-phonegap-in-eclipse-to-develop.html">Using PhoneGap in Eclipse to develop Android applications</a><br />
</li>
<li><a href="http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart">PhoneGap Android Eclipse quick start</a> <br />
</li>
<li><a href="http://www.blogger.com/post-edit.g?blogID=7116704192081983568&postID=200568592194823169&from=pencil" name="eow-title"></a><a href="http://www.blogger.com/post-edit.g?blogID=7116704192081983568&postID=200568592194823169&from=pencil" name="watch-headline-title"></a><a href="http://www.youtube.com/watch?v=35ocy5JKtgk">Rational Solution for Android Mobile Application Development</a><span style="font-size: small;"> </span><br />
<i> </i></li>
</ul>
<span style="font-size: x-small;"><i>Android is a trademark of Google Inc. Use of this trademark is subject to Google Permissions.</i></span> <br />
<span style="font-size: small;"></span><br />
<br />
<h2 class="western">
<span style="font-size: small;"><i></i></span></h2>
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com3tag:blogger.com,1999:blog-7116704192081983568.post-36232706039793032962011-07-30T13:50:00.004+05:302011-07-30T15:07:43.112+05:30Java 7: Decoding the new Diamond operator with JDT<div dir="ltr" style="text-align: left;" trbidi="on"><a href="http://www.oracle.com/us/corporate/press/444374">Java 7 GA</a> is officially out. Many people have already been trying their hands on the new features, and blogging/commenting about them at various forums. However, I still believe that people do not understand the real meaning of the diamond operator, which brings in "improved type inference for generic instance creation". Being the guy responsible for implementing this feature in <a href="http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29">Eclipse JDT's BETA java 7 support</a>, I had a tough time understanding the specs at first. But now I have greater clarity. I guess everybody knows by now that diamond operator <> can be used in place of re-specifying type arguments in a class instantiation expression / constructor invocation. This makes the following case quite clear:<br />
<br />
Instead of writing the following in java 1.6 and below<br />
<div style="font-family: "Courier New",Courier,monospace;">List <String> list = new ArrayList<String>();</div><br />
one can now simply write<br />
<div style="font-family: "Courier New",Courier,monospace;">List<String> list = new ArrayList<>();</div><br />
and the compiler will automatically infer that you meant to write ArrayList<String>();<br />
<br />
We also know by now, that this is different from<br />
<div style="font-family: "Courier New",Courier,monospace;">List <String> list = new ArrayList();</div><br />
since here ArrayList() instantiates a raw type, and the compiler, with -Xlint:unchecked will warn for an unchecked conversion in the above statement. <br />
<br />
So far, so good. However, it is worth noting that there's more to it than meets the eye, and people often take a simplistic view of the diamond usage. It is worth remembering that the diamond inference works just like type inference for generic methods, where instead of using <>, it is enough to just forget about specifying anything at all, and leave the inference to the compiler. This is unfortunately or fortunately (depending on whether you prefer to lose your hair or not) a consequence of allowing the diamond operator in ANY class instance creation expression.<br />
<br />
Let's take a closer look, and try to understand the various scenarios of diamond usage with the help of Eclipse snippets. The easier part first - let us investigate a couple of cases(i.e. instantiation expressions) where the diamond operator CANNOT be used.<br />
<ol style="text-align: left;"><li><i><u>Anonymous class declarations</u> </i> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkvEung5ixETGDAvGhz0u4wTjhN54YwEYnV6XKuQW9Pa2PfizZ3Jvml7R3jsGTkasL4VCCi5tQMSn6VPn3DMoEM_J5N3iTXsz9eXS9r0uMk12xcF6YBvfRZ6nccYC6BHaH-pfX1oLE0tIM/s1600/blog1a.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkvEung5ixETGDAvGhz0u4wTjhN54YwEYnV6XKuQW9Pa2PfizZ3Jvml7R3jsGTkasL4VCCi5tQMSn6VPn3DMoEM_J5N3iTXsz9eXS9r0uMk12xcF6YBvfRZ6nccYC6BHaH-pfX1oLE0tIM/s400/blog1a.JPG" width="400" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDX6LtNj6AaP2bEzjVxBe2D4cfffMTygZJnuiVhcf-4_3DVfJaUCUIk3Y1iaEUIWqebJCpCEoFMXkQ7mEKvFXTiTlpKsObHY0p9ouL5um5oOlsRTFLru9Bfw5_-Dv3iP8ca6MavjF7xRom/s1600/blog1.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDX6LtNj6AaP2bEzjVxBe2D4cfffMTygZJnuiVhcf-4_3DVfJaUCUIk3Y1iaEUIWqebJCpCEoFMXkQ7mEKvFXTiTlpKsObHY0p9ouL5um5oOlsRTFLru9Bfw5_-Dv3iP8ca6MavjF7xRom/s1600/blog1.JPG" /></a></li>
<li><u><i>Explicit type arguments for the constructo</i></u>r: Lets try to understand this further. A constructor can have two sets of type arguments. A constructor in a parameterized type can have type arguments of the class as its type arguments + it may declare its own. In the example shown below, constructor of Diamond uses T, which is the class type argument and also declares another type argument U. In case the constructor also declares its own type arguments, type parameters will be explicitly specified at the constructor invocation. If this happens, and yet the constructor invocation uses the diamond operator to let the compiler infer the first set of types args (i.e. those coming from the class), then it is a compile time error. <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlfVtuxYM6fARqjwKg8l07uYgTbW0CHDcf4JhBSlZmriBJ0nri5oTKcknnIAJq-GwuOFRj7RaKT_VLXlvB36k9sZRePNphOo7qpqtEd5E7QD4sO44W2L5zRzNoFbMRbJ_NLpJiIPS9V7Vn/s1600/blog2.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlfVtuxYM6fARqjwKg8l07uYgTbW0CHDcf4JhBSlZmriBJ0nri5oTKcknnIAJq-GwuOFRj7RaKT_VLXlvB36k9sZRePNphOo7qpqtEd5E7QD4sO44W2L5zRzNoFbMRbJ_NLpJiIPS9V7Vn/s640/blog2.JPG" width="640" /></a> </li>
</ol>Now comes the trickier part. Lets see the valid use cases of the diamond operator. Consider the following (simplest) case and let us see how the inference of type arguments work. <br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
This case is straightforward. The constructors are pretty much chosen by the standard overloading mechanism. However, this might create the simplistic view that the compiler simply substitutes the type from the RHS in place of the <> operator i.e. in the above case, <> is substituted as String and hence T = String. So all constructors are valid. Let us try understand how this works with a tweaked example:<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="" height="271" src="data:image/png;base64,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" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table><br />
Oops! This gives a compile error, even though going by the above simplistic view, at line 15, <> should be inferred as Number and hence, T= Number, which means this should be valid. However, even though simple, this is not the way the compiler infers type for the diamond. On the contrary, it tries to :<br />
<ol style="text-align: left;"><li>find the matching constructor call with 1 argument, which in the above case, means <span style="font-family: "Courier New",Courier,monospace;">DiamondTest(T t)</span></li>
<li>It then substitutes the formal parameters of this constructor with the parameters that have been passed at the call site. So, T becomes <span style="font-family: "Courier New",Courier,monospace;">Integer</span>. (In case of default constructor, or where no type argument is substituted in the matching constructor, by default T gets inferred as <span style="font-family: "Courier New",Courier,monospace;">Object</span>).</li>
<li>Using the inferred type arguments from 1 and 2, the compiler determines the type of the instantiation expression and the exceptions thrown. Hence in this case, <span style="font-family: "Courier New",Courier,monospace;">new DiamondTest<>(1)</span> gets translated as <span style="font-family: "Courier New",Courier,monospace;">new DiamondTest<Integer>(1)</span>.</li>
</ol>Hence, the compile error. Now let us see some more use cases of the diamond operator:<br />
<ul style="text-align: left;"><li>Inner classes</li>
</ul><img alt="" height="287" src="data:image/png;base64,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" width="640" /><br />
Note how the statement at line 21 is not allowed since the <span style="font-family: "Courier New",Courier,monospace;">new DiamondTest<>()</span> is inferred as new <span style="font-family: "Courier New",Courier,monospace;">DiamondTest<Object>(). <span style="font-family: inherit;"><span style="font-family: Times,"Times New Roman",serif;">Also, note that as of today, even statement 20 does not work with Oracle Javac because of a bug in their compiler. However, Eclipse JDT compiler correctly compiles it!</span> :)</span></span><br />
<br />
<ul style="font-family: Times,"Times New Roman",serif; text-align: left;"><li>Non-variable declaration statements</li>
</ul><img alt="" src="data:image/png;base64,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" /><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"> </span></span><br />
<br />
<ul style="font-family: Times,"Times New Roman",serif; text-align: left;"><li>Return statements</li>
</ul><img alt="" src="data:image/png;base64,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" /><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"> </span></span><br />
<ul style="font-family: Times,"Times New Roman",serif; text-align: left;"><li>Conditional operators</li>
</ul><img alt="" src="data:image/png;base64,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" /><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"> </span></span><br />
<div style="font-family: Times,"Times New Roman",serif;"><br />
</div><div style="font-family: Times,"Times New Roman",serif;">However, note how the following results in an error</div><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAi0AAACFCAIAAAAYW1+PAAAdRklEQVR4nO1dz08d19me/gHdfVLVTVbddNNFpS66KZG96EhVZdUSUdV0kcgui0qfZKkjmSiRnMqtUguIXSrlSs0E08YIAY79CUxjx6VDbTBObIfSizHEwWOMHRMuBkNibGPI+Rbz6/yemcvce4fr59EjNJw5c86ZmTPvM+85585r3Hbn9SQhpnrbh0uEQmm4vXeK2U20YEoDAAAAAEKM7egQmeptDrSnNNze3EypkgzQIQAAAIDD9nTIl5/m5ubm5vZhxjuSAToEAAAAcNiuDhF2t74y6BAAAADAITMdmuqNG5WDDgEAAAACEunQVG8zg9DvoXfEqhB0CAAAABCQxh/aNqBDAAAAAAfoEAAAAFBLQIcAAACAWgI6BAAAANQSRv8ZR88MK4MOAQAAAByM/jPObXde8zfDyqBDAAAAAAdDL0IYlwMAAAAqior4Q0+ebiwurY5cnRr815WRq1OLS6tPnm4Q6BAAAAAgIHt/6PHTjWvX3YnP5u8tr61tbN1bXpv47M616+7jpxvQIQAAAIBDUn+I+pwpH/qB+57C3cWVKzfmSo83S483S4+3Fh9vlh5vXrkxd2fhQU51yB0oGI2HjMZTjmRnyT54yGg8ZDQesq4JO6+dMhoL9v3yq3YsI4Il1u9Yhmm75ZevhW2GNVuWaW+nqIq2U1+v7vKlhG2athvTH9JC238qBccyDNUNcW2zjHvt2qayRADYLhL5Q1O9ofxM9dJf8KHiPoTfl/twpHj93srttWdzaxu3A07ee/jhSDGnOkSIpygauzNtVdCOOFY2D7htxphi1zZDc+36RtdrgGFQtim2nArAa4Kb7qDyTKqmCdF5x/SHtKho/5GCur08mBNNBrcWfQJ4fpB6foiOfcd8+DTY8f6ZsY/vPWp5p4/mx/cevX9mrEo6FL3P3h8xGw8ZjYeMwjQhxDMHRuMhs3DKT288ZA6UCAnsTpj/4IjLFCnaEfV7bliIvCgRUh1yA29F3Bf5MabpG2I3SpM7B14Gymq7UkOlLsfbYdpukCXSM0k7/epMU2xOVIVp28x7u9/EuMvlgfEkDU5H5ZdBlR7upVI1/YG6v37n0acTIteha6dkncTvolw5TsH7d9rrdUL5ImzTtB3qUrvUvvT6DR0CKoq080NMcAdeh9qHCSH9FyauuqXp0vqN0vqN0vr00vqN0vpVt9R/YaKK/tC1U0ZjwSx4j3fJPhg+6iX7YPgYU9ueUQjMgVPg9EP1Piuk3x8xefMR+1qt8YdEtSjDj1HZd0rPbDZdYXM82+9ldiw6k0TVXNsMKqX2UgN40qEeQS91kNnTqNagNn06dW70Can6w7VT1JvHtBW+4qjSSZRC9xN3oEB3DKG/EUK8vhSO+pbsg4fMg6fs+1y6CsxNd1mRTT+MCh0CKoo0/pAQclWqQ+4XDy5OzN5aXr+1/Hh2ef3W8vqt5fULE7fcL6o5P8TN3ESPrkaHKMHgH/WkOuQOFBiDcu1Uuf6QX57Ea1HOiYi2wk3mYniSoSkntqFyHQqLCQ9krb3cJ0vcbIkOCfbSr1mVzlTJ65CkPzgFVmCCbKr0AFw/iZxpin5/C7x5JtE/hHLr40b5uPPhLgC3Vw/udQcAMkdSf6g03C6sUWBjDgXjcl+tPxkZ/+xScfbG/NKdh49u3C2NFW+NjH/21fqTKuuQVFeS6RD/qJerQ4lA20TOXqgsdXhkQn8ozqYz+lA1HZIWyImiDtXToeBGZ6lDjMMUNGOgEGmP6A/5/TaZDvEDpWXrkHg4AGSLRP7QVC8Vc4hGabg3kCZak75efzq/sHx+9L+nzl0+P/rfuwvLX68/JVX9/ZA3rhI86tS4Bz8WJ9ne9rhclJJoCCWVDjEJrFlnRr8kUyN0SezIDFurspzt6xDTYmFtQqpBOSLTId7+OlY0LidPj1LEcTlJf8hyXC5KcQq+60PrWZhICClHh6griXE5IN9I4A9FS7MlEe+iffmKg+e9kIZTwdJ55sKIP+t70F/XYEdDIsHLLD2ZzBUln2fm1ynop5T52fZwrE3c4dsBdiEB/5KvmYdnrTxXPmuVJOXw7Ql2KNoZLkawnDBL5BKFWS1anxINxYVQLqhgl1pEF0KVThUYLL0YUPcHwt5fWmyk6Qn7TyOjMf76lwG/QN8Pa2SWKmh/MOCt27YsagKQvrBYpwDkDPX6fbmM190ClUDMqGOVUcZy5p2Jck4Uvx8CKol6/L4cM9MrG4UHagrVOr2aI1eyWClk+6MrAMgC9eoPAQAAADsD9egPAQAAADsH8IcAAACAWsLg/oc/BAAAAFQTxsrQq0u9Ly6d3L3U++LK0KtEkKIMK4MOAQAAAByMNWcfuT/o8Stn36rTRFgpyrAy6BAAAADAwdj88vTWwqnw79LpBkII/CEAAACgOjCerfRvrl3aXBvZXLv0bLn/wYcN0nyqOHhTvZJEFZ5zHSrZB6schEYXD43+skHtf1BCfWWhmo2paRzCWHC/Z5J/c2Jn/x4I912CRPed/kIIewby9Hz3E+PJ2umtzaWtZ3e3Npemd+0RSdRx8ErD7c29U+xnt3V4znWo+sHQiPq3mfQnxxJ8CLUqcG3TtLOKCpgctYhDmCDun/Btcu8jSeJRO/5DELjvbLMS3XfqG8fMEar0fPcTY2Xsp0/XLxBCnq5fmN61Z/7gm0ud3bMvNy11ds8ffNPTIRp0HDwfz6MOBR8Hs64FHwTTf3dO+M6YdY3ExeWTlJ9tPLQQsT1UV69wvuH3LPxsyuiCHPyPmLGPnCr+niqdfcMOy/FTvUxucHCwrwZxCInk47N8LdIXdXlb073qelcjgVHCfaeQq/vOJFCf/1Ol+//K+0nqrztmDmPr9qGNif2EkGfF30zv2rPU2U0IWThWIIQsdXYLOsTEwaPSnjcdIiT6JGVhOhxz08Y3k/pDijgUivIzjofmI8lXLOX1qs43+G50cMqJPvcXtEL4GLYq/p483XGCDMzZ8mZOtYeB+AU8OmWbcQj94gQ7FZQtK03e1rTDSIl1CPddlpKH+87rjVRceeFR9ZMc6BAh5KMPXhu7vjzY/bvpXXtmX27yRGjhWGH25SZGh4Q4eD6eax1ivl+ni29Wpg7x38fLNh4a80hrIa1Xfb5eAMAg+oY7UIj90B/1APLPospg6F9ohfdTxUtjPuIQSkJgJNeh1PGEkgP3nWpoju57WTpUwX6yTRiEkD+e/A8h5Be/bdHokDQOno/nWYdYGVDGN1PkJ7E6pM2//Xhoyb94La1Xc77TVmPBKhSsa9PWwVNW/AINVWAJb19ie8S88UlE13KIYDhqG4fQlcb9y5UO4b6Lja71fWc0mxmXk6eHTcqvDv3h/X+e/seFXx94SzUup4yD5wE6FEIV34wQwqyXk8aHZWOvZaZDmnhoKSCvV32+3itzwb4fbmiL58dkmAconT0KDqRmh6liTdvWvVrG2qOM4hBGLVQ4o7kal8N9z999d22LGiektUee7icouk+yQZHKwSCEDAxf/dkrr50+N8KtU7j/p2PTu/Zo4uB5i7YjaLSKEFJnOhSGJuMfNnl8M35XlC7E5fMeb2n52cZDSz4urKtXcb5hiPTYWOnRiIrXkvAV2bTdpPH3ZGHw/BMXxiEZS2cIsBzpDmaeXDo+Qx0kMyWM9Ym/8mIIVQa01aj0OgXc91ze96hJgtMjb46inzhWss5QSRi0NqjWbWeFutIhYCei+quDy0biZbZ5Xo+bF9Tjfc+o4Nr+VsqHUaFP+EgBHaoNjDex7VgGMd6MXhNr3Z4k27Zpxud37Zq3M8/bdXvf025r+kkOgPhD9Q6vw+Ev/uIv/op/8wHEH6pr0F0N29jGNrZV2zUF/CEAAACgloA/BAAAANQS8IcAAACAWgL+EAAAAFBLwB8CAAAAaomk/pAqDp4qXYoq61Aefie8syD+yBwAAGA7SGR5kvhDqjh4qnQVqu8P4afmqWAYBiFzIAiCmTCpDqWdH5LEwdOm04AO5RzQIRAEM2SW/hAFWRw8XToD6FDOIdMhDrXv2SAI7hRWwB9SxcFTpQuoxTqFBAHhgQCCDpGVoVeXel9cOrl7qffFlaFXCSE179kgCO4UZuwPqeLg6eLjCYA/lHNwOrT6r6Y1Zx+5P+jxK2ffqtNECKl5564I3SOmecSteTPyQ6fJm2e2nFq3pJpEN8iUhmGsra2tr69vbGxsbW198803csuTxB9SxcGLiY8nADqUc3A69OD/Gja/PL21cCr8u3S6gRCi6nA0THu0Ij17+2ZCVULNDVCtGiCvt8cyGmw3q1pGbdMwMjk7rrXbu5uu3cD3WOmByW9NqpuYJHOG5+seMbM92QQ0DGNmZmZ+fn51dXVjY0OpQ/H+kCoOnjo+ngrQoZyD06GVsw3PVvo31y5tro1srl16ttz/4MMG4aBK9eBKETqUpF73iGk0OVlW0WSZWQhbwquky9ZjmUdcT4SiPD2WZ523eReYw0dtU3sNy9Ch8s+XfrHosayeFIXrGHOOhmGcOXNmbGxsfn7+0aNHW1tbcstTx99TwO+H0oLToeWPfvxk7fTW5tLWs7tbm0uKMImahzAc0umxjAbb8YyRwYz2RO9orJFyo8yWM2qbwSFBFdGbrHnEVWVmXni98kepIKCjnvXx22MfMc0jdvA/1TzRelJHOUIVrlCOmMKcuPcYcw2T18UfJa0r0o8eK8wmb2GTI6+3h4kCGmWWNkB+5Wm6doNpjzoW8xrul8k0Rn6/hF4k8Q+Y/qC8mF66d30Eh88ryqV7aYPtBuOTXqWS7krfILHeHstQOYJsZr4/KARmW+fLCQZ1lNXE3RE3ptManISrnF3DMN59990zZ87MzMysra0pdQjfUwBCGKwOPfn87ZWxnz5dv0AIebp+gQsbP3/wTa0OzRGnyfBeu7wN2qY7TYbR5NDPhvi8RVYg2AgeD5eyto7V5Kgy020LGxNVRNs4/xnz/w0Pl+gQe5RYhViOpOQei1ZK5cspV5dwlKzNjkWlWD1EvMj0UfJ6qUQms7QBcVeejNomu4suk2uMqvPQl1e0y1x/kJ2UYxnMu47krHssg+pLtMPkZxa7q9AZlM6l4Z+F/HmR9QfVc1He+fophrxw7o7EdVrJaSrO0TCMY8eOnTx58vr166urq5ubm3LLU8f+EJAWhrBebuv2oY2J/YSQZ8XfTO/as9TZTQhZOFYghCx1dsfoUPDc+paR2Ru829Lv3fT7Gv2E0BuRRaDyqzKHjwf9BifmERuvGa9QPYFhFWI5sSmG3JTEtDB8deX2BobbsQLvh7vISaYcpFdJ0wDVVeWtbeSQyS+15I1b04tohVD0H8JYed19DHVIdWtir6S+5/jvXgkusvJEtnG+TDMM/tWnjE4rPU3hHA3DePvtt/v6+iYnJ2N0SM8MzRx0KOcQdGiOEPLRB6+NXV8e7P7d9K49sy83eSK0cKww+3JTnA55toMaHRJ1KNbcy3Uoet4MjTWkvZlYi1meDolV1FyH/CF7fxYkXbGxJjK9DtFrAQxxDoYvU7hful4ksb+G4mIK/oFmXE6tQ7Gqo7qYen8otQ6Vcb40hYuZpNPSnq7qbUzmDyXSodvuvJ4ZmjnoUM4h1aE/nvwPIeQXv20pQ4e83ilZnCN6+rGPKP14uEcsfxx81DYpPVOLFjPGQk3JyIen6HL043JiFYleJBXjcrIR/JhxOZlpcO0Gy2qipyh0Y0eSelW6om6AUofYU6AHVzWXnVtEoOpF1BVm+oOrOClmviR+nYIwZCp2V9m4HFOvbu6Eypx6XC71+bpHzLBYpnsLMqbrtJK3hNj5IegQkA5SHfrD+/88/Y8Lvz7wVvpxOeo5CawJPwTniuMwCXSImhxmbIew4QT5vJlYr3wvkZ0c9tcp8AZRokNMmy1HqCLRI00XEpmPqGGKuvij9M6KrBBeBjT1qrxGaQM0+Zm6BD+YzSC9X7peJO0PqpMK20ArDX15VR1SctfElQt+CVS9cevl5F1RGLvL5nyjVQm0n+QfRV9tTacNflJGXZz49XLQISAdDJkODQxf/dkrr50+N8KtU7j/p2O8DonU+/IgmISStQ/PWQPyxnDxSByhQ0BqyHRoLtwbv25bYLR2i0CHwDLJ9KJq0/M8MvxJ7w5m6K3yTpua0CEgNRQ6FFKK2j8eIAjmkxnrkCreXYnaEWvmoEM5R5wOgSAIpmCWOqSJgxfKT2m4PfZzp9ChnAM6BIJghqzUuJwmDh50aKcDOgSCYIaskA6J8e6mejEuVy+ADoEgmCEroEPaeHfU2J0S0KGcwzCM9977GwiCYCbMWIcSxLuLDw0OHco5jGTBEwEAAJIg43UK0mG34XZ2zUJcACLoUM6BcTkQBDNkdjqki3cXTA5hfqguAB0CQTBD4nesQGpAh0AQzJDQISA1oEMgCGZI6BCQGhXXIf0n5oKv+VbwY2KqBiQMJAOCYBpCh4DUUOhQ9J38FFQFBFMWJQvWmSFVocxUDYMOgeC2mZkO3b27mooaMwcdyjlEHfIDtGRlkTXGXR7IK2tCh0CwioQOAakh94fkFjmKxBUXhDTKGcWac5qEIM0UgkhfUQhO9sP7VPgyMRilH/NYkodqlWxvk2UK+QkdiIwOxYZAACAYT+gQkBqJdYgKh6yK3uinyKJoJwxE7WejYnGKDOJxRSFqxAhdXopqXC7cG0gLG97bVzW+hdAhEExA6BCQGol1SLDOKh2SR5WWjb/JAkt7Xosk1LEYnjkSJFkAabE9mlDZnv5Fkkmj8iOHIFhHhA4BqVENHTKPOHaDJKiwTIe8FXS8DtHuSJR51DabnHBJhZiH+yvdG5VP6RBmiUCwXGasQ/1t/mcT2vpdQXuuHm9ubj5+FTq007GtcblAmdhxLdm4HJlzLJm68DrkqV2wjk7WHr+uYNuymqIpJS6PQh3Z1gYp4Tge6bHEdeQYlwPBZMxShy4eD+Xn6vHm5uMXGR3qb2s+3n+uDTq086FcLyf+rEcYGQtzmlaTagQsWqdAL0MIC2R0iBIAp4kbEHOCVQ1+XVGTomx8HlaBJHu5gT7VCB6BDoFgUlZqXK7Yf5TWIV+iitCheoDcH9ITI1cgCCpYIR26erztHK1J/nAcdKguAB0CQTBDVkCHiufa2EG5i8eZ73B7Y3caMwcdyjnK0SEQBEEFM9ahYv/R5uaj/UXFMjn4Q3UB6BAIghky43UKzdRwHHSoXgEdAkEwQ2anQ8VzbczwG79eLhydw7jcTgd0CATBDInfsQKpAR0CQTBDQoeA1IAOgSCYIaFDQGpAh0AQzJDQISA1oEMgCGZI6BCQGtAhEAQzJHQISA3oEAiCGRI6BKRGDXRoeepw59RCrZ+WDBqW2xPJ9pq0FCdq3owyml3RW7NDL0tVCB0CUqNsHfrRu7/80bu/TJT5ZnF/yxWfgzO5M99heyqtQ5mceIZXL0lRTJ7Zs51X9mdSO1e1qiXJTnbh8njYwQ5fnlUemPzSxebMWx/OE6FDQGqUrUM/LDT2fbL3h4VGfbaFy+P7qTfHicHiRN6eYeiQjjMdYZ7lqcOdxY7O8bPL1alan81v2MLlcUoaZzo8KdrmVeLVV3R9qMsCsqxKHDzmUwsnLkKHdjjK0KEf/Hmvxxu39/d9svcHf96ryXxWNFvLU4c7p84O+i+wHTfnCPNKO352WZ6HLE8dDv2qUDnoo5gqih2d3rGzZzulhXiH+Hv3t1w5PFjUVhoYI7EZ/HkVJxJURBn3qQX6WOm5+6QKuTxztjPcO9PRMn72ZnTW6vOVFjUrOU2BC5fHD1+enRhkfA6hzcUJ8W6SWVlTJf5QdGDn1ALXQr7lXjtnOiS33rue4aUYP7scOOXKbjPT0RJeN7HemY6WjBzB54BViYNHfVYO/lAdIK0Ofb/l532f7B3/fF/Ivk/2fr/l56r8kmH05anDoZW8WeQf75tFf+yOzzPTQdtWP4XSBs6uRdYn2FAdQm+oK124PL5/cIZImiE7r9iKRB1ilUN5fehjvWvFXLTAsN4s7m8pTmguEZMinqZ4K2f9V4qwSao2i3dT2lRRh6hJl4nBQMvZNk8MsoIq8XtmOjxdDLJFDpOy29AyqSo2UC/5xQEjViUOHnSovpBKh7532Oz7ZO+l66/QfOfcS987bKoOiRmmZzUgeheWWmqZ7Y5mnmjBU5l+6SF6eaBTWthBRc0kxzYrUlXBp/gmdWLwSsdNcdf42ZvqS6Rpj9QlYkQr8lmVl4J3GTVNpRVCcR/9EgSp0+iQeEaqPhBzkVn6Al97c59bViMOHsbl6gypdOiFN3a/c+6lD8Z+9cIbu194Y/cHY79659xLL7yxW3MIP2xCFFY4zKayy7RnIOYhiipEHdLoYrY6tJ2KkuqQZ9aDF3ypDmlGk9LoEL0WYL84B8OXwN7NmKZK9IZXbup82QFGzbicWodiVQf+0DZYjTh4DC+e8GKzaswcdCjnSKVD37V+8s65l75r/YTb1jBmnYJgGvxRFImNoywO9fosGQsiMgurOYSzU3yl4ricMODDVUrmlC/v0dSRf03U5yuWyRYS/StbJCYOZkqvUjTLoh+XY0euvMITtJm5RKqmUt2gw5+PCcYA5aJIzw/Fr1OIzkjZB2Tjcky9mB9KwerGwaNcJY2Zgw7lHGnnh/7nf38cboTbejKv0tzcQLA9EUzL+3P4UrtGr/+WjuaFlSp1SH6IV7tk+QCTPzBMQTOY/ERmW1UVXZ4Nr4nufMUy2UIImYtMNldj7KoKrijxNGnyzRCcLcFLk10idVOZcTlmYQJ7sjSjFWt0B1MuadH3ASrFK4GqV7peDlSyGnHw+tui5XPF/qPwh3Y6duT3FMJJb1Acrqx5k5I09flswPPBKsXBC9dzh0KlMXPQoZyj0jpETyqAYJ2x5kY/h8TvWIHU2JH+EAiCeSV0CEgN6BAIghkSOgSkBnQIBMEMCR0CUgM6BIJghoQOAakBHQJBMENCh4DUgA6BIJghoUNAakCHQBDMkNAhIDUMw3jvvb+BIAhmQugQkBqGYdS6CQAA1A+qEgfP48UT9Ce3NW2CDuUcGJcDQTBDViUOnv/9Uz/iA/yhnQ7oEAiCGbJacfCE759qzBx0KOeADoHgzuLi0OutQ+NlZJvs2nfgwL6uyfgqkucUWZU4eBdPtB0/EYzY+VEhNGYOOpRzQIdAsCo833Vg3wGPrd2L2ylqsr11aJwp0Ctzsp0p388WHLXY3dp1PlH5yXPKWI04eMX+o9GMUeAbacwcdCjngA6BYFV4vutA+ySZI2RusmtfEodGycn2rkmmQJbjQ637uibDbNFRSStNnlPGasTBK/YfpeMS9bcd7S9Ch3YwoEMgWBVSsjHZfqDr/OLQ662trx840D5JxodaPbemfdLb67k1XeeZbU2BLCe7Xh9a5BLpKkJHqn3SG77zmxGTM/LAWrsnh173RG7R26DaWY04eN46usBDQjzWHQ/oEAhWhbw/FM7fTHYFMzGL3a1d52kVkSkKXSA7LkeCQqTjfoGXE1UXyiHn/ShyRv+G8hNs0O2sUhw8bwUdna4xc9ChnAM6BIJVISUbXecJZcq9RQGRnCx2tx4IlgnQ25ICBX9IJUIkVJfxodZAMxa7W7vOh82IzUmLDadDdDvxO1YgNaBDIFgV8rJB65BcZiJFobeVBepEiOj8IYUOxfhDXh728PNdrd3QISA1oEMgWBUqdYiaktnnmfsDgW9BbycpMPSrJAsNotUH/PyQSoeIen5okXLvuHZCh4DUgA6BIJghoUNAakCHQBDMkLnWoYW1byrK73z7W9/59rcqXUv90QAAAMgUv3+rzf57778/Lt689/DeyjO55YEOgSp+/sXq6KfTJ/oG2v7y18NHjv7+rTYQBMFUbPvLX0/0DYx+Ov35F6tfPNyUmhroEKjk7S8fjd+4Mzh06UTfgP1+n/33XhAEwVQ80TcwOHRp/MYd98uvoUNgas4/eHrz3sPxG3dGP52+8Mnkvz8ugiAIpuLop9PjN+7cvPdw/sHT+6tbUlPz/9E0bfZoHkgqAAAAAElFTkSuQmCC" /><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"> </span> </span><br />
<div style="font-family: Times,"Times New Roman",serif;"><br />
</div><div style="font-family: Times,"Times New Roman",serif;">We can construct many more scenarios, but in the interest of time (yours and mine ;) ), I'll leave it here. Go ahead, experiment with the diamond with Eclipse. The Eclipse work for JAVA 7 that was being done in the <a href="http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29">BETA_JAVA 7 branch</a> has now been merged into the HEAD and R_3_7_maintenance streams and so, you can try next week's builds in either 3.8, 3.7.x or 4.2 streams to get your hands dirty on Java7. Some new JDT features with respect to the diamond operator are:</div><ul style="font-family: Times,"Times New Roman",serif; text-align: left;"><li>Content assist is diamond aware. Wherever legal and non-ambiguous, content assist will insert <> and not the type arguments. Ex: List<String> l = new Arra| is completed to List<String> l = new ArrayList<>();</li>
<li>Configurable compiler warning on redundantly specified type arguments.<img alt="" src="data:image/png;base64,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" /></li>
<li>Quick assist (CTRL+1) to insert type arguments <img alt="" src="data:image/png;base64,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" /><br />
</li>
</ul>For a preview of more new Java 7 features in Eclipse JDT, check out <a href="http://thecoderlounge.blogspot.com/2011/07/java-7-support-in-eclipse-jdt-beta-part.html">Deepak's blog</a>. If you find any bugs, please <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT&component=UI&short_desc=%5B1.7%5D+">open a bug</a> with [1.7] in the summary. Most of the Eclipse JDT team will be at <a href="http://www-01.ibm.com/software/in/rational/innovate/">IBM Rational Innovate India 2011</a>, Bangalore on August 10 and 11, 2011. Catch us there!<br />
<div><ul style="font-family: Times,"Times New Roman",serif; text-align: left;"></ul><div style="font-family: Times,"Times New Roman",serif;"><br />
</div><br />
<ol style="text-align: left;"></ol></div></div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com1tag:blogger.com,1999:blog-7116704192081983568.post-85022231155480375912011-07-24T11:56:00.003+05:302011-07-25T23:38:57.090+05:30Developing applications for Android™ using IBM Rational Team Concert and IBM Rational Rhapsody in an agile way<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<span style="font-size: small;">In an earlier <a href="http://jazz.net/">jazz.net</a> library article I wrote - <a href="https://jazz.net/library/article/505/">Developing applications for Android™ using IBM Rational Team Concert in an agile way</a>, we saw how to leverage the power of planning, collaboration, process, source control, build management, etc that <a href="https://jazz.net/projects/rational-team-concert/">IBM Rational Team Concert (RTC)</a> has to offer, to develop and manage Android applications in a team working across geographies and across different platforms. Now what if the team also wants to model the application, specify UML class diagrams, use case diagrams, and link them with the requirements? Such software architecture and modeling capabilities can easily become a part of the development process with <a href="http://www-01.ibm.com/software/awdtools/rhapsody/">IBM Rational Rhapsody</a>.</span><br />
<br />
<span style="font-size: small;"> </span><span style="color: black; font-size: small;">IBM Rational Rhapsody integrates with Rational Team Concert to offer modeling capabilities for Android applications and the visual representation of the Android framework API that developers can reference from within Rational Rhapsody. The references are then generated into Java code to automate the manual coding task. Additionally, Rational Rhapsody can read the AndroidManifest.xml file to visualize activities, services, broadcast receivers, main activity and content provides specified for better understanding of the application. The Rational Rhapsody Debugger also enables runtime animation of the class diagrams created for an Android application.</span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5z5D29rjoRFKAvxRt3JUhfVxtv4jQt50rIOY3tME1SgFqw1slZNSk3rcmyeBLd8MH89uP2C848k4PWEyyQ2pAd9jUTDHaHWG8JUc10dXzNy7f9cWZJmyZbCpjpqbZbR8a8g9wXG7qbLuN/s1600/RTCRhap1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5z5D29rjoRFKAvxRt3JUhfVxtv4jQt50rIOY3tME1SgFqw1slZNSk3rcmyeBLd8MH89uP2C848k4PWEyyQ2pAd9jUTDHaHWG8JUc10dXzNy7f9cWZJmyZbCpjpqbZbR8a8g9wXG7qbLuN/s400/RTCRhap1.JPG" width="400" /> </a></div><div class="separator" style="clear: both; text-align: center;"></div><span style="font-size: small;">This article, with the help of a demo video embedded below, shows how RTC and Rhapsody can be together used to design, model, develop and test a mobile application.</span><br />
<br />
<hr /><h2 class="western"><span style="font-size: large;">Download and installation</span></h2><span style="font-size: small;"> </span><span style="font-size: small;">1) </span><span style="font-size: small;"><i>OS</i></span><span style="font-size: small;">: Windows x86 / Linux x86 .</span><br />
<br />
<span style="font-size: small;">2) </span><span style="font-size: small;"><i>IBM Rational Team Concert:</i> </span><span style="font-size: small;">Download/buy from the <a href="https://jazz.net/downloads/rational-team-concert/releases/3.0.1.%20RTC">jazz.net download page</a>. RTC can also be installed directly on Eclipse 3.6.x (see <a href="http://jazz.net/library/techtip/384">http://jazz.net/library/techtip/384</a>). Note that if you're using an existing Eclipse installation to install RTC, make sure you have Eclipse 3.6 or lower (Eclipse 3.7 is not yet supported for Android development).<br />
<br />
3) </span><span style="font-size: small;"><i>Android SDK</i></span><span style="font-size: small;">: Download the SDK from <a href="http://developer.android.com/sdk/index.html.">Android developer website</a>.<br />
<br />
4) </span><span style="font-size: small;"><i>Android Development Tools(ADT)</i></span><span style="font-size: small;">: This is an eclipse plugin- the equivalent of JDT(Java Development Tools)- for Android Development. ADT can be downloaded and installed using instructions given at <a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a>. Please follow the detailed instructions on this page for installing the ADT plugin, and also for setting the location of Android SDK in Eclipse.<br />
<br />
5) It is a good idea to read through the following step by step guide to set up RTC and prepare it for Android Development: <a href="http://jazzpractices.wordpress.com/2010/08/10/how-to-set-up-rtc-for-android-development/">http://jazzpractices.wordpress.com/2010/08/10/how-to-set-up-rtc-for-android-development/</a>.</span><br />
<br />
<span style="font-size: small;"> </span><span style="font-size: small;"><i>6) IBM Rational Rhapsody</i></span><span style="font-size: small;">: Download and install IBM Rational Rhapsody Developer 7.5.3 from the <a href="http://www.ibm.com/developerworks/downloads/r/rhapsodydeveloper/">Rhapsody Downloads page</a>.</span><br />
<br />
<span style="font-size: small;"> </span><span style="font-size: small;">7) </span><span style="font-size: small;"><i>Including Rhapsody in the RTC Eclipse workbench</i></span><span style="font-size: small;"><span style="font-style: normal;">:</span> </span><span style="font-size: small;">In the IBM Rational Team Concert Eclipse Client, go to </span><span style="font-size: small;"><b>Help>Install New Software> Add Software Site</b></span><span style="font-size: small;">, and then add the <Rhapsody Installation path>\Eclipse as a local repository.</span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSrbrLZ18f-JLWp0FzGttnfwmtjJzfdUVBhjRjPwJ2APH6y_zX2TJgBMz-ZWT9u3nxIc8N5uK692FtgsMldhAL4JAcEk_M0eOf8XXX0Hv8DN3u4Yvk4PMf6GAg1alTRf7T9noX_b1buJfF/s1600/RTCRhap2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSrbrLZ18f-JLWp0FzGttnfwmtjJzfdUVBhjRjPwJ2APH6y_zX2TJgBMz-ZWT9u3nxIc8N5uK692FtgsMldhAL4JAcEk_M0eOf8XXX0Hv8DN3u4Yvk4PMf6GAg1alTRf7T9noX_b1buJfF/s400/RTCRhap2.JPG" width="400" /> </a></div><span style="font-size: small;">8) Once the installation is complete, you should be able to use Rhapsody's capabilities inside the RTC Eclipse client. </span><br />
<span style="font-size: x-small;"><i>*Note: You can similarly develop Windows mobile applications using <a href="https://jazz.net/downloads/rational-team-concert/betas/VisualStudioClientBeta1">RTC's Visual Studio client</a> and <a href="http://www.google.co.in/url?sa=t&source=web&cd=4&sqi=2&ved=0CCwQFjAD&url=http://publib.boulder.ibm.com/infocenter/rhaphlp/v7r6/topic/com.ibm.rhp.integ.ides.doc/topics/rhp_g_int_rhp_and_visual_studio.html&rct=j&q=rational%20rhapsody%20visual%20studio&ei=SWgATpXtHIGmugPlorGhDg&usg=AFQjCNGOV7lCyU5zvpicFaIO8vKq7n2taw&cad=rja">Rhapsody's Visual Studio integration</a></i></span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSrbrLZ18f-JLWp0FzGttnfwmtjJzfdUVBhjRjPwJ2APH6y_zX2TJgBMz-ZWT9u3nxIc8N5uK692FtgsMldhAL4JAcEk_M0eOf8XXX0Hv8DN3u4Yvk4PMf6GAg1alTRf7T9noX_b1buJfF/s1600/RTCRhap2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><br />
<hr /><h2 class="western"><span style="font-size: large;">Creating a new Rhapsody Android project and linking it with an Android project</span></h2><div style="margin-left: 0in; margin-right: 0in;"><span style="font-size: small;">This step is necessary to create the model elements for an Android project.</span></div><span style="font-size: small;"> </span><br />
<ol style="text-align: left;"><li><span style="font-size: small;">Using the Java perspective, create a new Android project. In the demo below, the project is called Test1Project.</span><br />
</li>
<li><span style="font-size: small;">Switch to the Rhapsody Modeling perspective, and create a new Rhapsody Android project (You can also read the <a href="http://publib.boulder.ibm.com/infocenter/rhaphlp/v7r5/index.jsp?topic=/com.ibm.rhapsody.developing.doc/topics/rhp_t_dm_creating_rhp_android_proj.html">Rhapsody Help page</a> to read about how to work with Android projects). This will become the current active project. In the demo, this is called Test1Model.</span><br />
</li>
<li><span style="font-size: small;">Switch back to the Java package explorer view, right click on Test1Project, and choose <b>Export....</b> In the “Export” dialog, select “Rhapsody Model” and click next. The Export to Rhapsody Model Dialog is now displayed. You can choose what elements you want to export into the model. Once this is done, projects Test1Project and Test1Model are now linked.</span> <br />
<span style="font-size: small;"></span> <br />
</li>
</ol><hr /><h2 class="western"><span style="font-size: large;">The Demo</span></h2><span style="font-size: small;">The demo showcases how a distributed team working on an Android application can leverage the functionality provided by IBM Rational tools, namely IBM RTC and IBM Rational Rhapsody (let's call it the Rational Solution) through the complete lifecycle of the application, right from planning, design to implementation to design and testing, and even defect tracking. </span><br />
<span style="font-size: small;"> </span> <br />
<span style="font-size: small;"> </span><span style="font-size: small;">Using the Rational solution, a development team can work in either or both of the following 2 ways:</span><br />
<span style="font-size: small;"> </span><br />
<div style="margin-left: 0.49in;"><span style="font-size: small;">a. <i>Code centric development</i>: Ability to generate code from UML abstraction and state charts.</span></div><span style="font-size: small;"> </span><br />
<div style="margin-left: 0.49in;"><span style="font-size: small;">b. <i>Model centric developmen</i>t: Ability to reverse engineer code into UML abstractions without changing the code layout and to synchronize the changes as they're done.</span></div><div style="margin-left: 0.49in;"><br />
</div><span style="font-size: small;"> </span><span style="font-size: small;">See the video below: </span><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/iH7Xp0vyq04?feature=player_embedded' frameborder='0'></iframe></div><br />
<span style="font-size: small;">To see IBM Rational Team Concert and IBM Rational Rhapsody in action, and to know more about the rich features they have to offer, do attend <a href="http://www-01.ibm.com/software/in/rational/innovate/">IBM Rational Innovate India 2011</a> at The Leela, Bangalore from 9-11 August, 2011. You can catch me at the Rational Team Concert solution center. </span> <br />
<hr /><h2 class="western">For more information </h2><ul><li><a href="http://developer.android.com/">Android Developer website</a><br />
</li>
<li><a href="https://jazz.net/library/article/48">Getting started with Rational Team Concert</a><br />
</li>
<li><a href="http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-androidwidget/authors.html">Developing Android applications using Eclipse</a><br />
</li>
<li><a href="http://publib.boulder.ibm.com/infocenter/rhaphlp/v7r5/index.jsp?topic=/com.ibm.rhapsody.developing.doc/topics/rhp_c_dm_designing_android_apps.html">IBM Rhapsody Help – Designing Android Applications</a><br />
</li>
<li><a href="http://www.ibm.com/developerworks/offers/lp/demos/summary/r-rhapsodydevelop.html">Embedded software development using Rational Rhapsody Architect for Software</a><span style="font-size: small;"> </span></li>
<li><a href="https://www.ibm.com/developerworks/rational/library/model-driven-development-speed-delivery/"><span style="font-size: small;">Speed delivery of Android devices and applications with model-driven development</span></a></li>
<li><a href="http://www.blogger.com/post-edit.g?blogID=7116704192081983568&postID=8502223115548037591&from=pencil" name="eow-title"></a><a href="http://www.blogger.com/post-edit.g?blogID=7116704192081983568&postID=8502223115548037591&from=pencil" name="watch-headline-title"></a><a href="http://www.youtube.com/watch?v=35ocy5JKtgk">Rational Solution for Android Mobile Application Development </a> </li>
<li><a href="http://www.rationalindia.in/">Rational India Blog</a><br />
</li>
</ul><span style="font-size: xx-small;"><i>Android is a trademark of Google Inc. Use of this trademark is subject to Google Permissions.</i></span> <br />
<br />
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com8tag:blogger.com,1999:blog-7116704192081983568.post-41709505825731452092011-07-10T20:18:00.002+05:302012-06-28T15:18:34.186+05:30JazzHub for University - host Rational Team Concert projects on the cloud<div dir="ltr" style="text-align: left;" trbidi="on">
IBM Rational recently launched their cloud based offering - <a href="https://jazz.net/hub/manager/">JazzHub</a> - for hosting research projects using <a href="https://jazz.net/projects/rational-team-concert/">IBM Rational Team Concert</a>. JazzHub is a free, public, hosting hub for the open development of academic research and classroom projects. Dan Griffin, <a href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/invisiblethread/entry/announcing_jazzhub_rational_team_concert_in_the_cloud_for_academics15?lang=en">on the Rational Executive blog</a>, says<br />
<blockquote>
<blockquote>
<blockquote>
<span style="font-family: verdana;"> <span style="font-size: x-small;">With <a href="http://jazz.net/hub" target="_blank"><wbr></wbr>JazzHub</a></span><wbr></wbr><span style="font-size: x-small;">, professors, students, and academic researchers will be able to create new collaborative programming projects online or join a project they were invited to - all through a SaaS model with no server install required. </span></span></blockquote>
</blockquote>
</blockquote>
A lot of blogs and articles out there describe this new offering. However, for an engineering students, the terms are not exactly easy to understand, since most of it is industry jargon. Also, if one doesn't know about Rational Team Concert, the whole idea behind JazzHub is lost. So let me explain how the two connect. <br />
<br />
Software developers mostly need an IDE to help in tasks such as writing code, compiling, running and debugging projects. However, often when development is done in a team, it becomes cumbersome to share code, work simultaneously on a single piece of code and merge it with relevant changes later, track the work being done, plan who will do what, and in what time frame, keep a track on the work being done by the team members in real time. Many times, developers use third party tools along with an IDE, which may not integrate too well and may just be a stop gap solution.<br />
<br />
IBM Rational Team Concert (RTC) is a software development tool that brings together multiple tools that a software developer, working in a team, typically needs into one single IDE. It is built on the Eclipse platform and has two IDE's - one each for Eclipse and Visual Studio, to cater to a developer's need. With RTC, it becomes easy to work in a team, even if the members are located in different geographies. It even has its own version control system that helps team members to easily share and work on the project source code. RTC also has provisions for project planning and using software models such as the agile model, waterfall model, iterative model, etc. depending on the needs and what stage a project is on. Such a software will, thus, be immensely helpful for students and professors working on research projects. Professors can easily administer and evaluate the project and students can work on their own areas without spending lots of time on trivial tasks such as merging code changes. See the Ted developer videos here for more:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/D3S1AOqKIP8?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
Since RTC helps one share source code and project work items, etc., it needs to have a server installed. The RTC folks understand that the setup for the server is not very trivial and hence, JazzHub, a cloud based offering, makes it easy for students to just get started (for free!) without the hassles of a server. <br />
<br />
We are travelling far and wide to educate students about the immense benefits of this new offering. If you are interested to have us organize a workshop about RTC and JazzHub at your college, feel free to contact me ( or drop a comment here) and we'll work out a plan!<br />
<br />
To know more about JazzHub, be there at <a href="http://www-01.ibm.com/software/in/rational/innovate/">Innovate 2011, Bangalore</a>. If you're a student, you can also win free passes to Innovate by blogging or tweeting about rational products (use hashtag #innovateindia).</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com0tag:blogger.com,1999:blog-7116704192081983568.post-51938642689593028992011-06-24T14:18:00.000+05:302011-06-24T14:18:25.939+05:30Update Eclipse to use JDT Java 7 features<div dir="ltr" style="text-align: left;" trbidi="on">In a previous post, <a href="http://eclipseandjazz.blogspot.com/2011/05/eclipse-java-7-support.html">Eclipse java 7 support</a>, I talked about the progress of java 7 related work in JDT. However, back then, there was no way of testing/using the java 7 features without downloading the relevant source code and launching another instance of Eclipse from that. The good news now is that it has become easier to use/test the java 7 features by updating Eclipse the P2 way i.e. "Install new software" option.<br />
<br />
A <a href="http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29">wiki page</a> tells you how to do that. So, go ahead enjoy JDT's java 7 features. Please file any bugs, or enhancement ideas you find/have in the compiler, content assist, code select and java search <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT&component=Core&short_desc=%5B1.7%5D+">here</a> with the [1.7] tag in the "Summary". This is still a work in progress and even though a lot of work has been done and several new compiler and UI options have been introduced for java 7, we're still working on new features and testing/improving the ones already implemented. More details about the state of the art are available on <a href="http://wiki.eclipse.org/JDT_Core/Java7">http://wiki.eclipse.org/JDT_Core/Java7</a> and<a href="http://wiki.eclipse.org/JDT_UI/Java7"> http://wiki.eclipse.org/JDT_UI/Java7.</a><br />
<br />
<span style="font-size: x-small;"><i><b>Note:</b> This is an implementation of an early-draft specification developed under the Java Community Process (JCP) and is made available for testing and evaluation purposes only. The code is not compatible with any specification of the JCP. </i></span></div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com9tag:blogger.com,1999:blog-7116704192081983568.post-35416335139773217792011-06-02T23:37:00.002+05:302011-06-22T18:30:05.009+05:30Using PhoneGap in Eclipse to develop applications for Android or other mobile platforms<div dir="ltr" style="text-align: left;" trbidi="on">If you have been hearing a lot about this new kid on the mobile development block - PhoneGap (http://phonegap.com), and are as confused as I was when I started diving deeper, you've come to the right place to sort out your understanding a bit.<br />
<br />
<b>1)What is phonegap?</b><br />
<br />
According to the website, "PhoneGap is an open source solution for building cross-platform mobile apps with modern, standards-based Web technologies. Based on HTML5, PhoneGap leverages web technologies developers already know best... HTML and JavaScript."<br />
The definition itself does not make things very clear though. Let me explain a bit more. So today, suppose you have a web application that you want to deploy on multiple platform, say Android, iPhone, etc. In this app, you want to use one or more of the platform services to obtain some kind of data or carry out some kind of processing. Lets take, for example, an application that lets you invite friends to a movie as soon as you book a movie ticket. The app lets you select which friends to invite directly from your phone's contacts book. That means, if you're the developer of such an app, you'll most probably have to deal with consuming the platform's contact book using, for doing which, each platform would obviously have its own different ways. So there are 2 problems here:<br />
<br />
1) How can you query the platform's contact book from within your web application which is being written in javascript(or Dojo) and has no knowledge of the platform's APIs.<br />
2) How can you do so in a platform agnostic way, so that your web app works not just on Android but also on iPhone, notwithstanding the different ways of using the contacts book in both.<br />
<br />
Phonegap aspires to be the answer to both of the above questions. How? It provides APIs which abstract the platform's contact book for you, so that you only deal with the Phonegap API and let phonegap do the rest of the magic for you.<br />
<br />
<b>2) How do I set up/install Phonegap on my system?</b><br />
<br />
This one's not as trivial as a setup.exe, sadly! Phonegap requires a bunch of things to be installed on the machine before getting started. I found this document about installing phonegap - <a href="http://wiki.phonegap.com/w/page/16494774/Getting-started-with-Android-PhoneGap-in-Eclipse">http://wiki.phonegap.com/w/page/16494774/Getting-started-with-Android-PhoneGap-in-Eclipse</a>. Unfortunately, I sat down doing all the steps and till a few hours, I was not even able to create my first phonegap hello world app.<br />
<br />
So, the right thing to do here is to follow the above document till the "step 1f" i.e. install eclipse, android sdk, android development tools, apache ANT, and ruby. And you're almost done! Yes, don't get intimidated by the remaining steps in the doc. Step 2 onwards is a longer way of installing phoneGap and more relevant when you aren't going to use Eclipse. And that too, doesn't somehow work as stated. :(<br />
<br />
Phonegap can be directly installed on Eclipseas a plugin. All you need to do is go to Help>Install new software>Add and use the download site " <a href="https://svn.codespot.com/a/eclipselabs.org/mobile-web-development-with-phonegap/tags/r1.2/download">https://svn.codespot.com/a/eclipselabs.org/mobile-web-development-with-phonegap/tags/r1.2/download</a>". Then making sure "contact all available update sites" is checked, install the phonegap plugin. Voila! No need to download phonegap sources from github.<br />
<br />
<b>3) How do I create my first phonegap application?</b><br />
<br />
On Eclipse, first create a new phonegap project by clicking on the phonegap comnand you see on the coolbar. Then if you don't have downloaded sources for phonegap, check<br />
<br />
"Use Built-in PhoneGap" on the project wizard. Click Next and create the new Android project in the Android project wizard. (Note: You can also simply create an Android project, making sure that the android main activity class extends DroidGap class instead of Activity class. Make sure you add "phonegap.jar" as an external library to the build path.).<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://wiki.phonegap.com/f/1258145435/portrait.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://wiki.phonegap.com/f/1258145435/portrait.png" width="320" /></a></div><br />
<br />
You see that a phonegap app is nothing but an android app with the main activity class extending phoneGap's droidgap class and it's onCreate method loading an html page instead of performing any native functionality. You can replace this html page by one of your own choice in the assets/www folder. Check out <a href="http://mobile.tutsplus.com/tutorials/phonegap/creating-an-android-hello-world-application-with-phonegap/">http://mobile.tutsplus.com/tutorials/phonegap/creating-an-android-hello-world-application-with-phonegap/</a> for some good examples.<br />
<br />
You can now use the phonegap APIs such as the contacts API, media player API, geolocation API, etc. <a href="http://ripple.tinyhippos.com/">Ripple</a> is a browser based emulator (a chrome extension) that you can use to test the PhoneGap applications. (Testing on the Android emulator is a bit slow with web apps).<br />
<br />
Happy phonegapping!<br />
<br />
</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com10tag:blogger.com,1999:blog-7116704192081983568.post-31115745008247307132011-05-23T22:30:00.001+05:302011-05-24T11:50:41.705+05:30Contributing new preference types in the Eclipse export preferences page<div dir="ltr" style="text-align: left;" trbidi="on">Someone asked me today how he could extend the "Export Preferences" page in Eclipse and add an option to export his own kind of preferences other than whats given in the default. He didn't know the name of the extension, and neither did I at the top of my head. This is what the export preferences page looks like:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTxqOE-qYpESHvSQjCORTE1YisQtX0PpvxDXM0E5RI9ZoAzTmDE5Mw-t_qCIQSdNcdmLlAG2-lUogOqkmL1ZAV8Hctbu9BKN1aUtXVrHELqpo5aQm7TC0TuasfDA7PaR2YQq251E7bge2J/s1600/snap1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTxqOE-qYpESHvSQjCORTE1YisQtX0PpvxDXM0E5RI9ZoAzTmDE5Mw-t_qCIQSdNcdmLlAG2-lUogOqkmL1ZAV8Hctbu9BKN1aUtXVrHELqpo5aQm7TC0TuasfDA7PaR2YQq251E7bge2J/s320/snap1.jpg" width="262" /></a></div>This can be opened by right clicking on a project in Package Explorer > Export > Preferences.<br />
<br />
I did some digging around to find out how the Java Development Tools (JDT) project contributes the Java Preference options here. And I found that the extension point "org.eclipse.ui.preferenceTransfer" is actually the one that we need to extend in order to define new preference kinds to export. The following snippet is taken from org.eclipse.jdt.ui project's plugin.xml file:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2i29IonmVi0yMGQIfR9TmAucVwS_PcsLRTAFT5UJV2rqrVyBSR-boy8PxmreWxTzFLVVFpaRXXcUbr1nLREe2F3Fc2VhoPeZKCqduJJZf_Mfg8Ojv8yb67mfTkA7sohN1dYCIiHjvGSNi/s1600/snap2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2i29IonmVi0yMGQIfR9TmAucVwS_PcsLRTAFT5UJV2rqrVyBSR-boy8PxmreWxTzFLVVFpaRXXcUbr1nLREe2F3Fc2VhoPeZKCqduJJZf_Mfg8Ojv8yb67mfTkA7sohN1dYCIiHjvGSNi/s1600/snap2.jpg" /></a></div><br />
So if you have new preference kinds you want to export, this is the way to go. You can also peek into JDT/UI's plugin file to explore further.</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com0tag:blogger.com,1999:blog-7116704192081983568.post-58336145992058231272011-05-20T13:02:00.002+05:302011-05-24T11:51:25.118+05:30What's new in Java 7<div dir="ltr" style="text-align: left;" trbidi="on">In the recently concluded <a href="http://www.eclipseday.in/">Eclipse Day India 2011</a> , I gave a talk on the new features of Java 7.<br />
<br />
<div id="__ss_7921509" style="width: 425px;"><b style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/aupsy/whats-new-in-java-7" title="Whats new in Java 7">Whats new in Java 7</a></b> <iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/7921509" width="425"></iframe> <br />
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/aupsy">aupsy</a> </div></div><br />
<br />
<br />
<br />
There were many questions and people generally seemed interested in the stuff. I mostly talked about the following features:<br />
<br />
1. Project Coin:<br />
<ul style="text-align: left;"><li>Switch on Strings</li>
<li>Binary literals and underscores in numeral literals.</li>
<li>Improved type inference for generic instance creation - Diamond.</li>
<li>Multi - catch and more precise rethrow.</li>
<li>Try with resources.</li>
<li>@SafeVarargs</li>
</ul>2. Support for dynamic languages<br />
<br />
Other things also part of java 7 are:<br />
<br />
3. Unicode 6.0 character set<br />
<br />
4. New I/O and concurrent APIs</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com1tag:blogger.com,1999:blog-7116704192081983568.post-6794395302790526222011-05-20T12:02:00.000+05:302011-05-20T12:02:10.463+05:30Eclipse Java 7 support<div dir="ltr" style="text-align: left;" trbidi="on">IF you're wondering what's going on with Java 7 work at Eclipse, here are some insights:<br />
<br />
1. Eclipse 3.7(Indigo release) will not be shipped with Java 7 support. This is not because we folks at JDT are lazy and didn't want to do the whole work by the time 3.7 is wrapped up (Well, it might be true sometimes, but then we have tough taskmasters as well!!). This is mostly because the official release of Java 7 is scheduled on July 28, 2011, and we'd have already wrapped up 3.7 before that. The delay, in part, has also been caused due to the late availability of JSR-292 (Invoke Dynamic) and JSR-334 (Project Coin).<br />
<br />
2. Eclipse folks are busy working overtime to make sure that Java 7 support is in place by the time we ship Eclipse 3.7.1. As per bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288548">bug 288548</a>- "The work for the Java 7 features is currently in progress in the 'BETA_JAVA7' branch and we will deliver separate updates for the stable builds in order to provide early access to the Java 7 features for interested parties."<br />
<br />
3. Much of the compiler support is already in place, and some work needs to be done on the UI portion. To check the progress on BETA_JAVA7 branch, you can read through <a href="http://wiki.eclipse.org/JDT_Core/Java7">JDT Core java 7 wiki page. </a><br />
<br />
4. If you want to test Eclipse's java 7 support, or want to use Eclipse to try out the new java 7 stuff, you can follow the instructions given in the "What to do to set up the IDE" section of the JDT Core java 7 wiki page. We plan to have downloadable builds soon. You can see the list of open bugs against JDT/Core Java 7 support at any point in time <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=1.7&classification=Eclipse&product=JDT&component=Core&longdesc_type=allwordssubstr&longdesc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bug_id_type=anyexact&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Importance&field0-0-0=noop&type0-0-0=noop&value0-0-0=">here</a>. To report new bugs, make sure you use the [1.7] tag.<br />
<br />
Hope this helps!</div>Aupsy-The cOOlest One!!http://www.blogger.com/profile/00978910362796816675noreply@blogger.com0