Ajuda com retorno de dados do ldap

5 respostas
Earthquake

Boa tarde pessoal,
Estou tentando “pegar” uma string da funcao ldap() e passar para o Jcombo uma lista de usuarios do Ldap.
Só que está passando em uma string gigante, e não um abaixo do outro.
Como posso retornar estes dados de forma que meu jcombobox leia de forma correta?

import java.util.Iterator;
import javax.swing.*;
import com.novell.ldap.*;
public class GUI {
	public static void main(String[] args) throws LDAPException {
		new GUI().frm1();
	}
	public GUI frm1() throws LDAPException{
		JFrame f = new JFrame();
		f.setSize(290,150);
		f.setLocation(150, 200);
		f.setTitle("Cadastro");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pl = new JPanel();
		pl.setLayout(null);
		JLabel lbcategoria = new JLabel("Usuarios");
		lbcategoria.setBounds(80,10,60,20);
		pl.add(lbcategoria);
		JComboBox<String> c = new JComboBox<String>();
		c.setBounds(130,20,1030,20);
		c.addItem(ldap()); // ====>>aqui que precisa passar os nomes para o combobox		
		pl.add(c);
		f.add(pl);
		f.setVisible(true);
		return null;
	}
	public String ldap() throws LDAPException{
		 String description = null;
		 LDAPConnection conn = new LDAPConnection();
	     conn.connect("192.168.1.2",389);
	     String[] attrIDs = {"DisplayName"};//,"givenName","sn","mail","samAccountName","telephoneNumber","physicalDeliveryOfficeName"};
	     conn.bind(LDAPConnection.LDAP_V3, "CN=usuarioparabind,OU=administrativos,OU=usuarios,OU=empresa,DC=com,DC=br",
	             "senha".getBytes());
	      LDAPSearchResults search = conn.search("OU=usuarios,OU=empresa,DC=com,DC=br", LDAPConnection.SCOPE_SUB,"(&(objectClass=user)(sAMAccountName=*))", attrIDs, false);
	      while(search.hasMore()){
	         LDAPEntry entry = search.next();
	         LDAPAttributeSet attribute = entry.getAttributeSet();
	         Iterator<?> it = attribute.iterator();
	         while(it.hasNext()){
	            LDAPAttribute att = (LDAPAttribute) it.next();
	                 	description += (att.getStringValue());
            //System.out.println(att.getName() +"=>"+ att.getStringValue());
	         }
	         //System.out.println();
	      }		
		return description;
	}

}

Obrigado.

5 Respostas

douglaskd

seu código esta assim:

description += (att.getStringValue());

ou seja, concatenando os resultados…

mude o retorno do método de String para ArrayList

crie uma ArrayList descricoes = new ArrayList();

e la embaixo onde esta:

LDAPAttribute att = (LDAPAttribute) it.next(); description += (att.getStringValue()); //System.out.println(att.getName() +"=>"+ att.getStringValue()); }

troque por:

LDAPAttribute att = (LDAPAttribute) it.next(); descricoes.add(att.getStringValue()); //System.out.println(att.getName() +"=>"+ att.getStringValue()); }

quando você for popular o jComboBox, é só iterar sobre o ArrayList retornado por esse método e ir populando o jComboBox

Earthquake

Não deu certo.
O c.addItem(ldap()); só está aceitando String e não array.

douglaskd
Earthquake:
Não deu certo. O c.addItem(ldap()); só está aceitando String e não array.

calma, como eu disse....tem que iterar sobre a lista....

for(String item : ldap()){

c.addItem(item);

}
E

Earthquake:
Não deu certo.
O c.addItem(ldap()); só está aceitando String e não array.

Preguiçoso… (E por “preguiçoso” eu digo: preguiça de pensar)

Você tem de trocar:

c.addItem(ldap());

por

for (String usuario: ldap()) {
    c.addItem (usuario);
}
Earthquake

Pô entanglement , não é preguiça não, é pouco conhecimento ainda. Por isto postei em java básico.
Não tinha passado direto o iterar sem usá-lo.
Obrigado douglaskd.

Valeu galera.

Segue codigo funcionando:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.*;
import com.novell.ldap.*;
public class GUI {
	public static void main(String[] args) throws LDAPException {
		new GUI().frm1();
	}
	public GUI frm1() throws LDAPException{
		JFrame f = new JFrame();
		f.setSize(290,150);
		f.setLocation(150, 200);
		f.setTitle("Cadastro");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pl = new JPanel();
		pl.setLayout(null);
		JLabel lbcategoria = new JLabel("Usuarios");
		lbcategoria.setBounds(80,10,60,20);
		pl.add(lbcategoria);
		JComboBox<String> c = new JComboBox<String>();
		c.setBounds(130,20,1030,20);
	    for (String usuario: ldap()) {  
	        c.addItem (usuario);  
	    }  
		//c.addItem(ldap());		
		pl.add(c);
		f.add(pl);
		f.setVisible(true);
		return null;
	}
	
	public ArrayList<String> ldap() throws LDAPException{
		 
		 LDAPConnection conn = new LDAPConnection();
	     conn.connect("192.168.1.2",389);
	     String[] attrIDs = {"DisplayName"};//,"givenName","sn","mail","samAccountName","telephoneNumber","physicalDeliveryOfficeName"};
	     conn.bind(LDAPConnection.LDAP_V3, "CN=usuarioparabind,OU=administrativos,OU=usuarios,OU=empresa,DC=com,DC=br",
	             "senha".getBytes());
	      LDAPSearchResults search = conn.search("OU=usuarios,OU=empresa,DC=com,DC=br", LDAPConnection.SCOPE_SUB,"(&(objectClass=user)(sAMAccountName=*))", attrIDs, false);
	      List<String> description = new ArrayList<>();
	      while(search.hasMore()){
	         LDAPEntry entry = search.next();
	         LDAPAttributeSet attribute = entry.getAttributeSet();
	         Iterator<?> it = attribute.iterator();
	         
	         while(it.hasNext()){
	            LDAPAttribute att = (LDAPAttribute) it.next();
	            
	                 	description.add(att.getStringValue());
	            //System.out.println(att.getName() +"=>"+ att.getStringValue());
	            //System.out.println("=>"+ att.getStringValue());
	         }
	         //System.out.println();
	      }		
		return (ArrayList<String>) description;
	}

}
Criado 29 de outubro de 2012
Ultima resposta 29 de out. de 2012
Respostas 5
Participantes 3