Newer
Older
/* **************************************************************************
*
* Copyright (C) 2002-2005 Octet String, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
* TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
* TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
* AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
* IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
* OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
* PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM OCTET STRING, INC.,
* COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
******************************************************************************/
package com.octetstring.jdbcLdap.jndi;
import java.util.*;
import java.sql.*;
import com.octetstring.jdbcLdap.sql.statements.*;
import com.octetstring.jdbcLdap.util.*;
/**
* @author mlb
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class UpdateEntry {
RetrieveResults res = new RetrieveResults();
public int doUpdateEntryJldap(JdbcLdapUpdateEntry stmt) throws SQLException {
int argPos = 0;
StringBuffer dn = new StringBuffer();
//first we need to construct the dn
/*String[] dnlist = stmt.getDnlist();
for (int i=0,m=dnlist.length;i<m;i++) {
dn.append(dnlist[i]);
//System.out.println("i,m :" + i + "," + m);
if (i < m-1) {
dn.append(stmt.getArgVals()[i]);
}
}*/
Iterator icmds = stmt.getCmds().iterator();
UpdateSet us;
LinkedList mods = new LinkedList();
int paramnum = 0;
while (icmds.hasNext()) {
us = (UpdateSet) icmds.next();
int modtype;
if (us.getCmd().equalsIgnoreCase(JdbcLdapUpdateEntry.ADD)) {
}
else if (us.getCmd().equalsIgnoreCase(JdbcLdapUpdateEntry.DELETE)) {
}
//ModificationItem[] mods = new ModificationItem[stmt.getAttribs().size()];
Pair p;
String val,name;
Iterator it = us.getAttribs().iterator();
int i = 0;
ArrayList al = new ArrayList();
while (it.hasNext()) {
if (modtype == LDAPModification.ADD || modtype == LDAPModification.REPLACE) {
p = (Pair) it.next();
name = p.getName();
if (p.getValue().equals("?")) {
//System.out.println("paramnum : " + paramnum);
//System.out.println("val : " + stmt.getArgVals()[paramnum]);
val = stmt.getArgVals()[paramnum];
paramnum++;
//i++;
}
else {
val = p.getValue();
}
//System.out.println("moditem : " + modtype + ", " + name + "=" + val);
mods.add(new LDAPModification(modtype,new LDAPAttribute(name,val)));
}
else {
name = (String) it.next();
//System.out.println("moditem : " + modtype + ", " + name);
mods.add(new LDAPModification(modtype,new LDAPAttribute(name)));
}
i++;
}
}
Object[] toCopy = mods.toArray();
LDAPModification[] doMods = new LDAPModification[toCopy.length];
System.arraycopy(toCopy,0,doMods,0,doMods.length);
StringBuffer buf = new StringBuffer();
String name;
try {
int count = 0;
LDAPSearchResults entries = res.searchUpInsJldap(stmt);
while (entries.hasMore()) {
entry = entries.next();
buf.setLength(0);
name = entry.getDN();
//System.out.println("name : " + name);
stmt.getConnection().modify(name,doMods);
count++;
//System.out.println("count : " + count);
}
} else {
stmt.getConnection().modify(stmt.getBaseContext(),doMods);
count++;
//System.out.println("final count : " + count);
return count;
//stmt.getContext().modifyAttributes(dn.toString(),doMods);
throw new SQLNamingException(ne);
}
}
}