Friday, October 9, 2015

Reading Excel FIle and Sorting Data with Column Name and It's key Value with User Slection



User Provided Selection-
FileName which need to be loaded:
SheetName:
Row data which is selected:
Return Map with Column name and selected/desired Data-

Excel File Looklike-

UserStateUserIDLoginIDSecure/Unsecured InBoundToInboundFrom
Avaliable,  1000654789U258963147852
UnAvaliable1001123456S147852258963

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReader
{
    HashMap testData = new HashMap();

    TestVO testVO = new TestVO();

    private HashMap loadCSVLines(File fileName)
    {
        // Used the LinkedHashMap and LikedList to maintain the order
        HashMap<String, LinkedHashMap<Integer, List>> outerMap = new LinkedHashMap<String, LinkedHashMap<Integer, List>>();

        LinkedHashMap<Integer, List> hashMap = new LinkedHashMap<Integer, List>();

        String sheetName = null;
        // Create an ArrayList to store the data read from excel sheet.
        // List sheetData = new ArrayList();
        FileInputStream fis = null;
        try
        {
            fis = new FileInputStream(fileName);
            // Create an excel workbook from the file system
            XSSFWorkbook workBook = new XSSFWorkbook(fis);
            // Get the first sheet on the workbook.
            for (int i = 0; i < workBook.getNumberOfSheets(); i++)
            {
                XSSFSheet sheet = workBook.getSheetAt(i);
                // XSSFSheet sheet = workBook.getSheetAt(0);
                sheetName = workBook.getSheetName(i);

                Iterator rows = sheet.rowIterator();
                while (rows.hasNext())
                {
                    XSSFRow row = (XSSFRow) rows.next();
                    Iterator cells = row.cellIterator();

                    List data = new LinkedList();
                    while (cells.hasNext())
                    {
                        XSSFCell cell = (XSSFCell) cells.next();
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        data.add(cell);
                    }
                    hashMap.put(row.getRowNum(), data);

                    // sheetData.add(data);
                }
                outerMap.put(sheetName, hashMap);
                hashMap = new LinkedHashMap<Integer, List>();
            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (fis != null)
            {
                try
                {
                    fis.close();
                }
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        return outerMap;

    }

    public HashMap loadXLSTestData(String lob)
    {

        // HashMap testData = null;
        Path desktop = FileSystems.getDefault().getPath(
                System.getProperty("user.home") + "/Desktop");
        File file = new File(desktop.toString() + "\\AutomationTestSuite");
        if (!file.exists())
        {
            if (file.mkdir())
            {
                System.out.println("Directory is created!");
            }
            else
            {
                System.out.println("Failed to create directory!");
            }
        }
        Path oriPath = FileSystems.getDefault().getPath("src/com/aon/automation/properties",
                lob + "AutomationTestCases.xlsx");
        // Path copyPath =
        // FileSystems.getDefault().getPath(System.getProperty("user.home")+"/Desktop",
        // "SFAutomationTestCases.xlsx");
        Path copyPath = FileSystems.getDefault().getPath(file.toString(),
                lob + "AutomationTestCases.xlsx");
        File f = copyPath.toFile();

        if (!f.exists())
        {
            try
            {
                Files.copy(oriPath, copyPath, StandardCopyOption.COPY_ATTRIBUTES);
                System.out.println("Please update test data under path " + f
                        + " To run this test automation.");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }

        }
        else
        {
            testData = loadCSVLines(f);

        }
        return testData;
    }

    public HashMap XLSUtility(String lob, String testCase, String testDataRow)
    {
        loadXLSTestData(lob);
        List attributes = new LinkedList();
        HashMap returningMap = new LinkedHashMap();
        ListIterator iterateOverHeading = null;
        LinkedList valuesforMap = new LinkedList();
        Iterator excelSheetEntries = testData.entrySet().iterator();
        while (excelSheetEntries.hasNext())
        {
            Entry thisEntry = (Entry) excelSheetEntries.next();
            Object key = thisEntry.getKey();
            if (key.equals(testCase))
            {
                Map value = (LinkedHashMap) thisEntry.getValue();
                String str = null;
                Iterator iterateOverValue = value.entrySet().iterator();
                while (iterateOverValue.hasNext())
                {
                    Entry headings = (Entry) iterateOverValue.next();
                    Object headigKey = headings.getKey();
                    if (headigKey.equals(0))
                    {
                        attributes = (LinkedList) headings.getValue();

                    }
                    if (headigKey.toString().equals(testDataRow))
                    {
                        valuesforMap = (LinkedList) headings.getValue();

                        Iterator values = valuesforMap.iterator();

                        iterateOverHeading = attributes.listIterator();
                        INNER: while (iterateOverHeading.hasNext())
                        {
                            str = String.valueOf(iterateOverHeading.next());
                            while (values.hasNext())
                            {
                                String val = String.valueOf(values.next());
                                returningMap.put(str, val);
                                continue INNER;
                            }

                        }
                    }

                }

                break;
            }

        }
        System.out.println(returningMap);

        return returningMap;
    }
   
   

    public static void main(String[] args)
    {
        ExcelReader exl = new ExcelReader();

        exl.XLSUtility("SF", "InBound", "2");
    }
}

Thursday, October 8, 2015

Copy File From Project Path to Desktop with the Creation of Directory

Below code will copy the file from the working directory and it will also create the Directory on Desktop and copy the same file in newly created directory-


import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

public class GenericUtility
{

    public static void copyTestCase()
    {
     
       // It will look for the user home path and will get the desired path as provided, here we have                //chosen the Desktop
        Path desktop = FileSystems.getDefault().getPath( System.getProperty("user.home") + "/Desktop");

           //new directory will be created
        File file = new File(desktop.toString() + "\\TestSuite");
        if (!file.exists())
        {
            if (file.mkdir())
            {
                System.out.println("Directory is created!");
            }
            else
            {
                System.out.println("Failed to create directory!");
            }
        }
        Path oriPath = FileSystems.getDefault().getPath("src/com/javafries/automation/properties",
                "TestCases.xlsx");
        // Path copyPath =
        // FileSystems.getDefault().getPath(System.getProperty("user.home")+"/Desktop",
        // "TestCases.xlsx");
        Path copyPath = FileSystems.getDefault().getPath(file.toString(),
                "TestCases.xlsx");
   
        if (!f.exists())
        {
            try
            {
                Files.copy(oriPath, copyPath, StandardCopyOption.COPY_ATTRIBUTES);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }

        }

    }

    public static void main(String[] args)
    {
        copyTestCase();
    }
}

Reading the Excel file and Storing data in HashMap

Excel data is look like as below and having Multiple sheets-


UserState UserID LoginID Secure/Unsecured  InBoundTo InboundFrom
Avaliable,  1000654789U258963147852
UnAvaliable 1001 123456 S 147852 258963




import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReader
{

    public static HashMap loadExcelLines(File fileName)
    {
        // Used the LinkedHashMap and LikedList to maintain the order
        HashMap<String, LinkedHashMap<Integer, List>> outerMap = new LinkedHashMap<String, LinkedHashMap<Integer, List>>();

        LinkedHashMap<Integer, List> hashMap = new LinkedHashMap<Integer, List>();

        String sheetName = null;
        // Create an ArrayList to store the data read from excel sheet.
        // List sheetData = new ArrayList();
        FileInputStream fis = null;
        try
        {
            fis = new FileInputStream(fileName);
            // Create an excel workbook from the file system
            XSSFWorkbook workBook = new XSSFWorkbook(fis);
            // Get the first sheet on the workbook.
            for (int i = 0; i < workBook.getNumberOfSheets(); i++)
            {
                XSSFSheet sheet = workBook.getSheetAt(i);
                // XSSFSheet sheet = workBook.getSheetAt(0);
                sheetName = workBook.getSheetName(i);

                Iterator rows = sheet.rowIterator();
                while (rows.hasNext())
                {
                    XSSFRow row = (XSSFRow) rows.next();
                    Iterator cells = row.cellIterator();

                    List data = new LinkedList();
                    while (cells.hasNext())
                    {
                        XSSFCell cell = (XSSFCell) cells.next();
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        data.add(cell);
                    }
                    hashMap.put(row.getRowNum(), data);

                    // sheetData.add(data);
                }
                outerMap.put(sheetName, hashMap);
                hashMap = new LinkedHashMap<Integer, List>();
            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (fis != null)
            {
                try
                {
                    fis.close();
                }
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        return outerMap;

    }
}



OuterMap will return the data of all your sheets in HashMap

as below-

HashMap of HashMap
Sheet1 as Key and its corresponding data as hashmap with row no as key and corresponding data in list

{Sheet1={
    0=[UserState, UserID, LoginID, Secure/Unsecured, InBoundTo, InboundFrom], 
    1=[Avaliable, 1000, 654789, U, 258963, 147852, ], 
    2=[UnAvaliable, 1000, 123456, S, 147852, 258963, ], 3=[], 4=[], 5=[]}, 
    
  Sheet2 as Key and its corresponding data as hashmap with row no as key and corresponding data in list  
Sheet2={
    0=[UserID, Password, Extention, ACDID, Env, Life_Cycle, Web_URL], 
    1=[XYZ, xyz, 71000, 66001, Cisco, DEV, https://www.facebook.com/, ], 
    2=[ABC, abc, 71000, 66001, Cisco, DEV, https://www.facebook.com/, ], 3=[, , ], 7=[, ]}, 
    
 Sheet3 as Key and its corresponding data as hashmap with row no as key and corresponding data in list   
Sheet3={
    0=[Outbound, State, ClientID, PPID, SecurityState], 
    1=[7777777, Avaliable, 0000, 8888, U, ], 
    2=[777777, Avaliable, 0000, 8888, S, ], 3=[, ]}, 
    
    

    
    
    


Sunday, August 9, 2015

WAS console error lang.ExceptionInInitializerError

Error Message: java.lang.Exception: java.lang.ExceptionInInitializerError
Error Code: 500
Target Servlet: action
Error Stack:
java.lang.Exception: java.lang.ExceptionInInitializerError
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet(ServletWrapper.java:2046)
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:761)
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:508)
     at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
     at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3994)
     at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:945)
     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:191)
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:454)
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:516)
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:307)
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:278)
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
     at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
     at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
     at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
     at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
     at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
     at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
     at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1662)
     Caused by: java.lang.ExceptionInInitializerError
     at java.lang.J9VMInternals.initialize(J9VMInternals.java:221)
     at java.lang.Class.forNameImpl(Native Method)
     at java.lang.Class.forName(Class.java:278)
     at java.beans.Beans.instantiate(Beans.java:189)
     at java.beans.Beans.instantiate(Beans.java:80)
     at com.ibm.ws.webcontainer.servlet.ServletWrapper$1.run(ServletWrapper.java:1977)
     at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet(ServletWrapper.java:1968)
     ... 22 more
     Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4JLogger
     at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:532)
     at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272)
     at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246)
     at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
     at org.apache.struts.action.ActionServlet.<clinit>(Unknown Source)
     at java.lang.J9VMInternals.initializeImpl(Native Method)
     at java.lang.J9VMInternals.initialize(J9VMInternals.java:199)
     ... 29 more
     Caused by: org.apache.commons.logging.LogConfigurationException: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4JLogger
     at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:416)
     at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:525)
     ... 35 more
     Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4JLogger
     at java.lang.Class.forNameImpl(Native Method)
     at java.lang.Class.forName(Class.java:240)
     at org.apache.commons.logging.impl.LogFactoryImpl$1.run(LogFactoryImpl.java:466)
     at java.security.AccessController.doPrivileged(AccessController.java:359)
     at org.apache.commons.logging.impl.LogFactoryImpl.loadClass(LogFactoryImpl.java:454)
     at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:406)
     ... 36 more
    




