Searching in Hashtable

Hi,
I have a problem to search in a Hashtable.
Someone can help me?
Thanks

Probably; many Hashtable problems have been solved in this forum already. If there's not a solution to your problem in an old thread already, I believe you should go ahead and describe it as well and fully as you can, and also what you did to solve it already, so nobody needs to post a suggestion you already tried.
Message was edited by: OleVV
OleVV

Similar Messages

  • Computational search in hashtable

    Hi experts,
    I have the following situation. I have 25 apples and want to give away these apples to a list of people who need them stored in hashtable. Each of these people has indicated the quantity which they need. How to do give away exactly 25 apples to those who need them?
    Hashtable<String,Object> h = new Hashtable<String,Object>();
    h.put("andy", new Integer(1));
    h.put("angie", new Integer(2));
    h.put("eddie", new Integer(3));
    h.put("tammy", new Integer(4));
    h.put("edwin", new Integer(5));
    h.put("dolly", new Integer(6));
    h.put("sally", new Integer(7));
    h.put("silly", new Integer(8));
    h.put("zorro", new Integer(9));
    h.put("sam", new Integer(10));
    In other words, any hints how to search the hashtable in a way that the input is 25 and the output is a list of elements which its total values match 25 or closest to 25?
    Thank you in advance.

    Are you assuming that you have to fill an entire request (i.e., Eddie must get 3 apples or none at all)? Is there a reason you're using a hashtable for this?
    It sounds like you're trying to solve a one-dimensional packing problem: given a set of numbers N_1, N_2, ... N_n, you want a subset of those numbers can be summed to total a given value V. Is this true?

  • Reading Values from a Hashtable.Please guideu

    Chaps,
    I am in a strange situation
    I am having a hashtable with the flwg values
    Entertainment Games
    Entertainment Video
    PIM Calculator
    Entertainment Jump
    Settings Set
    Entertainment Poker
    Now,I need to search this hashtable for the
    Object 'Entertainment' and whatever is the
    value of this,is put in an Array
    for this I am using:
    String s[];
    Enumeration e;
    for(int i=0; i<ht.size(); i++){
    String s = (String)ht.get("Entertainment");
    // I am stuck after this? Can some one please help?       
             

    Object value = ht.get("Entertainment");
    But if you are doing this (I can't tell if this is what you're doing from your first post, though):
    ht.put("Entertainment", onething);
    ht.put("Entertainment", anotherthing);
    ht.put("Entertainment", athirdthing);
    Then there will only be athirdthing in the table, cuz it'll overwrite the previous values.

  • Correct binding and searching -- please look

    Given the following DIT:
    edge.com (Domain)
    |-- Subgroup 1(type Organizational Unit)
    |-- MMC_Users (type Organizational Unit)
    |-- Advisors (type Organizational Unit)
    |-- Person One (type User)
    |-- Person Two (type User)
    |-- Q (type Organizational Unit)
    |-- Person Three (type User)
    |-- Person Four (type User)
    |-- Person Five (type User)
    |-- TNBT (type Organizational Unit)
    |-- Person Six (type User)
    |-- MSU (type Organizational Unit)
    |-- Person Seven (type User)
    How would I bind to find all the user names of people listed in a subgroups of MMC_Users? In other words, what user exist in the Advisors, Q, TNBT, and MSU groups.
    I am using the following search code:
    Hashtable oEnv =new HAshtable();
    oEnv.put(javax.naming.Context.PROVIDER_URL, "ldap://bos-gc01:389/dn=edge,dn=com");
    oEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    oEnv.put(Context.SECURITY_PRINCIPAL, "user");
    oEnv.put(Context.SECURITY_CREDENTIALS, "pasword");
    DirContext oCTX = new InitialDirContext(oEnv);
    SearchControls constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
    System.out.println("asking for search results....");
    results = oCTX.search("ou=Q,ou=MMC_Users","(uid=*)", constraints);
    System.out.println("@@@ DOES IT GET HERE?");
    while ((results != null) && results.hasMore())
    System.out.println("never get here");
    Any help would be greatly appreciated.

    ARGH! correct spacing wasn't showing is showing on this before....
    edge.com (Domain)
       |-- Subgroup 1(type Organizational Unit)
       |-- MMC_Users (type Organizational Unit)
          |-- Advisors (type Organizational Unit)
            |-- Person One (type User)
            |-- Person Two (type User)
          |-- Q (type Organizational Unit)
            |-- Person Three (type User)
            |-- Person Four (type User)
            |-- Person Five (type User)
          |-- TNBT (type Organizational Unit)
            |-- Person Six (type User)
          |-- MSU (type Organizational Unit)
            |-- Person Seven (type User)

  • Removing rows and inserting new rows with new data in JTAble!!! (Plz. help)

    I have a problem, The scenario is that when I click any folder that si in my JTable's first row, the table is update by removing all the rows and showing only the contents of my selected folder. Right now it's not removing the rows and instead throwing exceptions. The code is attached. The methods to look are upDateTabel(...) and clearTableData(....), after clearing all my rows then I proceed on adding my data to the Jtable and inserting rows but it's not being done. May be I have a problem in my DefaultTableModel class. Please see the code below what I am doing wrong and how should I do it. Any help is appreciated.
    Thanks
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.table.*;
    import javax.swing.border.*;
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    public class SimpleTable extends JPanel{
         /** Formats the date */
         protected SimpleDateFormat           formatter;
    /** variable to hold the date and time in a raw form for the directory*/
    protected long                          dateDirectory;
    /** holds the readable form converted date for the directories*/
    protected String                     dirDate;
    /** holds the readable form converted date for the files*/
    protected String                     fileDate;
    /** variable to hold the date and time in a raw form for the file*/
    protected long                          dateFile;
    /** holds the length of the file in bytes */
    protected long                         totalLen;
    /** convert the length to the wrapper class */
    protected Long                         longe;
    /** Vector to hold the sub directories */
    protected Vector                     subDir;
    /** holds the name of the selected directory */
    protected String                    dirNameHold;
    /** converting vector to an Array and store the values in this */
    protected File                     directoryArray[];
    /** hashtable to store the key-value pair */
    protected static Hashtable hashTable = new Hashtable();
    /** refer to the TableModel that is the default*/
    protected MyTableModel               tableModel;
    /** stores the path of the selected file */
    protected static String               fullPath;
    /** stores the currently selected file */
    protected static File selectedFilename;
    /** stores the extension of the selected file */
    protected static String           extension;
    protected int COLUMN_COUNT = 4;
         protected Vector data = new Vector( 0, 1 );
         protected final JTable table;
    /** holds the names of the columns */
    protected final String columnNames[] = {"Name", "Size", "Type", "Modified"};
    public SimpleTable(File directoryArray[])
              this.setLayout(new BorderLayout());
              this.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              (SimpleTable.hashTable).clear();
              formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
              for(int k = 0; k < directoryArray.length; k++)
                   if(directoryArray[k].isDirectory())
                        dateDirectory = directoryArray[k].lastModified();
                        dirDate = formatter.format(new java.util.Date(dateDirectory));
                        data.addElement( new MyObj( directoryArray[k].getName(), "", "File Folder", "" + dirDate ) );
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    
                   else if(directoryArray[k].isFile())
                        dateDirectory = directoryArray[k].lastModified();
                        fileDate = formatter.format(new java.util.Date(dateDirectory));
                        totalLen = directoryArray[k].length();
                        longe = new Long(totalLen);
                        data.addElement( new MyObj( directoryArray[k].getName(), longe + " Bytes", "", "" + fileDate ) );
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
    tableModel = new MyTableModel();
              table = new JTable( tableModel );
              table.getTableHeader().setReorderingAllowed(false);
              table.setRowSelectionAllowed(false);
              table.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              table.setShowHorizontalLines(false);
              table.setShowVerticalLines(false);
              table.addMouseListener(new MouseAdapter()
    public void mouseReleased(MouseEvent e)
         Object eventTarget = e.getSource();
                        if( eventTarget == table )
                             upDateTable(table);
                             table.tableChanged( new javax.swing.event.TableModelEvent(tableModel) ) ;
              DefaultTableCellRenderer D_headerRenderer = (DefaultTableCellRenderer ) table.getTableHeader().getDefaultRenderer();
              table.getColumnModel().getColumn(0).setHeaderRenderer(D_headerRenderer );
              ((DefaultTableCellRenderer)D_headerRenderer).setToolTipText("File and Folder in the Current Folder");
    //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);
    //Add the scroll pane to this window.
    this.add(scrollPane, BorderLayout.CENTER);
    * Searches the Hashtable and returns the path of the folder or the value.
    public File findPath(String value)
         return (File)((SimpleTable.hashTable).get(value));
    * This clears the previous data in the JTable
    public void clearTableData(JTable table)
         for(int row = 0; row < table.getRowCount() ; row++)
                   //for (int col = 0; col < table.getColumnCount() ; col++)
                        tableModel.deleteSelections( row );
              tableModel.fireTableStructureChanged();
              tableModel.fireTableRowsDeleted(0,table.getRowCount());
              //table.getModel().fireTableChanged(new TableModelEvent(table.getModel()));
    private void upDateTable(JTable table)
    if((table.getSelectedColumn() == 0) && ((table.getColumnName(0)).equals(columnNames[0])))
         dirNameHold =(String) table.getValueAt(table.getSelectedRow(),table.getSelectedColumn());
                   File argument = findPath(dirNameHold);
                   if(argument.isFile())
                        CMRDialog.fileNameTextField.setText(argument.getName());
                        try
                             fullPath = argument.getCanonicalPath();                          
                             selectedFilename = argument.getCanonicalFile();                          
    CMRDialog.filtersComboBox.removeAllItems();
                             extension = fullPath.substring(fullPath.lastIndexOf('.'));
                             CMRDialog.filtersComboBox.addItem("( " + extension + " )" + " File");
                        catch(IOException e)
                             System.out.println("THE ERROR IS " + e);
                        return;
                   else if(argument.isDirectory())
                        String path = argument.getName();
                             //find the system dependent file separator
                             //String fileSeparator = System.getProperty("file.separator");
                        CMRDialog.driveComboBox.addItem(" " + path);
              subDir = Search.subDirs(argument);
              /**TBD:- needs a method to convert the vector to an array and return the array */
              directoryArray = new File[subDir.size()];
                   int indexCount = 0;
                   /** TBD:- This is inefficient way of converting a vector to an array */               
                   Iterator e = subDir.iterator();               
                   while( e.hasNext() )
                        directoryArray[indexCount] = (File)e.next();
                        indexCount++;
              /** now calls this method and clears the previous data */
              clearTableData(table);     
                   (SimpleTable.hashTable).clear();
                   //data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
                   formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
                   for(int k = 0; k < directoryArray.length; k++)
                        if(directoryArray[k].isDirectory())
                             dateDirectory = directoryArray[k].lastModified();
                             dirDate = formatter.format(new java.util.Date(dateDirectory));
                             data.addElement( new MyObj( directoryArray[k].getName(), "", "File Folder", "" + dirDate ) );
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    
                        else if(directoryArray[k].isFile())
                             dateDirectory = directoryArray[k].lastModified();
                             fileDate = formatter.format(new java.util.Date(dateDirectory));
                             totalLen = directoryArray[k].length();
                             longe = new Long(totalLen);
                             data.addElement( new MyObj( directoryArray[k].getName(), longe + " Bytes", "", "" + fileDate ) );
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
              // tableModel.fireTableDataChanged();          
              // tableModel.fireTableRowsInserted(0,1);
              table.revalidate();
              table.validate();               
    class MyTableModel extends DefaultTableModel
              int totalRows;
              int totalCols;
              public MyTableModel()
                   super();
                   setColumnIdentifiers (columnNames);
                   this.totalRows = data.size();
                   this.totalCols = columnNames.length;
              // this will return the row count of your table
              public int getRowCount()
                   return totalRows;
              // this return the column count of your table
              public int getColumnCount()
                   return totalCols;
              // this return the data for each cell in your table
              public Object getValueAt(int row, int col)
                   MyObj obj = (MyObj)data.elementAt( row );
                   if( obj != null )
                        if( col == 0 ) return( obj.first );
                        else if( col == 1 ) return( obj.last );
                        else if( col == 2 ) return( obj.third );
                        else if( col == 3 ) return( obj.fourth );
                        else return( "" );
                   return "";
              // if you want your table to be editable then return true
              public boolean isCellEditable(int row, int col)
                   return false;
              // if your table is editable edit the data vector here and
              // call table.tableChanged(...)
              public void setValueAt(Object value, int row, int col)
              protected void deleteSelections (int rows)
                   try
                        removeRow(rows);
                   catch(ArrayIndexOutOfBoundsException e)
                        System.out.println("The error in the row index " + rows);
                   fireTableDataChanged() ;
    class MyObj
              String first;
              String last;
              String third;
              String fourth;
              public MyObj( String f, String l, String t, String fo )
                   this.first = f;
                   this.last = l;
                   this.third = t;
                   this.fourth = fo;
    #####################################

    The following code works fine but it doesn't show me the new updated date in my JTable. I tried to print the values that I am getting and it does give the values on the prompt but doesn't show me on the JTable only first two are shown and the rest of the table is filled with the same values. I don't know what's going on and am tired of this TableModel thing so pla. take a time to give me some suggestions. Thanks
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.table.*;
    import javax.swing.border.*;
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    public class SimpleTable extends JPanel {
         /** Formats the date */
         protected SimpleDateFormat           formatter;
    /** two-dimensional array to hold the information for each column */
    protected Object                     data[][];
    /** variable to hold the date and time in a raw form for the directory*/
    protected long                          dateDirectory;
    /** holds the readable form converted date for the directories*/
    protected String                     dirDate;
    /** holds the readable form converted date for the files*/
    protected String                     fileDate;
    /** variable to hold the date and time in a raw form for the file*/
    protected long                          dateFile;
    /** holds the length of the file in bytes */
    protected long                         totalLen;
    /** convert the length to the wrapper class */
    protected Long                         longe;
    /** Vector to hold the sub directories */
    protected Vector                     subDir;
    /** holds the name of the selected directory */
    protected String                    dirNameHold;
    /** converting vector to an Array and store the values in this */
    protected File                     directoryArray[];
    /** hashtable to store the key-value pair */
    protected static Hashtable hashTable = new Hashtable();
    /** refer to the TableModel that is the default*/
    protected DefaultTableModel      model;
    /** stores the path of the selected file */
    protected static String               fullPath;
    /** stores the currently selected file */
    protected static File selectedFilename;
    /** stores the extension of the selected file */
    protected static String           extension;
    protected Vector                     m = new Vector(0,1);
    /** holds the names of the columns */
    protected final String columnNames[] = {"Name", "Size", "Type", "Modified"};
    public SimpleTable(File directoryArray[])
              this.setLayout(new BorderLayout());
              this.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              (SimpleTable.hashTable).clear();
              data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
              formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
              for(int k = 0; k < directoryArray.length; k++)
                   if(directoryArray[k].isDirectory())
                        data[k][0] = directoryArray[k].getName();
                        data[k][2] = "File Folder";
                        dateDirectory = directoryArray[k].lastModified();
                        dirDate = formatter.format(new java.util.Date(dateDirectory));
                        data[k][3] = dirDate;
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    
                   else if(directoryArray[k].isFile())
                        data[k][0] = directoryArray[k].getName();
                        totalLen = directoryArray[k].length();
                        longe = new Long(totalLen);
                        data[k][1] = longe + " Bytes";
                        dateFile = directoryArray[k].lastModified();
                        fileDate = formatter.format(new java.util.Date(dateFile));
                        data[k][3] = fileDate;
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
    model = new DefaultTableModel();
    model.addTableModelListener( new TableModelListener(){
              public void tableChanged( javax.swing.event.TableModelEvent e )
                   System.out.println("************ I am inside the table changed method ********" );
              final JTable table = new JTable(model);
              table.getTableHeader().setReorderingAllowed(false);
              table.setRowSelectionAllowed(false);
              table.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              table.setShowHorizontalLines(false);
              table.setShowVerticalLines(false);
              table.addMouseListener(new MouseAdapter()
    /* public void mousePressed(MouseEvent e)
    //System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
    /* if(e.getClickCount() >= 2 &&
    (table.getSelectedColumn() == 0) &&
    ((table.getColumnName(0)).equals(columnNames[0])))
         //System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
         upDateTable(table);
    public void mouseReleased(MouseEvent e)
    //System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
    /* if(e.getClickCount() >= 2 &&
    (table.getSelectedColumn() == 0) &&
    ((table.getColumnName(0)).equals(columnNames[0]))) */
         //System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
         upDateTable(table);
              /** set the columns */
              for(int c = 0; c < columnNames.length; c++)
                   model.addColumn(columnNames[c]);
              /** set the rows */
              for(int r = 0; r < data.length; r++)
                   model.addRow(data[r]);
              DefaultTableCellRenderer D_headerRenderer = (DefaultTableCellRenderer ) table.getTableHeader().getDefaultRenderer();
              table.getColumnModel().getColumn(0).setHeaderRenderer(D_headerRenderer );
              ((DefaultTableCellRenderer)D_headerRenderer).setToolTipText("File and Folder in the Current Folder");
    //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);
    //Add the scroll pane to this window.
    this.add(scrollPane, BorderLayout.CENTER);
    * Returns the number of columns
    public int getColumnTotal()
         return columnNames.length;
    * Returns the number of rows
    public int getRowTotal(Object directoryArray[])
         return directoryArray.length;
    private void upDateTable(JTable table)
    if((table.getSelectedColumn() == 0) && ((table.getColumnName(0)).equals(columnNames[0])))
         dirNameHold =(String) table.getValueAt(table.getSelectedRow(),table.getSelectedColumn());
                   File argument = findPath(dirNameHold);
                   if(argument.isFile())
                        CMRDialog.fileNameTextField.setText(argument.getName());
                        try
                             fullPath = argument.getCanonicalPath();                          
                             selectedFilename = argument.getCanonicalFile();                          
    CMRDialog.filtersComboBox.removeAllItems();
                             extension = fullPath.substring(fullPath.lastIndexOf('.'));
                             CMRDialog.filtersComboBox.addItem("( " + extension + " )" + " File");
                        catch(IOException e)
                             System.out.println("THE ERROR IS " + e);
                        return;
                   else if(argument.isDirectory())
                        String path = argument.getName();
                             //find the system dependent file separator
                             //String fileSeparator = System.getProperty("file.separator");
                        CMRDialog.driveComboBox.addItem(" " + path);
              subDir = Search.subDirs(argument);
              /**TBD:- needs a method to convert the vector to an array and return the array */
              directoryArray = new File[subDir.size()];
                   int indexCount = 0;
                   /** TBD:- This is inefficient way of converting a vector to an array */               
                   Iterator e = subDir.iterator();               
                   while( e.hasNext() )
                        directoryArray[indexCount] = (File)e.next();
                        indexCount++;
              /** now calls this method and clears the previous data */
              clearTableData(table);     
                   (SimpleTable.hashTable).clear();
                   data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
                   formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
                   m.clear();
                   data = null;
                   data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
                   for(int k = 0; k < directoryArray.length; k++)
                        if(directoryArray[k].isDirectory())
                        System.out.println("Inside the if part");
                             data[k][0] = directoryArray[k].getName();
                             table.setValueAt(directoryArray[k].getName(),k,0);
                             //model.fireTableCellUpdated(k,0);
                             data[k][2] = "File Folder";
                             table.setValueAt("File Folder",k,2);
                             //model.fireTableCellUpdated(k,2);
                             dateDirectory = directoryArray[k].lastModified();
                             dirDate = formatter.format(new java.util.Date(dateDirectory));
                             data[k][3] = dirDate;
                             table.setValueAt(dirDate,k,3);
                             //model.fireTableCellUpdated(k,3);
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
                             m.add(data);
                             model.addRow(m);
                             model.fireTableDataChanged();                              
                        else if(directoryArray[k].isFile())
                   System.out.println("******* Inside the else part *******");
                             data[k][0] = directoryArray[k].getName();
                   System.out.println("The Name is == " + data[k][0]);
                             table.setValueAt(directoryArray[k].getName(),k,0);
                   System.out.println("The table cell value of the name is == " + table.getValueAt(k,0));
                             //model.fireTableCellUpdated(k,0);
                             totalLen = directoryArray[k].length();
                             longe = new Long(totalLen);
                             data[k][1] = longe + " Bytes";
                   System.out.println("The length == " + data[k][1]);
                             table.setValueAt(longe + " Bytes",k,1);
                   System.out.println("The table cell value of the length is == " + table.getValueAt(k,1));
                             //model.fireTableCellUpdated(k,0);
                             dateFile = directoryArray[k].lastModified();
                             fileDate = formatter.format(new java.util.Date(dateFile));
                             data[k][3] = fileDate;
                   System.out.println("The modified date == " + data[k][3]);
                             table.setValueAt(fileDate,k,3);
                   System.out.println("The table cell value of the name is == " + table.getValueAt(k,3));
                             //model.fireTableCellUpdated(k,0);
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    }
                             m.add(data);
                             model.addRow(m);
                             model.fireTableDataChanged();     
              // model.fireTableDataChanged();          
              // model.fireTableRowsInserted(0,1);
              table.revalidate();
              table.validate();               
         else
    * Searches the Hashtable and returns the path of the folder or the value.
    public File findPath(String value)
         return (File)((SimpleTable.hashTable).get(value));
    * This clears the previous data in the JTable
    public void clearTableData(JTable table)
         for(int row = 0; row < table.getRowCount() ; row++)
                   for (int col = 0; col < table.getColumnCount() ; col++)
                        table.setValueAt(null, row , col);
              model.fireTableStructureChanged();
    ###

  • Directory being added two times in JTable rows.(JTable Incorrect add. Rows)

    hi,
    I have a problem, The scenario is that when I click any folder that is in my JTable's row, the table is update by removing all the rows and showing only the contents of my selected folder. If my selected folder contains sub-folders it is some how showing that sub-folder two time and if there are files too that are shown correctly. e.g. If I have a parent folder FG1 and inside that folder I have one more folder FG12 and two .java files then when I click on FG1 my table should show FG12 and two .java files in separate rows, right now it is showing me the contents of FG1 folder but some how FG12 is shown on two rows i.e. first row shows FG12 second row shows FG12 third row shows my .java file and fourth row shows my .java fil. FG12 should be shown only one time. The code is attached. The methods to look are upDateTabel(...) and clearTableData(....), after clearing all my rows then I proceed on adding my data to the Jtable and inserting rows. May be addRow(... method of DefaultTableModel is called two times if it is a directory I don't know why. Please see the code below what I am doing wrong and how to fix it. Any help is appreciated.
    Thanks
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.table.*;
    import javax.swing.border.*;
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    public class SimpleTable extends JPanel {
         /** Formats the date */
         protected SimpleDateFormat           formatter;
    /** two-dimensional array to hold the information for each column */
    protected Object                     data[][];
    /** variable to hold the date and time in a raw form for the directory*/
    protected long                          dateDirectory;
    /** holds the readable form converted date for the directories*/
    protected String                     dirDate;
    /** holds the readable form converted date for the files*/
    protected String                     fileDate;
    /** variable to hold the date and time in a raw form for the file*/
    protected long                          dateFile;
    /** holds the length of the file in bytes */
    protected long                         totalLen;
    /** convert the length to the wrapper class */
    protected Long                         longe;
    /** Vector to hold the sub directories */
    protected Vector                     subDir;
    /** holds the name of the selected directory */
    protected String                    dirNameHold;
    /** converting vector to an Array and store the values in this */
    protected File                     directoryArray[];
    /** hashtable to store the key-value pair */
    protected static Hashtable hashTable = new Hashtable();
    /** refer to the TableModel that is the default*/
    protected DefaultTableModel      model;
    /** stores the path of the selected file */
    protected static String               fullPath;
    /** stores the currently selected file */
    protected static File selectedFilename;
    /** stores the extension of the selected file */
    protected static String           extension;
    /** holds the names of the columns */
    protected final String columnNames[] = {"Name", "Size", "Type", "Modified"};
         * Default constructor
         * @param File the list of files and directories to be shown in the JTable.
    public SimpleTable(File directoryArray[])
              this.setLayout(new BorderLayout());
              this.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              (SimpleTable.hashTable).clear();
              data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
              formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
              //this shows the data in the JTable i.e. the primary directory stuff.
              for(int k = 0; k < directoryArray.length; k++)
                   if(directoryArray[k].isDirectory())
                        data[k][0] = directoryArray[k].getName();
                        data[k][2] = "File Folder";
                        dateDirectory = directoryArray[k].lastModified();
                        dirDate = formatter.format(new java.util.Date(dateDirectory));
                        data[k][3] = dirDate;
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    
                   else if(directoryArray[k].isFile())
                        data[k][0] = directoryArray[k].getName();
                        totalLen = directoryArray[k].length();
                        longe = new Long(totalLen);
                        data[k][1] = longe + " Bytes";
                        dateFile = directoryArray[k].lastModified();
                        fileDate = formatter.format(new java.util.Date(dateFile));
                        data[k][3] = fileDate;
                        (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
    model = new DefaultTableModel();
    model.addTableModelListener( new TableModelListener(){
              public void tableChanged( javax.swing.event.TableModelEvent e )
              final JTable table = new JTable(model);
              table.getTableHeader().setReorderingAllowed(false);
              table.setRowSelectionAllowed(false);
              table.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
              table.setShowHorizontalLines(false);
              table.setShowVerticalLines(false);
              table.addMouseListener(new MouseAdapter()
    public void mouseReleased(MouseEvent e)
    //TBD:- needs to handle the doubleClick of the mouse.
    System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
    if(e.getClickCount() >= 2 &&
    (table.getSelectedColumn() == 0) &&
    ((table.getColumnName(0)).equals(columnNames[0])))
         System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
         upDateTable(table);
    upDateTable(table);
              /** set the columns */
              for(int c = 0; c < columnNames.length; c++)
                   model.addColumn(columnNames[c]);
              /** set the rows */
              for(int r = 0; r < data.length; r++)
                   model.addRow(data[r]);
              //this sets the tool-tip on the headers.
              DefaultTableCellRenderer D_headerRenderer = (DefaultTableCellRenderer ) table.getTableHeader().getDefaultRenderer();
              table.getColumnModel().getColumn(0).setHeaderRenderer(D_headerRenderer );
              ((DefaultTableCellRenderer)D_headerRenderer).setToolTipText("File and Folder in the Current Folder");
    //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);
    //Add the scroll pane to this window.
    this.add(scrollPane, BorderLayout.CENTER);
    * Returns the number of columns
    * @return int number of columns
    public int getColumnTotal()
         return columnNames.length;
    * Returns the number of rows
    * @return int number of rows
    public int getRowTotal(Object directoryArray[])
         return directoryArray.length;
    * Update the table according to the selection made if a directory then searches and
    * shows the contents of the directory, if a file fills the appropriate fields.
    * @param JTable table we are working on
    * //TBD: handling of the files.
    private void upDateTable(JTable table)
    if((table.getSelectedColumn() == 0) && ((table.getColumnName(0)).equals(columnNames[0])))
         dirNameHold =(String) table.getValueAt(table.getSelectedRow(),table.getSelectedColumn());
                   File argument = findPath(dirNameHold);
                   if(argument.isFile())
                        CMRDialog.fileNameTextField.setText(argument.getName());
                        try
                             fullPath = argument.getCanonicalPath();                          
                             selectedFilename = argument.getCanonicalFile();                          
    CMRDialog.filtersComboBox.removeAllItems();
                             extension = fullPath.substring(fullPath.lastIndexOf('.'));
                             CMRDialog.filtersComboBox.addItem("( " + extension + " )" + " File");
                        catch(IOException e)
                             System.out.println("THE ERROR IS " + e);
                        return;
                   else if(argument.isDirectory())
                        String path = argument.getName();
                             //find the system dependent file separator
                             //String fileSeparator = System.getProperty("file.separator");
                        CMRDialog.driveComboBox.addItem(" " + path);
              subDir = Search.subDirs(argument);
              /**TBD:- needs a method to convert the vector to an array and return the array */
              directoryArray = new File[subDir.size()];
                   int indexCount = 0;
                   /** TBD:- This is inefficient way of converting a vector to an array */               
                   Iterator e = subDir.iterator();               
                   while( e.hasNext() )
                        directoryArray[indexCount] = (File)e.next();
                        indexCount++;
              /** now calls this method and clears the previous data */
              clearTableData(table);     
                   (SimpleTable.hashTable).clear();
                   data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
                   formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
                   data = null;
                   data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
                   for(int k = 0; k < directoryArray.length; k++)
                        if(directoryArray[k].isDirectory())
                             data[k][0] = directoryArray[k].getName();
                             data[k][2] = "File Folder";
                             dateDirectory = directoryArray[k].lastModified();
                             dirDate = formatter.format(new java.util.Date(dateDirectory));
                             data[k][3] = dirDate;
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
                             model.addRow(data[k]);
                             model.fireTableDataChanged();
                        else if(directoryArray[k].isFile())
                             data[k][0] = directoryArray[k].getName();
                             totalLen = directoryArray[k].length();
                             longe = new Long(totalLen);
                             data[k][1] = longe + " Bytes";
                             dateFile = directoryArray[k].lastModified();
                             fileDate = formatter.format(new java.util.Date(dateFile));
                             data[k][3] = fileDate;
                             (SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);                    }
                             model.addRow(data[k]);
                             model.fireTableDataChanged();
              table.revalidate();
              table.validate();               
    * Searches the Hashtable and returns the path of the folder or the value.
    * @param String name of the directory or file.
    * @return File     full-path of the selected file or directory.
    public File findPath(String value)
         return (File)((SimpleTable.hashTable).get(value));
    * This clears the previous data in the JTable and removes the rows.
    * @param     JTable table we are updating.
    public void clearTableData(JTable table)
         for(int row = table.getRowCount() - 1; row >= 0; --row)
                   model.removeRow(row);
              model.fireTableStructureChanged();

    java gurus any idea how ti fix this problem.
    thanks

  • Dynamicaly USER ID GENERATOR

    Hi
    Could any one please tell me how to make Dynamically User ID generator in OIM.
    First it should validate in AD if user ID exists then it should increment by 1 or 2 or 3 (counter should start) & give the User ID.
    Thanks in advance!

    You have to build an Entity Adapter, and attach it to the USR Data Object on pre-insert. In this adapter you will take, in example, first name and last name, and return a valid login for OIM. You have to write the logic that generates user logins, and execute a query to AD to check if the user already exists until you find one that is valid and free.
    I see some problems that you will have to face if you do this:
    · You'll have to send a notification email to the user so he can know his own user ID, which could be a problem if you don't already have his email account populated during user creation.
    · Users created manually using the "create user" form will also generate a random ID, unless you develop your adapter not to do so (check if the User Login is null before generating it). The problem is that the user ID is mandatory in this form, so you cant leave it empty.
    · You'll have to validate the data in the "First Name" and "Last Name", checking that there are no special characters in them.
    Code:
    I'm sure that you can do this through OIM APIS, hope somebody posts such solution in future. I did this once, but without using OIM API. Search google for the javax.naming API, you will find for sure code to do this. Here is an example for a simple AD search.
    Hashtable env = new Hashtable();
    String ldapURL = "ldap://" + sHost;
    env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, sAdminName);
    env.put(Context.SECURITY_CREDENTIALS, sAdminPassword);
    env.put(Context.PROVIDER_URL, ldapURL);
    DirContext ctx = new InitialLdapContext(env, null);          
    SearchControls searchCtls = new SearchControls();
    // Specify the attributes to return
    String returnedAtts[] = { "sAMAccountName" };
    searchCtls.setReturningAttributes(returnedAtts);          
    // Specify the search scope
    searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    String sLogin= sFirstName+separador+sLastName;                    
    String searchFilter = "(&(objectClass=user)(sAMAccountName=" + sLogin +"))";
    String searchBase = sSearchBase;
    NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
    if (!answer.hasMoreElements()) {
    //the login does not exist...
    }

  • "Error:The search cannot be executed because the table has pending changes that would be lost", after DELETE

    Good day,
    On Search Page, I have searched for the record(s) then deleted a record and got confirmation message i.e. Record has deleted. Next when I search for any record I'm getting below error.
    Error
    The search cannot be executed because the table has pending changes that would be lost.
    Could you please help me to fix this issue. Your response is highly appreciated.
    Item properties:
    Item Style : Image
    Action Type: Fire Action
    Event : delete
    Below is the code using in CO and AM
    Controller (processFormRequest):
    if ("delete".equals(pageContext.getParameter(EVENT_PARAM)))
              // The user has clicked a "Delete" icon so we want to display a "Warning"
              // dialog asking if she really wants to delete the employee. Note that we
              // configure the dialog so that pressing the "Yes" button submits to
              // this page so we can handle the action in this processFormRequest( ) method.
              String visit_id = pageContext.getParameter("visit_id");
              String employeeName = pageContext.getParameter("last_name") + ", " + pageContext.getParameter("first_name");
              MessageToken[] tokens = { new MessageToken("EMP_NAME", employeeName)};
              OAException mainMessage = new OAException("FND", "XXXX_EMP_DELETE_WARN", tokens);
              // Note that even though we're going to make our Yes/No buttons submit a
              // form, we still need some non-null value in the constructor's Yes/No
              // URL parameters for the buttons to render, so we just pass empty
              // Strings for this.
              OADialogPage dialogPage = new OADialogPage(OAException.WARNING,
                mainMessage, null, "", "");
              // Always use Message Dictionary for any Strings you want to display.
              String yes = pageContext.getMessage("AK", "FWK_TBX_T_YES", null);
              String no = pageContext.getMessage("AK", "FWK_TBX_T_NO", null);
              // We set this value so the code that handles this button press is
              // descriptive.
    dialogPage.setOkButtonItemName("DeleteYesButton");
              // The following configures the Yes/No buttons to be submit buttons,
              // and makes sure that we handle the form submit in the originating
              // page (the "Employee" summary) so we can handle the "Yes"
              // button selection in this controller.
    dialogPage.setOkButtonToPost(true);
    dialogPage.setNoButtonToPost(true);
    dialogPage.setPostToCallingPage(true);
              // Now set our Yes/No labels instead of the default OK/Cancel.
    dialogPage.setOkButtonLabel(yes);
    dialogPage.setNoButtonLabel(no);
              // We need to keep hold of the employeeNumber and employeeName.
              // The OADialogPage gives us a convenient means
              // of doing this. Note that the use of the Hashtable is 
              // most appropriate for passing multiple parameters. See the OADialogPage
              // javadoc for an alternative when dealing with a single parameter.
              java.util.Hashtable formParams = new java.util.Hashtable(1);
    formParams.put("visit_id", visit_id);
    formParams.put("empName", employeeName);
    dialogPage.setFormParameters(formParams);
              pageContext.redirectToDialogPage(dialogPage);
        else if (pageContext.getParameter("DeleteYesButton") != null)
              // User has confirmed that she wants to delete this employee.
              // Invoke a method on the AM to set the current row in the VO and
              // call remove() on this row.
              String employeeNumber = pageContext.getParameter("visit_id");
              String employeeName = pageContext.getParameter("empName");
              Serializable[] parameters = { employeeNumber };
             // OAApplicationModule am = pageContext.getApplicationModule(webBean);
    am.invokeMethod("deleteEmployee", parameters);
              // Now, redisplay the page with a confirmation message at the top. Note
              // that the deleteEmployee() method in the AM commits, and our code
              // won't get this far if any exceptions are thrown.
              MessageToken[] tokens = { new MessageToken("EMP_NAME", employeeName) };
              OAException message = new OAException("FND",
                "XXXX_EMP_DELETE_CONFIRM", tokens, OAException.CONFIRMATION, null);
    pageContext.putDialogMessage(message);
    Application Module:
      public void deleteEmployee(String visit_id)
            // First, we need to find the selected employee in our VO.
            // When we find it, we call remove( ) on the row which in turn
            // calls remove on the associated EmployeeEOImpl object.
            int empToDelete = Integer.parseInt(visit_id);
              OAViewObject vo = (OAViewObject)getNonEmployeesSummaryVO1();
        NonEmployeesSummaryVORowImpl row = null;
            // This tells us the number of rows that have been fetched in the
            // row set, and will not pull additional rows in like some of the
            // other "get count" methods.
           int fetchedRowCount = vo.getFetchedRowCount();
            // We use a separate iterator -- even though we could step through the
            // rows without it -- because we don't want to affect row currency.
            RowSetIterator deleteIter = vo.createRowSetIterator("deleteIter");
    if (fetchedRowCount > 0)
              deleteIter.setRangeStart(0);
              deleteIter.setRangeSize(fetchedRowCount);
              for (int i = 0; i < fetchedRowCount; i++)
                row = (NonEmployeesSummaryVORowImpl)deleteIter.getRowAtRangeIndex(i);
                // For performance reasons, we generate ViewRowImpls for all
                // View Objects. When we need to obtain an attribute value,
                // we use the named accessors instead of a generic String lookup.
                // Number primaryKey = (Number)row.getAttribute("EmployeeId");
                Number primaryKey = row.getVisitId();
                if (primaryKey.compareTo(empToDelete) == 0)
                  // This performs the actual delete.
                  row.remove();
                    getTransaction().commit();
                  break; // only one possible selected row in this case
            // Always close the iterator when you're done.
            deleteIter.closeRowSetIterator();
          } // end deleteEmployee
    Thanks,
    Ravi

    Hi
    Check this link Getting error in search page search cannot be executed
    Regards,
    Dilip

  • Issue to Add one new column in search Page..

    I have a JSP file of Service Form of Oracle Install Base . In this on select party Site page when search for any item it shows some result as a column. like address , name, country..
    we have to add a new column in that search. means when we search for any Item then with address, Name and country it shows a new column also with that. I have the jsp file of that page "csifLOV.jsp". This is the generic LOV page for any database columns.
    Can anybody please help where to add this new column definition.
    this is code of "csifLOV.jsp".
    <%--
    +==========================================================================+
    | Copyright (c) 2000 Oracle Corporation, Redwood Shores, CA, USA |
    | All rights reserved. |
    +==========================================================================+
    | FILENAME |
    | csifLOV.jsp |
    | DESCRIPTION |
    | This is the generic LOV page for any database columns |
    | NOTES |
    | |
    | DEPENDENCIES |
    | |
    | HISTORY |
    | 23-Aug-2000 X. Li Created. |
    | $Header: csifLOV.jsp 115.30 2004/06/14 21:05:05 anukal ship $
    +==========================================================================+
    --%>
    <%@ include file="jtfincl.jsp" %>
    <%@ include file="csifContextIncl.jsp" %>
    <%
    csiPageContext.setPermissionName("SupPer");
    csiPageContext.setJspName("csifLOV.jsp");
    csiPageContext.setFormName("LOVForm");
    String jspName = csiPageContext.getJspName();
    String csiFormName = csiPageContext.getFormName();
    String formName = csiFormName;
    appName = "CSI";
    if (CsifutDebug.LOCAL_DEV_ENV)
    Properties param = System.getProperties();
    String prop = param.getProperty("JTFDBCFILE",
    "E:\\myprojects\\dbcfiles\\crmdev04_SCCSIDV1.dbc");
    param.put("JTFDBCFILE", prop);
    prop = param.getProperty("service.Logging.common.filename",
    "E:\\myprojects\\jtflogs\\ebppFW_log");
    param.put("framework.Logging.system.filename", prop);
    prop = param.getProperty("service.Logging.common.filename",
    "E:\\myprojects\\ebppSys_log");
    param.put("framework.Logging.system.filename",prop);
    System.setProperties(param);
    // this may have to change for other people
    // ServletSessionManager.startStandAloneSession(appName,true,
    // "csiuser","welcome");
         ServletSessionManager.startRequest(request,response,
    appName,true,"csiuser","csiuser","Authenticator.system");
    /* Push the logFileName into the cookie for future use */
    oracle.apps.jtf.util.SystemCheck.setJTFCookie();
    // Set cookies for menu rendering
    MenuRenderer.setMenuCookies(request);
    //Added HTML tag with language code for accessibility.
    String CSI_HTML_LANG_CODE;
    CSI_HTML_LANG_CODE = oracle.apps.jtf.util.HtmlUtil.getHtmlLanguageCode();
    if (CSI_HTML_LANG_CODE == null)
    CSI_HTML_LANG_CODE = "en-US";//Added HTML tag with language code for accessibility.
    %>
    <HTML lang="<%=CSI_HTML_LANG_CODE%>">
    <%@ include file="csifStartReqIncl.jsp" %>
    <%@ include file="csifExceptionHandleBegin.jsp" %>
    <jsp:useBean id="lovBean" class="oracle.apps.csi.framework.pb.CsifpbLOVBean" scope="page" />
    <%
    lovBean.init(csiPageContext, request);
    lovBean.process();
    int pageMode = lovBean.getMode();
    if (pageMode == CsifpbBasePageBean.LOVRETURN_MODE) //forward to the caller of the LOV
         if (CsifutDebug.DEBUG)
    CsifutDebug.addMessage("forward URL=" + lovBean.getForwardToURL());
    csiPageContext.setForwardToJSP(lovBean.getForwardToURL());
    %>
    <%@include file="csifForwardIncl.jsp" %>
    <%
    else
    CsifcmException error = lovBean.getException();
    String callerName = lovBean.getJspCallerName();
    String labelSelect=null;
    String labelEnterPartial=null;
    String labelSearch=null;
    String labelTitle=null;
    int origAppID = csiPageContext.getPageAppId();
    String origAppName = csiPageContext.getPageAppName();
    csiPageContext.setPageAppId(542);
    csiPageContext.setPageAppName("CSI");
    Hashtable allLovPrompts = CsifutRegion.getPrompts(csiPageContext, "CSI_FRAMEWORK_LOV");
    csiPageContext.setPageAppId(origAppID);
    csiPageContext.setPageAppName(origAppName);
    if (allLovPrompts != null)
    labelSelect = (String)allLovPrompts.get("CSI_SELECT");
    labelEnterPartial = (String)allLovPrompts.get("CSI_ENTER_PARTIAL");
    labelSearch = (String)allLovPrompts.get("CSI_SEARCH");
    labelTitle = (String)allLovPrompts.get("CSI_LOV_TITLE");
    else
    allLovPrompts = new Hashtable();
    String cancelPrm = (String)allLovPrompts.get("CSIF_CANCEL");
    %>
    <head>
    <title><%=labelTitle%></title>
    <script language="JavaScript">
    function newSearch()
    document.<%=csiFormName%>.<%=CsifpbBasePageBean.PAGE_MODE_PARAM%>.value = '<%=CsifpbBasePageBean.QUERY_MODE%>';
    document.<%=csiFormName%>.submit();
    function returnToCaller()
    // alert("Return to " + "<%=callerName%>" )
    document.<%=formName%>.action = "<%=callerName%>";
    document.<%=formName%>.submit();
    function <%=lovBean.LOV_CANCEL_FUNC%>()
    var LOVForm = document.forms['<%=csiFormName%>'];
    var LOVFieldName = '<%=lovBean.getLOVFieldName()%>';
    var LOVOrigValFieldName = LOVFieldName + '<%=lovBean.LOV_ORIG_VAL_FIELD%>';
    LOVForm.elements[LOVFieldName].value = LOVForm.elements[LOVOrigValFieldName].value;
    LOVForm.elements['<%=CsifpbBasePageBean.PAGE_MODE_PARAM%>'].value = '<%=CsifpbBasePageBean.LOVRETURN_MODE%>';
    LOVForm.elements['<%=CsifpbBasePageBean.MODE_ACTION_PARAM%>'].value = '<%=CsifpbBasePageBean.ACTION_CANCELLED%>';
    LOVForm.action = '<%=lovBean.getJspCallerName()%>';
    LOVForm.submit();
    function onPageLoad()
    document.<%=csiFormName%>.<%=lovBean.getLOVFieldName()%>.focus();
    </script>
    <%=lovBean.renderLovReturnJS()%>
    <%@ include file="jtfscss.jsp" %>
    </head>
    <%@ include file="csifBodyBeginIncl.jsp" %>
    <%
    //if (!CsifutDebug.LOCAL_DEV_ENV)
    if (CsifutTimer.TIME)
    CsifutTimer.start(CsifutTimer.JTF_MENU);
    %>
    <%@ include file="jtfdnbartop.jsp" %>
    <table summary="" width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td>
    <%
    if (CsifutTimer.TIME)
    CsifutTimer.stop(CsifutTimer.JTF_MENU);
    } // end local_dev_env
    %>
    </td>
    </tr>
    <tr>
    <td>
    <form name="<%=csiPageContext.getFormName()%>" method="post" action="<%=jspName%>">
    <table summary="" width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td valign="top">
    <table summary="" width="100%">
    <tr>
    <td> </td>
    <td class="pageTitle" colspan="4"><%=labelSelect%> <%=lovBean.getLOVPageTitle()%>
    </td>
    <td> </td>
    </tr>
    <%@ include file="csifDisplayException.jsp" %>
    <tr>
    <td width="5%"> </td>
    <td width="22.5%"> </td>
    <td width="22.5%"> </td>
    <td width="22.5%"> </td>
    <td width="22.5%"> </td>
    <td width="5%"> </td>
    </tr>
    <tr>
    <td> </td>
    <td>
    <div nowrap align="right" class="promptReadOnly"><%=labelEnterPartial%></div>
    </td>
    <td colspan="3">
    <input type="text" name="<%=lovBean.getLOVFieldName()%>" id="<%=lovBean.getLOVFieldName()%>"
    value="<%=HtmlWriter.preformat(lovBean.getLOVSearchPattern())%>" size="15">
    <input type="button" name="SearchButton" id="SearchButton"
    value="<%=labelSearch%>" onClick="javascript:newSearch()">
    <input type="button" name="CancelButton" id="CancelButton"
    value="<%=cancelPrm%>" onClick="javascript:<%=lovBean.LOV_CANCEL_FUNC%>()">
    </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td colspan="4">
    <hr>
    </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td class="prompt" colspan="4">
    <!-- Search Result goes here -->
    <%
    if (lovBean.getMode() != CsifpbBasePageBean.LOVRETURN_MODE)
    out.print(lovBean.renderLOVValuesTable(labelSelect));
    %>
    <!-- End of Search Result -->
    </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td colspan="4">
    <input type="button" name="CancelButton" value="<%=cancelPrm%>"
    onClick="javascript:<%=lovBean.LOV_CANCEL_FUNC%>()">
    </td>
    <td> </td>
    </tr>
    </table>
    <!-- Content ends here -->
              </td>
         </tr>
         </table>
    <!--Hidden Fields Go Here-->
    <input type="hidden" name="<%=CsifpbLOVBean.LOV_VALUE_SEL_PARAM%>" >
    <%
    if(csiPageContext.isAccessible())
    %>
    <label for="<%=lovBean.getLOVFieldName()%>" class='hidelabel'><%=labelEnterPartial%></label>
    <!-- Kamal for ADA v2 03-Mar-04
    <label for="SearchButton" class='hidelabel'><%=labelSearch%></label>
    <label for="CancelButton" class='hidelabel'><%=cancelPrm%></label>
    -->
    <%
    %>
    <%@ include file="csifHiddenFieldsIncl.jsp" %>
    </form>
    <%@ include file="csifBodyEndIncl.jsp" %>
    </HTML>
    <%
    } // end of if (pageMode == CsifpbBasePageBean.LOVRETURN_MODE ) .. else {
    %>
    <%@ include file="csifExceptionHandleEnd.jsp" %>
    <%@ include file="csifEndReqIncl.jsp" %> <!-- send an end request -->
    Thanks,

    If you are copying the 12KST1C to Z12KST1C and executing the s_alr_8701333 report, you will not see the new column added to Z12KST1C
    With the new Form Z12KST1C, create a new Report Z12KST1C and assign a new TCODE. Also you have to select all rows and column of form Z12KST1C
    TCODE CJE5
    Select the form Z12KST1C
    Extras--Drildown display --Select Rows and columns
    Select the all colhmns by F9
    Hope this helps.
    Edited by: psconsultant on May 20, 2011 8:42 AM

  • Search for description containing non-English chars -- ?

    Hello!
    I've implemented a search class, which allows customers to search folders/documents by name, owner, description, etc.
    And here's the problem: if description contains non-English (Russian, in my case) characters, search does not work! Everything (AS infrastructure, CM SDK DB, etc) was installed using UTF-8 Unicode charset. When I debug the code, I see that when I build AttributeQualification and later compose a comples SearchQualification, value in these is correct, but when I call getSQL(), I see string like this:
    ... ( nls_upper(ALIASDOCUMENT.DESCRIPTION) LIKE nls_upper('????') ) ...
    So it seems as if SQL converted passed UNICODE value into ANSI string, and since server's system language is English, my Russian letters were lost -- ?
    Can anybody shed some light here? Is there a way to search for UNICODE descriptions (and content, for that matter)?
    Thanks,
    Sasha.

    Hi Sasha,
    I want you to try the following code. It should output the file description and query to a text file. Use internet explorer / or notepad to open this file and ****specify that the file encoding is UTF8.*****
    thanks,
    matt.
    java -classpath ...blah blah.. RussianSearch parameterfile=c\cmsdkparameters.txt
    cmsdkparameters.txt contains:
    Username = system
    Password = oracle9i
    SchemaPassword = cmsdk
    Domain = ifs://ifspm-sun2.us.oracle.com:1521:mjs92.us.oracle.com:cmsdk903
    ServiceConfiguration = SmallServiceConfiguration
    Service = TestService
    import oracle.ifs.beans.LibraryService;
    import oracle.ifs.beans.LibrarySession;
    import oracle.ifs.beans.ClassObject;
    import oracle.ifs.beans.Document;
    import oracle.ifs.beans.DocumentDefinition;
    import oracle.ifs.beans.Folder;
    import oracle.ifs.beans.FolderDefinition;
    import oracle.ifs.beans.LibraryObject;
    import oracle.ifs.beans.PublicObject;
    import oracle.ifs.beans.Search;
    import oracle.ifs.beans.SearchResultObject;
    import oracle.ifs.common.IfsException;
    import oracle.ifs.common.AttributeValue;
    import oracle.ifs.common.CleartextCredential;
    import oracle.ifs.common.Credential;
    import oracle.ifs.common.ParameterTable;
    import oracle.ifs.search.AttributeQualification;
    import oracle.ifs.search.AttributeSearchSpecification;
    import oracle.ifs.search.SearchClassSpecification;
    import oracle.ifs.search.SearchSortSpecification;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.util.Hashtable;
    import java.util.Vector;
    * Copyright (c) 2003 Oracle Corporation. All rights reserved.
    * Matt Shannon.
    * Description:
    *  Test searching in Russian Language
    *  View output file in notepad or IE - make sure to specify character
    *  set of document to be UTF8 when opening.
    public class RussianSearch implements Runnable
      // set to 'false' to prevent the class from freeing objects that it creates
      public static final boolean performCleanup = true;
      protected ParameterTable m_parametertable;
      private Vector m_ObjectsRequiringCleanup; 
      public RussianSearch(String[] args)
        // parameter file is retrieved through command line argument parameterfile=
        m_parametertable = new ParameterTable(args, "parameterfile");
      public static void main(String[] args)
        new Thread(new RussianSearch(args)).start();
       *   This is where you write your test program.
      public void run()
        LibraryService service = startService();
        LibrarySession session = establishSession(service);
        if (session == null)
          return;
        try
          DocumentDefinition ddef = new DocumentDefinition(session);
          ddef.setAttribute(PublicObject.NAME_ATTRIBUTE,
            AttributeValue.newAttributeValue("blah.txt"));
          ddef.setAttribute(PublicObject.DESCRIPTION_ATTRIBUTE,
            AttributeValue.newAttributeValue("&#1071; &#1089;&#1082;&#1091;&#1095;&#1072;&#1102; &#1087;&#1086; &#1088;&#1086;&#1076;&#1080;&#1085;&#1077;"));
          ddef.setEmptyContent();
          Document newdoc = (Document) session.createPublicObject(ddef);
          addObjectRequiringCleanup(newdoc);
          /*  Construct AttributeSearchSpecification.
           *  Attribute based conditions are allowed, context conditions are not!
          AttributeSearchSpecification attrSrchSpec =
            new AttributeSearchSpecification();
          /*  Construct SearchClassSpecification.
           *  This represents the FROM and SELECT clauses of the query.
          SearchClassSpecification srchClsSpec = new SearchClassSpecification();
          srchClsSpec.addSearchClass(Document.CLASS_NAME);      // from clause
          srchClsSpec.addResultClass(Document.CLASS_NAME);      // select clause
          /*  Construct SearchSortSpecification.
           *  This represents the ORDER BY clause of the query.
          SearchSortSpecification srchSortSpec = new SearchSortSpecification();
          //  upper case ascending sort on Name
          srchSortSpec.add(Document.CLASS_NAME, PublicObject.NAME_ATTRIBUTE,
            SearchSortSpecification.ASCENDING, "nls_upper");
          /*  AttributeQualification is a WHERE clause component representing an
           *  attribute condition.
          // scalar AttributeQualification - name like '%.html'
          AttributeQualification aq = new AttributeQualification();
          aq.setAttribute(Document.CLASS_NAME, PublicObject.DESCRIPTION_ATTRIBUTE);
          aq.setOperatorType(AttributeQualification.LIKE);
          aq.setValue("%&#1088;&#1086;&#1076;&#1080;&#1085;&#1077;");
          // set SELECT & FROM clauses
          attrSrchSpec.setSearchClassSpecification(srchClsSpec);
          // set ORDER BY clause
          attrSrchSpec.setSearchSortSpecification(srchSortSpec);
           // set WHERE clause
          attrSrchSpec.setSearchQualification(aq);
          /* Construct Search, supply SearchSpecification */
          Search s = new Search(session,attrSrchSpec);
          System.out.println("File encoding system property: "+System.getProperty("file.encoding"));
          boolean append = false;
          FileOutputStream fos = new FileOutputStream("c:/test.txt",append);
          OutputStreamWriter osw = new OutputStreamWriter(fos);
          System.out.println("Default character encoding: "+osw.getEncoding());
          osw = new OutputStreamWriter(fos,"UTF8");
          System.out.println("New character encoding: "+osw.getEncoding());
          PrintWriter out = new PrintWriter(osw,true);
          out.println(s.getSQL());
          SearchResultObject obj = null;
          // Open Search!
          s.open();
          try
             * A SearchResultObject encapsulates a row of a search result.  It
             * contains 1 or more LibraryObjects (depending on number of result
             * classes specified).
            while ( (obj = s.next()) != null )
              Document d = (Document)(obj.getLibraryObject(Document.CLASS_NAME));
              out.println(d.getName() + " " + d.getDescription());
          catch (Throwable e)
            if  ((e instanceof IfsException) &&
              (((IfsException)e).containsErrorCode(22000)))
            else
              System.out.println("Unexpected exception occurred in selector cursor");
              System.out.println((e instanceof IfsException)
                ? ((IfsException)e).toLocalizedString()
                : e.toString());
          finally
            out.close();
            if (performCleanup)
              cleanup();
            s.close();
            s.dispose();
        catch (Throwable e)
          System.out.println("Fatal exception occurred in run():");
          System.out.println((e instanceof IfsException)
            ? ((IfsException)e).toLocalizedString()
            : e.toString());
        finally
          disconnectSession(session);
      public LibraryService startService()
        String schemapassword = m_parametertable.getString("SchemaPassword");
        String domain = m_parametertable.getString("Domain");
        String servicename = m_parametertable.getString("Service",domain);
        String serviceconfiguration =
          m_parametertable.getString(
            "ServiceConfiguration","SmallServiceConfiguration"
        LibraryService service = null;
        try
          if (servicename != null &&
            LibraryService.isServiceStarted(servicename))
            // The service name was specified, and is already running.
            // So just use it.
            System.out.println("Service already running: "+servicename);
            service = LibraryService.findService(servicename);
            System.out.println("Existing service retrieved");
          else
            service = LibraryService.startService(
              servicename, schemapassword, serviceconfiguration, domain);
            System.out.println("Service started: '"+servicename+
              "' (version: "+service.getVersionString()+")");
        catch (Throwable e)
          System.out.println("Unable to start service:");
          System.out.println((e instanceof IfsException)
            ? ((IfsException)e).toLocalizedString()
            : e.toString());
        return service;
      public LibrarySession establishSession(LibraryService service)
        String username = m_parametertable.getString("Username");
        String password = m_parametertable.getString("Password");
        return establishSession(service, username, password);
      public LibrarySession establishSession
        LibraryService service,
        String username,
        String password
        LibrarySession session = null;
        try
          CleartextCredential cred = new CleartextCredential(username,
            password);
          session = establishSession(service, cred);
        catch (Throwable e)
          System.out.println("Unable to create credential:");
          System.out.println((e instanceof IfsException)
            ? ((IfsException)e).toLocalizedString()
            : e.toString());
        return session;
      public LibrarySession establishSession
        LibraryService service,
        Credential cred
        LibrarySession session = null;
        if (service != null)
          try
            String username = cred.getName();
            session = service.connect(cred, null);
            System.out.println("Session established for " + username);
          catch (Throwable e)
            System.out.println("Unable to create session:");
            System.out.println((e instanceof IfsException)
              ? ((IfsException)e).toLocalizedString()
              : e.toString());
        return session;
      public void disconnectSession(LibrarySession session)
        System.out.println("Disconnecting session");
        try
          session.disconnect();
        catch (Throwable e)
          System.out.println("Error disconnecting session:");
          System.out.println((e instanceof IfsException)
            ? ((IfsException)e).toLocalizedString()
            : e.toString());
      public void addObjectRequiringCleanup(LibraryObject lo)
        Vector v = getObjectsRequiringCleanupVector();
        v.addElement(lo);
      private Vector getObjectsRequiringCleanupVector()
        if (m_ObjectsRequiringCleanup == null)
          m_ObjectsRequiringCleanup = new Vector();
        return m_ObjectsRequiringCleanup;
       * Frees objects that were marked as requiring clean up
      public void cleanup()
        Vector v = getObjectsRequiringCleanupVector();
        System.out.println("Cleanup - delete objects created during the session");
        int count = (v == null) ? 0 : v.size();
        System.out.println("# of objects to free: "+count);
        // Free the objects in reverse order from which they were added
        for (int i = count - 1; i >= 0; i--)
          LibraryObject lo = (LibraryObject)v.elementAt(i);
          try
            discardObject(lo);
          catch (Exception e)
            System.out.println("Unable to discard an object during cleanup - continuing...");
      public void discardObject(LibraryObject lo) throws IfsException
        if (lo != null)
          try
            System.out.println("Attempting to free: "+getDisplayName(lo));
            LibrarySession session = lo.getSession();
            if (lo instanceof Folder)
              System.out.println("Attempting to free Folder with Deep Option!");
              // free Folder using "Deep" option to free
              // all items in the folder, and all of their items, etc.
              Folder folder = (Folder)lo;
              FolderDefinition def = new FolderDefinition(session);
              def.setFolderDepthOption(
                Folder.SYSTEMOPTIONVALUE_FOLDER_DEPTH_DEEPEST);
              folder.free(def); // removes object from the repository, with options
            else
              // just a regular free
              lo.free();
          catch (Exception e)
            System.out.println("Unable to free an object during cleanup - continuing");
            System.out.println((e instanceof IfsException)
              ? ((IfsException)e).toLocalizedString()
              : e.toString());
      public String getDisplayName(LibraryObject lo)
        throws IfsException
        String displayName;
        if (lo != null)
          displayName = lo.getClassObject().getName()
            + " '" + lo.getName() + "'";
        else
          displayName = "<null object>";
        return displayName;
    }

  • Alternative to Hashtable? Got lots of data and "OutOfMemoryError"

    Hello,
    I am working on an application (CLDC1.1 and MIDP2.0, using NetBeans) and have to use a large look-up table with about 50 000 entries. During runtime the application is set to look up entries xxx times from the table, as fast as possible of course. I have used Hashtable for the table data (keys/value) until now, and distributed it all over several files / classes (singleton, static init) with a Hashtable for each class. Have not yet completely inserted the look-up table (about 30% percent left, and .jar size is 300 KB), but now I get the following error: Uncaught exception java/lang/OutOfMemoryError. All hashtables are initialized with a final size.
    I should have ca. 2 MB of RAM with the emulator Im using . Printing out freeMemory() from the Runtime I notice that the free mem number decreases fast, towards zero, and then it starts over again - decreasing from somewhere under 2 000 000 bytes down to 0. Not a wiz with debugging, but I guess I have to dive deeper into my garbage collection :)
    Is there a better way to store the keys (int) and values (int) of the look-up table? Like an associative array (pseudo): [["key"]=>[value]]
    Should I check out RMS (slow?), or some sorts of file handling? Or maybe a combination of Hashtables in memory and also RMS..?
    If someone could help with a hint or two, I would be very very thankful!
    Tib

    50 000 * (4 + 4) B = 400kB of uncompressed data. That's quite a lot for a MIDlet, but it's probably ok if the rest of your application is not so large. Hashtables need more than the size of the data to be effective, so I think an array of key-value pairs (sorted on the keys) would be best here, and of course using binary search when looking up the values.
    Or you can look at the range, distribution etc. of the keys, perhaps they will allow some optimization.

  • Help!  Search with no results

    The problem I'm having is that users are in different domains in the company I'm working in. If the searched user is in the same domain (e.g. DC=B, DC=A) of the administrator, it returns exact one record. However, if the user is under the sub-domain (i.e. DC=C, DC=B, DC=A), and I've set the search control to scope to sub-tree, the searching returns no records. Does anybody know how to solve this?
    Here is the snippet of my code:
      public String getDN(String userid) {
        String dn = "CN=admin,OU=Sharing Account,DC=ABC,Dc=com,DC=tw";
        String ldap_url = "ldap://f1soa02.cmo.com.tw:389";
        String password = "xxxx";
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put("java.naming.ldap.version", "3");
        env.put(Context.PROVIDER_URL, ldap_url);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, dn);
        env.put(Context.SECURITY_CREDENTIALS, password);
        DirContext ctx;
        String[] attrs = { "cn" };
        try {
          ctx = new InitialDirContext(env);
          SearchControls ctls = new SearchControls();
          ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
          ctls.setReturningAttributes(attrs);
          String filter = "(CN=" + userid + ")";
          // Search for objects with these matching attributes
          NamingEnumeration results = ctx.search("DC=cmo,Dc=com,DC=tw",filter,ctls);
          if ( results != null && results.hasMoreElements()) {
            SearchResult sr = (SearchResult)results.nextElement();
            dn = sr.getName();
          } else dn = null;
          ctx.close();
        } catch (AuthenticationException e){
          System.out.println(" getDN() Authentication Exception: " + e);
          return null;
        } catch (NamingException e) {
          System.out.println(" getDN() Naming Exception: " + e);
          return null;
        return dn;
      public static void main(String[] args) {
        UserAuthenticate ua = new UserAuthenticate();
        //boolean valid = ua.ldapAuthenticate("joy_huang", "babula52395239");
        boolean valid = ua.ldapAuthenticate("karen_fang", "karenf12");
        if (valid)
          System.out.println("Valid User");
        else
          System.out.println("Invalid User");
      }

    1). Can't get connected to Global Catalog port 3268. Does this mean that I have to get the permission from the administrator to connect to that port?
    No.
    Not all domain controllers host a global catalog. If a DC is not listening on port 3268 (or 3269 over SSL) then it is not hosting a GC.
    You can find both GC's & DC's through DNS. For example if using the DnsContextFactory, you can find a GC using the DNS Query result:String strService = "_gc._tcp";
    String strQuery[]={"SRV"};
    Attributes dnsQueryresult = dnsContext.getAttributes(strService,strQuery);For completeness, the query should also take into consideration sites (IP subnets), so you return a DC or GC closest to your server. You may want to look at the Win32 API DSGetDCName and provide similar functionality in your app.
    (Refer to http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/dsgetdcname.asp)
    If you are able to connect to port 3268 (the GC) but do not return any results, then the ACL's may not give you permission to view the objects or their attributes.
    2). How to find out the returning attributes? Our server seems do not have the attributes listed in the sample...
    IIRC, the attributes I have listed are included in the Partial Attribute Set (PAS), which is the term used to describe which attributes are included in the GC.
    Details on the default attributes contained in the GC can be found at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/attributes_global.asp
    Note that the GC abides by the exact same security controls as a DC, so if your user does not have access to the objects and their attributes in a domain, it won't have access to them in a GC.
    If you want to return all available attributes, just specify null for the returned attributes.SearchControls searchCtls = new SearchControls();
    String returnedAttributes[] = null;
    searchCtls.setReturningAttributes(returnedAttributes);
    ...and to list out a returned attribute's name, use the getID method.
    3). Can't have empty base DN when searching? Why? Is that system limitation?
    AFAIHI (As far as I have interpreted) the LDAP RFC states that an empty BaseDN is used when querying RootDSE. It is does not state what the behaviour should be otherwise. (In RFC 2251 the search base is defined as a LDAP Distinguished Name, which in turn is defined as a LDAP String, which is finally defined as an Octet String. Doesn't specify what should happen with a null value)
    From an Active Directiory perspective, for an LDAP search, you must supply a valid base distinguished name. For a Global Catalog search, the base distinguished name can be any value, including the value "NULL" (" ").
    If you use a NULL base distinguished name with a scope of one level or subtree and specify port 389 (the default LDAP port), the search fails, whereas if you use a NULL base distinguished name with a scope of object level and specify port 389, it will return the RootDSE.

  • Ldap search in jsp not working

    Hi
    We have users imported from db into oid and they have blank passwords. So for those users , when they first try to login, I am planning to take them to someother page. I have added code to login.jsp where in case of authentication error, I want to redirect users with blank password to a separate page. So I am doing a search for user in LDAP and trying to get user attributes. I am not getting any errors in my jsp , but somehow the search is not successful. Can someone tell me whats wrong with this code??
    try
    DirContext dirctx = null;
    //Build the LDAP url
    String ldapurl = "ldap://" + "stg.test.com" + ":" + "3060";
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, ldapurl);
    // if password is specified, set the credentials
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"orcladmin");
    env.put(Context.SECURITY_CREDENTIALS,"welcome");
    // Bind and initialize the Directory context
    dirctx = new InitialDirContext(env);
    Attributes matchAttrs = new BasicAttributes(true); // ignore attribute name case
         matchAttrs.put(new BasicAttribute("uid", str_user));
         // Search for objects with those matching attributes
         NamingEnumeration answer = dirctx.search("cn=Users,dc=oprah,dc=com", matchAttrs);
         //formatResults(answer);
         int count=0;
              while (answer.hasMore()) {
                   SearchResult sr = (SearchResult)answer.next();
              out.println("SEARCH RESULT:" + sr.getName());
                   Attributes attrs=sr.getAttributes();
                   if (attrs == null) {
                        out.println("This result has no attributes");
                        } else {
                             for (NamingEnumeration enum = attrs.getAll(); enum.hasMore();) {
                             Attribute attrib = (Attribute)enum.next();
                             out.println("ATTRIBUTE :" + attrib.getID());
                             for (NamingEnumeration e = attrib.getAll();e.hasMore();)
                                  out.println("\t\t = " + e.next());
                   //formatAttributes(sr.getAttributes());
              out.println("====================================================");
                   count++;
              out.println("Search returned "+ count+ " results");
         dirctx.close();
    catch (Exception e)
    e.printStackTrace();
    }

    I figured the problem. I need to give the dn of orcladmin here
    env.put(Context.SECURITY_PRINCIPAL,"cn=orcladmin,cn=users,dc=test,dc=com");
    instead of
    (Context.SECURITY_PRINCIPAL,"orcladmin");

  • Search Active Directory

    session.setAttribute("udname",StrUser);
    Hashtable env = new Hashtable();
    String ldapUrl = "ldap address";
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, ldapUrl);
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    DirContext ctx = new InitialDirContext(env);
    String[] attrs = new String[1];
    attrs[0] = "name";
    NamingEnumeration contentsEnum = ctx.search("OU=Users,OU=domain name,DC=upperlevel domain name,DC=com",attrs[0]+"="+StrUser);
    while (contentsEnum.hasMore())
    NameClassPair ncp = (NameClassPair) contentsEnum.next();
    String userName = ncp.getName();
    userName = userName.substring(3,userName.length());
    out.println(userName);
    I am using this code to search in the Active Directory...
    But I am getting error
    There is a problem in search "can't resolve symbol"
    Can somebody help me???
    the Error goes like this : -----
    Generated servlet error:
    [javac] Compiling 1 source file
    /usr/local/Tomcat/work/Catalina/localhost/_/org/apache/jsp/main4_jsp.java:129: cannot resolve symbol
    symbol : method search (java.lang.String,java.lang.String)
    location: interface javax.naming.directory.DirContext
    NamingEnumeration contentsEnum = ctx.search("OU=Users,OU=domain name,OU=upper level domain
    name,DC=com",attrs[0]+"="+StrUser);
    1 error
         org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:127)
         org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:351)
         org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:415)
         org.apache.jasper.compiler.Compiler.compile(Compiler.java:458)
         org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
         org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:553)
         org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:291)
         org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
         org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

    Hi Ashwin,
    You have made the syntax mistake in the search.
    NamingEnumeration contentsEnum = ctx.search("OU=Users,OU=domain name,DC=upperlevel domain name,DC=com",attrs[0]+"="+StrUser);
    In this you should not send string as second parameter, it should be of type Attributes. This is the API definition of that method.
    search(Name name, Attributes matchingAttributes)
    Searches in a single context for objects that contain a specified set of attributes.
    Hope you got the error. If you have any clarifications please mail me.
    Arun
    [email protected]

  • Search problem with ActiveDirectory - please help

    Hi,
    I've tried to get a list of the users out of the Active Directory.
    But I just can't get my code to work. It returns nothing back.
    The problem should be simple. But I can not figure out why.
    Please help!
    Raymond
    import javax.naming.*;
    import javax.naming.event.*;
    import javax.naming.directory.*;
    import javax.naming.ldap.*;
    import java.util.Hashtable;
    import java.util.Vector;
    import java.util.Enumeration;
    public class AdClient {
    public AdClient() {
    getUsers();
    public static void main(String args[]) {
    Client client = new Client();
    private void getUsers() {
    // domain = utest
    String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
    String HOST = "ldap://192.168.128.50:389";
    String SEARCHBASE = "ou=Users,dc=utest,dc=com";
    String FILTER = "cn=*";
    try {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);
    env.put(Context.PROVIDER_URL, HOST);
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "[email protected]");
    env.put(Context.SECURITY_CREDENTIALS,"admin");
    DirContext ctx = new InitialDirContext(env);
    SearchControls constraints = new SearchControls();
    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
    NamingEnumeration results;
    // now search for the users
    results = ctx.search(SEARCHBASE, FILTER, constraints);
    while (results.hasMoreElements()) {
    SearchResult sr = (SearchResult)results.nextElement();
    System.out.println(sr.getName());
    ctx.close();
    } catch(Exception e) {
    e.printStackTrace();
    }

    I tried your code...
    There were two issues I saw, when I changed them it worked!
    1) public static void main(String args[]) {
    Client client = new Client();
    should be
    public static void main(String args[]) {
    AdClient client = new AdClient();
    2) String SEARCHBASE = "ou=Users,dc=utest,dc=com";
    env.put(Context.SECURITY_PRINCIPAL, "[email protected]");
    Should be
    String SEARCHBASE = "ou=Users,dc=utest,dc=newcom,dc=com";
    env.put(Context.SECURITY_PRINCIPAL, "[email protected]");

Maybe you are looking for

  • Hp photosmart c6180 not printing from new imac? not sure what the problem is?

    Just got a new iMac and unable to print to my HP Photosmart C6180 All - in - one. Its recognising the printer but saying its not connected? And offline? Not a clue!

  • Acrobat very Slow performance (50% CPU usage)

    My acrobat 9 PRO (9.3.2) has suddently started to use 50% of my CPU usage everytime a *.pdf document is opened. It is the task Acrobat.exe which is the problem. This results in VERY slow performance and I cannot use the review function without adobe

  • Maintaining Widescreen on export

    Hi. i know this must be quite remedial to most of you guys but it's killing me. I'm editing widescreen HD format from my HD camera. 1080:60. All is good and I can export to a self contained quicktime movie correctly but I want to also export it as a

  • Power View with dynamic connection string, but server-side

    We'd like to evaluate using Power View to provide exploratory BI over data output from HDInsight, onto Azure Storage. We need to let users select which segments of data to load but through a web-ui (not Excel on the desktop). We expect to have a stan

  • For Budget release / supplement  User status

    Hi Experts, In project i m using a user status for taking approval / release budget . Description                   Lower                         Highest initial                               1                                   2 bud planning