Wednesday, August 14, 2013

How To Use Sort Method Of Collections In Java



Collections contains the sort(List<T>) method, which is used to sort the specified list into ascending order, according to the natural ordering of its element.

Declaration :

declaration of method - java.util.Collections.sort() method.

public static <T extends Comparable<? super T>> void sort(List<T> list) 
     
Parameters :

list - Ihis is the list to be sorted.

Example :

******************************************************************************

package org.javaIsEasy.collectionPrograms;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class SortListExample {
 public static void main(String[] args) {
  ArrayList<String> programmingLanguageList=new ArrayList<String>();
  programmingLanguageList.add("PHP");
  programmingLanguageList.add(".NET");
  programmingLanguageList.add("C++");
  programmingLanguageList.add("JAVA");
  programmingLanguageList.add("PERL");
 
  System.out.println("Display List Before Sorting\n");
  Iterator<String> it=programmingLanguageList.iterator();
  while(it.hasNext())
  {
   System.out.println(it.next());
  }
  Collections.sort(programmingLanguageList);
 
  System.out.println("Display List After Sorting\n");
  Iterator<String> itSwapped=programmingLanguageList.iterator();
  while(itSwapped.hasNext())
  {
   System.out.println(itSwapped.next());
  }
 }
}

******************************************************************************

OUTPUT :

******************************************************************************
Display List Before Sorting

PHP
.NET
C++
JAVA
PERL
Display List After Sorting

.NET
C++
JAVA
PERL
PHP

******************************************************************************


How To Find Number Of Occurrence Of An Object In List



The frequency(Collection<?>, Object) method is used to get the number of occurrence of an elements in the specified collection.

Declaration
declaration of method -  java.util.Collections.frequency().

public static int frequency(Collection<?> c, Object o)

Parameters

Collection<?> c  -  Pass the object of collection in which to determine the frequency of o.

Object o  -  Pass the object whose frequency is to be determined.


Example :

*********************************************************************************
package org.javaIsEasy.collectionPrograms;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class FrequencyExample {
 public static void main(String[] args) {
  ArrayList<String> programmingLanguageList = new ArrayList<String>();
  programmingLanguageList.add("PHP");
  programmingLanguageList.add(".NET");
  programmingLanguageList.add("PERL");
  programmingLanguageList.add("JAVA");
  programmingLanguageList.add("PERL");
  programmingLanguageList.add("PYTHON");
  programmingLanguageList.add("PERL");

  System.out.println("Display List Of Programming Language\n");
 
  Iterator<String> it = programmingLanguageList.iterator();
 
  while (it.hasNext()) {
   System.out.println(it.next());
  }
 
  int occurrences_Of_PERL = Collections.frequency(programmingLanguageList, "PERL");

  System.out.println("Display occurrences of 'PERL'---->"+ occurrences_Of_PERL);
 }
}

*********************************************************************************


OUTPUT :

*********************************************************************************
Display List Of Programming Language

PHP
.NET
PERL
JAVA
PERL
PYTHON
PERL
Display occurrences of 'PERL'---->3

*********************************************************************************


How To Use Swapping Method Of Collections In Java



Collections has swap(List<?>, int, int)  method, which is used to swap the elements at the specified position in the specify list.


Declaration of the Method:

This is the declaration of the method  -  java.util.Collections.swap()


public static void swap(List<?> list,int i,int j)


Parameters:

List - Pass the object of the list in which swapping method is to be performed.
int i - Pass the index of the one element which is to be swapped.
int j - Pass the index of the one element which is to be swapped with given int i index.


Example :


*******************************************************************************

package org.javaIsEasy.collectionPrograms;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class SwapListExample {

 public static void main(String[] args) {
  ArrayList<String> programmingLanguageList=new ArrayList<String>();
  programmingLanguageList.add("PHP");
  programmingLanguageList.add(".NET");
  programmingLanguageList.add("C++");
  programmingLanguageList.add("JAVA");
  programmingLanguageList.add("PERL");

  System.out.println("Display List Before Swapping\n");
  Iterator<String> it=programmingLanguageList.iterator();
  while(it.hasNext())
  {
   System.out.println(it.next());
  }
  Collections.swap(programmingLanguageList, 0, 3);

  System.out.println("Display List After Swapping\n");
  Iterator<String> itSwapped=programmingLanguageList.iterator();
  while(itSwapped.hasNext())
  {
   System.out.println(itSwapped.next());
  }
 }
}


*******************************************************************************

Output :


*******************************************************************************
Display List Before Swapping

PHP
.NET
C++
JAVA
PERL
Display List After Swapping

JAVA
.NET
C++
PHP
PERL

*******************************************************************************

How to Read Excel File in Java using "Apache Poi" API.


Apache POI is a powerful Java library to work with different Microsoft Office file formats such as Excel, Power point, Visio, MS Word etc.

Let's create a Excel file and insert some data into this file and give this file name as "JavaIsEasy.xls".