Solution---

Make sure you have compatible ant-apache-log4j.jar, log4j, and commons-logging.jar.
Restart you server, it should work fine.


For me it worked :)





Tuesday, August 5, 2014

java.net.SocketException:

When I was trying to run my application I was getting below error
0    [Thread-5] INFO  org.apache.commons.httpclient.HttpMethodDirector  - I/O exception (java.net.SocketException) caught when processing request: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory

I also found the article on IBM website for the temporary fix here is the link http://www-01.ibm.com/support/docview.wss?uid=swg21584437, however it didn't worked for me.

I have to change the java.security settings to use the Java JDK implementation of the SSLSocketFactory rather than the WAS implementation.

In RAD I have to change as below:



Select Alternate JRE and Apply.



It worked perfectly fine for me.

Friday, February 28, 2014

Unable to find custom install operation class "com.ibm.cic.agent.win32.registerUninstall.RegisterUninstall" - RAD on WIndows 7


I have been trying to update Installation Manager on Windows 7 64-bit machine but I was getting below error-



Unable to find custom install operation class "com.ibm.cic.agent.win32.registerUninstall.RegisterUninstall" for installable unit: com.ibm.cic.agent.win32.uninstaller.AddRemoveProgramIU 
java.lang.ClassNotFoundException: com.ibm.cic.agent.win32.registerUninstall.RegisterUninstall
java.net.URLClassLoader.findClass(URLClassLoader.java:493)
java.lang.ClassLoader.loadClass(ClassLoader.java:607)
java.lang.ClassLoader.loadClass(ClassLoader.java:573)
com.ibm.cic.agent.core.commonNativeInstallAdapter.InvokeInstallOperation.loadCustomOperationClass(InvokeInstallOperation.java:175)
com.ibm.cic.agent.core.commonNativeInstallAdapter.InvokeInstallOperation.invoke(InvokeInstallOperation.java:103)
com.ibm.cic.agent.core.commonNativeInstallAdapter.InvokeInstallOperation.perform(InvokeInstallOperation.java:61)
com.ibm.cic.agent.core.AbstractInstallOperation.perform(AbstractInstallOperation.java:85)
com.ibm.cic.agent.core.InstallTransaction.performOperation(InstallTransaction.java:84)
com.ibm.cic.agent.core.InstallContext.performOperation(InstallContext.java:594)



