Red Hat Application Migration Toolkit
package org.exolab.castor.dsml.jndi; import java.util.Enumeration; import java.util.Vector; import javax.naming.NameNotFoundException; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.ModificationItem; import javax.naming.directory.SearchResult; import org.exolab.castor.dsml.Consumer; import org.exolab.castor.dsml.ImportDescriptor; import org.exolab.castor.dsml.ImportExportException; import org.exolab.castor.dsml.Importer; import org.exolab.castor.dsml.jndi.JNDIConsumer; public class JNDIImporter extends Importer { private DirContext _ctx; public JNDIImporter(DirContext ctx) { this._ctx = ctx; } protected Consumer createConsumer() { return new JNDIConsumer(); } public void importEntry(SearchResult result, int policy) throws NamingException { if(result.getAttributes().size() == 0) { if((policy & 1) != 0) { try { this._ctx.lookup(result.getName()); this._ctx.unbind(result.getName()); this.notify(result.getName(), 3); } catch (NameNotFoundException var9) { this.notify(result.getName(), 0); } } else { this.notify(result.getName(), 0); } } else { try { Attributes existing = this._ctx.getAttributes(result.getName()); Vector except = new Vector(); Attributes attrSet = result.getAttributes(); NamingEnumeration enumeration = attrSet.getAll(); Attribute attr; while(enumeration.hasMore()) { attr = (Attribute)enumeration.next(); if(existing.get(attr.getID()) != null) { if((policy & 8) == 0) { if(attr.size() > 0) { except.addElement(new ModificationItem(2, attr)); } else { except.addElement(new ModificationItem(3, attr)); } } } else if((policy & 16) == 0 && attr.size() > 0) { except.addElement(new ModificationItem(1, attr)); } } if((policy & 2) != 0) { enumeration = existing.getAll(); while(enumeration.hasMore()) { attr = (Attribute)enumeration.next(); if(attrSet.get(attr.getID()) == null) { except.addElement(new ModificationItem(3, attr)); } } } if(except.size() > 0) { ModificationItem[] array = new ModificationItem[except.size()]; except.copyInto(array); this._ctx.modifyAttributes(result.getName(), array); this.notify(result.getName(), 2); } else { this.notify(result.getName(), 0); } } catch (NameNotFoundException var10) { if((policy & 4) == 0) { this._ctx.bind(result.getName(), (Object)null, result.getAttributes()); this.notify(result.getName(), 1); } else { this.notify(result.getName(), 0); } } } } public void importEntries(NamingEnumeration results) throws NamingException { if(this.getImportDescriptor() == null) { this.setImportDescriptor(new ImportDescriptor()); } while(results.hasMore()) { SearchResult result = (SearchResult)results.next(); this.importEntry(result, this.getImportDescriptor().getPolicy(result.getName())); } } public void importEntries(Enumeration results) throws ImportExportException { if(this.getImportDescriptor() == null) { this.setImportDescriptor(new ImportDescriptor()); } try { while(results.hasMoreElements()) { SearchResult except = (SearchResult)results.nextElement(); this.importEntry(except, this.getImportDescriptor().getPolicy(except.getName())); } } catch (NamingException var3) { throw new ImportExportException(var3); } } }