Now we need to add library files to execute this program, as follows.


  • poi-3.7-beta1
  • poi-3.8-beta4-20110826
  • poi-ooxml-3.5-beta5


Add above jar in eclipse.





Now create a java class named as "ReadExcelFile.java".


*******************************************************************************


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFile {
 
  public static void main(String[] args) throws IOException {
      String fname = "C:/DATA/Software/LIFERAY/liferay data/Blogs Material/Core Java/JavaIsEasy.xls"; 
     //********************************************************************
      
      
      InputStream inp = new FileInputStream(fname);
      String fileExtn = GetFileExtension(fname);
      Workbook wb_xssf; 
      Workbook wb_hssf; 
      Sheet sheet = null; // sheet can be used as common for XSSF and HSSFWorkBook
      if (fileExtn.equalsIgnoreCase("xlsx"))
      {
        wb_xssf = new XSSFWorkbook(fname);
       log("xlsx="+wb_xssf.getSheetName(0));
       sheet = wb_xssf.getSheetAt(0);
      }
      if (fileExtn.equalsIgnoreCase("xls"))
      {
   POIFSFileSystem fs = new POIFSFileSystem(inp);
       wb_hssf = new HSSFWorkbook(fs);
       log("xls="+wb_hssf.getSheetName(0));
       sheet = wb_hssf.getSheetAt(0);
      }
      Iterator rows = sheet.rowIterator(); // Now we have rows ready fromthe sheet
      
   while (rows.hasNext()) 
       { 
           Row row = (Row) rows.next();
           log("row#="+row.getRowNum()+"");
           log("**********************");
    //log(row.getPhysicalNumberOfCells()+"");
    Iterator cells = row.cellIterator();
    String cellValue=null;
    while (cells.hasNext())
    {
        Cell cell = (Cell) cells.next();
     
     switch ( cell.getCellType() ) 
     {
     case Cell.CELL_TYPE_STRING:
         log(cell.getRichStringCellValue().getString());
         cellValue=cell.getRichStringCellValue().getString();
     break;
     case Cell.CELL_TYPE_NUMERIC:
           if(DateUtil.isCellDateFormatted(cell)) {
             log(cell.getDateCellValue()+"");
             cellValue=cell.getDateCellValue().toString();
           } else {
             System.out.println(cell.getNumericCellValue());
             cellValue=String.valueOf(cell.getNumericCellValue());
           }
           break;
     case Cell.CELL_TYPE_BOOLEAN:
           log(cell.getBooleanCellValue()+"");
           cellValue=cell.getBooleanCellValue()+"";
           break;
         case Cell.CELL_TYPE_FORMULA:
           log(cell.getCellFormula());
           cellValue=cell.getCellFormula();
           break;
     default:
     }
   
    
    }
       }
   inp.close();
  } 
  
  private static void log(String message)
  {
          System.out.println(message);
  }
  private static String GetFileExtension(String fname2)
  {
      String fileName = fname2;
      String fname="";
      String ext="";
      int mid= fileName.lastIndexOf(".");
      fname=fileName.substring(0,mid);
      ext=fileName.substring(mid+1,fileName.length());
      return ext;
  }
}



*******************************************************************************

Now execute this program.

Output:-

*******************************************************************************

xls=Sheet1
row#=0
**********************
Programming Language
Projects Done
Last Used

*
*
*
row#=4
**********************
PHP
0.0
Not Used

*******************************************************************************

Liferay Overview



Portlets are web applications that are designed to run inside a portlet container that implements either the Portlet 1.0 (JSR 168) or Portlet 2.0 (JSR 286) standard. Portlet containers provide a layer of abstraction over the Java EE Servlet API, and consequently require a servlet container like Apache Tomcat to function.

        Portals are standalone systems that use a portlet container as the runtime engine for executing portlets. When a portal is asked to deliver a portal page to the end-user’s web browser, each portlet is asked to render itself as a fragment of HTML. It is the job of the portal to aggregate these HTML fragments into a complete HTML document.


Portlet life cycle -

Each portlet in jPortlet exhibits the following portlet life cycle.
  • init() -  When the Portal initializes, it initialized each Portlet by calling their init() method. Like Servlets, the only one instance of the Portlet is initianticiate and shared by all the users.

  • service() - The portal calls the service() method when the portlet is required to render it's content. During the life cycle of the portlet the service() method is typically called many times.  

  • destroy() - When the portal is terminating, portlets are taken out of service, then destroyed with the destroy() method. Finally the portlet is garbage collected and finalized.



In order to service users, each portlet is combine with a user session. When the user logs into the portal, the login() is called for each portlet, which allow each portlet to initialize the user portlet. The portlet call the logout() method of each portlet to inform the the user's session is terminating. 

Portlet modes  -

A portlet mode indicates the function a portlet is performing in the render method. Portlet modes allow to display different user interfaces, depending of the task required. In jPortlet, there are 4 diplay modes which can be invoked by icons on the portlet title bar. 
The following modes are supported by the Portlet API:

View - 

This is the portlet's normal mode of operation.




Help - 
If this mode is supported by a portlet, the portlet provides a help page for users to obtain more information about the portlet.



Edit - 
If this mode is supported by a portlet, the portlet provides a page for users to customize the portlet for their own needs. For example, a portlet can provide a page for users to specify their location for obtaining local weather and events. Users must be logged into the portal to access edit mode.  



Configure - 

If this mode is supported by a portlet, the portlet provides a page for portal administrators to configure a portlet for a user or group of users. The Portlet API provides methods for the portlet to determine the current or previous mode. All portlets must support the VIEW mode.

Portlet Window States - 

Portlet states allow to change how the portlet window is displayed within the portal. The following states are supported by the Portlet API: 

NORMAL - The is when the portlet is arranged with other portlets.

MAXIMIZED - When a portlet is maximized, it is displayed in the entire body of the portal, replacing the view of other portlets. The Portlet API provides methods for the portlet to determine the current state. By default, jPortlet always display the modes EDIT, CONFIGURE and HELP in MAXIMIZED state. 

Portlet events - jPortlet supports 2 type of events: 

Action events-

When a user click a SUBMIT button in the HTML view of the portlet, this click is transformed to an ActionEvent that is generated and received by the Portlet's ActionListener 




Message events -

These event are generated when a portlet send a message to another portlet. Its a basic structure for inter-portlet communication. MessageEvent are received by the target Portlet's MessageListener

Portlet Preferences - 

Developers often have the requirement to provide the end-user with the ability to personalize the portlet behaviour in some way. To meet this requirement, the Portlet 1.0 and 2.0 standards provide the ability to define preferences for each portlet. Preference names and default values can be defined in the WEB-INF/portlet.xml configuration file. Portal end-users start out interacting with the portlet user interface in portlet VIEW mode but can switch to portlet EDIT mode in order to select custom preference value.
Example 1.1. Specifying preference names and associated default values in the WEB-INF/portlet.xml configuration file.

<portlet-app>
        <portlet>
               ...
               <portlet-preferences>
                       <preference>
                               <name>datePattern</name>
                               <value>MM/dd/yyyy</value>
                       </preference>
                       <preference>
                               <name>unitedStatesPhoneFormat</name>
                               <value>###-###-####</value>
                       </preference>
               </portlet-preferences>
               ...
        </portlet>
</portlet-app>



What is the use of Static Import?



Static Import is a new feature added in Java 5 specification.

let's first know, why do we use "import".
If we write as mentioned below

import form.ArtworkForm;

It gives access to use class 'ArtworkForm' inside whole program without using package reference.
'form' is a name of package here.

We can create any object of this class..
ArtworkForm obj=new ArtworkForm();

If we use * after package name in import statement, then it will give you access to use all classes
and it's method or members.

import form.*;

Now let's get into details with "Static import"...

double r = Math.cos(Math.PI * theta);

In the above line, we are using Math.cos and Math.PI. somewhere it looks awkward, to make it looks good
we can use as mentioned below.

import static java.lang.Math.PI;
import static java.lang.Math.cos;

now the code would be like this...

double r = cos(PI * theta); (It seems good)

Only advantage that I see is readability of the code. Instead of writing name of static class,
one can directly write the method or member variable name.

How to create Portlet in Liferay using eclipse



Creating portlets with liferay plugin SDK is very simple. For creating a portlet we need to
have..

Here we are using below enviornment.

1) liferay-plugins-sdk-6.1.0
2) liferay-portal-6.1.1-ce-ga2
3) Juno eclipse with liferay plugins
4) Jdk 1.6_45

Let's start creating our first portlet.

Go to File → New → Liferay Project



Next, go through the following steps to setup your new portlet:

Fill in the Project and Display names with my-firstdemo-portlet and My firstdemo, respectively.
Liferay adds automatically "-portlet" at the end of the project name.





If Liferay Plugins SDK is not configured, click "configure" link and give the path of the downloaded "liferay plugin sdk".

Same if "Liferay Portal Runtime" is not configured, click "New" button and give path of the "liferay-portal-6.1.1" bundle.



Select Liferay v6.1 CE(Tomcat 7) for the server run time enviornment.




Click finish.

Now you can see the directory structure of the project. As project is created "Build Successful" message can  be seen.




Now our first default application has been created and ready to run on server. To run this project, right click on the project and select server to deploy the application.


Liferay server has already been selected and click finish button.



You can see the log on console of the eclipse.


Server is running on the "http://localhost:8080/" address.

login with the default Email Address and the password.

Email Address - test@liferay.com
Password - test






 Click on the "Add" button on the left top.


Now our portlet can be seen under "Sample tag" with the name of the "My Firstdemo". Select this and click on add next to it. This portlet will be added in the main page.


In the last image our portlet has been added.
A search portlet is already added in this page.






Congratulations!! we have successfully created and deployed our first portlet.