After some R&D, I figure out four jars were missing in path C:\Program Files (x86)\IBM\Installation Manager\eclipse\lib 
Jars names are -
com.ibm.cic.agent.gdiPlus.jar
com.ibm.cic.agent.nativeAdminFixup.jar
com.ibm.cic.agent.win32.registerAgent.jar
com.ibm.cic.agent.win32.registerUninstall.jar

By placing this above jars on mentioned path, I was able to update Installation Manager.

Wednesday, February 26, 2014

"AppSrv01 is already in use. Specify another name" while profile has been deleted on Windows 7



I have deleted the profile through profile management tool and also manually going to the folder C:\Program Files (x86)\IBM\SDP\runtimes\base_v7\profiles but when I was trying to create a new profile it was giving me message "AppSrv01 is already in use. Specify another name" on Windows 7



I also tried to run the manageprofile command  
C:\Program Files (x86)\IBM\SDP\runtimes\base_v7\bin>manageprofiles.bat -delete -profileName profile_name
It through me error message:
INSTCONFFAILED: Cannot delete the profile. For more information, consult C:\Prog
ram Files (x86)\IBM\SDP\runtimes\base_v7\logs\manageprofiles\AppSrv01_delete.log

After going through with IBM website I came to know below steps and it worked perfectly fine

Before you delete a profile, stop its application server to ensure that the application server can be deleted.
You cannot delete a profile using the Profile Management Tool.


About this task

The following example attempts to delete a profile using the manageprofiles command, and then using operating system commands.

Procedure

  1. Issue the manageprofiles command to delete a profile.Substitute your profile name for the profile_name value in the following commands.
    ./manageprofiles.sh -delete 
                    -profileName profile_name
    
    manageprofiles.bat -delete 
                   -profileName profile_name
    If the command is successful, you have completed the task and can skip the remaining steps. If the command is partially successful or unsuccessful, proceed to the next step to delete the profile manually. If you receive the INSTCONFFAILED: Cannot delete profile. message, the command was unsuccessful. If the deletion is partially successful, you could receive message information similar to the following wording:
    INSTCONFPARTIALSUCCESS: The profiles no longer exist, but errors occurred. 
    For more information, consult 
    app_server_root/logs/manageprofiles/deleteAll.log.
    or
    The current user does not have sufficient permissions to detect or 
    remove services. If a service does exist, then an administrative or root user has 
    to remove it. If a service does not exist, then no further action is 
    required.
  2. Issue operating system commands to delete the profile directory.
  3. Issue the following command to remove references in the registry to deleted profiles:
    ./manageprofiles.sh -validateAndUpdateRegistry 
    
    manageprofiles.bat -validateAndUpdateRegistry
    Editing of the registry is not recommended.

Results

You have now deleted a profile.