Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [higgins-dev] JNDI.CO NLS change Diff path file (Jim please see this)


Hi Jim,
           I made the NLS changes in JNDI CP as per yours and others  review comments.

           The following zip c ontains
           1. Package org.eclipse.higgins.util.l10n
            2. Package org.eclipse.higgins.idas.cp.jndi
            3. nls.jar , created from eclipse globalization util jars
            4. Patchm4.txt -    org.eclipse.higgins.idas.cp.jndi diff patch
           
          Build  Changes Made
                            1. Added nls.jar in org.eclipse.higgins.dependencies.redistributable\eclipse.nls\ directory and made appropriate changes in org.eclipse.higgins.dependencies.redistributable\build.xml
                             2. Added dependency for nls.jar in  org.eclipse.higgins.util.l10n\build.xml and org.eclipse.higgins.idas.cp.jndi\build.xml
                             3. Added dependency for org.eclipse.higgins.util.l10n in  org.eclipse.higgins.idas.cp.jndi\build.xml

I am not able to create the patch as the latest svn repository is not available becuase of migration work going on in SVN repositroy.

Though I have already made the similar changes in all IdAS M2 source codes that are being used by us, I am not able to make the same changes for other components in M4 latest base lines due to above problem. Once the repositry will be  up I do the same.

Please let me know if you have any questions on the changes done in jndi-cp.
 




Thanks and Regards,
Prakash



"Jim Sermersheim" <jimse@xxxxxxxxxx>
Sent by: higgins-dev-bounces@xxxxxxxxxxx

08/04/2008 09:10 PM

Please respond to
"Higgins \(Trust Framework\) Project developer discussions"        <higgins-dev@xxxxxxxxxxx>

To
<higgins-dev-bounces@xxxxxxxxxxx>
cc
<higgins-dev@xxxxxxxxxxx>
Subject
Re: [higgins-dev] JNDI.CO NLS change Diff path file        (Jim        pleaseseethis)





Prakash, your comments/answers all look good to me.  I'm ok with you making these changes in the HEAD branch.

Jim

>>> Prakash C Mallick <prakash.mallick@xxxxxxxxxx> 08/04/08 6:54 AM >>>

Hi Jim,
          Please see my comments below marked blue.


Thanks and Regards,
Prakash
---------------------------------------------------------------------------------------------------
Advisory Software Engineer,
Tivoli Security Products
ETZ, Plot No. 3 , Rajiv Gandhi Infotech Park
Phase II, Hinjewadi, Pune - 411057
Ph: +91-20-42025544
e-mail: prakash.mallick@xxxxxxxxxx
---------------------------------------------------------------------------------------------------



"Jim Sermersheim" <jimse@xxxxxxxxxx>
Sent by: higgins-dev-bounces@xxxxxxxxxxx

08/02/2008 01:45 AM

Please respond to
"Higgins \(Trust Framework\) Project developer discussions"        <higgins-dev@xxxxxxxxxxx>


To
<higgins-dev@xxxxxxxxxxx>
cc
Subject
Re: [higgins-dev] JNDI.CO NLS change Diff path file (Jim        please seethis)








Prakash, here are some notes/questions:


1) the.project file shows that you've added a builder that we don't use called com.ibm.etools.common.migration.MigrationBuilder.  Is that part of this change, or should we ignore that?


Prakash : Please ignore this .project file content as I used RAD (IBM's eclipse based IDE) for adding those changes.


2) (aesthetics only) we could shorted the names of the static strings in JNDIContextMessages by removing the "JNDICNTXT_"  since they are all in "JNDIContextMessages" we probably don't need this prefix.


Prakash: Agreed.


3) There are a number of methods in JNDIContextMessages that could be placed in a new project (like org.eclipse.higgins.util.localization) since these methods will likely be duplicated in other projects.


Prakash : Yes we should use a common component such as
 org.eclipse.higgins.util.localization as mentioned by you.
(Initially when I globalized these components here for our use, I was looking for such common component, but was bit hesitant to add another new component. But it seems this perfectly fine as per you to add one such compoenent.)


4) (aesthetics only) I'd prefer to rename JNDIContextMessages to JNDICPMessages so it doesn't make people think it contains only messages for JNDICOntext.java

Prakash : Agreed.

5) Would people prefer to have a single bind method which takes a string and an array of objects rather than a lot of overloaded bind methods?

Prakash : This is possible, but each time somebody wants to make a bind call, he has to take the burden of converting these  arguments to Object arrays. Overloading these methods will increase the usability in my opinion.


6) In the .properties file, can we place comments in front of lines which have replacement variables (like {0} and {1}).  for example:

# {0} is an error code and {1} is an entity ID
SOME_STATIC_STRING=Encountered error code {0} while reading entity: {1}
 

This will help translators build text that makes more sense


Prakash : Yes we can use comments as # . This properties are nothing but Java ResourceBundle propeties files .


7) Note that some of these files will need to be merged up to the latest code since a number of changes have taken place since you started editing.


Prakash : If you please provide me the  branch information of latest code, I can extract and merge the final changes after I get the confirmation from you on above changes.


Jim and Tom


>>> Prakash C Mallick <prakash.mallick@xxxxxxxxxx> 08/01/08 5:32 AM >>>


Hi Jim,
    I am attaching a new zip file  jndi_cp_nls_change.zip to this Change Request for review.
This zip file contains following entitities
      1. jndicp_nls_change_patch.txt (diff patch created using eclipse IDE after merging nls change)
      2. nls.jar (The nls change that is needed by jndicp needs   during build and run time)
      3. org.eclipse.higgins.idas.cp.jndi (modified source files)

Please make sure nls.jar is in your runtime and build time class path if you want to test or build the above changes. I hope you must be aware of that,  Mary Ruddy is already working on the approval of all legal issues associated with this package(nls.jar which is created from eclipse's nls OSGI bundle).

NOTES : In jndi-cp there are many log calls as "_log.debug(...msg.) .I found these calls are enabled by default immaterial of debug or normal mode of execution, so I have gloablized these messages .



Thanks and Regards,
Prakash
---------------------------------------------------------------------------------------------------
Advisory Software Engineer,
Tivoli Security Products
ETZ, Plot No. 3 , Rajiv Gandhi Infotech Park
Phase II, Hinjewadi, Pune - 411057
Ph: +91-20-42025544
e-mail: prakash.mallick@xxxxxxxxxx
---------------------------------------------------------------------------------------------------
_______________________________________________
higgins-dev mailing list
higgins-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/higgins-dev

_______________________________________________
higgins-dev mailing list
higgins-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/higgins-dev

Attachment: jndi-cp-nls-changes.zip
Description: Zip archive

Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/.project
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/.project	(revision 20094)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/.project	(working copy)
@@ -6,6 +6,11 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>com.ibm.etools.common.migration.MigrationBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.wst.common.project.facet.core.builder</name>
 			<arguments>
 			</arguments>
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java	(revision 20094)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java	(working copy)
@@ -47,7 +47,9 @@
  * @author jimse@xxxxxxxxxx
  * 
  */
+import org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages;
 
+
 public class JNDIEntity extends BasicEntity implements IEntity
 {
 	private Log _log = LogFactory.getLog(JNDIEntity.class.getName());
@@ -164,7 +166,7 @@
 			if (_jndiResult != null)
 				_consumerEntityID = _context.providerEntityIDToConsumer(_getNameInNamespace(_jndiResult));
 			else
-				throw new IdASException("No entity ID is set.");
+				throw new IdASException(JNDICPMessages.NO_EID_SET);
 		}
 		return _consumerEntityID;
 	}
@@ -178,7 +180,7 @@
 			if (_jndiResult != null)
 				_type = _context.getSearchResultType(_jndiResult);
 			else
-				throw new IdASException("No entity type set.");
+				throw new IdASException(JNDICPMessages.NO_TYPE_SET);
 		}
 		return _type; 
 	}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/LDAPHigginsSSLSocketFactoryProducer.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/LDAPHigginsSSLSocketFactoryProducer.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/LDAPHigginsSSLSocketFactoryProducer.java	(revision 0)
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import javax.naming.NamingException;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.SocketFactory;
+
+import org.eclipse.higgins.util.socket.HigginsSSLSocketFactory;
+
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.net.InetAddress;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ */
+public class LDAPHigginsSSLSocketFactoryProducer extends SSLSocketFactory
+{
+	private static LDAPHigginsSSLSocketFactoryProducer _myInstance;
+	private HigginsSSLSocketFactory _factory;
+
+	/**
+	 * 
+	 * @param factory
+	 */
+	private LDAPHigginsSSLSocketFactoryProducer(
+		HigginsSSLSocketFactory factory)
+	{
+		super();
+		_factory = factory;
+	}
+
+	/**
+	 * Produces a single instance of HigginsSSLSocketFactory 
+	 */
+	public static SocketFactory getDefault()
+	{
+		if (_myInstance == null)
+			_myInstance = new LDAPHigginsSSLSocketFactoryProducer(
+				(HigginsSSLSocketFactory)HigginsSSLSocketFactory.getDefault());
+		return _myInstance;
+	}
+
+	/**
+	 * 
+	 * @param keyStoreFile
+	 */
+	public void setKeyStore(
+		File keyStoreFile,
+		String keyStorePassword)
+	{
+		_factory.setKeyStore(keyStoreFile, keyStorePassword);
+	}
+
+	/**
+	 * 
+	 * @throws NamingException
+	 */
+	public void reloadKeyStore() throws NamingException
+	{
+		_factory.reloadKeyStore();
+	}
+
+	/**
+	 * 
+	 */
+	public String[] getDefaultCipherSuites()
+	{
+		return _factory.getDefaultCipherSuites();
+	}
+
+	/**
+	 * 
+	 */
+	public String[] getSupportedCipherSuites()
+	{
+		return _factory.getSupportedCipherSuites();
+	}
+
+	/**
+	 * 
+	 */
+	public Socket createSocket(
+		String host,
+		int port,
+		InetAddress clientHost,
+		int clientPort) throws IOException, UnknownHostException
+	{
+		return _factory.createSocket(host, port, clientHost, clientPort);
+	}
+
+	/**
+	 * 
+	 */
+	public Socket createSocket(
+		InetAddress inetAddress,
+		int i,
+		InetAddress inetAddress1,
+		int i1) throws IOException
+	{
+		return _factory.createSocket(inetAddress, i, inetAddress1, i1);
+	}
+
+	/**
+	 * 
+	 */
+	public Socket createSocket(
+		String host,
+		int port) throws IOException, UnknownHostException
+	{
+		return _factory.createSocket(host, port);
+	}
+
+	/**
+	 * 
+	 */
+	public Socket createSocket(
+		InetAddress inetAddress,
+		int i) throws IOException
+	{
+		return _factory.createSocket(inetAddress, i);
+	}
+
+	/**
+	 * 
+	 */
+	public Socket createSocket(
+		Socket socket,
+		String host,
+		int port,
+		boolean autoClose) throws IOException, UnknownHostException
+	{
+		return _factory.createSocket(socket, host, port, autoClose);
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIEntity.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIEntity.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIEntity.java	(revision 0)
@@ -0,0 +1,430 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ *		Jim Sermersheim
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchResult;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.higgins.idas.api.IAttribute;
+import org.eclipse.higgins.idas.api.IEntity;
+import org.eclipse.higgins.idas.api.ISimpleAttrValue;
+import org.eclipse.higgins.idas.api.IdASException;
+import org.eclipse.higgins.idas.api.InvalidTypeException;
+import org.eclipse.higgins.idas.api.NotImplementedException;
+import org.eclipse.higgins.idas.spi.AttributeNotification;
+import org.eclipse.higgins.idas.spi.BasicEntity;
+import org.eclipse.higgins.idas.spi.IEntityContainer;
+import org.eclipse.higgins.idas.spi.BasicAttribute;
+import org.eclipse.higgins.idas.spi.BasicAttributeSet;
+import org.eclipse.higgins.idas.spi.BasicSimpleValue;
+import org.eclipse.higgins.idas.spi.EntityNotification;
+import org.eclipse.higgins.idas.api.model.IEntityModel;
+import org.eclipse.higgins.util.idas.cp.BasicAttributePDP;
+import org.eclipse.higgins.util.idas.cp.BasicAttributePDPIter;
+import org.eclipse.higgins.util.idas.cp.IAttributePDPs;
+
+import org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages;
+
+/**
+ * 
+ * @author tdoman@xxxxxxxxxx
+ * @author jimse@xxxxxxxxxx
+ * 
+ */
+
+public class JNDIEntity extends BasicEntity implements IEntity
+{
+	private Log _log = LogFactory.getLog(JNDIEntity.class.getName());
+	private JNDIContext _context;
+	private SearchResult _jndiResult;
+	private IAttributePDPs _attrPDPs;
+	private String _entityID;
+	private URI _type;
+	private IEntityContainer _container;
+	private Vector _readListJNDI = new Vector();
+	private boolean _bReadAllJNDI = false;
+	private String _searchBase;
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param jndiResult
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		SearchResult jndiResult,
+		String searchBase,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext);
+		_context = jndiContext;
+		_container = jndiContext;
+		_jndiResult = jndiResult;
+		_searchBase = searchBase;
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param type
+	 * @param entityID
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		URI type,
+		String entityID,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext, type, entityID);
+		_context = jndiContext;
+		_container = jndiContext;
+		_entityID = _context.consumerEntityIDToProvider(entityID);
+		_type = type;
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param copyFrom
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		IEntity copyFrom,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext, copyFrom.getModel().getType(), copyFrom.getEntityID());
+		_context = jndiContext;
+		_container = jndiContext;
+		_entityID = _context.consumerEntityIDToProvider(copyFrom.getEntityID());
+		_type = copyFrom.getModel().getType();
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 */
+	private String _getNameInNamespace(
+		SearchResult jndiResult) // throws IdASException
+	{
+		String retStr;
+//		try
+//		{
+			retStr = _jndiResult.getName();
+			if (retStr.length() == 0)
+				retStr = _searchBase;
+			else if (_searchBase.length() > 0)
+				retStr = retStr + "," + _searchBase;
+			// HACK: composeName does not work to create full names in 1.4 for some reason and
+			//		 getNameInNamespace is only in Java 1.5.  LDAP specific hack coded above.
+			// retStr = _context.getDirContext().composeName(_jndiResult.getName(), _searchBase);
+			
+			/* Here's something we should try
+			 * NameParser parser = _context.getDirContext().getNameParser(_jndiResult.getName());
+			 * parser.add(_searchBase);
+			 * return parser.toString();
+ 			 */
+//		}
+//		catch (NamingException e)
+//		{
+//			throw new IdASException(e);
+//		}
+		return retStr;
+	}
+
+	/**
+	 */
+	public String getEntityID() throws IdASException
+	{
+		if (_entityID == null)
+		{
+			if (_jndiResult != null)
+				_entityID = _context.providerEntityIDToConsumer(_getNameInNamespace(_jndiResult));
+			else
+				throw new IdASException(JNDICPMessages.NO_EID_SET);
+		}
+		return _entityID;
+	}
+
+	/**
+	 */
+	public URI getEntityType() throws IdASException
+	{
+		if (_type == null)
+		{
+			if (_jndiResult != null)
+				_type = _context.getSearchResultType(_jndiResult);
+			else
+				throw new IdASException(JNDICPMessages.NO_TYPE_SET);
+		}
+		return _type; 
+	}
+
+	/**
+	 */
+	public Iterator getAttributes() throws IdASException
+	{
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();		
+		boolean bHasItems = attrSet.getAttributes().hasNext();
+
+		if (!_bReadAllJNDI  && (_jndiResult != null))
+		{
+			NamingEnumeration jndiEnum;
+			Attributes jndiAttrs = _jndiResult.getAttributes();
+			jndiEnum = jndiAttrs.getAll();
+			try
+			{
+				while (jndiEnum.hasMore())
+				{
+					Attribute jndiAttr = (Attribute) jndiEnum.next();
+					NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
+					URI attrURI = new URI(jndiAttr.getID());
+					BasicAttribute attr = null;
+	
+					if (!bHasItems || (attrSet.getAttribute(attrURI) == null))
+					{
+						// TODO: Map based on syntaxes.
+						attr = attrSet.addUnnotifiedAttribute(attrURI);
+						while (jndiAttrValEnum.hasMore())
+						{
+							Object jndiValue = jndiAttrValEnum.next();
+							if (jndiValue instanceof String)
+							{
+								_log.debug("Attr: " + jndiAttr.getID() + " is a String");
+								attr.addSimpleValue(ISimpleAttrValue.STRING_TYPE_URI, (String) jndiValue);
+							}
+							else if (jndiValue instanceof byte[])
+							{
+								_log.debug("Attr: " + jndiAttr.getID() + " is a byte[]");
+								attr.addSimpleValue(ISimpleAttrValue.BASE64BINARY_TYPE_URI,
+									(byte[]) jndiValue);
+							}
+							else
+							{
+								_log.debug(jndiValue.getClass().toString());
+								attr.addSimpleValue(new URI(BasicSimpleValue.ATTR_VALUE_TYPE_URI_STR), jndiValue);
+							}
+						}
+						attr.setContainer(attrSet);
+						_readListJNDI.add(attrURI);
+					}
+				}
+				_bReadAllJNDI = true;
+			}
+			catch (NamingException e)
+			{
+				throw new IdASException(e);
+			}
+			catch (URISyntaxException e)
+			{
+				throw new IdASException(e);
+			}
+		}
+
+		/* No support for metadata PDPs. */
+		return new BasicAttributePDPIter(_attrPDPs, null, null, attrSet.getAttributes(), true);
+	}
+
+	/**
+	 */
+	public IAttribute getAttribute(
+		URI consumerAttrName) throws IdASException
+	{
+		IAttribute retAttr = null;
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+
+		out: try
+		{
+			Iterator itr = _attrPDPs.consumerIDToProviders(consumerAttrName);
+			URI providerAttrName = null;
+
+			while (itr.hasNext())
+			{
+				providerAttrName = (URI) itr.next();
+				if (_readListJNDI.contains(providerAttrName))
+				{
+					retAttr = attrSet.getAttribute(providerAttrName);
+					_log.debug(providerAttrName + " already placed attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+					break out;
+				}
+				else if ((retAttr = attrSet.getAttribute(providerAttrName)) != null)
+				{
+					_log.debug(providerAttrName + " already added attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+					break out;
+				}
+				else if (_jndiResult != null)
+				{
+					BasicAttribute attr = null;
+					Attributes jndiAttrs = _jndiResult.getAttributes();
+					NamingEnumeration jndiEnum = jndiAttrs.getAll();
+					while (jndiEnum.hasMore())
+					{
+						Attribute jndiAttr = (Attribute) jndiEnum.next();
+						URI attrURI = new URI(jndiAttr.getID());
+
+						if (providerAttrName.compareTo(attrURI) == 0)
+						{
+							NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
+							attr = attrSet.addUnnotifiedAttribute(attrURI);
+							while (jndiAttrValEnum.hasMore())
+							{
+								Object jndiValue = jndiAttrValEnum.next();
+								if (jndiValue instanceof String)
+								{
+									_log.debug("Attr: " + jndiAttr.getID() + " is a String");
+									attr.addSimpleValue(ISimpleAttrValue.STRING_TYPE_URI,
+										(String) jndiValue);
+								}
+								else if (jndiValue instanceof byte[])
+								{
+									_log.debug("Attr: " + jndiAttr.getID() + " is a byte[]");
+									attr.addSimpleValue(ISimpleAttrValue.BASE64BINARY_TYPE_URI,
+										(byte[]) jndiValue);
+								}
+								else
+								{
+									_log.debug(jndiValue.getClass().toString());
+									attr.addSimpleValue(new URI(BasicSimpleValue.ATTR_VALUE_TYPE_URI_STR), jndiValue);
+								}
+							}
+							attr.setContainer(attrSet);
+							retAttr = attr;
+							_readListJNDI.add(attrURI);
+							_log.debug("Placed [" + attr.getAttrID().toString() + "] into attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+							break out;
+						}
+					}
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			throw new IdASException(e);
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+
+		if (retAttr != null)
+			return new BasicAttributePDP(_attrPDPs, null, null, retAttr, true);
+		else
+			return retAttr;
+	}
+
+	/*
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#addAttribute(org.eclipse.higgins.idas.api.IAttribute)
+	 */
+	public IAttribute addAttribute(
+		IAttribute copyFrom) throws IdASException
+	{
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+		BasicAttributePDP attrPDP = new BasicAttributePDP(_attrPDPs, null, null, copyFrom, false);
+		IAttribute attr = attrSet.getAttribute(attrPDP.getAttrID()); 
+			
+		if (attr != null)
+			return attr;
+		else
+			return super.addAttribute(attrPDP);
+	}
+
+	/*
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#addAttribute(java.net.URI)
+	 */
+	public IAttribute addAttribute(
+		URI type) throws IdASException, InvalidTypeException
+	{
+		Iterator itr = _attrPDPs.consumerIDToProviders(type);
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+		URI providerType = (URI)itr.next();
+		IAttribute attr = attrSet.getAttribute(providerType);
+
+		if (attr != null)
+			return attr;
+		else
+			return super.addAttribute(providerType);
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttribute(java.net.URI)
+	 */
+	public void removeAttribute(URI attrID) throws IdASException {
+		Iterator itr = _attrPDPs.consumerIDToProviders(attrID);
+		if (itr != null) {
+			URI providerType = (URI)itr.next();
+			super.removeAttribute(providerType);
+		} else {
+			super.removeAttribute(attrID);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttributeValue(IAttribute)
+	 */
+	public void removeAttributeValue(IAttribute attr) throws IdASException {
+		BasicAttributePDP attrPDP = new BasicAttributePDP(_attrPDPs, null, null, attr, false);
+		super.removeAttributeValue(attrPDP);
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttributeValue(URI, Object)
+	 */
+	public void removeAttributeValue(URI attrID, Object value) throws IdASException {
+		Iterator itr = _attrPDPs.consumerIDToProviders(attrID);
+		if (itr != null) {
+			URI providerType = (URI)itr.next();
+			super.removeAttributeValue(providerType, value);
+		} else {
+			super.removeAttributeValue(attrID, value);
+		}
+	}
+	
+
+	public void remove() throws IdASException
+	{
+		if (_container != null)
+		{
+			_container.updateNotification(new EntityNotification(this, EntityNotification.UPDATE_REMOVE,
+				null));
+		}
+	}
+
+	public void updateNotification(
+		AttributeNotification attrNotif) throws IdASException
+	{
+		_log.debug("Received attribute update notification - " + attrNotif.getAction() + ", " + attrNotif.getAttr().getAttrID().toString());
+		_log.debug("_containter " + ((_container != null) ? _container.toString() : "null"));		
+		if (_container != null)
+		{
+			_container.updateNotification(new EntityNotification(this, EntityNotification.UPDATE_ATTR_NOTIFY,
+				attrNotif));
+		}
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactory.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactory.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactory.java	(revision 0)
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ *		Jim Sermersheim
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.List;
+
+import org.eclipse.higgins.configuration.api.IConfigurableComponent;
+import org.eclipse.higgins.configuration.api.ISettingDescriptor;
+import org.eclipse.higgins.idas.api.IContext;
+import org.eclipse.higgins.idas.api.IContextFactory;
+import org.eclipse.higgins.idas.api.IContextId;
+import org.eclipse.higgins.idas.api.IdASException;
+import org.eclipse.higgins.idas.api.NotImplementedException;
+import org.eclipse.higgins.idas.spi.BasicAttributeSet;
+import org.eclipse.higgins.configuration.api.IConfigurationHandler;
+import org.eclipse.higgins.configuration.common.SettingDescriptor;
+/**
+*
+* @author tdoman@xxxxxxxxxx
+* @author jimse@xxxxxxxxxx
+*
+*/
+
+public class JNDIContextFactory extends BasicAttributeSet implements IContextFactory, IConfigurableComponent
+{
+//	private Logger _log = Logger.getLogger(JNDIContextFactory.class.getName());
+//	private Map _mapGlobalSettings;
+//	private Map _mapComponentSettings;
+	
+	private ISettingDescriptor _contextFactoryDescriptor = null;
+	private List _contextTypesList = null;
+	private String _contextFactoryClassName = null;
+
+	/**
+	 */
+	public JNDIContextFactory() throws IdASException
+	{
+		super();
+	}
+
+	/**
+	 */
+	public String getName() throws IdASException
+	{
+		return _contextFactoryClassName;
+	}
+
+	/**
+	 */
+	public Iterator getContexts(
+	    String filter) throws IdASException
+	{
+		throw new NotImplementedException();
+	}
+
+	/**
+	 */
+	public IContext createContext(
+		IContextId contextID) throws IdASException
+	{
+		return new JNDIContext(contextID);
+	}
+
+	/**
+	 */
+	public String getPolicy() throws IdASException
+	{
+		throw new NotImplementedException();
+	}
+
+	/**
+	 */
+	public void setPolicy(
+		String arg0) throws IdASException
+	{
+		throw new NotImplementedException();
+	}
+
+	/**
+	 * 
+	 * @param mapGlobalSettings
+	 * @param strComponentName
+	 * @param mapComponentSettings
+	 * @throws Exception
+	 */
+	public void configure(
+		final Map mapGlobalSettings,
+		final String strComponentName,
+		final Map mapComponentSettings,
+		final ISettingDescriptor componentDescriptor,
+		final ISettingDescriptor globalDescriptor) throws Exception
+	{
+		if ( mapComponentSettings != null ) { 
+			this._contextFactoryClassName = (String)mapComponentSettings.get("Instance");
+			this._contextTypesList = (List)mapComponentSettings.get("ContextTypes");
+		}
+		this._contextFactoryDescriptor = componentDescriptor;
+	}
+	
+	public ISettingDescriptor getComponentDescriptor() { 
+		return this._contextFactoryDescriptor;
+	}
+	
+	public List getTypes() throws IdASException { 
+		return this._contextTypesList;
+	}
+	
+	public ISettingDescriptor getContextDescriptor(String contextIdName) throws IdASException { 
+		ISettingDescriptor settingDescriptor = new SettingDescriptor(contextIdName, "htf:map");
+		settingDescriptor.addSubSetting("ContextId", "xsd:string");
+		ISettingDescriptor typesDescriptor = settingDescriptor.addSubSetting("ContextTypes", "htf:list");
+		for ( int i = 0; i < this._contextTypesList.size(); i++ ) { 
+			typesDescriptor.addSubSetting("JNDIContextType", "xsd:string"); //TODO: Is this right? 
+		}
+		ISettingDescriptor connectionDescriptor = settingDescriptor.addSubSetting("Connection", "htf:map");
+		ISettingDescriptor addrDescriptor = connectionDescriptor.addSubSetting("AddressList", "htf:list");
+		addrDescriptor.addSubSetting("Address", "xsd:string");
+		connectionDescriptor.addSubSetting("ConnectionType", "xsd:string");
+		connectionDescriptor.addSubSetting("jndiProvider", "xsd:string");
+		connectionDescriptor.addSubSetting("searchBase", "xsd:string");
+		ISettingDescriptor policyDescriptor = settingDescriptor.addSubSetting("JSPolicyAction", "htf:map");
+		policyDescriptor.addSubSetting("consumerAIDToProvider", "htf:jscriptexec");
+		policyDescriptor.addSubSetting("providerAIDToConsumer", "htf:jscriptexec");
+		policyDescriptor.addSubSetting("consumerEntityTypeToProvider", "htf:jscriptexec");
+		policyDescriptor.addSubSetting("providerEntityTypeToConsumer", "htf:jscriptexec");
+		return settingDescriptor;
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContext.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContext.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContext.java	(revision 0)
@@ -0,0 +1,2100 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ *		Jim Sermersheim
+ *		Duane Buss
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.SocketException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.ByteBuffer;
+import java.security.Provider;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+import java.util.Vector;
+import java.util.Map.Entry;
+
+import javax.naming.CommunicationException;
+import javax.naming.Context;
+import javax.naming.NameClassPair;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+import javax.naming.ldap.StartTlsRequest;
+import javax.naming.ldap.StartTlsResponse;
+import javax.net.ssl.SSLSession;
+//import com.sun.jndi.ldap.ctl.ProxiedAuthorizationControl;
+
+import openxdas.XDasEvents;
+import openxdas.XDasException;
+import openxdas.XDasOutcomes;
+import openxdas.XDasRecord;
+import openxdas.XDasSession;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.dom4j.dom.DOMDocument;
+import org.dom4j.dom.DOMElement;
+import org.dom4j.dtd.InternalEntityDecl;
+import org.dom4j.tree.DefaultDocumentType;
+import org.eclipse.higgins.idas.api.AuthenticationException;
+import org.eclipse.higgins.idas.api.ContextNotOpenException;
+import org.eclipse.higgins.idas.api.ContextOpenException;
+import org.eclipse.higgins.idas.api.IAttribute;
+import org.eclipse.higgins.idas.api.IContextId;
+import org.eclipse.higgins.idas.api.IEntity;
+import org.eclipse.higgins.idas.api.IFilter;
+import org.eclipse.higgins.idas.api.IFilterAttributeAssertion;
+import org.eclipse.higgins.idas.api.IAttributeValue;
+import org.eclipse.higgins.idas.api.ISimpleAttrValue;
+import org.eclipse.higgins.idas.api.IdASException;
+import org.eclipse.higgins.idas.api.NoSuchEntityException;
+import org.eclipse.higgins.idas.api.NotImplementedException;
+import org.eclipse.higgins.idas.api.EntityExistsException;
+import org.eclipse.higgins.idas.api.model.IContextModel;
+import org.eclipse.higgins.idas.spi.BasicContext;
+import org.eclipse.higgins.idas.common.AuthNAnonymousMaterials;
+import org.eclipse.higgins.idas.common.AuthNDigestMaterials;
+import org.eclipse.higgins.idas.common.AuthNLeastPrivilegedUserMaterials;
+import org.eclipse.higgins.idas.common.AuthNNamePasswordMaterials;
+import org.eclipse.higgins.idas.spi.AttributeNotification;
+import org.eclipse.higgins.idas.spi.AttributeValueNotification;
+import org.eclipse.higgins.idas.spi.BasicFilter;
+import org.eclipse.higgins.idas.spi.BasicFilterAssertion;
+import org.eclipse.higgins.idas.spi.BasicFilterAttributeAssertion;
+import org.eclipse.higgins.idas.spi.BasicFilterEntityTypeAssertion;
+import org.eclipse.higgins.idas.spi.BasicValueBase64Binary;
+import org.eclipse.higgins.idas.spi.BasicValueHexBinary;
+import org.eclipse.higgins.idas.spi.BasicValueLanguage;
+import org.eclipse.higgins.idas.spi.BasicValueNCName;
+import org.eclipse.higgins.idas.spi.BasicValueNMTOKEN;
+import org.eclipse.higgins.idas.spi.BasicValueName;
+import org.eclipse.higgins.idas.spi.BasicValueNormalizedString;
+import org.eclipse.higgins.idas.spi.BasicValueString;
+import org.eclipse.higgins.idas.spi.BasicValueToken;
+import org.eclipse.higgins.idas.spi.EntityNotification;
+import org.eclipse.higgins.util.saml.SAML1Assertion;
+import org.eclipse.higgins.util.saml.SAML1Subject;
+import org.eclipse.higgins.util.idas.cp.jscript.JScriptCPAttributePDPs;
+import org.eclipse.higgins.util.jscript.JScriptException;
+import org.eclipse.higgins.util.jscript.JScriptExec;
+import org.eclipse.higgins.util.jscript.JScriptExecHelper;
+
+import org.bandit.util.jndi.RfcFilter;
+import org.bandit.util.misc.CIStringKey;
+import org.bandit.util.misc.NonEscapedAttrXMLWriter;
+
+import com.novell.ldap.LDAPLocalException;
+
+import org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages;
+
+
+
+/**
+ * 
+ * @author tdoman@xxxxxxxxxx
+ * @author jimse@xxxxxxxxxx
+ * @author dbuss@xxxxxxxxxx
+ */
+
+public class JNDIContext extends BasicContext
+{
+	private Log _log = LogFactory.getLog(JNDIContext.class.getName());
+	private LdapContext _ctx;
+	private Map _contextSettings;	
+	private Map _connectionSettings;
+	private Hashtable _env;
+	private HashMap _schemaAttrDomainHashMap;
+	private HashMap _schemaAttrCaseHashMap;
+	private HashMap _syntaxHashMap;
+	private IContextId _contextID;
+	private boolean _bIsOpen = false;
+	private String _currAddr, _entityID, _contextURIs = "", _contextTypes = "";
+	private XDasSession _xdasSession;
+	private Object _identity;
+	private boolean _bStartTLS = false;
+	private StartTlsResponse _tls;
+//	private ProxiedAuthorizationControl proxyAuthZ;
+
+	public static final String consumerEntityIDToProvider = "consumerEntityIDToProvider";
+	public static final String providerEntityIDToConsumer = "providerEntityIDToConsumer";
+	public static final String consumerEntityTypeToProvider = "consumerEntityTypeToProvider";
+	public static final String providerEntityTypeToConsumer = "providerEntityTypeToConsumer";
+	public static final String consumerAIDToProvider = "consumerAIDToProvider";
+	public static final String providerAIDToConsumer = "providerAIDToConsumer";
+	public static final String consumerATypeToProvider = "consumerATypeToProvider";
+	public static final String providerATypeToConsumer = "providerATypeToConsumer";
+	public static final String consumerAValueToProvider = "consumerAValueToProvider";
+	public static final String providerAValueToConsumer = "providerAValueToConsumer";
+
+	private JScriptExec _consumerEntityIDToProviderExec;
+	private JScriptExec _providerEntityIDToConsumerExec;
+	private JScriptExec _consumerEntityTypeToProviderExec;
+	private JScriptExec _providerEntityTypeToConsumerExec;
+	private JScriptCPAttributePDPs _attrPDPs;
+	private boolean _bSetupPDPs = true;
+
+	private class SyntaxMap
+	{
+		private String _label;
+		private String _urlName;
+		private String _owlType;
+
+		SyntaxMap(
+			String label,
+			String owlType)
+		{
+			_label = label;
+			_urlName = label.replaceAll(" ", "");
+			_owlType = owlType;
+		}
+
+		public String getLabel()
+		{
+			return _label;
+		}
+
+		public String getURLName()
+		{
+			return "syntax_" + _urlName;
+		}
+
+		public String getOWLType()
+		{
+			return _owlType;
+		}
+	};
+
+	/**
+	 */
+	public JNDIContext(
+		IContextId contextID) throws IdASException
+	{
+		int iLoop = 0;
+
+		_contextID = contextID;
+		_contextSettings = contextID.getConfiguration();
+		_connectionSettings = (Map)_contextSettings.get("Connection");
+		if (_connectionSettings == null)
+			throw new IdASException(JNDICPMessages.NO_JNDI_CONN);
+		_env = new Hashtable();
+
+		URI contextURIs[] = _contextID.getUris();
+		for (iLoop = 0; iLoop < contextURIs.length; ++iLoop)
+			_contextURIs = _contextURIs + contextURIs[iLoop].toString() + ", ";
+
+		String contextTypes[] = _contextID.getTypes();
+		for (iLoop = 0; iLoop < contextTypes.length; ++iLoop)
+			_contextTypes = _contextTypes + contextTypes[iLoop] + ", ";
+
+		_initSyntaxMap();
+		_initXDASSession();
+	}
+
+	/**
+	 */
+	private void _initXDASSession() throws IdASException
+	{
+		try
+		{
+			_xdasSession = new XDasSession("Higgins IdAS JNDI Context Provider", null, null,
+				null, null, null);
+		}
+		catch (XDasException e)
+		{
+			throw new IdASException(e);
+		}
+		catch (SocketException e)
+		{
+			;
+		}
+		catch (IOException e)
+		{
+			;
+		}
+	}
+
+	/**
+	 */
+	private void _initSyntaxMap()
+	{
+		_syntaxHashMap = new HashMap();
+
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.3", new SyntaxMap(
+			"Attribute Type Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.6", new SyntaxMap("Bit String",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.7", new SyntaxMap("Boolean",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.11", new SyntaxMap("Country String",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.14", new SyntaxMap(
+			"Delivery Method", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.15", new SyntaxMap(
+			"Directory String", "&higgins;NormalizedStringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.16", new SyntaxMap(
+			"DIT Content Rule Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.17", new SyntaxMap(
+			"DIT Structure Rule Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.12", new SyntaxMap("DN",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.21", new SyntaxMap("Enhanced Guide",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.22", new SyntaxMap(
+			"Facsimile Telephone Number", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.23", new SyntaxMap("Fax",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.24", new SyntaxMap(
+			"Generalized Time", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.25", new SyntaxMap("Guide",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.26", new SyntaxMap("IA5 String",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.27", new SyntaxMap("Integer",
+			"&higgins;IntegerSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.28", new SyntaxMap("JPEG",
+			"&higgins;Base64BinarySimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.54", new SyntaxMap(
+			"LDAP Syntax Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.30", new SyntaxMap(
+			"Matching Rule Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.31", new SyntaxMap(
+			"Matching Rule Use Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.34", new SyntaxMap(
+			"Name and Optional UID", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.35", new SyntaxMap(
+			"Name Form Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.36", new SyntaxMap("Numeric String",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.37", new SyntaxMap(
+			"Object Class Description", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.40", new SyntaxMap("Octet String",
+			"&higgins;Base64BinarySimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.38", new SyntaxMap("OID",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.39", new SyntaxMap("Other Mailbox",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.41", new SyntaxMap("Postal Address",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.44", new SyntaxMap(
+			"Printable String", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.58", new SyntaxMap(
+			"Substring Assertion", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.50", new SyntaxMap(
+			"Telephone Number", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.51", new SyntaxMap(
+			"Teletex Terminal Identifier", "&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.52", new SyntaxMap("Telex Number",
+			"&higgins;StringSimpleAttribute"));
+		_syntaxHashMap.put("1.3.6.1.4.1.1466.115.121.1.53", new SyntaxMap("UTC Time",
+			"&higgins;StringSimpleAttribute"));
+	}
+
+	/**
+	 * @throws IdASException
+	 */
+	private void _emitXDASRecord(
+		int iEventNumber,
+		int iOutcome,
+		String sInitiatorInfo,
+		String sTargetInfo,
+		String sEventInfo) throws IdASException
+	{
+		if (_xdasSession != null)
+		{
+			if (sTargetInfo == null)
+				sTargetInfo = "";
+			if (sEventInfo == null)
+				sEventInfo = "";
+			try
+			{
+				XDasRecord xdasRecord = _xdasSession.XDasStartRecord(iEventNumber, iOutcome,
+					null, null, sEventInfo);
+				xdasRecord.setInitiatorInfo(null, null, sInitiatorInfo);
+				xdasRecord.setTargetInfo(null, _contextURIs, _contextTypes, null, null, sTargetInfo);
+				xdasRecord.commit();
+			}
+			catch (XDasException e)
+			{
+				throw new IdASException(e);
+			}
+			catch (IOException e)
+			{
+				throw new IdASException(e);
+			}
+		}
+	}
+
+	/**
+	 */
+	private String _lookupEntity(
+		IFilter lookupFilter) throws IdASException
+	{
+		String entityID = null;
+
+		if (lookupFilter != null)
+		{
+			Iterator entities = this.getEntities(lookupFilter);
+			while (entities.hasNext())
+			{
+				IEntity entity = (IEntity) entities.next();
+				if (entityID == null)
+					entityID = entity.getEntityID();
+				else
+					throw new IdASException(JNDICPMessages.NO_UNIQUE_IDENTITY);
+			}
+		}
+
+		return entityID;
+	}
+
+	/**
+	 */
+	public String open(
+		Object identity) throws IdASException
+	{
+		if (_bIsOpen)
+			throw new ContextOpenException();
+
+		boolean bSetupContext = _identity == null ? true : false;
+		if (bSetupContext || !_identity.equals(identity))
+		{
+			if (_bSetupPDPs)
+			{
+				Map jsPolicySettings = (Map)_contextSettings.get("JSPolicyAction");
+				if (jsPolicySettings != null)
+				{
+					_consumerEntityIDToProviderExec = (JScriptExec)jsPolicySettings.get(consumerEntityIDToProvider);
+					_log.debug(consumerEntityIDToProvider + " == " + _consumerEntityIDToProviderExec);
+					
+					_providerEntityIDToConsumerExec = (JScriptExec)jsPolicySettings.get(providerEntityIDToConsumer);
+					_log.debug(providerEntityIDToConsumer + " == " + _providerEntityIDToConsumerExec);
+					
+					_consumerEntityTypeToProviderExec = (JScriptExec)jsPolicySettings.get(consumerEntityTypeToProvider);
+					_providerEntityTypeToConsumerExec = (JScriptExec)jsPolicySettings.get(providerEntityTypeToConsumer);
+
+					_attrPDPs = new JScriptCPAttributePDPs(
+							(JScriptExec)jsPolicySettings.get(consumerAIDToProvider),
+							(JScriptExec)jsPolicySettings.get(providerAIDToConsumer),
+							(JScriptExec)jsPolicySettings.get(consumerATypeToProvider),
+							(JScriptExec)jsPolicySettings.get(providerATypeToConsumer),
+							(JScriptExec)jsPolicySettings.get(consumerAValueToProvider),
+							(JScriptExec)jsPolicySettings.get(providerAValueToConsumer),
+							false);
+
+					_bSetupPDPs = false;
+				}
+			}
+
+			Map envSettings = (Map)_contextSettings.get("env");
+			if (envSettings != null)
+			{
+				Set envSet = envSettings.entrySet();
+				Iterator iter = envSet.iterator();
+
+				while (iter.hasNext())
+				{
+					Entry envEntry = (Entry)iter.next();
+					_env.put(envEntry.getKey(), envEntry.getValue());
+				}
+			}
+
+			IFilter lookupFilter = null;
+			_identity = identity;
+			// Override specific environment elements.
+			if (identity instanceof AuthNNamePasswordMaterials)
+			{
+				_env.put(Context.SECURITY_AUTHENTICATION, "simple");
+				_entityID = ((AuthNNamePasswordMaterials) identity).getUsername();
+				_env.put(Context.SECURITY_PRINCIPAL, consumerEntityIDToProvider(_entityID));
+				_env.put(Context.SECURITY_CREDENTIALS,
+					((AuthNNamePasswordMaterials) identity).getPassword());
+				_log.debug("attempt open using simple auth with user: " + _entityID 
+						+" mapped to: " + consumerEntityIDToProvider(_entityID));
+			}
+			else if (identity instanceof AuthNDigestMaterials)
+			{
+					BasicValueBase64Binary base64Value = new BasicValueBase64Binary(
+						((AuthNDigestMaterials)identity).getSHA1Digest(), null);
+					BasicFilterAttributeAssertion attrAssertion = new BasicFilterAttributeAssertion();
+					attrAssertion.setID(URI.create("cardKeyHash"));
+					attrAssertion.setComparator(BasicFilterAttributeAssertion.COMP_ATTR_EQ);
+					attrAssertion.setAssertionValue(new BasicValueString(base64Value
+						.getLexical(), null));
+					lookupFilter = new BasicFilter();
+					lookupFilter.setAssertion(attrAssertion);
+					_log.debug("attempt open using digestmaterials: " + base64Value.getLexical());
+			}
+			else if (identity instanceof AuthNLeastPrivilegedUserMaterials)
+			{
+				_entityID = (String) _env.get(Context.SECURITY_PRINCIPAL);
+				_log.debug("attempt open using least privileged user: " + _entityID);
+			}
+			else if (identity instanceof AuthNAnonymousMaterials)
+			{
+				_log.debug("attempt open using anonymous materials");
+				_env.put(Context.SECURITY_AUTHENTICATION, "none");
+				Object obj = _env.get(Context.SECURITY_PRINCIPAL);
+				_env.remove(obj);
+				obj = _env.get(Context.SECURITY_CREDENTIALS);
+				_env.remove(obj);
+			}
+			else if (identity instanceof SAML1Assertion)
+			{
+				try
+				{
+					String saslClientPackage = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.saslClientPackage"),
+							saslClientProvider = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.saslClientProvider");
+
+					if ((saslClientPackage == null) || (saslClientProvider == null))
+						throw new IdASException(JNDICPMessages.NO_SASLSAML_CLIENT);
+
+					// Make sure the SAML/SASL security provider is loaded
+					if (java.security.Security.getProvider("SAML SASL Mechanism") == null)
+					{
+						Class saslClientProviderClass = Class.forName(saslClientPackage + "." + saslClientProvider);
+						java.security.Security.addProvider((Provider)saslClientProviderClass.newInstance());
+					}
+
+					SAML1Assertion assertion = (SAML1Assertion)identity;
+					SAML1Subject subject = assertion.getSubject();
+					if (subject.getNameIDFormat().indexOf("X509SubjectName") == -1)
+						throw new IdASException(JNDICPMessages.UNSUPPORTED_FORMAT_SAML_ASSERT); 
+					_entityID = subject.getNameID();
+					_env.put(Context.SECURITY_PRINCIPAL, _entityID);
+					_env.put(Context.SECURITY_PROTOCOL, "ssl");
+					_env.put(Context.SECURITY_AUTHENTICATION, "SAML");
+					_env.put("java.naming.security.sasl.authorizationId", _entityID);
+					_env.put("javax.security.sasl.client.pkgs", saslClientPackage);
+					_env.put(Context.SECURITY_CREDENTIALS, assertion.toString());
+				}
+				catch (ClassNotFoundException e)
+				{
+					throw new IdASException(e);
+				}
+				catch (InstantiationException e)
+				{
+					throw new IdASException(e);
+				}
+				catch (IllegalAccessException e)
+				{
+					throw new IdASException(e);
+				}
+			}
+			else
+			{
+				throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.UNSUPPORTED_AUTHN_MATERIALS,identity.toString()));
+			}
+
+			try
+			{
+				if (bSetupContext == true)
+				{
+					_setupContext();
+
+					String str = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.startTLS"), trustStore;
+					if ((str != null) && (str.compareTo("true")) == 0)
+					{
+						_bStartTLS = true;
+						_tls = (StartTlsResponse) _ctx.extendedOperation(new StartTlsRequest());
+						SSLSession sess;
+						if ((trustStore = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.trustStore")) != null)
+						{
+							_setupCustomSSLSocketFactory(trustStore, (String) _env.get("org.eclipse.higgins.idas.cp.jndi.trustStorePassword"));
+							sess = _tls.negotiate((LDAPHigginsSSLSocketFactoryProducer)LDAPHigginsSSLSocketFactoryProducer.getDefault());
+						}
+						else
+						{
+							sess = _tls.negotiate();
+						}
+						_log.debug("Start TLS request successful: Host (" + sess.getPeerHost()
+							+ ")" + ", Protocol ("
+							+ sess.getProtocol() + ")");
+					}
+
+					_emitXDASRecord(XDasEvents.XDAS_AE_CREATE_SESSION,
+						XDasOutcomes.XDAS_OUT_SUCCESS, _getIdentity(), null, null);
+					_log.debug("Context opened: " + _contextURIs + " as: " + _getIdentity());
+				}
+				else
+				{
+					Iterator envIter = _env.entrySet().iterator();
+					while (envIter.hasNext())
+					{
+						Map.Entry me = (Map.Entry) envIter.next();
+						_ctx.addToEnvironment((String) me.getKey(), me.getValue());
+					}
+					_ctx.reconnect(null);
+				}
+			}
+			catch (NamingException e)
+			{
+				_handleNamingException(e);
+			}
+			catch (IOException e)
+			{
+				throw new IdASException(e);
+			}
+			_bIsOpen = true;
+
+			if (lookupFilter != null)
+			{
+				_entityID = _lookupEntity(lookupFilter);
+				if (_entityID == null)
+					throw new IdASException(JNDICPMessages.bind(JNDICPMessages.NO_ENTITY_ID, identity.toString()));
+			}
+		}
+		else
+		{
+			/* Context already open for this identity. */
+			_bIsOpen = true;
+		}
+		return _entityID;
+	}
+
+	/**
+	 */
+	private void _handleNamingException(
+		NamingException e) throws IdASException
+	{
+		if (e instanceof javax.naming.CommunicationException)
+		{
+			_destroyContext();
+		}
+		else if (e instanceof javax.naming.NameAlreadyBoundException)
+		{
+			throw new EntityExistsException(e);
+		}
+		else if (e instanceof javax.naming.AuthenticationException)
+		{
+			_destroyContext();
+			throw new AuthenticationException(e);
+		}
+		else if (e instanceof javax.naming.NameNotFoundException)
+		{
+			throw new NoSuchEntityException(e);
+		}
+		throw new IdASException(e);
+	}
+
+	/**
+	 * 
+	 * @throws IdASException
+	 */
+	private void _setupCustomSSLSocketFactory(
+		String trustStore,
+		String trustStorePassword) throws IdASException
+	{
+		LDAPHigginsSSLSocketFactoryProducer socketFactory = (LDAPHigginsSSLSocketFactoryProducer)LDAPHigginsSSLSocketFactoryProducer.getDefault();		
+		socketFactory.setKeyStore(new File(trustStore), trustStorePassword);
+	}
+
+	/**
+	 */
+	private void _setupContext() throws IdASException
+	{
+		List addressList = (List)_connectionSettings.get("AddressList");
+		
+		if ((addressList == null) || (addressList.size() == 0))
+			throw new IdASException(JNDICPMessages.NO_JNDI_SERVICE_CONFIGURED);
+
+		int iLoop;
+		for (iLoop = 0; iLoop < addressList.size(); iLoop++)
+		{
+			String addr = (String)addressList.get(iLoop), trustStore;
+			if ((_currAddr != null) && (_currAddr.compareTo(addr) == 0))
+				continue;
+			_currAddr = addr;
+			_log.debug("Attempting to create initial context: " + _currAddr);
+
+			String ssl = null;
+			if ( ((trustStore = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.trustStore")) != null)
+				&& ( (_currAddr.indexOf("ldaps") == 0)
+					|| ( ((ssl = (String) _env.get("java.naming.security.protocol")) != null) && ssl.equals("ssl")) ) )
+			{
+				_env.put("java.naming.ldap.factory.socket", "org.eclipse.higgins.idas.cp.jndi.LDAPHigginsSSLSocketFactoryProducer");
+				_setupCustomSSLSocketFactory(trustStore, (String) _env.get("org.eclipse.higgins.idas.cp.jndi.trustStorePassword"));
+			}
+			else
+			{
+				_env.remove("java.naming.ldap.factory.socket");
+			}
+
+			String jndiProvider = (String)_connectionSettings.get("jndiProvider");
+			if (jndiProvider == null)
+				jndiProvider = "com.sun.jndi.ldap.LdapCtxFactory";
+			_env.put(Context.INITIAL_CONTEXT_FACTORY, jndiProvider);
+			_env.put(Context.PROVIDER_URL, _currAddr);
+
+			try
+			{
+				_ctx = new InitialLdapContext(_env, null);
+				break;
+			}
+			catch (CommunicationException e)
+			{
+				continue;
+			}
+			catch (NamingException e)
+			{
+				_handleNamingException(e);
+			}
+		}
+		if (iLoop == addressList.size())
+			throw new IdASException(JNDICPMessages.CONNECTION_FAILURE);
+	}
+
+	/**
+	 */
+	private void _destroyContext() throws IdASException
+	{
+		try
+		{
+			if (_bStartTLS)
+			{
+				if (_tls != null)
+					_tls.close();
+				_bStartTLS = false;
+			}
+			if (_ctx != null)
+			{
+				_ctx.close();
+			}
+		}
+		catch (NamingException e)
+		{
+			throw new IdASException(e);
+		}
+		catch (IOException e)
+		{
+			throw new IdASException(e);
+		}
+		_currAddr = null;
+		_identity = null;
+		_ctx = null;
+	}
+
+	private String _getIdentity()
+	{
+		return (_identity == null ? null : _identity.toString());
+	}
+
+	/**
+	 */
+	public void close() throws IdASException
+	{
+		if (!_bIsOpen)
+			throw new ContextNotOpenException();
+
+		_bIsOpen = false;
+		_emitXDASRecord(XDasEvents.XDAS_AE_TERMINATE_SESSION,
+			XDasOutcomes.XDAS_OUT_SUCCESS, _getIdentity(), null, null);
+		_log.debug("Context closed: " + _contextURIs + " as: " + _getIdentity());
+	}
+
+	/**
+	 */
+	public boolean isOpen(
+		Object identity) throws IdASException
+	{
+		return _bIsOpen;
+	}
+
+	/**
+	 * 
+	 */
+	public String getAuthEntityID()
+	{
+		return _entityID;
+	}
+
+	/**
+	 */
+	private DOMDocument _getInitialSchemaDoc()
+	{
+		/* Create an OWL document in RDF representing the schema. */
+		DOMDocument doc = new DOMDocument();
+		Vector entityDeclList = new Vector();
+
+		entityDeclList.add(new InternalEntityDecl("ldapowl",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins/ldap#";));
+		entityDeclList.add(new InternalEntityDecl("higgins",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins#";));
+		entityDeclList.add(new InternalEntityDecl("xsd",
+			"http://www.w3.org/2001/XMLSchema#";));
+
+		DefaultDocumentType docType = new DefaultDocumentType();
+		docType.setInternalDeclarations(entityDeclList);
+		docType.setName("rdf:RDF");
+		doc.setDocType(docType);
+		doc.addComment(JNDICPMessages.COPYRIGHT_TEXT);
+
+		DOMElement elem = (DOMElement) doc.addElement("rdf:RDF");
+		elem.addAttribute("xml:base",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins/ldap#";);
+		elem.addNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#";);
+		elem.addNamespace("rdfs", "http://www.w3.org/2000/01/rdf-schema#";);
+		elem.addNamespace("owl", "http://www.w3.org/2002/07/owl#";);
+		elem.addNamespace("ldapowl",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins/ldap#";);
+
+		DOMElement ontElem = (DOMElement) elem.addElement("owl:Ontology");
+		ontElem.addAttribute("rdf:about", "");
+		DOMElement childElem = (DOMElement) ontElem.addElement("rdfs:label");
+		childElem.addText(JNDICPMessages.bind(JNDICPMessages.HIGGINS_LDAP_ONTOLOGY, _contextURIs));
+		childElem = (DOMElement) ontElem.addElement("owl:imports");
+		childElem.addAttribute("rdf:resource",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins";);
+
+		ontElem = (DOMElement) elem.addElement("owl:Ontology");
+		ontElem.addAttribute("rdf:about",
+			"http://www.eclipse.org/higgins/ontologies/2006/higgins";);
+
+		return (doc);
+	}
+
+	/**
+	 */
+	private void _getSchemaClass(
+		DOMDocument schemaDoc,
+		String schemaName,
+		Attributes attrs) throws IdASException
+	{
+		try
+		{
+			boolean bFoundSup = false;
+			DOMElement rootElem = (DOMElement) schemaDoc.getRootElement(), classElem, childElem;
+
+			rootElem.addComment(schemaName);
+			classElem = (DOMElement) rootElem.addElement("owl:Class");
+			classElem.addAttribute("rdf:ID", "class_" + schemaName);
+			childElem = (DOMElement) classElem.addElement("rdfs:label");
+			childElem.addAttribute("rdf:datatype", "&xsd;string");
+			childElem.addText(schemaName);
+
+			NamingEnumeration attrEnum = attrs.getAll();
+			while (attrEnum.hasMore())
+			{
+				Attribute attr = (Attribute) attrEnum.next();
+
+				NamingEnumeration attrVals = attr.getAll();
+				if (attr.getID().compareTo("SUP") == 0)
+				{
+					childElem = (DOMElement) classElem.addElement("rdfs:subClassOf");
+					childElem.addAttribute("rdf:resource", "#class_" + attrVals.next());
+					bFoundSup = true;
+				}
+				else if (attr.getID().compareTo("NUMERICOID") == 0)
+				{
+					Object oid = attrVals.next();
+					childElem = (DOMElement) classElem.addElement("owl:equivalentClass");
+					childElem.addAttribute("rdf:resource", "urn:oid:" + oid);
+					// Define equivalent class.
+					DOMElement oidClassElem = (DOMElement) rootElem.addElement("owl:Class");
+					oidClassElem.addAttribute("rdf:about", "urn:oid:" + oid);
+					childElem = (DOMElement) oidClassElem.addElement("rdfs:label");
+					childElem.addAttribute("rdf:datatype", "&xsd;string");
+					childElem.addText(schemaName);
+				}
+				else if (attr.getID().compareTo("MAY") == 0)
+				{
+					while (attrVals.hasMore())
+						_addAttributeDomain(schemaName, (String) attrVals.next());
+				}
+				else if (attr.getID().compareTo("MUST") == 0)
+				{
+					while (attrVals.hasMore())
+					{
+						String attrName = (String) attrVals.next();
+						DOMElement subClassElem = (DOMElement) classElem.addElement("rdfs:subClassOf");
+						DOMElement restrictElem = (DOMElement) subClassElem.addElement("owl:Restriction");
+
+						_addAttributeDomain(schemaName, attrName);
+						childElem = (DOMElement) restrictElem.addElement("owl:onProperty");
+						childElem.addAttribute("rdf:resource", attrName);
+						childElem = (DOMElement) restrictElem.addElement("owl:minCardinality");
+						childElem.addAttribute("rdf:datatype", "&xsd;nonNegativeInteger");
+						childElem.addText("1");
+					}
+				}
+				else if (attr.getID().compareTo("DESC") == 0)
+				{
+					childElem = (DOMElement) classElem.addElement("rdfs:comment");
+					childElem.addAttribute("rdf:datatype", "&xsd;string");
+					childElem.addText((String) attrVals.next());
+				}
+				else if ((attr.getID().compareTo("NAME") == 0)
+					|| (attr.getID().compareTo("ABSTRACT") == 0)
+					|| (attr.getID().compareTo("STRUCTURAL") == 0)
+					|| (attr.getID().compareTo("AUXILIARY") == 0)
+					|| (attr.getID().compareTo("OBSOLETE") == 0))
+				{
+					;
+				}
+			}
+			if (!bFoundSup)
+			{
+				childElem = (DOMElement) classElem.addElement("rdfs:subClassOf");
+				childElem.addAttribute("rdf:resource", "&higgins;Entity");
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+	}
+
+	/*
+	private String _getAttributeNameCase(
+		String attrName)
+	{
+		String attrCaseName = attrName;
+		// TODO: Need the schema cache for this as well as other things.
+		if (_schemaAttrCaseHashMap != null)
+		{
+			CIStringKey ciAttrName = new CIStringKey(attrName);
+
+			attrCaseName = (String) _schemaAttrCaseHashMap.get(ciAttrName);
+			if (attrCaseName == null)
+			{
+				_schemaAttrCaseHashMap.put(ciAttrName, attrName);
+				attrCaseName = attrName;
+			}
+		}
+		return attrCaseName;
+	}
+	*/
+
+	/**
+	 */
+	private void _addAttributeDomain(
+		String className,
+		String attrName)
+	{
+		CIStringKey ciAttrName = new CIStringKey(attrName);
+
+		Vector classNameVect = (Vector) _schemaAttrDomainHashMap.get(ciAttrName);
+		if (classNameVect == null)
+			classNameVect = new Vector();
+		classNameVect.add(className);
+
+		_schemaAttrDomainHashMap.put(ciAttrName, classNameVect);
+	}
+
+	/**
+	 */
+	private Vector _getAttrDomains(
+		String schemaName)
+	{
+		CIStringKey ciAttrName = new CIStringKey(schemaName);
+
+		return (Vector) _schemaAttrDomainHashMap.get(ciAttrName);
+	}
+
+	/**
+	 */
+	private void _getSchemaAttrDef(
+		DOMDocument schemaDoc,
+		String schemaName,
+		Attributes attrs) throws IdASException
+	{
+		DOMElement rootElem = (DOMElement) schemaDoc.getRootElement(), propertyElem, childElem;
+
+		rootElem.addComment(schemaName);
+		propertyElem = (DOMElement) rootElem.addElement("owl:ObjectProperty");
+		propertyElem.addAttribute("rdf:about", schemaName);
+		childElem = (DOMElement) propertyElem.addElement("rdfs:label");
+		childElem.addAttribute("rdf:datatype", "&xsd;string");
+		childElem.addText(schemaName);
+
+		try
+		{
+			boolean bFoundSup = false;
+			NamingEnumeration attrEnum = attrs.getAll();
+			while (attrEnum.hasMore())
+			{
+				Attribute attr = (Attribute) attrEnum.next();
+				NamingEnumeration attrVals = attr.getAll();
+
+				if (attr.getID().compareTo("SUP") == 0)
+				{
+					childElem = (DOMElement) propertyElem.addElement("rdfs:subPropertyOf");
+					childElem.addAttribute("rdf:resource", (String) attrVals.next());
+					bFoundSup = true;
+				}
+				else if (attr.getID().compareTo("NUMERICOID") == 0)
+				{
+					Object oid = attrVals.next();
+					childElem = (DOMElement) propertyElem.addElement("owl:equivalentProperty");
+					childElem.addAttribute("rdf:resource", "urn:oid:" + oid);
+					// Define equivalent property.
+					DOMElement oidPropertyElem = (DOMElement) rootElem
+						.addElement("owl:ObjectProperty");
+					oidPropertyElem.addAttribute("rdf:about", "urn:oid:" + oid);
+					childElem = (DOMElement) oidPropertyElem.addElement("rdfs:label");
+					childElem.addAttribute("rdf:datatype", "&xsd;string");
+					childElem.addText(schemaName);
+				}
+				else if (attr.getID().compareTo("SYNTAX") == 0)
+				{
+					String syntax = (String) attrVals.next(), syntaxOID = syntax;
+					if (syntax.indexOf('{') > 0)
+						syntaxOID = syntax.substring(0, syntax.indexOf('{'));
+					// Create the reference to the syntax class we'll define later.
+					childElem = (DOMElement) propertyElem.addElement("rdfs:range");
+					SyntaxMap syntaxMap = (SyntaxMap) _syntaxHashMap.get(syntaxOID);
+					childElem.addAttribute("rdf:resource",
+						syntaxMap == null ? ("urn:oid:" + syntaxOID) : ("#" + syntaxMap.getURLName()));
+				}
+				else if ((attr.getID().compareTo("DESC") == 0))
+				{
+					childElem = (DOMElement) propertyElem.addElement("rdfs:comment");
+					childElem.addAttribute("rdf:datatype", "&xsd;string");
+					childElem.addText((String) attrVals.next());
+				}
+				else if ((attr.getID().compareTo("SINGLE-VALUE") == 0))
+				{
+					DOMElement singleValElem = (DOMElement) rootElem.addElement("rdf:Description");
+					singleValElem.addAttribute("rdf:about", "#class_top");
+					DOMElement subClassElem = (DOMElement) singleValElem.addElement("rdfs:subClassOf");
+					DOMElement restrictElem = (DOMElement) subClassElem.addElement("owl:Restriction");
+					childElem = (DOMElement) restrictElem.addElement("owl:maxCardinality");
+					childElem.addText("1");
+					childElem = (DOMElement) restrictElem.addElement("owl:onProperty");
+					childElem.addAttribute("rdf:resource", schemaName);
+				}
+				else if ((attr.getID().compareTo("NAME") == 0))
+				{
+					String name = (String) attrVals.next();
+					if (schemaName.compareTo(name) != 0)
+					{
+						childElem = (DOMElement) propertyElem.addElement("owl:equivalentProperty");
+						childElem.addAttribute("rdf:resource", name);
+						// Define equivalent property.
+						DOMElement equivPropertyElem = (DOMElement) rootElem.addElement("owl:ObjectProperty");
+						equivPropertyElem.addAttribute("rdf:about", name);
+						childElem = (DOMElement) equivPropertyElem.addElement("rdfs:label");
+						childElem.addAttribute("rdf:datatype", "&xsd;string");
+						childElem.addText(schemaName);
+					}
+				}
+				else if ((attr.getID().compareTo("EQUALITY") == 0)
+					|| (attr.getID().compareTo("ORDERING") == 0)
+					|| (attr.getID().compareTo("SUBSTRING") == 0)
+					|| (attr.getID().compareTo("COLLECTIVE") == 0)
+					|| (attr.getID().compareTo("NO-USER-MODIFICATION") == 0)
+					|| (attr.getID().compareTo("USAGE") == 0)
+					|| (attr.getID().compareTo("OBSOLETE") == 0))
+				{
+					;
+				}
+			}
+
+			// Add references to all the classes that this attribute is legal on.
+			Vector attrClasses = _getAttrDomains(schemaName);
+			if (attrClasses != null)
+			{
+				for (int iLoop = 0; iLoop < attrClasses.size(); ++iLoop)
+				{
+					childElem = (DOMElement) propertyElem.addElement("rdfs:domain");
+					childElem.addAttribute("rdf:resource", "#class_" + attrClasses.get(iLoop));
+				}
+			}
+			// Add the subproperty of the property.
+			if (!bFoundSup)
+			{
+				childElem = (DOMElement) propertyElem.addElement("rdfs:subPropertyOf");
+				childElem.addAttribute("rdf:resource", "&higgins;attribute");
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+	}
+
+	/**
+	 */
+	private void _getSchemaSyntaxDef(
+		DOMDocument schemaDoc,
+		String schemaName,
+		Attributes attrs) throws IdASException
+	{
+		try
+		{
+			DOMElement rootElem = (DOMElement) schemaDoc.getRootElement(), classElem, childElem;
+			SyntaxMap syntaxMap = (SyntaxMap) _syntaxHashMap.get(schemaName);
+
+			if (syntaxMap == null)
+				rootElem.addComment(schemaName);
+			else
+				rootElem.addComment(syntaxMap.getLabel());
+
+			classElem = (DOMElement) rootElem.addElement("owl:Class");
+			if (syntaxMap == null)
+				classElem.addAttribute("rdf:about", "urn:oid:" + schemaName);
+			else
+				classElem.addAttribute("rdf:ID", syntaxMap.getURLName());
+			childElem = (DOMElement) classElem.addElement("rdfs:label");
+			childElem.addAttribute("rdf:datatype", "&xsd;string");
+			childElem.addText(syntaxMap == null ? schemaName : syntaxMap.getLabel());
+			childElem = (DOMElement) classElem.addElement("rdfs:subClassOf");
+			childElem.addAttribute("rdf:resource",
+					syntaxMap == null ? "&higgins;StringSimpleAttribute" : syntaxMap.getOWLType());
+
+			NamingEnumeration attrEnum = attrs.getAll();
+			while (attrEnum.hasMore())
+			{
+				Attribute attr = (Attribute) attrEnum.next();
+
+				NamingEnumeration attrVals = attr.getAll();
+				if (attr.getID().compareTo("DESC") == 0)
+				{
+					childElem = (DOMElement) classElem.addElement("rdfs:comment");
+					childElem.addAttribute("rdf:datatype", "&xsd;string");
+					childElem.addText((String) attrVals.next());
+				}
+				else if (attr.getID().compareTo("NUMERICOID") == 0)
+				{
+					if (syntaxMap != null)
+					{
+						Object oid = attrVals.next();
+						childElem = (DOMElement) classElem.addElement("owl:equivalentClass");
+						childElem.addAttribute("rdf:resource", "urn:oid:" + oid);
+
+						// Define equivalent class.
+						DOMElement oidClassElem = (DOMElement) rootElem.addElement("owl:Class");
+						oidClassElem.addAttribute("rdf:about", "urn:oid:" + oid);
+						childElem = (DOMElement) oidClassElem.addElement("rdfs:label");
+						childElem.addAttribute("rdf:datatype", "&xsd;string");
+						childElem.addText(syntaxMap.getLabel());
+					}
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+	}
+
+	/**
+	 */
+	public String getSchema() throws IdASException
+	{
+		if (!_bIsOpen)
+			throw new ContextNotOpenException();
+
+		if (_schemaAttrDomainHashMap == null)
+			_schemaAttrDomainHashMap = new HashMap();
+		else
+			_schemaAttrDomainHashMap.clear();
+
+		if (_schemaAttrCaseHashMap == null)
+			_schemaAttrCaseHashMap = new HashMap();
+		else
+			_schemaAttrCaseHashMap.clear();
+
+		DOMDocument schemaDoc = _getInitialSchemaDoc();
+		// TODO: Get the schema associated with the identity used to open this
+		// context instead of the root.
+		try
+		{
+			DirContext schemaCtx;
+			try {
+				schemaCtx = _ctx.getSchema(_ctx.getNameInNamespace());
+			} catch (NamingException e1)	{
+				try {
+					schemaCtx = _ctx.getSchema("");
+				} catch (NamingException e2)	{
+					schemaCtx = _ctx.getSchema(consumerEntityIDToProvider(_entityID));
+				}
+			}
+			// The OWL generator depends on these containers being visited in this
+			// order.
+			Vector schemaContainers = new Vector();
+			schemaContainers.add("ClassDefinition");
+			schemaContainers.add("AttributeDefinition");
+			schemaContainers.add("SyntaxDefinition");
+
+			for (int iLoop = 0; iLoop < schemaContainers.size(); iLoop++)
+			{
+				NamingEnumeration list = schemaCtx.list((String)schemaContainers.elementAt(iLoop));
+				DOMElement rootElem = (DOMElement) schemaDoc.getRootElement();
+				rootElem.addComment((String) schemaContainers.elementAt(iLoop));
+
+				while (list.hasMore())
+				{
+					NameClassPair ncPair = (NameClassPair) list.next();
+					DirContext ctx = (DirContext) schemaCtx.lookup(schemaContainers.elementAt(iLoop)
+						+ "/" + ncPair.getName());
+					Attributes attrs = ctx.getAttributes("");
+
+					if (((String)schemaContainers.elementAt(iLoop)).compareTo("ClassDefinition") == 0)
+						_getSchemaClass(schemaDoc, ncPair.getName(), attrs);
+					else if (((String)schemaContainers.elementAt(iLoop)).compareTo("AttributeDefinition") == 0)
+						_getSchemaAttrDef(schemaDoc, ncPair.getName(), attrs);
+					else if (((String)schemaContainers.elementAt(iLoop)).compareTo("SyntaxDefinition") == 0)
+						_getSchemaSyntaxDef(schemaDoc, ncPair.getName(), attrs);
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		StringWriter strWriter = new StringWriter();
+		NonEscapedAttrXMLWriter xmlWriter = new NonEscapedAttrXMLWriter(strWriter);
+		try
+		{
+			xmlWriter.write(schemaDoc);
+		}
+		catch (IOException e)
+		{
+			throw new IdASException(e);
+		}
+		return strWriter.toString();
+	}
+
+	/**
+	 */
+	public IEntity getEntity(
+		String entityID) throws IdASException
+	{
+		return getEntity(entityID, null);
+	}
+
+	/**
+	 */
+	public IEntity getEntity(
+		String entityID,
+		Iterator consumerSelectionList) throws IdASException
+	{
+		if (!_bIsOpen)
+			throw new ContextNotOpenException();
+
+		_emitXDASRecord(XDasEvents.XDAS_AE_QUERY_ACCOUNT, XDasOutcomes.XDAS_OUT_SUCCESS,
+			_getIdentity(), entityID, null);
+		_log.debug("Searching for Entity: " + entityID + " as: "
+			+ _getIdentity() + " in context: " + _contextURIs);
+		JNDIEntity entity = null;
+		NamingEnumeration results;
+		SearchControls controls = new SearchControls();
+		HashSet providerSelectionList = new HashSet();
+		if (consumerSelectionList != null)
+		{
+			_mapConsumerSelectionList(consumerSelectionList, providerSelectionList);
+			/*
+			 * We need these attributes always so that we can adequately answer all
+			 * calls.
+			 */
+			_addRequiredAttrs(providerSelectionList);
+			URI[] uriAttrArray = (URI[]) providerSelectionList.toArray(new URI[0]);
+			String[] attrArray = new String[uriAttrArray.length];
+			for (int iLoop = 0; iLoop < uriAttrArray.length; ++iLoop)
+				attrArray[iLoop] = uriAttrArray[iLoop].toString();
+			controls.setReturningAttributes(attrArray);
+		}
+		controls.setSearchScope(SearchControls.OBJECT_SCOPE);
+
+		try
+		{
+			String realEntityID = consumerEntityIDToProvider(entityID);
+			results = _ctx.search(realEntityID, "(objectclass=*)",
+				controls);
+
+			if (results.hasMore())
+			{
+				SearchResult result = (SearchResult) results.next();
+				entity = new JNDIEntity(this, result, realEntityID, _attrPDPs);
+				if (results.hasMore())
+					throw new IdASException(JNDICPMessages.NO_UNIQUE_EID);
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		return entity;
+	}
+
+	/**
+	 */
+	private void _mapConsumerSelectionList(
+		Iterator consumerSelectionList,
+		HashSet providerSelectionList) throws IdASException
+	{
+		while (consumerSelectionList.hasNext())
+		{
+			URI consumerAttrName = (URI) consumerSelectionList.next();
+			Vector providerAttrList;
+
+			if ((providerAttrList = _mapConsumerAttrName(consumerAttrName)) != null)
+			{
+				Iterator providerAttrIter = providerAttrList.iterator();
+				while (providerAttrIter.hasNext())
+				{
+					URI providerAttrName = (URI) providerAttrIter.next();
+					providerSelectionList.add(providerAttrName);
+				}
+			}
+			else
+			{
+				providerSelectionList.add(consumerAttrName);
+			}
+		}
+	}
+
+	/**
+	 */
+	private Vector _mapConsumerAttrName(
+		URI consumerAttrName) throws IdASException
+	{
+		Vector attrList = new Vector();
+
+		if (_attrPDPs != null)
+		{
+			Iterator itr = _attrPDPs.consumerIDToProviders(consumerAttrName);
+			while (itr.hasNext())
+				attrList.add((URI) itr.next());
+		}
+		else
+		{
+			attrList.add(consumerAttrName);
+		}
+		return attrList;
+	}
+
+	/**
+	 */
+	private void _addRequiredAttrs(
+		HashSet providerSelectionList) throws IdASException
+	{
+		try
+		{
+			providerSelectionList.add(new URI("objectclass"));
+			providerSelectionList.add(new URI("structuralObjectClass"));
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	private void _convertFilter(
+		BasicFilter basicFilter,
+		RfcFilter ldapFilter) throws IdASException
+	{
+		try
+		{
+			BasicFilterAssertion assertion = (BasicFilterAssertion) basicFilter.getAssertion();
+			if (assertion != null)
+			{
+				URI attrURI = assertion.getID();
+				if (assertion instanceof BasicFilterEntityTypeAssertion)
+					attrURI = new URI("objectclass");
+				String comparator = assertion.getComparator();
+				int rfcType = _mapComparator(comparator);
+				Vector providerAttrList = _mapConsumerAttrName(attrURI);
+
+				if (providerAttrList.size() > 1)
+					ldapFilter.startNestedFilter(rfcType);
+
+				Iterator providerAttrIter = providerAttrList.iterator();
+				while (providerAttrIter.hasNext())
+				{
+					URI attrName = (URI) providerAttrIter.next();
+					if (assertion instanceof BasicFilterAttributeAssertion)
+					{
+						BasicFilterAttributeAssertion attributeAssertion = (BasicFilterAttributeAssertion) assertion;
+						IAttributeValue assertionValue = attributeAssertion.getAssertionValue();
+
+						if (assertionValue == null)
+						{
+							switch ( rfcType )
+							{
+							case RfcFilter.PRESENT:
+								ldapFilter.addPresent(attrName.toString());
+								break;
+							default:
+								throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CMPRTR_NOT_SUPPORTED,comparator));
+							}
+						}
+						else if (assertionValue.isSimple())
+						{
+							// assertionValue.getType();
+							if ((rfcType == RfcFilter.EQUALITY_MATCH)
+								|| (rfcType == RfcFilter.GREATER_OR_EQUAL)
+								|| (rfcType == RfcFilter.LESS_OR_EQUAL))
+							{
+								if ((assertionValue instanceof BasicValueBase64Binary)
+									|| (assertionValue instanceof BasicValueHexBinary))
+								{
+									ByteBuffer byteBuf = (ByteBuffer) ((ISimpleAttrValue)assertionValue).getData();
+									ldapFilter.addAttributeValueAssertion(rfcType, attrName.toString(),
+										byteBuf.array());
+								}
+								else if ((assertionValue instanceof BasicValueString)
+									|| (assertionValue instanceof BasicValueNormalizedString)
+									|| (assertionValue instanceof BasicValueToken)
+									|| (assertionValue instanceof BasicValueLanguage)
+									|| (assertionValue instanceof BasicValueNMTOKEN)
+									|| (assertionValue instanceof BasicValueName)
+									|| (assertionValue instanceof BasicValueNCName))
+								{
+									ldapFilter.addAttributeValueAssertion(rfcType, attrName.toString(),
+										((String) ((ISimpleAttrValue)assertionValue).getData()).getBytes());
+								}
+								else
+								{
+									ldapFilter.addAttributeValueAssertion(rfcType, attrName.toString(),
+										((ISimpleAttrValue) assertionValue).getLexical().getBytes());
+								}
+							}
+							else
+							{
+								// TODO: Handle substrings
+								// if (rfcType == RfcFilter.SUBSTRINGS)
+								// ldapFilter.startSubstrings();
+								// if (rfcType == RfcFilter.EXTENSIBLE_MATCH)
+								throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CMPRTR_NOT_SUPPORTED,comparator));
+							}
+						}
+						else
+						{
+							throw new NotImplementedException(JNDICPMessages.NOT_SUPPORTED_COMPLEX_VALUES);
+						}
+					}
+					else if (assertion instanceof BasicFilterEntityTypeAssertion)
+					{
+						BasicFilterEntityTypeAssertion entityTypeAssertion = (BasicFilterEntityTypeAssertion) assertion;
+						ldapFilter.addAttributeValueAssertion(RfcFilter.EQUALITY_MATCH, attrName.toString(),
+							consumerEntityTypeToProvider(entityTypeAssertion.getAssertionValue()).toString().getBytes());
+					}
+				}
+
+				if (providerAttrList.size() > 1)
+					ldapFilter.endNestedFilter(rfcType);
+			}
+			else
+			{
+				String operator = basicFilter.getOperator();
+				int rfcType = _mapOperator(operator);
+				ldapFilter.startNestedFilter(rfcType);
+				Iterator filters = basicFilter.getFilters();
+				while (filters.hasNext())
+				{
+					IFilter filter = (IFilter) filters.next();
+					_convertFilter((BasicFilter) filter, ldapFilter);
+				}
+				ldapFilter.endNestedFilter(rfcType);
+			}
+		}
+		catch (LDAPLocalException e)
+		{
+			throw new IdASException(e);
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	private int _mapComparator(
+		String comparator)
+	{
+		int iRet = -1;
+
+		if (comparator.compareTo(IFilterAttributeAssertion.COMP_ATTR_EQ) == 0)
+			iRet = RfcFilter.EQUALITY_MATCH;
+		else if (comparator.compareTo(IFilterAttributeAssertion.COMP_ATTR_GE) == 0)
+			iRet = RfcFilter.GREATER_OR_EQUAL;
+		else if (comparator.compareTo(IFilterAttributeAssertion.COMP_ATTR_LE) == 0)
+			iRet = RfcFilter.LESS_OR_EQUAL;
+		else if (comparator.compareTo(IFilterAttributeAssertion.COMP_ATTR_PRESENT) == 0)
+			iRet = RfcFilter.PRESENT;
+		else if (comparator.compareTo(IFilterAttributeAssertion.COMP_ATTR_SUBSTR) == 0)
+			iRet = RfcFilter.SUBSTRINGS;
+
+		return iRet;
+	}
+
+	/**
+	 */
+	private int _mapOperator(
+		String operator) throws IdASException
+	{
+		int iRet = -1;
+
+		if (operator.compareTo(IFilter.OP_NOT) == 0)
+			iRet = RfcFilter.NOT;
+		else if (operator.compareTo(IFilter.OP_AND) == 0)
+			iRet = RfcFilter.AND;
+		else if (operator.compareTo(IFilter.OP_OR) == 0)
+			iRet = RfcFilter.OR;
+		else
+			throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.NOT_SUPPORTED_OPERATOR,operator));
+
+		return iRet;
+	}
+
+	/**
+	 */
+	public Iterator getEntities(
+		IFilter filter) throws IdASException
+	{
+		return getEntities(filter, null);
+	}
+
+	/**
+	 */
+	public Iterator getEntities(
+		IFilter filter,
+		Iterator consumerSelectionList) throws IdASException
+	{
+		if (!_bIsOpen)
+			throw new ContextNotOpenException();
+
+		_emitXDASRecord(XDasEvents.XDAS_AE_QUERY_ACCOUNT, XDasOutcomes.XDAS_OUT_SUCCESS,
+			_getIdentity(), filter == null ? null : filter.toString(), null);
+		_log.debug("Searching for Entities matching filter: " + filter == null ? null : filter.toString()
+			+ " as: " + _getIdentity() + " in context: " + _contextURIs);
+		HashSet subs = new HashSet();
+		String strFilter = "(objectclass=*)";
+
+		if (filter != null)
+		{
+			BasicFilter basicFilter = (BasicFilter) filter;
+			// Convert the IdAS filter to an LDAP filter.
+			RfcFilter ldapFilter = new RfcFilter();
+			_convertFilter(basicFilter, ldapFilter);
+			strFilter = ldapFilter.filterToString();
+			_log.debug("LDAP String Filter: " + strFilter);
+		}
+		try
+		{
+			JNDIEntity entity;
+			SearchControls controls = new SearchControls();
+			NamingEnumeration results;
+			HashSet providerSelectionList = new HashSet();
+			if (consumerSelectionList != null)
+			{
+				_mapConsumerSelectionList(consumerSelectionList, providerSelectionList);
+				/*
+				 * We need these attributes always so that we can adequately answer
+				 * all calls.
+				 */
+				_addRequiredAttrs(providerSelectionList);
+				URI[] uriAttrArray = (URI[]) providerSelectionList.toArray(new URI[0]);
+				String[] attrArray = new String[uriAttrArray.length];
+				for (int iLoop = 0; iLoop < uriAttrArray.length; ++iLoop)
+					attrArray[iLoop] = uriAttrArray[iLoop].toString();
+				controls.setReturningAttributes(attrArray);
+			}
+			controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+			String searchBase = _getSearchBase();
+			results = _ctx.search(searchBase, strFilter, controls);
+
+			while (results.hasMore())
+			{
+				SearchResult result = (SearchResult) results.next();
+				entity = new JNDIEntity(this, result, searchBase, _attrPDPs);
+				subs.add(entity);
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		return subs.iterator();
+	}
+
+	/**
+	 */
+	public void removeEntity(
+		String entityID) throws IdASException
+	{
+		if (!_bIsOpen)
+			throw new ContextNotOpenException();
+		try
+		{
+			_ctx.destroySubcontext(entityID);
+		}
+		catch (NamingException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	public URI getSearchResultType(
+		SearchResult searchResult) throws IdASException
+	{
+		String structuralClass = null;
+		String resultName = searchResult.getName();
+		out: try
+		{
+			Attribute ocAttr = _getObjectClass(searchResult);
+			NamingEnumeration jndiAttrValEnum = ocAttr.getAll();
+
+			if (ocAttr.size() == 1)
+			{
+				structuralClass = (String) jndiAttrValEnum.next();
+			}
+			else
+			{
+				while (jndiAttrValEnum.hasMore())
+				{
+					String jndiValue = (String) jndiAttrValEnum.next();
+					if (_isStructural(resultName, jndiValue, ocAttr))
+					{
+						structuralClass = jndiValue;
+						break out;
+					}
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		if (structuralClass == null)
+			throw new IdASException(JNDICPMessages.NO_STRUCURAL_CLASS_FOUND);
+
+		URI uriType = null;
+		try
+		{
+			uriType = new URI(structuralClass);
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+
+		return providerEntityTypeToConsumer(uriType);
+	}
+
+	/**
+	 */
+	private boolean _isStructural(
+		String entityName,
+		String className,
+		Attribute ocAttr) throws IdASException
+	{
+		NamingEnumeration jndiAttrValEnum;
+		boolean bRet = false;
+
+		out: try
+		{
+			jndiAttrValEnum = ocAttr.getAll();
+			while (jndiAttrValEnum.hasMore())
+			{
+				Object jndiValue = jndiAttrValEnum.next();
+				if (className.compareToIgnoreCase((String) jndiValue) != 0)
+				{
+					DirContext schemaCtx = _ctx.getSchema(_ctx.getNameInNamespace());
+					DirContext ctx = (DirContext) schemaCtx.lookup("ClassDefinition" + "/"
+						+ jndiValue);
+					Attributes attrs = ctx.getAttributes("");
+
+					String supClass = _getSuperiorClass(attrs);
+					if (supClass != null)
+					{
+						if (className.compareToIgnoreCase(supClass) == 0)
+							break out;
+					}
+				}
+			}
+			/*
+			 * This class is not listed as the superior class of any class in the
+			 * set of object class values.
+			 */
+			bRet = true;
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		return bRet;
+	}
+
+	/**
+	 */
+	private String _getSuperiorClass(
+		Attributes attrs) throws IdASException
+	{
+		String superiorClass = null;
+		NamingEnumeration attrEnum = attrs.getAll();
+
+		try
+		{
+			while (attrEnum.hasMore())
+			{
+				Attribute attr = (Attribute) attrEnum.next();
+
+				NamingEnumeration attrVals = attr.getAll();
+				if (attr.getID().compareTo("SUP") == 0)
+				{
+					superiorClass = (String) attrVals.next();
+				}
+				else if ((attr.getID().compareTo("AUXILIARY") == 0)
+					|| (attr.getID().compareTo("ABSTRACT") == 0))
+				{
+					superiorClass = null;
+					break;
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		return superiorClass;
+	}
+
+	/**
+	 */
+	private Attribute _getObjectClass(
+		SearchResult searchResult) throws IdASException
+	{
+		Attributes jndiAttrs = searchResult.getAttributes();
+		Attribute retAttr = null;
+		NamingEnumeration jndiEnum;
+		boolean bFoundStructural = false;
+
+		jndiEnum = jndiAttrs.getAll();
+		out: try
+		{
+			while (jndiEnum.hasMore())
+			{
+				Attribute jndiAttr = (Attribute) jndiEnum.next();
+				if (jndiAttr.getID().compareToIgnoreCase("structuralObjectClass") == 0)
+				{
+					bFoundStructural = true;
+					NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
+					if (jndiAttr.size() != 1)
+						throw new IdASException(JNDICPMessages.bind(JNDICPMessages.EXPECTED_VALUE_INFO,new java.lang.Integer(jndiAttr.size())));
+
+					String jndiValue = (String) jndiAttrValEnum.next();
+					if (jndiValue.compareToIgnoreCase("top") != 0)
+					{
+						retAttr = jndiAttr;
+						break out;
+					}
+				}
+				else if (jndiAttr.getID().compareToIgnoreCase("objectclass") == 0)
+				{
+					retAttr = jndiAttr;
+					if (bFoundStructural)
+						break out;
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			_handleNamingException(e);
+		}
+
+		if (retAttr == null)
+			throw new IdASException(JNDICPMessages.NO_STRUCURALOBJECT_CLASS_FOUND);
+		return retAttr;
+	}
+
+	/**
+	 * internal functions and classes
+	 */
+
+	/**
+	 */
+	protected String consumerEntityIDToProvider(
+		String entityID) throws IdASException
+	{
+		try
+		{
+			return JScriptExecHelper.transformString(_consumerEntityIDToProviderExec,
+					JScriptCPAttributePDPs.consumerIDParamName, entityID);
+		}
+		catch (JScriptException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	protected String providerEntityIDToConsumer(
+		String entityID) throws IdASException
+	{
+		try
+		{
+			return JScriptExecHelper.transformString(_providerEntityIDToConsumerExec,
+					JScriptCPAttributePDPs.providerIDParamName, entityID);
+		}
+		catch (JScriptException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	protected URI consumerEntityTypeToProvider(
+		URI type) throws IdASException
+	{
+		try
+		{
+			return JScriptExecHelper.transformURI(_consumerEntityTypeToProviderExec,
+					JScriptCPAttributePDPs.consumerTypeParamName, type);
+		}
+		catch (JScriptException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 */
+	protected URI providerEntityTypeToConsumer(
+		URI type) throws IdASException
+	{
+		try
+		{
+			return JScriptExecHelper.transformURI(_providerEntityTypeToConsumerExec,
+					JScriptCPAttributePDPs.providerTypeParamName, type);
+		}
+		catch (JScriptException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+	public IEntity addEntity(
+		URI type,
+		String entityID) throws IdASException
+	{
+		JNDIEntity entity = new JNDIEntity(this, consumerEntityTypeToProvider(type),
+			entityID, _attrPDPs);
+		this.updateNotification(new EntityNotification(entity,
+			EntityNotification.UPDATE_ADD, null));
+		return entity;
+	}
+
+	/**
+	 * 
+	 */
+	protected DirContext getDirContext()
+	{
+		return _ctx;
+	}
+
+	/**
+	 * 
+	 */
+	private String _getSearchBase()
+	{
+		String searchBase = (String)_connectionSettings.get("searchBase");
+		if (searchBase == null)
+			searchBase = "";
+		return searchBase;
+	}
+
+	/**
+	 */
+	public IEntity addEntity(
+		IEntity copyFrom) throws IdASException, EntityExistsException
+	{
+		JNDIEntity entity = new JNDIEntity(this, copyFrom, _attrPDPs);
+		this.updateNotification(new EntityNotification(entity,
+			EntityNotification.UPDATE_ADD, null));
+		return entity;
+	}
+
+	public void applyUpdates() throws IdASException
+	{
+		Hashtable updateList = super.getUpdateList();
+		try
+		{
+			_log.debug("Applying updates ...");
+			int iCount = 0;
+			Iterator keyIter = updateList.keySet().iterator();
+			while (keyIter.hasNext())
+			{
+				String entityID = (String)keyIter.next();
+				_updateEntry(entityID, (Vector)updateList.get(entityID));
+				iCount++;
+			}
+			_log.debug(iCount + ((iCount == 1) ? " change " : " changes ") + "applied");
+		}
+		catch (IdASException e)
+		{
+			throw e;
+		}
+		finally
+		{
+			updateList.clear();
+		}
+	}
+
+	private void _updateEntry(
+		String entityID,
+		Vector entityNotifs) throws IdASException
+	{
+		try
+		{
+			EntityNotification [] aEntityNotifs = (EntityNotification []) entityNotifs.toArray(new EntityNotification[entityNotifs.size()]);
+			_log.debug("Updating entry [" + entityID + "], " + aEntityNotifs[0].getAction());
+			if (aEntityNotifs[0].getAction().compareTo(EntityNotification.UPDATE_ADD) == 0)
+			{
+				BasicAttributes jndiAttrs = _entityNotificationToBasicAttributes(aEntityNotifs);
+				_ctx.createSubcontext(consumerEntityIDToProvider(entityID), jndiAttrs);
+			}
+			else if (aEntityNotifs[0].getAction().compareTo(EntityNotification.UPDATE_REMOVE) == 0)
+			{
+				_ctx.destroySubcontext(consumerEntityIDToProvider(aEntityNotifs[0].getEntity().getEntityID()));
+			}
+			else if (aEntityNotifs[0].getAction().compareTo(EntityNotification.UPDATE_ATTR_NOTIFY) == 0)
+			{
+				Vector jndiMods = _entityNotificationToModificationItems(aEntityNotifs);
+				_ctx.modifyAttributes(consumerEntityIDToProvider(entityID),
+					(ModificationItem [])jndiMods.toArray(new ModificationItem[jndiMods.size()]));
+			}
+			else
+			{
+				throw new NotImplementedException(aEntityNotifs[0].getAction());
+			}
+		}
+		catch (NamingException e)
+		{
+			throw new IdASException(e);
+		}
+	}
+
+	private BasicAttributes _entityNotificationToBasicAttributes(
+		EntityNotification[] entityNotifs) throws IdASException
+	{
+		BasicAttributes jndiAttrs = new BasicAttributes();
+		jndiAttrs.put(new BasicAttribute("objectClass", entityNotifs[0].getEntity().getModel().getType().toString()));
+
+		for (int iLoop = 0; iLoop < entityNotifs.length; ++iLoop)
+		{
+			if (entityNotifs[iLoop].getAction().compareTo(EntityNotification.UPDATE_ATTR_NOTIFY) == 0)
+			{
+				AttributeNotification attrNotif = entityNotifs[iLoop].getAttributeNotification();
+				if (attrNotif.getAction().compareTo(AttributeNotification.UPDATE_VALUE_NOTIFY) == 0)
+				{
+					AttributeValueNotification attrValNotif = attrNotif.getAttributeValueNotification();
+					if (attrValNotif.getAction().compareTo(AttributeValueNotification.UPDATE_ADD) != 0)
+						throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,attrValNotif.getAction()));
+
+					/* If we got one attribute value added, we got them all. */
+					if (jndiAttrs.get(attrNotif.getAttr().getAttrID().toString()) == null)
+						jndiAttrs.put(_IAttributeToAttribute(attrNotif.getAttr()));
+				}
+				else if (attrNotif.getAction().compareTo(AttributeNotification.UPDATE_ADD) == 0) 
+				{
+					/* If we get an associated value notify, we'll handle it here or above. */
+					if (jndiAttrs.get(attrNotif.getAttr().getAttrID().toString()) == null)
+						jndiAttrs.put(_IAttributeToAttribute(attrNotif.getAttr()));
+				}
+				else
+				{
+					/* Any other kind of attribute notification should not occur during entity creation. */ 
+					throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,attrNotif.getAction()));
+				}
+			}
+			else if (entityNotifs[iLoop].getAction().compareTo(EntityNotification.UPDATE_ADD) != 0)
+			{
+				throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,entityNotifs[iLoop].getAction()));
+			}
+		}
+		return jndiAttrs;
+	}
+
+	private Vector _entityNotificationToModificationItems(
+		EntityNotification[] entityNotifs) throws IdASException
+	{
+		Vector jndiMods = new Vector();
+		_log.debug("Entity notifications: " + (entityNotifs.length - index));
+		for (int iLoop = 0; iLoop < entityNotifs.length; ++iLoop)
+		{
+			AttributeNotification attrNotif = entityNotifs[iLoop].getAttributeNotification();
+			_log.debug("Converting attribute notification to modification item: " + attrNotif.getAction()
+					+ ", " + attrNotif.getAttr().getAttrID().toString());
+
+			if (attrNotif.getAction().compareTo(AttributeNotification.UPDATE_VALUE_NOTIFY) == 0)
+			{
+				jndiMods.add(_attributeValueNotificationToModificationItem(attrNotif));
+			}
+			else if (attrNotif.getAction().compareTo(AttributeNotification.UPDATE_REMOVE) == 0)
+			{
+				AttributeNotification addNotif = null, addValueNotif = null;
+
+				if (iLoop + 2 < entityNotifs.length)
+				{
+					addNotif = entityNotifs[iLoop + 1].getAttributeNotification();
+					addValueNotif = entityNotifs[iLoop + 2].getAttributeNotification();
+				}
+
+				if ((addNotif != null) && (addValueNotif != null)
+					&& (attrNotif.getAttr().getAttrID().toString().compareTo(
+						addNotif.getAttr().getAttrID().toString()) == 0)
+					&& (addNotif.getAction().compareTo(AttributeNotification.UPDATE_ADD) == 0)
+					&& (addValueNotif.getAction().compareTo(AttributeNotification.UPDATE_VALUE_NOTIFY) == 0))
+				{
+					Attribute attr = _AttrNotifToJNDIAttr(addValueNotif);
+					jndiMods.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr));
+					iLoop += 2;
+					continue;
+				}
+				else
+				{
+					jndiMods.add(new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
+							new BasicAttribute(attrNotif.getAttr().getAttrID().toString())));					
+				}
+			}
+			/* We should receive a value notify for every attribute value added. */
+			else if (attrNotif.getAction().compareTo(AttributeNotification.UPDATE_ADD) != 0)
+			{
+				throw new NotImplementedException(attrNotif.getAction());
+			}
+		}
+
+		return jndiMods;
+	}
+
+	private Attribute _AttrNotifToJNDIAttr(
+		AttributeNotification attrNotif) throws IdASException
+	{
+		Attribute attr = null;
+		try
+		{
+			String attrID = attrNotif.getAttr().getAttrID().toString();
+			attr = new BasicAttribute(attrID);
+			AttributeValueNotification attrValNotif = attrNotif.getAttributeValueNotification();
+			IAttributeValue attrVal = attrValNotif.getAttributeValue();
+			IAttributeValue providerVal;
+			URI providerType = (URI)_mapConsumerAttrName(new URI(attrID)).firstElement();
+			
+			if (attrVal.isSimple()) {
+				ISimpleAttrValue val = (ISimpleAttrValue)attrVal;
+				providerVal = (IAttributeValue)_attrPDPs.consumerValueToProvider(
+					val.getModel().getType(), null, providerType, null, attrVal);
+				String strVal = ((ISimpleAttrValue)providerVal).getLexical();
+				_log.debug("Adding value to JNDI attribute: " + strVal);
+				attr.add(strVal);
+			}
+			else {
+				throw new NotImplementedException(JNDICPMessages.CANNOT_CONVERT_TO_JNDI_ATTR);
+			}
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+
+		return attr;
+	}
+
+	private ModificationItem _attributeValueNotificationToModificationItem(
+		AttributeNotification attrNotif) throws IdASException
+	{
+		ModificationItem retModItem = null;
+		Attribute attr = _AttrNotifToJNDIAttr(attrNotif);
+		AttributeValueNotification attrValNotif = attrNotif.getAttributeValueNotification();
+
+		if (attrValNotif.getAction().compareTo(AttributeValueNotification.UPDATE_ADD) == 0)
+			retModItem = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
+		else if (attrValNotif.getAction().compareTo(AttributeValueNotification.UPDATE_REMOVE) == 0)
+			retModItem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr);
+		else if (attrValNotif.getAction().compareTo(AttributeValueNotification.UPDATE_SET_DATA) == 0)
+			retModItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
+		else
+			throw new NotImplementedException(attrValNotif.getAction());
+
+		return retModItem;
+	}
+
+	private Attribute _IAttributeToAttribute(
+		IAttribute attr) throws IdASException
+	{
+		BasicAttribute jndiAttr = null;
+		try
+		{
+			URI providerType = (URI) _mapConsumerAttrName(
+				new URI(attr.getAttrID().toString())).firstElement();
+			IAttributeValue providerVal;
+			jndiAttr = new BasicAttribute(providerType.toString());
+			_log.debug(JNDICPMessages.bind(JNDICPMessages.CONVERT_TO_PROVIDER_ATTR, attr.getAttrID().toString()));
+
+			// put each value into the jndi attr
+			Iterator consumerVals = attr.getValues();
+			while (consumerVals.hasNext())
+			{
+				IAttributeValue consumerVal = (IAttributeValue) consumerVals.next();
+				if (consumerVal.isSimple()) {
+					ISimpleAttrValue val = (ISimpleAttrValue)consumerVal;
+					providerVal = (ISimpleAttrValue)_attrPDPs.consumerValueToProvider(
+						val.getModel().getType(), null, providerType, null, consumerVal);
+					jndiAttr.add(((ISimpleAttrValue)providerVal).getLexical());
+				}
+				else {
+					throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CANNOT_CONVERT_TO_JNDI_ATTR_INFO,
+						consumerVal.getClass().toString()));
+				}
+			}
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+		return jndiAttr;
+	}
+
+	/**
+	 * 
+	 */
+	public IContextModel getContextModel()
+	{
+		return new JNDIContextModel(this);
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextModel.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextModel.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextModel.java	(revision 0)
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.net.URI;
+import java.util.Iterator;
+
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+
+import org.eclipse.higgins.idas.api.IdASException;
+import org.eclipse.higgins.idas.api.model.IAttributeModel;
+import org.eclipse.higgins.idas.api.model.IContextModel;
+import org.eclipse.higgins.idas.api.model.IEntityModel;
+import org.eclipse.higgins.idas.api.model.IDisplayData;
+import org.eclipse.higgins.idas.api.model.IModel;
+
+public class JNDIContextModel implements IContextModel
+{
+	private JNDIContext _context;
+
+	public JNDIContextModel(
+		JNDIContext context)
+	{
+		_context = context;
+	}
+
+	public IModel getModel(
+		URI type)
+	{
+		IModel model = null;
+		DirContext schemaCtx;
+
+		try
+		{
+			schemaCtx = _context.getDirContext().getSchema(_context.getDirContext().getNameInNamespace());
+		}
+		catch (NamingException e)
+		{
+			try
+			{
+				schemaCtx = _context.getDirContext().getSchema("");
+			}
+			catch (NamingException e1)
+			{
+				try
+				{
+					schemaCtx = _context.getDirContext().getSchema(_context.consumerEntityIDToProvider(_context.getAuthEntityID()));
+				}
+				catch (NamingException e2)
+				{
+					return model;
+				}
+				catch (IdASException e3)
+				{
+					return model;
+				}
+			}
+			//schemaCtx.close();
+		}
+		return model;
+	}
+
+	public IEntityModel getEntityModel(
+		URI entityType)
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Iterator getEntityModels()
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IDisplayData getDisplayData()
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public URI getType()
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IAttributeModel getAttributeModel(
+		URI attrID)
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Iterator getAttributeModels()
+	{
+		// TODO Auto-generated method stub
+		return null;
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryProvider.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryProvider.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryProvider.java	(revision 0)
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2006 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ */
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.security.Provider;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages;
+
+/**
+* @author tdoman@xxxxxxxxxx
+*/
+
+public final class JNDIContextFactoryProvider extends Provider
+{
+	private Log _log = LogFactory.getLog(JNDIContextFactoryProvider.class.getName());
+	private static final long serialVersionUID = 1L;
+
+	public JNDIContextFactoryProvider()
+	{
+		super("JNDIHigginsProvider", 1.0, "JNDI provider for Higgins ContextFactory objects.");
+		_log.debug(JNDICPMessages.CNTX_PROVIDER_INST_MSG);		
+		put("ContextFactory.Higgins.JNDI", "org.eclipse.higgins.idas.cp.jndi.JNDIContextFactory");
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryConfigurableComponentFactory.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryConfigurableComponentFactory.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/olnew/JNDIContextFactoryConfigurableComponentFactory.java	(revision 0)
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import org.eclipse.higgins.configuration.api.IConfigurableComponent;
+import org.eclipse.higgins.configuration.api.IConfigurableComponentFactory;
+import org.eclipse.higgins.idas.api.IdASException;
+
+
+/**
+*
+* @author tdoman@xxxxxxxxxx
+*
+*/
+
+public class JNDIContextFactoryConfigurableComponentFactory implements IConfigurableComponentFactory
+{
+	/**
+	 * 
+	 */
+	public IConfigurableComponent getSingletonInstance()
+	{
+		return null;
+	}
+
+	/**
+	 * 
+	 */
+	public IConfigurableComponent getNewInstance()
+	{
+		IConfigurableComponent iComponentRet;
+		try
+		{
+			iComponentRet = new org.eclipse.higgins.idas.cp.jndi.JNDIContextFactory();
+		}
+		catch (IdASException e)
+		{
+			iComponentRet = null;
+		}
+		return iComponentRet;
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIContext.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIContext.java	(revision 20094)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIContext.java	(working copy)
@@ -115,6 +115,8 @@
 
 import org.eclipse.higgins.configuration.common.ConfigurableComponentFactoryHelper;
 
+import org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages;
+
 /**
  * 
  * @author tdoman@xxxxxxxxxx
@@ -202,8 +204,7 @@
 		_contextSettings = contextID.getConfiguration();
 		_connectionSettings = (Map)_contextSettings.get("Connection");
 		if (_connectionSettings == null)
-			throw new IdASException("No JNDI conne" +
-					"ction settings specified");
+			throw new IdASException(JNDICPMessages.NO_JNDI_CONN);
 		_env = new Hashtable();
 
 		URI contextURIs[] = _contextID.getUris();
@@ -354,7 +355,7 @@
 				if (entityID == null)
 					entityID = entity.getEntityID();
 				else
-					throw new IdASException("Non-unique identity from AuthN materials.");
+					throw new IdASException(JNDICPMessages.NO_UNIQUE_IDENTITY);
 			}
 		}
 
@@ -378,7 +379,7 @@
 				}
 				else if (extensions[index].failIfUnsupported() == true)
 				{
-					throw new UnhandledExtensionException(extensions[index].getClass().getName() + " not supported");
+					throw new UnhandledExtensionException(JNDICPMessages.bind(JNDICPMessages.UNSUPPORTED_EXCEPTION,extensions[index].getClass().getName()));
 				}
 			}
 		}
@@ -485,7 +486,7 @@
 							saslClientProvider = (String) _env.get("org.eclipse.higgins.idas.cp.jndi.saslClientProvider");
 
 					if ((saslClientPackage == null) || (saslClientProvider == null))
-						throw new IdASException("SASL SAML Client Provider not specified");
+						throw new IdASException(JNDICPMessages.NO_SASLSAML_CLIENT);
 
 					// Make sure the SAML/SASL security provider is loaded
 					if (java.security.Security.getProvider("SAML SASL Mechanism") == null)
@@ -497,7 +498,7 @@
 					SAML1Assertion assertion = (SAML1Assertion)identity;
 					SAMLSubject subject = assertion.getSubject();
 					if (subject.getNameIDFormat().indexOf("X509SubjectName") == -1)
-						throw new IdASException("Unsupported name format specified in SAML assertion"); 
+						throw new IdASException(JNDICPMessages.UNSUPPORTED_FORMAT_SAML_ASSERT); 
 					_entityID = subject.getNameID();
 					_env.put(Context.SECURITY_PRINCIPAL, _entityID);
 					_env.put(Context.SECURITY_PROTOCOL, "ssl");
@@ -521,8 +522,7 @@
 			}
 			else
 			{
-				throw new NotImplementedException("Unsupported AuthN materials: "
-					+ identity.toString());
+				throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.UNSUPPORTED_AUTHN_MATERIALS,identity.toString()));
 			}
 
 			try
@@ -580,8 +580,7 @@
 			{
 				_entityID = _lookupEntity(lookupFilter);
 				if (_entityID == null)
-					throw new IdASException("AuthN materials produced no Entity ID: "
-						+ identity.toString());
+					tthrow new IdASException(JNDICPMessages.bind(JNDICPMessages.NO_ENTITY_ID, identity.toString()));
 			}
 		}
 		else
@@ -636,7 +635,7 @@
 		List addressList = (List)_connectionSettings.get("AddressList");
 		
 		if ((addressList == null) || (addressList.size() == 0))
-			throw new IdASException("No JNDI service addresses configured.");
+			throw new IdASException(JNDICPMessages.NO_JNDI_SERVICE_CONFIGURED);
 
 		int iLoop;
 		for (iLoop = 0; iLoop < addressList.size(); iLoop++)
@@ -681,7 +680,7 @@
 			}
 		}
 		if (iLoop == addressList.size())
-			throw new IdASException("Unable to connect to any specified JNDI service address.");
+			throw new IdASException(JNDICPMessages.CONNECTION_FAILURE);
 	}
 
 	/**
@@ -767,17 +766,7 @@
 		docType.setInternalDeclarations(entityDeclList);
 		docType.setName("rdf:RDF");
 		doc.setDocType(docType);
-		doc.addComment("\r\n*******************************************************************************\r\n"
-				+ "* Copyright (c) 2006 Novell Inc.\r\n"
-				+ "* All rights reserved. This document and accompanying materials\r\n"
-				+ "* are made available under the terms of the Eclipse Public License v1.0\r\n"
-				+ "* which accompanies this distribution, and is available at\r\n"
-				+ "* http://www.eclipse.org/legal/epl-v10.html\r\n";
-				+ "*\r\n"
-				+ "* Contributors:\r\n"
-				+ "*     Tom Doman\r\n"
-				+ "*     Jim Sermersheim\r\n"
-				+ "*******************************************************************************\r\n");
+		doc.addComment(JNDICPMessages.COPYRIGHT_TEXT);
 
 		DOMElement elem = (DOMElement) doc.addElement("rdf:RDF");
 		elem.addAttribute("xml:base",
@@ -1260,7 +1249,7 @@
 				SearchResult result = (SearchResult) results.next();
 				entity = new JNDIEntity(this, result, realEntityID, _attrPDPs);
 				if (results.hasMore())
-					throw new IdASException("Non-unique Entity ID");
+					throw new IdASException(JNDICPMessages.NO_UNIQUE_EID);
 			}
 		}
 		catch (NamingException e)
@@ -1372,8 +1361,7 @@
 								ldapFilter.addPresent(attrName.toString());
 								break;
 							default:
-								throw new NotImplementedException("Comparator (" + comparator
-									+ ") not supported.");
+								throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CMPRTR_NOT_SUPPORTED,comparator));
 							}
 						}
 						else if (assertionValue.isSimple())
@@ -1413,14 +1401,12 @@
 								// if (rfcType == RfcFilter.SUBSTRINGS)
 								// ldapFilter.startSubstrings();
 								// if (rfcType == RfcFilter.EXTENSIBLE_MATCH)
-								throw new NotImplementedException("Comparator (" + comparator
-									+ ") not supported.");
+								throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CMPRTR_NOT_SUPPORTED,comparator));
 							}
 						}
 						else
 						{
-							throw new NotImplementedException(
-								"Complex assertion values in filters not supported.");
+							throw new NotImplementedException(JNDICPMessages.NOT_SUPPORTED_COMPLEX_VALUES);
 						}
 					}
 					else if (assertion instanceof BasicFilterEntityTypeAssertion)
@@ -1493,9 +1479,9 @@
 		else if (operator.compareTo(IFilter.OP_OR) == 0)
 			iRet = RfcFilter.OR;
 		else
-			throw new NotImplementedException("Operator (" + operator
-				+ ") not supported.");
+			throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.NOT_SUPPORTED_OPERATOR,operator));
 
+
 		return iRet;
 	}
 
@@ -1623,7 +1609,7 @@
 		}
 
 		if (structuralClass == null)
-			throw new IdASException("No structural class found.");
+			throw new IdASException(JNDICPMessages.NO_STRUCURAL_CLASS_FOUND);;
 
 		URI uriType = null;
 		try
@@ -1739,8 +1725,8 @@
 					bFoundStructural = true;
 					NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
 					if (jndiAttr.size() != 1)
-						throw new IdASException("Only 1 value expected, found: "
-							+ jndiAttr.size());
+						throw new IdASException(JNDICPMessages.bind(JNDICPMessages.EXPECTED_VALUE_INFO,
+							new java.lang.Integer(jndiAttr.size())));
 
 					String jndiValue = (String) jndiAttrValEnum.next();
 					if (jndiValue.compareToIgnoreCase("top") != 0)
@@ -1763,7 +1749,7 @@
 		}
 
 		if (retAttr == null)
-			throw new IdASException("No structural or object class found.");
+			throw new IdASException(JNDICPMessages.NO_STRUCURALOBJECT_CLASS_FOUND);
 		return retAttr;
 	}
 
@@ -1983,13 +1969,12 @@
 						Object oldData = attrValNotif.getOldValueData();
 						if (oldData != null) 
 						{
-							throw new IdASException("Cannot remove values while adding a new entity");
+							throw new IdASException(JNDICPMessages.CANNOT_REMOVE_VALUES);
 						}
 						// fall through
 					}
 					else
-						throw new IdASException("Unallowed attribute value notification type during entity creation: "
-							+ attrValNotif.getAction());
+						throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,attrNotif.getAction()));
 
 					/* If we got one attribute value added, we got them all. */
 					if (jndiAttrs.get(attrNotif.getAttr().getAttrID().toString()) == null)
@@ -2004,14 +1989,12 @@
 				else
 				{
 					/* Any other kind of attribute notification should not occur during entity creation. */ 
-					throw new IdASException("Unallowed attribute notification type during entity creation: "
-						+ attrNotif.getAction());
+					throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,attrNotif.getAction()));
 				}
 			}
 			else if (entityNotifs[iLoop].getAction().compareTo(EntityNotification.UPDATE_ADD) != 0)
 			{
-				throw new IdASException("Unallowed entity notification type during entity creation: "
-					+ entityNotifs[iLoop].getAction());
+				throw new IdASException(JNDICPMessages.bind(JNDICPMessages.UNALLOWED_ATTR_VAL_NOTIFICATION,entityNotifs[iLoop].getAction()));
 			}
 		}
 		return jndiAttrs;
@@ -2094,7 +2077,7 @@
 				attr.add(strVal);
 			}
 			else {
-				throw new NotImplementedException("Cannot convert complex attributes to JNDI attributes");
+				throw new NotImplementedException(JNDICPMessages.CANNOT_CONVERT_TO_JNDI_ATTR);
 			}
 		}
 		catch (URISyntaxException e)
@@ -2164,8 +2147,8 @@
 					jndiAttr.add(((ISimpleAttrValue)providerVal).getLexical());
 				}
 				else {
-					throw new NotImplementedException("Cannot convert complex attributes to JNDI attributes: "
-						+ consumerVal.getClass().toString());
+					throw new NotImplementedException(JNDICPMessages.bind(JNDICPMessages.CANNOT_CONVERT_TO_JNDI_ATTR_INFO,
+						consumerVal.getClass().toString()));
 				}
 			}
 		}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.java
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.java	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.java	(revision 0)
@@ -0,0 +1,76 @@
+/**
+ * Copyright (c) 2008-2009 IBM Corp.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Prakash Mallick
+ */
+
+package org.eclipse.higgins.idas.cp.jndi.l10n;
+
+
+import org.eclipse.higgins.util.l10n.IdASNLS;
+
+
+public class JNDICPMessages extends IdASNLS {
+	private static final String BUNDLE_NAME = "org.eclipse.higgins.idas.cp.jndi.l10n.JNDICPMessages"; //$NON-NLS-1$
+	public static String NO_JNDI_CONN;
+	public static String NO_UNIQUE_IDENTITY;
+	public static String OPEN_WITH_USER;
+	public static String OPEN_WITH_DIGITALMATERIALS;
+	public static String OPEN_WITH_PRIV_USER;
+	public static String OPEN_WITH_ANONYMOUSMATERIALS;
+	public static String NO_SASLSAML_CLIENT;
+	public static String UNSUPPORTED_FORMAT_SAML_ASSERT;
+	public static String UNSUPPORTED_AUTHN_MATERIALS;
+	public static String START_TLS_MSG;
+	public static String OPENED_CNTXT_INFO;
+	public static String NO_ENTITY_ID;
+	public static String NO_JNDI_SERVICE_CONFIGURED;
+	public static String INITIAL_CNTXT;
+	public static String CONNECTION_FAILURE;
+	public static String CNTXT_CLOSED;
+	public static String COPYRIGHT_TEXT;
+	public static String HIGGINS_LDAP_ONTOLOGY;
+	public static String SEARCH_ENTITY_EID;
+	public static String NO_UNIQUE_EID;
+	public static String CMPRTR_NOT_SUPPORTED;
+	public static String NOT_SUPPORTED_COMPLEX_VALUES;
+	public static String NOT_SUPPORTED_OPERATOR;
+	public static String FILTER_SEARCH_INFO;
+	public static String STRING_FILTER_INFO;
+	public static String NO_STRUCURAL_CLASS_FOUND;
+	public static String EXPECTED_VALUE_INFO;
+	public static String NO_STRUCURALOBJECT_CLASS_FOUND;
+	public static String APPLY_UPDATE;
+	public static String CHANGE;
+	public static String CHANGES;
+	public static String APPLIED;
+	public static String UPDATE_ENTRY;
+	public static String UNALLOWED_ATTR_VAL_NOTIFICATION;
+	public static String ENTITY_NOTIFICATION;
+	public static String ATTR_NOTIFICATION;
+	public static String ADD_JNDI_ATTR_VAL;
+	public static String CANNOT_CONVERT_TO_JNDI_ATTR;
+	public static String CANNOT_CONVERT_TO_JNDI_ATTR_INFO;
+	public static String CONVERT_TO_PROVIDER_ATTR;
+	public static String CNTX_PROVIDER_INST_MSG;
+	public static String NO_EID_SET;
+	public static String NO_TYPE_SET;
+	public static String STRING_MSG;
+	public static String BYTE_MSG;
+	public static String ALLREADY_ADDED_ATTR_SET;
+	public static String ATTR_CONTAINER_MSG;
+	public static String ATTR_UPDATE_NOTIFICATION_MSG;
+	public static String CANNOT_REMOVE_VALUES;
+	public static String UNSUPPORTED_EXCEPTION;
+	
+	static {
+      IdASNLS.initializeMessages(BUNDLE_NAME, JNDICPMessages.class);
+   }
+
+   
+}
\ No newline at end of file
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.properties
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.properties	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/l10n/JNDICPMessages.properties	(revision 0)
@@ -0,0 +1,66 @@
+#------------------------------------------------------
+# Messages localized for English, US
+#------------------------------------------------------
+
+#NLS_MESSAGEFORMAT_NONE
+
+NO_JNDI_CONN=No JNDI connection settings specified 
+NO_UNIQUE_IDENTITY=Non-unique identity from AuthN materials.
+OPEN_WITH_USER=attempt open using simple auth with user: {0}  mapped to: {1}
+OPEN_WITH_DIGITALMATERIALS=attempt open using digestmaterials:  {0}
+OPEN_WITH_PRIV_USER=attempt open using least privileged user: {0}
+OPEN_WITH_ANONYMOUSMATERIALS=attempt open using anonymous materials
+NO_SASLSAML_CLIENT=SASL SAML Client Provider not specified
+UNSUPPORTED_FORMAT_SAML_ASSERT=Unsupported name format specified in SAML assertion
+UNSUPPORTED_AUTHN_MATERIALS=Unsupported AuthN materials: {0}
+START_TLS_MSG=Start TLS request successful: Host ({0}), Protocol ({1})
+OPENED_CNTXT_INFO=Context opened: {0}  as: {1} 
+NO_ENTITY_ID=AuthN materials produced no Entity ID: {0}
+NO_JNDI_SERVICE_CONFIGURED=No JNDI service addresses configured.
+INITIAL_CNTXT=Attempting to create initial context: {0}
+CONNECTION_FAILURE=Unable to connect to any specified JNDI service address.
+CNTXT_CLOSED=Context closed: {0} as {1}
+HIGGINS_LDAP_ONTOLOGY=Dynamically Generated Higgins-based LDAP Ontology (Context:  {0} )
+SEARCH_ENTITY_EID="Searching for Entity: {0} as: {1} in context: {2}
+NO_UNIQUE_EID=Non-unique Entity ID
+CMPRTR_NOT_SUPPORTED=omparator ( {0} ) not supported.
+NOT_SUPPORTED_COMPLEX_VALUES=Complex assertion values in filters not supported.
+NOT_SUPPORTED_OPERATOR=Operator ({0}) not supported.
+FILTER_SEARCH_INFO=Searching for Entities matching filter: {0} as: {1} in context: {2}
+STRING_FILTER_INFO=LDAP String Filter: {0}
+NO_STRUCURAL_CLASS_FOUND=No structural class found.
+EXPECTED_VALUE_INFO=Only 1 value expected, found: {0}
+NO_STRUCURALOBJECT_CLASS_FOUND=No structural class or object class found.
+APPLY_UPDATE=Applying updates
+CHANGE=change
+CHANGES=changes
+APPLIED=applied
+UPDATE_ENTRY=Updating entry [ {0} ], {1}
+UNALLOWED_ATTR_VAL_NOTIFICATION=Unallowed attribute value notification type during entity creation: {0}
+ENTITY_NOTIFICATION=Entity notifications: {0}
+ATTR_NOTIFICATION=Converting attribute notification to modification item: {0}, {1}
+ADD_JNDI_ATTR_VAL=Adding value to JNDI attribute: {0}
+CANNOT_CONVERT_TO_JNDI_ATTR=Cannot convert complex attributes to JNDI attributes
+CANNOT_CONVERT_TO_JNDI_ATTR_INFO=Cannot convert complex attributes to JNDI attributes {0}
+CONVERT_TO_PROVIDER_ATTR=Converting consumer attribute to provider attribute: {0}
+CNTX_PROVIDER_INST_MSG=JNDI Context Factory Provider instantiated
+NO_EID_SET=No entity ID is set.
+NO_TYPE_SET=No entity type set.
+STRING_MSG=Attr: {0} is a String
+BYTE_MSG=Attr: {0} is a byte[]
+ALLREADY_ADDED_ATTR_SET={0}  already added attrSet, container: {1}
+ATTR_CONTAINER_MSG=Placed [{0}] into attrSet, container: {1}
+ATTR_UPDATE_NOTIFICATION_MSG=Received attribute update notification - {0}, {1}
+CANNOT_REMOVE_VALUES=Cannot remove values while adding a new entity
+UNSUPPORTED_EXCEPTION={0} not supported
+COPYRIGHT_TEXT=\n*******************************************************************************\n\
+			* Copyright (c) 2006 Novell Inc.\n\
+			* All rights reserved. This document and accompanying materials\n\
+			* are made available under the terms of the Eclipse Public License v1.0\n\
+			* which accompanies this distribution, and is available at\n\
+			* http://www.eclipse.org/legal/epl-v10.html\n\
+			\n\
+			* Contributors:\n\
+			*     Tom Doman\n\
+			*     Jim Sermersheim\n\
+			*******************************************************************************\n
\ No newline at end of file
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java.bak
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java.bak	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/src/org/eclipse/higgins/idas/cp/jndi/JNDIEntity.java.bak	(revision 0)
@@ -0,0 +1,426 @@
+/**
+ * Copyright (c) 2006-2007 Novell, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *		Tom Doman
+ *		Jim Sermersheim
+ */
+
+package org.eclipse.higgins.idas.cp.jndi;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchResult;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.higgins.idas.api.IAttribute;
+import org.eclipse.higgins.idas.api.IEntity;
+import org.eclipse.higgins.idas.api.ISimpleAttrValue;
+import org.eclipse.higgins.idas.api.IdASException;
+import org.eclipse.higgins.idas.api.InvalidTypeException;
+import org.eclipse.higgins.idas.spi.AttributeNotification;
+import org.eclipse.higgins.idas.spi.BasicEntity;
+import org.eclipse.higgins.idas.spi.IEntityContainer;
+import org.eclipse.higgins.idas.spi.BasicAttribute;
+import org.eclipse.higgins.idas.spi.BasicAttributeSet;
+import org.eclipse.higgins.idas.spi.BasicSimpleValue;
+import org.eclipse.higgins.idas.spi.EntityNotification;
+import org.eclipse.higgins.util.idas.cp.BasicAttributePDP;
+import org.eclipse.higgins.util.idas.cp.BasicAttributePDPIter;
+import org.eclipse.higgins.util.idas.cp.IAttributePDPs;
+
+/**
+ * 
+ * @author tdoman@xxxxxxxxxx
+ * @author jimse@xxxxxxxxxx
+ * 
+ */
+
+public class JNDIEntity extends BasicEntity implements IEntity
+{
+	private Log _log = LogFactory.getLog(JNDIEntity.class.getName());
+	private JNDIContext _context;
+	private SearchResult _jndiResult;
+	private IAttributePDPs _attrPDPs;
+	private String _consumerEntityID;
+	private URI _type;
+	private IEntityContainer _container;
+	private Vector _readListJNDI = new Vector();
+	private boolean _bReadAllJNDI = false;
+	private String _searchBase;
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param jndiResult
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		SearchResult jndiResult,
+		String searchBase,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext);
+		_context = jndiContext;
+		_container = jndiContext;
+		_jndiResult = jndiResult;
+		_searchBase = searchBase;
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param type
+	 * @param entityID
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		URI type,
+		String entityID,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext, type, entityID);
+		_context = jndiContext;
+		_container = jndiContext;
+		_consumerEntityID = entityID;
+		_type = type;
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 * @param jndiContext
+	 * @param copyFrom
+	 * @param attrPDPs
+	 * @throws IdASException
+	 */
+	public JNDIEntity(
+		JNDIContext jndiContext,
+		IEntity copyFrom,
+		IAttributePDPs attrPDPs) throws IdASException
+	{
+		super(jndiContext, copyFrom.getModel().getType(), copyFrom.getEntityID());
+		_context = jndiContext;
+		_container = jndiContext;
+		_consumerEntityID = copyFrom.getEntityID();
+		_type = copyFrom.getModel().getType();
+		_attrPDPs = attrPDPs;
+	}
+
+	/**
+	 * 
+	 */
+	private String _getNameInNamespace(
+		SearchResult jndiResult) // throws IdASException
+	{
+		String retStr;
+//		try
+//		{
+			retStr = _jndiResult.getName();
+			if (retStr.length() == 0)
+				retStr = _searchBase;
+			else if (_searchBase.length() > 0)
+				retStr = retStr + "," + _searchBase;
+			// HACK: composeName does not work to create full names in 1.4 for some reason and
+			//		 getNameInNamespace is only in Java 1.5.  LDAP specific hack coded above.
+			// retStr = _context.getDirContext().composeName(_jndiResult.getName(), _searchBase);
+			
+			/* Here's something we should try
+			 * NameParser parser = _context.getDirContext().getNameParser(_jndiResult.getName());
+			 * parser.add(_searchBase);
+			 * return parser.toString();
+ 			 */
+//		}
+//		catch (NamingException e)
+//		{
+//			throw new IdASException(e);
+//		}
+		return retStr;
+	}
+
+	/**
+	 */
+	public String getEntityID() throws IdASException
+	{
+		if (_consumerEntityID == null)
+		{
+			if (_jndiResult != null)
+				_consumerEntityID = _context.providerEntityIDToConsumer(_getNameInNamespace(_jndiResult));
+			else
+				throw new IdASException("No entity ID is set.");
+		}
+		return _consumerEntityID;
+	}
+
+	/**
+	 */
+	public URI getEntityType() throws IdASException
+	{
+		if (_type == null)
+		{
+			if (_jndiResult != null)
+				_type = _context.getSearchResultType(_jndiResult);
+			else
+				throw new IdASException("No entity type set.");
+		}
+		return _type; 
+	}
+
+	/**
+	 */
+	public Iterator getAttributes() throws IdASException
+	{
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();		
+		boolean bHasItems = attrSet.getAttributes().hasNext();
+
+		if (!_bReadAllJNDI  && (_jndiResult != null))
+		{
+			NamingEnumeration jndiEnum;
+			Attributes jndiAttrs = _jndiResult.getAttributes();
+			jndiEnum = jndiAttrs.getAll();
+			try
+			{
+				while (jndiEnum.hasMore())
+				{
+					Attribute jndiAttr = (Attribute) jndiEnum.next();
+					NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
+					URI attrURI = new URI(jndiAttr.getID());
+					BasicAttribute attr = null;
+	
+					if (!bHasItems || (attrSet.getAttribute(attrURI) == null))
+					{
+						// TODO: Map based on syntaxes.
+						attr = attrSet.addUnnotifiedAttribute(attrURI);
+						while (jndiAttrValEnum.hasMore())
+						{
+							Object jndiValue = jndiAttrValEnum.next();
+							if (jndiValue instanceof String)
+							{
+								_log.debug("Attr: " + jndiAttr.getID() + " is a String");
+								attr.addSimpleValue(ISimpleAttrValue.STRING_TYPE_URI, (String) jndiValue);
+							}
+							else if (jndiValue instanceof byte[])
+							{
+								_log.debug("Attr: " + jndiAttr.getID() + " is a byte[]");
+								attr.addSimpleValue(ISimpleAttrValue.BASE64BINARY_TYPE_URI,
+									(byte[]) jndiValue);
+							}
+							else
+							{
+								_log.debug(jndiValue.getClass().toString());
+								attr.addSimpleValue(new URI(BasicSimpleValue.ATTR_VALUE_TYPE_URI_STR), jndiValue);
+							}
+						}
+						attr.setContainer(attrSet);
+						_readListJNDI.add(attrURI);
+					}
+				}
+				_bReadAllJNDI = true;
+			}
+			catch (NamingException e)
+			{
+				throw new IdASException(e);
+			}
+			catch (URISyntaxException e)
+			{
+				throw new IdASException(e);
+			}
+		}
+
+		/* No support for metadata PDPs. */
+		return new BasicAttributePDPIter(_attrPDPs, null, null, attrSet.getAttributes(), true);
+	}
+
+	/**
+	 */
+	public IAttribute getAttribute(
+		URI consumerAttrName) throws IdASException
+	{
+		IAttribute retAttr = null;
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+
+		out: try
+		{
+			Iterator itr = _attrPDPs.consumerIDToProviders(consumerAttrName);
+			URI providerAttrName = null;
+
+			while (itr.hasNext())
+			{
+				providerAttrName = (URI) itr.next();
+				if (_readListJNDI.contains(providerAttrName))
+				{
+					retAttr = attrSet.getAttribute(providerAttrName);
+					_log.debug(providerAttrName + " already placed attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+					break out;
+				}
+				else if ((retAttr = attrSet.getAttribute(providerAttrName)) != null)
+				{
+					_log.debug(providerAttrName + " already added attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+					break out;
+				}
+				else if (_jndiResult != null)
+				{
+					BasicAttribute attr = null;
+					Attributes jndiAttrs = _jndiResult.getAttributes();
+					NamingEnumeration jndiEnum = jndiAttrs.getAll();
+					while (jndiEnum.hasMore())
+					{
+						Attribute jndiAttr = (Attribute) jndiEnum.next();
+						URI attrURI = new URI(jndiAttr.getID());
+
+						if (providerAttrName.compareTo(attrURI) == 0)
+						{
+							NamingEnumeration jndiAttrValEnum = jndiAttr.getAll();
+							attr = attrSet.addUnnotifiedAttribute(attrURI);
+							while (jndiAttrValEnum.hasMore())
+							{
+								Object jndiValue = jndiAttrValEnum.next();
+								if (jndiValue instanceof String)
+								{
+									_log.debug("Attr: " + jndiAttr.getID() + " is a String");
+									attr.addSimpleValue(ISimpleAttrValue.STRING_TYPE_URI,
+										(String) jndiValue);
+								}
+								else if (jndiValue instanceof byte[])
+								{
+									_log.debug("Attr: " + jndiAttr.getID() + " is a byte[]");
+									attr.addSimpleValue(ISimpleAttrValue.BASE64BINARY_TYPE_URI,
+										(byte[]) jndiValue);
+								}
+								else
+								{
+									_log.debug(jndiValue.getClass().toString());
+									attr.addSimpleValue(new URI(BasicSimpleValue.ATTR_VALUE_TYPE_URI_STR), jndiValue);
+								}
+							}
+							attr.setContainer(attrSet);
+							retAttr = attr;
+							_readListJNDI.add(attrURI);
+							_log.debug("Placed [" + attr.getAttrID().toString() + "] into attrSet, container: " + ((BasicAttribute)retAttr).getContainer());
+							break out;
+						}
+					}
+				}
+			}
+		}
+		catch (NamingException e)
+		{
+			throw new IdASException(e);
+		}
+		catch (URISyntaxException e)
+		{
+			throw new IdASException(e);
+		}
+
+		if (retAttr != null)
+			return new BasicAttributePDP(_attrPDPs, null, null, retAttr, true);
+		else
+			return retAttr;
+	}
+
+	/*
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#addAttribute(org.eclipse.higgins.idas.api.IAttribute)
+	 */
+	public IAttribute addAttribute(
+		IAttribute copyFrom) throws IdASException
+	{
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+		BasicAttributePDP attrPDP = new BasicAttributePDP(_attrPDPs, null, null, copyFrom, false);
+		IAttribute attr = attrSet.getAttribute(attrPDP.getAttrID()); 
+			
+		if (attr != null)
+			return attr;
+		else
+			return super.addAttribute(attrPDP);
+	}
+
+	/*
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#addAttribute(java.net.URI)
+	 */
+	public IAttribute addAttribute(
+		URI type) throws IdASException, InvalidTypeException
+	{
+		Iterator itr = _attrPDPs.consumerIDToProviders(type);
+		BasicAttributeSet attrSet = this.getBasicAttributeSet();
+		URI providerType = (URI)itr.next();
+		IAttribute attr = attrSet.getAttribute(providerType);
+
+		if (attr != null)
+			return attr;
+		else
+			return super.addAttribute(providerType);
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttribute(java.net.URI)
+	 */
+	public void removeAttribute(URI attrID) throws IdASException {
+		Iterator itr = _attrPDPs.consumerIDToProviders(attrID);
+		if (itr != null) {
+			URI providerType = (URI)itr.next();
+			super.removeAttribute(providerType);
+		} else {
+			super.removeAttribute(attrID);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttributeValue(IAttribute)
+	 */
+	public void removeAttributeValue(IAttribute attr) throws IdASException {
+		BasicAttributePDP attrPDP = new BasicAttributePDP(_attrPDPs, null, null, attr, false);
+		super.removeAttributeValue(attrPDP);
+	}
+
+	/**
+	 * @see org.eclipse.higgins.idas.api.IHasAttributes#removeAttributeValue(URI, Object)
+	 */
+	public void removeAttributeValue(URI attrID, Object value) throws IdASException {
+		Iterator itr = _attrPDPs.consumerIDToProviders(attrID);
+		if (itr != null) {
+			URI providerType = (URI)itr.next();
+			super.removeAttributeValue(providerType, value);
+		} else {
+			super.removeAttributeValue(attrID, value);
+		}
+	}
+	
+
+	public void remove() throws IdASException
+	{
+		if (_container != null)
+		{
+			_container.updateNotification(new EntityNotification(this, EntityNotification.UPDATE_REMOVE,
+				null));
+		}
+	}
+
+	public void updateNotification(
+		AttributeNotification attrNotif) throws IdASException
+	{
+		_log.debug("Received attribute update notification - " + attrNotif.getAction() + ", " + attrNotif.getAttr().getAttrID().toString());
+		_log.debug("_containter " + ((_container != null) ? _container.toString() : "null"));		
+		if (_container != null)
+		{
+			_container.updateNotification(new EntityNotification(this, EntityNotification.UPDATE_ATTR_NOTIFY,
+				attrNotif));
+		}
+	}
+}
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml.bak
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml.bak	(revision 0)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml.bak	(revision 0)
@@ -0,0 +1,886 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- WARNING: Eclipse auto-generated file.
+              Any modifications will be overwritten.
+              To include a user specific buildfile here, simply create one in the same
+              directory with the processing instruction <?eclipse.ant.import?>
+              as the first entry and export the buildfile again. -->
+<project basedir="." default="build" name="org.eclipse.higgins.idas.cp.jndi">
+    <property name="ECLIPSE_HOME" value="/home/dsanders/Documents/eclipse"/>
+    <property environment="env"/>
+    <property name="org.eclipse.higgins.idas.cp.jndi.location" value="."/>
+    <property name="org.eclipse.higgins.dependencies.redistributable.location" value="../org.eclipse.higgins.dependencies.redistributable"/>
+    <property name="org.eclipse.higgins.configuration.api.location" value="../org.eclipse.higgins.configuration.api"/>
+    <property name="org.eclipse.higgins.configuration.common.location" value="../org.eclipse.higgins.configuration.common"/>
+    <property name="org.eclipse.higgins.audit.api.location" value="../org.eclipse.higgins.audit.api"/>
+    <property name="org.eclipse.higgins.idas.api.location" value="../org.eclipse.higgins.idas.api"/>
+    <property name="org.eclipse.higgins.messages.location" value="../org.eclipse.higgins.messages"/>
+    <property name="org.eclipse.higgins.configuration.xml.location" value="../org.eclipse.higgins.configuration.xml"/>
+    <property name="org.eclipse.higgins.util.jscript.location" value="../org.eclipse.higgins.util.jscript"/>
+    <property name="org.eclipse.higgins.util.saml.location" value="../org.eclipse.higgins.util.saml"/>
+    <property name="org.eclipse.higgins.idas.common.location" value="../org.eclipse.higgins.idas.common"/>
+    <property name="org.eclipse.higgins.idas.spi.location" value="../org.eclipse.higgins.idas.spi"/>
+    <property name="org.eclipse.higgins.util.idas.cp.location" value="../org.eclipse.higgins.util.idas.cp"/>
+    <property name="org.eclipse.higgins.util.socket.location" value="../org.eclipse.higgins.util.socket"/>
+	<property name="org.eclipse.higgins.util.l10n.location" value="../org.eclipse.higgins.util.l10n"/>
+    <property name="debuglevel" value="source,lines,vars"/>
+    <property name="target" value="1.2"/>
+    <property name="source" value="1.3"/>
+    <!-- ======================================== -->
+    <property name="source.dir" value="${basedir}/src"/>
+    <property name="sources.dir" value="${basedir}/.."/>
+    <property name="build.dir" value="${basedir}/build"/>
+    <property name="build.dir.bin" value="${build.dir}/bin"/>
+    <property name="build.dir.lib" value="${build.dir}/lib"/>
+    <property name="build.dir.doc" value="${build.dir}/doc"/>
+    <!-- ======================================== -->
+    <property name="build.file.name" value="higgins-idas-cp-jndi"/>
+    <property name="build.doc.packages" value="org.eclipse.higgins.idas.cp.jndi.*"/>
+    <!-- ======================================== -->
+    <property name="build.src.include" value="true"/>
+    <!-- ======================================== -->
+    <property name="javacDebugInfo" value="on"/>
+    <property name="javacVerbose" value="false"/>
+    <property name="javacSource" value="${source}"/>
+    <property name="javacTarget" value="${target}"/>
+    <!-- ======================================== -->
+    <condition property="eclipse.home" value="${ECLIPSE_HOME}">
+        <and>
+            <available file="plugins" filepath="${ECLIPSE_HOME}" type="dir"/>
+            <available file="startup.jar" filepath="${ECLIPSE_HOME}" type="file"/>
+        </and>
+    </condition>
+    <!-- ======================================== -->
+    <condition property="eclipse.available">
+        <and>
+            <isset property="eclipse.home"/>
+            <available file="plugins" filepath="${eclipse.home}" type="dir"/>
+            <available file="startup.jar" filepath="${eclipse.home}" type="file"/>
+        </and>
+    </condition>
+    <!-- ======================================== -->
+    <condition property="project.manifest" value="${basedir}/META-INF/MANIFEST.MF">
+        <available file="${basedir}/META-INF/MANIFEST.MF"/>
+    </condition>
+    <condition property="project.xml" value="${basedir}/plugin.xml">
+        <available file="${basedir}/plugin.xml"/>
+    </condition>
+    <!-- Include plugin related sources if Eclipse is available -->
+    <condition property="build.src.excludes" value="">
+        <isset property="eclipse.available"/>
+    </condition>
+    <!-- Eclupde plugin related sources if Eclipse is not available -->
+    <property name="build.src.excludes" value="**/plugin/**"/>
+    <!-- ======================================== -->
+    <property name="pluginBuilder" value="pluginBuilder.xml"/>
+    <!-- ======================================== -->
+    <propertyset id="eclipse.properties">
+        <propertyref prefix="eclipse"/>
+    </propertyset>
+    <propertyset id="build.properties">
+        <propertyset refid="eclipse.properties"/>
+        <propertyref prefix="build.properties"/>
+    </propertyset>
+    <propertyset id="copy.properties">
+        <propertyset refid="build.properties"/>
+        <propertyref name="toDir"/>
+    </propertyset>
+    <!-- ======================================== -->
+    <path id="project.source">
+        <pathelement location="${source.dir}"/>
+    </path>
+    <path id="org.eclipse.higgins.dependencies.redistributable.classpath">
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/freemarker/freemarker.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/openxri-client/openxri-client.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/openxri-syntax/openxri-syntax.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/resolver/resolver.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/saaj/saaj.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/serializer/serializer.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/servlet-api/servlet-api.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/stax-api-1.0.1/stax-api-1.0.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/wsdl4j-1.5.1/wsdl4j-1.5.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/wstx-asl-3.0.1/wstx-asl-3.0.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/xalan-2.6.0/xalan-2.6.0.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/xercesImpl/xercesImpl.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/xml-apis/xml-apis.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/xmlsec-1.4.0/xmlsec-1.4.0.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/ehcache-1.2.3/ehcache-1.2.3.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/gwt-dev-linux-1.4.60/gwt-dev-linux.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/gwt-servlet-1.4.60/gwt-servlet-1.4.60.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/gwt-user-1.4.60/gwt-user.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/icu4j_3_4/icu4j_3_4.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/iri/iri.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/jakarta-oro-2.0.8/jakarta-oro-2.0.8.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/jaxrpc/jaxrpc.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/jena/jena.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/js/js.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/ldap/ldap.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/log4j-1.2.13/log4j-1.2.13.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/mail-1.4/mail-1.4.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/openxdas-0.5.257/openxdas-0.5.257.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-discovery-0.2/commons-discovery-0.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-fileupload-1.1.1/commons-fileupload-1.1.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-httpclient-3.0/commons-httpclient-3.0.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-io-1.3.2/commons-io-1.3.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-lang-2.1/commons-lang-2.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-logging-1.0.4/commons-logging-1.0.4.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/concurrent-1.3.2/concurrent-1.3.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/dom4j-1.6.1/dom4j-1.6.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axis-schema-1.3/axis-schema.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/bandit-jndi-0.2.1030/bandit-jndi-0.2.1030.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/bandit-misc-0.2.1030/bandit-misc-0.2.1030.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-beanutils/commons-beanutils.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-codec-1.3/commons-codec-1.3.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-collections-3.2/commons-collections-3.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/commons-digester-1.7/commons-digester-1.7.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/activation-1.1/activation-1.1.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/arq/arq.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axiom-api-1.2/axiom-api-1.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axiom-dom-1.2/axiom-dom-1.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axiom-impl-1.2/axiom-impl-1.2.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axis-1.4/axis-1.4.jar"/>
+        <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axis-ant-1.4/axis-ant-1.4.jar"/>
+    </path>
+    <path id="org.eclipse.higgins.configuration.api.classpath">
+        <pathelement location="${org.eclipse.higgins.configuration.api.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.idas.api.classpath">
+        <pathelement location="${org.eclipse.higgins.idas.api.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.util.saml.classpath">
+        <pathelement location="${org.eclipse.higgins.util.saml.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.idas.common.classpath">
+        <pathelement location="${org.eclipse.higgins.idas.common.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.idas.api.classpath"/>
+        <path refid="org.eclipse.higgins.util.saml.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.idas.spi.classpath">
+        <pathelement location="${org.eclipse.higgins.idas.spi.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.idas.api.classpath"/>
+        <path refid="org.eclipse.higgins.idas.common.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.configuration.common.classpath">
+        <pathelement location="${org.eclipse.higgins.configuration.common.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.messages.classpath">
+        <pathelement location="${org.eclipse.higgins.messages.location}/build/bin"/>
+    </path>
+    <path id="org.eclipse.higgins.configuration.xml.classpath">
+        <pathelement location="${org.eclipse.higgins.configuration.xml.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.common.classpath"/>
+        <path refid="org.eclipse.higgins.messages.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.util.socket.classpath">
+        <pathelement location="${org.eclipse.higgins.util.socket.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
+	 <path id="org.eclipse.higgins.util.l10n.classpath">
+        <pathelement location="${org.eclipse.higgins.util.l10n.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.util.jscript.classpath">
+        <pathelement location="${org.eclipse.higgins.util.jscript.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.util.idas.cp.classpath">
+        <pathelement location="${org.eclipse.higgins.util.idas.cp.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.xml.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.common.classpath"/>
+        <path refid="org.eclipse.higgins.util.jscript.classpath"/>
+        <path refid="org.eclipse.higgins.idas.api.classpath"/>
+        <path refid="org.eclipse.higgins.idas.spi.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.audit.api.classpath">
+        <pathelement location="${org.eclipse.higgins.audit.api.location}/build"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+    </path>
+    <path id="org.eclipse.higgins.idas.cp.jndi.classpath">
+        <pathelement location="build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+        <path refid="org.eclipse.higgins.idas.spi.classpath"/>
+        <path refid="org.eclipse.higgins.idas.common.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.api.classpath"/>
+        <path refid="org.eclipse.higgins.idas.api.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.xml.classpath"/>
+        <path refid="org.eclipse.higgins.util.socket.classpath"/>
+		<path refid="org.eclipse.higgins.util.l10n.classpath"/>
+        <path refid="org.eclipse.higgins.util.idas.cp.classpath"/>
+        <path refid="org.eclipse.higgins.util.jscript.classpath"/>
+        <path refid="org.eclipse.higgins.util.saml.classpath"/>
+        <path refid="org.eclipse.higgins.configuration.common.classpath"/>
+        <path refid="org.eclipse.higgins.audit.api.classpath"/>
+        <path refid="Plug-in Dependencies.libraryclasspath"/>
+    </path>
+    <!-- Reads project version from plugin's manifest file -->
+    <target name="-version" unless="project.version">
+        <property file="${project.manifest}" prefix="project.mf"/>
+        <xmlproperty collapseattributes="true" file="${project.xml}" prefix="project.xml"/>
+        <condition property="project.version" value="${project.mf.Bundle-Version}">
+            <isset property="project.mf.Bundle-Version"/>
+        </condition>
+        <condition property="project.version" value="${project.xml.plugin.version}">
+            <isset property="project.xml.plugin.version"/>
+        </condition>
+        <property name="project.version" value="0.1.0"/>
+        <condition property="project.name" value="${project.mf.Bundle-Name}">
+            <isset property="project.mf.Bundle-Name"/>
+        </condition>
+        <condition property="project.name" value="${project.xml.plugin.name}">
+            <isset property="project.xml.plugin.name"/>
+        </condition>
+    </target>
+    <!-- Overrides plug-in dependencies classpath -->
+    <target depends="-override_e,-override_n" name="-override"/>
+    <target if="eclipse.available" name="-override_e">
+        <path id="Plug-in Dependencies.libraryclasspath"/>
+    </target>
+    <target name="-override_n" unless="eclipse.available">
+        <path id="Plug-in Dependencies.libraryclasspath"/>
+    </target>
+    <!-- Initializes build directories -->
+    <target depends="-version,-load.build.properties" name="-init">
+        <mkdir dir="${build.dir}"/>
+        <mkdir dir="${build.dir.bin}"/>
+        <mkdir dir="${build.dir.lib}"/>
+        <mkdir dir="${build.dir.doc}"/>
+    </target>
+    <!-- Loads build properties -->
+    <target if="build.properties.file" name="-load.build.properties">
+        <property file="${build.properties.file}"/>
+    </target>
+    <!-- Saves build properties -->
+    <target if="build.properties.file" name="-save.build.properties">
+        <echoproperties destfile="${build.properties.file}" prefix="build.properties"/>
+    </target>
+    <!-- Builds the source code -->
+    <target depends="-build-project" name="build" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.build.done">
+        <copy includeemptydirs="false" todir="build/bin">
+            <fileset dir="src" excludes="**/*.launch, **/*.java"/>
+        </copy>
+        <property name="build.properties.org.eclipse.higgins.idas.cp.jndi.build.done" value="true"/>
+        <antcall target="-save.build.properties"/>
+    </target>
+    <!-- Compiles the source code of the project -->
+    <target depends="-init, -override, -build-subprojects" name="-build-project" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.build.done">
+        <javac debug="${javacDebugInfo}" destdir="${build.dir.bin}" excludes="${build.src.excludes}" source="${javacSource}" target="${javacTarget}" verbose="${javacVerbose}">
+            <src refid="project.source"/>
+            <classpath refid="org.eclipse.higgins.idas.cp.jndi.classpath"/>
+        </javac>
+    </target>
+    <!-- Compiles the source code of the subprojects -->
+    <target depends="-init, -override" name="-build-subprojects" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.build.done">
+        <ant antfile="${org.eclipse.higgins.dependencies.redistributable.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.api.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.common.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.audit.api.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.api.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.messages.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.xml.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.jscript.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.saml.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.common.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.spi.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.idas.cp.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+		<ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
+    </target>
+    <!-- Creates jar file -->
+    <target depends="build" name="jar" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.jar.done">
+        <jar basedir="${build.dir.bin}" filesonly="false" jarfile="${build.dir.lib}/${build.file.name}_${project.version}.jar"/>
+        <property name="build.properties.org.eclipse.higgins.idas.cp.jndi.jar.done" value="true"/>
+        <antcall target="-save.build.properties"/>
+    </target>
+    <!-- ======================================== -->
+    <target depends="-init" name="-prejavadoc">
+        <delete>
+            <fileset dir="${build.dir.doc}">
+                <include name="**/*"/>
+                <exclude name="**/CVS"/>
+                <exclude name="**/Entries"/>
+                <exclude name="**/Repository"/>
+                <exclude name="**/Root"/>
+            </fileset>
+        </delete>
+    </target>
+    <!-- Creates javadoc for the project -->
+    <target depends="-init, -override" name="javadoc">
+        <javadoc author="true" defaultexcludes="yes" destdir="${build.dir.doc}" excludepackagenames="${build.src.excludes}" packagenames="${build.doc.packages}" public="true" source="${javacSource}" sourcepathref="project.source" use="true" version="true" windowtitle="${project.name}">
+            <classpath refid="org.eclipse.higgins.idas.cp.jndi.classpath"/>
+            <doctitle><![CDATA[<h1>${project.name}</h1]]></doctitle>
+            <link href="http://java.sun.com/j2se/1.4.2/docs/api/"/>
+        </javadoc>
+    </target>
+    <!-- ======================================== -->
+    <target name="-postjavadoc">
+        <zip basedir="${build.dir.doc}" destfile="${build.file.name}_${project.version}_javadoc.zip" update="true"/>
+    </target>
+    <!-- Cleans build folder of the project -->
+    <target name="clean">
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${build.dir}"/>
+        </delete>
+    </target>
+    <!--Copies all project required libraries to user defined dir-->
+    <target if="toDir" name="copy.libs"/>
+    <!--Copies project's JAR file to user defined dir-->
+    <target depends="jar" if="toDir" name="copy.jar">
+        <copy file="${build.dir.lib}/${build.file.name}_${project.version}.jar" todir="${toDir}"/>
+    </target>
+    <!--Copies all dependency JARs to user defined dir-->
+    <target depends="-load.build.properties" if="toDir" name="-copy.dep.jars" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.copy.all.jars.done">
+        <ant antfile="${org.eclipse.higgins.dependencies.redistributable.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.api.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.common.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.audit.api.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.api.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.messages.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.configuration.xml.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.jscript.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.saml.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.common.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.idas.spi.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.idas.cp.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+        <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+		 <ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
+    </target>
+    <!--Copies all JARs to user defined dir-->
+    <target depends="copy.jar,-copy.dep.jars" if="toDir" name="copy.all.jars" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.copy.all.jars.done">
+        <property name="build.properties.org.eclipse.higgins.idas.cp.jndi.copy.all.jars.done" value="true"/>
+        <antcall target="-save.build.properties"/>
+    </target>
+    <!-- Cleans build folders of dependency projects -->
+    <target depends="clean" name="cleanall">
+        <ant antfile="${org.eclipse.higgins.dependencies.redistributable.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.configuration.api.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.configuration.common.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.audit.api.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.idas.api.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.messages.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.configuration.xml.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.util.jscript.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.util.saml.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.idas.common.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.idas.spi.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.util.idas.cp.location}/build.xml" inheritAll="false" target="clean"/>
+        <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="clean"/>
+		<ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="clean"/>
+    </target>
+    <!-- ======================================== -->
+    <!-- Fetch dependencies -->
+    <target name="default.svn.task.def" unless="svn.lib.path">
+        <taskdef resource="org/tigris/subversion/svnant/svnantlib.xml"/>
+    </target>
+    <target if="svn.lib.path" name="svn.task.def">
+        <path id="svn.classpath">
+            <pathelement location="${svn.lib.path}/svnant.jar"/>
+            <pathelement location="${svn.lib.path}/svnjavahl.jar"/>
+            <pathelement location="${svn.lib.path}/javasvn.jar"/>
+            <pathelement location="${svn.lib.path}/svnClientAdapter.jar"/>
+        </path>
+        <taskdef classpathref="svn.classpath" resource="org/tigris/subversion/svnant/svnantlib.xml"/>
+    </target>
+    <target depends="default.svn.task.def,svn.task.def" name="fetch.dependencies">
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.audit.api"/>
+            <param name="id" value="org.eclipse.higgins.audit.api"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.configuration.api"/>
+            <param name="id" value="org.eclipse.higgins.configuration.api"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.configuration.common"/>
+            <param name="id" value="org.eclipse.higgins.configuration.common"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.configuration.xml"/>
+            <param name="id" value="org.eclipse.higgins.configuration.xml"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.dependencies.redistributable"/>
+            <param name="id" value="org.eclipse.higgins.dependencies.redistributable"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.idas.api"/>
+            <param name="id" value="org.eclipse.higgins.idas.api"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.idas.common"/>
+            <param name="id" value="org.eclipse.higgins.idas.common"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.idas.spi"/>
+            <param name="id" value="org.eclipse.higgins.idas.spi"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.messages"/>
+            <param name="id" value="org.eclipse.higgins.messages"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.idas.cp"/>
+            <param name="id" value="org.eclipse.higgins.util.idas.cp"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.jscript"/>
+            <param name="id" value="org.eclipse.higgins.util.jscript"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.saml"/>
+            <param name="id" value="org.eclipse.higgins.util.saml"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+        <antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.socket"/>
+            <param name="id" value="org.eclipse.higgins.util.socket"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+		<antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.l10n"/>
+            <param name="id" value="org.eclipse.higgins.util.l10n"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
+    </target>
+    <!-- fetching -->
+    <target name="check.project.existence">
+        <available file="../${id}" property="${id}-exists"/>
+    </target>
+    <target depends="check.project.existence,checkout.dependency.svn,update.dependency.svn" name="fetch.from.svn">
+        <echo message="fetch of ${id} - comlete"/>
+    </target>
+    <!-- checkout -->
+    <target name="checkout.dependency.svn" unless="${id}-exists">
+        <svn taskname="svn - checkout ${id}">
+            <checkout destpath="../${id}" revision="${revision}" url="${url}"/>
+        </svn>
+    </target>
+    <!-- update -->
+    <target if="${id}-exists" name="update.dependency.svn">
+        <svn taskname="svn - update ${id}">
+            <update dir="../${id}"/>
+        </svn>
+    </target>
+
+	<target depends="-initPluginProject" name="plugin">
+		<mkdir dir="${build.dir.plugins}"/>
+		<condition property="whichTarget" value="-build.in.eclipse">
+			<equals arg1="${eclipse.running}" arg2="true"/>
+		</condition>
+		<condition property="whichTarget" value="-build.run.eclipse">
+			<available file="${eclipse.home}/startup.jar"/>
+		</condition>
+		<property name="whichTarget" value="-eclipse.not.available"/>
+		
+		<antcall target="${whichTarget}"/>
+		<antcall target="-clean"/>
+	</target>
+	
+	<target name="-initPluginBase" unless="base.properties.present">
+		<property name="sources.dir" value="${basedir}/.."/>
+		
+		<condition property="project.dir" value="${sources.dir}/${project.id}">
+			<isset property="project.id"/>
+		</condition>
+		<property name="project.dir" value="${basedir}"/>
+		
+		<property name="build.dir" value="${basedir}/build"/>
+		<property name="temp.dir" value="${build.dir}/temp.dir"/>
+		
+		<property name="build.dir.plugins" value="${build.dir}/plugins"/>
+		
+		<property name="temp.dir.builder" value="${temp.dir}/builder"/>
+		<property name="temp.dir.plugins" value="${temp.dir}/plugins"/>
+		<property name="temp.dir.features" value="${temp.dir}/features"/>
+		
+		<property name="build.src.include" value="false"/>
+		
+		<property name="base.properties.present" value="true"/>
+	</target>
+	
+	<target depends="-initPluginBase" name="-initPluginProject" unless="project.properties.present">
+		<condition property="project.description" value="${project.dir}/.project">
+			<available file="${project.dir}/.project"/>
+		</condition>
+		<fail message="Project description (${project.dir}/.project) file is not found" unless="project.description"/>
+		
+		<condition property="project.manifest" value="${project.dir}/META-INF/MANIFEST.MF">
+			<available file="${project.dir}/META-INF/MANIFEST.MF"/>
+		</condition>
+		<condition property="project.xml" value="${project.dir}/plugin.xml">
+			<available file="${project.dir}/plugin.xml"/>
+		</condition>
+		
+		<!--<fail message="Plugin's manifest (${project.dir}/META-INF/MANIFEST.MF) file is not found" unless="project.manifest"/>-->
+		
+		<xmlproperty file="${project.description}" keeproot="false" prefix="project.desc"/>
+		<property file="${project.manifest}" prefix="project.mf"/>
+		<xmlproperty collapseattributes="true" file="${project.xml}" prefix="project.xml"/>
+		
+		<condition property="project.version" value="${project.mf.Bundle-Version}">
+			<isset property="project.mf.Bundle-Version"/>
+		</condition>
+		<condition property="project.version" value="${project.xml.plugin.version}">
+			<isset property="project.xml.plugin.version"/>
+		</condition>
+		<condition property="project.type" value="feature">
+			<contains string="${project.desc.natures.nature}" substring="org.eclipse.pde.FeatureNature"/>
+		</condition>
+		<condition property="project.type" value="plugin">
+			<contains string="${project.desc.natures.nature}" substring="org.eclipse.pde.PluginNature"/>
+		</condition>
+		<condition property="project.id" value="${project.desc.name}">
+			<isset property="project.desc.name"/>
+		</condition>
+		
+		<fail message="Project ${project.dir} is not valid plugin's project!">
+			<condition>
+				<not>
+					<and>
+						<isset property="project.id"/>
+						<isset property="project.version"/>
+						<equals arg1="${project.type}" arg2="plugin"/>
+					</and>
+				</not>
+			</condition>
+		</fail>
+		
+		<property name="project.properties.present" value="true"/>
+	</target>
+	
+	<target depends="-initPluginProject" name="-initPluginBuilder" unless="builder.properties.present">
+		<property name="project.build.type" value="feature"/>
+		
+		<property name="builder" value="${temp.dir.builder}"/>
+		<property name="builderDirectory" value="${builder}"/>
+		<property name="buildDirectory" value="${temp.dir}"/>
+		
+		<property name="builder.properties.present" value="true"/>
+	</target>
+	
+	<target name="-eclipse.not.available">
+		<echo>
+Eclipse runtime is not available at ${eclipse.home}.
+Please specify -Declipse.home=&lt;eclipse_install_dir&gt; command-line option
+where &lt;eclipse_install_dir&gt; should point to the folder where
+startup.jar is located.
+		</echo>
+		<fail message="Can't build plugin."/>
+	</target>
+	
+	<target name="-build.in.eclipse">
+		<ant antfile="${ant.file}" output="${build.dir.plugins}/${project.id}_${project.version}.log" target="-buildPlugin"/>
+	</target>
+	
+	<target name="-build.run.eclipse">
+		<java classname="org.eclipse.core.launcher.Main" classpath="${eclipse.home}/startup.jar" fork="true" maxmemory="256m" resultproperty="build.plugin.result">
+			<sysproperty key="build.src.include" value="${build.src.include}"/>
+			<arg value="-noupdate"/>
+			<arg value="-application"/>  
+			<arg value="org.eclipse.ant.core.antRunner"/>
+			<arg value="-data"/>
+			<arg path="${temp.dir}"/>
+			<arg value="-buildfile"/>
+			<arg value="${ant.file}"/>
+			<arg value="plugin"/>
+		</java>
+		
+		<condition property="build.plugin.succeed">
+			<equals arg1="${build.plugin.result}" arg2="0"/>
+		</condition>
+		<fail message="Build Eclipse plugin failed" unless="build.plugin.succeed"/>
+	</target>
+	
+	<target depends="-initPluginBase" name="-makeFolders">
+		<mkdir dir="${build.dir.plugins}"/>
+		<mkdir dir="${temp.dir.plugins}"/>
+		<mkdir dir="${temp.dir.features}"/>
+		<mkdir dir="${temp.dir.builder}"/>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Generates build files necessary to build plugin project identitied by -->
+	<!-- [project.id] property.                                                -->
+	<!-- ===================================================================== -->
+	<target depends="-makeFolders,-initPluginBuilder" name="-createBuilder">
+		<!-- Get main PDE build scripts -->
+		<copy failonerror="true" flatten="true" overwrite="true" todir="${temp.dir.builder}">
+			<fileset dir="${eclipse.home}/plugins" includes="org.eclipse.pde.build_**/scripts/*.xml"/>
+		</copy>
+		
+		<!-- Generate customTragets build script -->
+		<copy failonerror="true" flatten="true" overwrite="true" todir="${temp.dir.builder}">
+			<fileset dir="${eclipse.home}/plugins" includes="org.eclipse.pde.build_**/templates/customTargets.xml"/>
+			<fileset dir="${eclipse.home}/plugins" includes="org.eclipse.pde.build_**/templates/headless-build/customTargets.xml"/>
+			<fileset dir="${eclipse.home}/plugins" includes="org.eclipse.pde.build_**/templates/headless-build/allElements.xml"/>
+			<filterchain>
+				<tokenfilter>
+					<replacestring from="&lt;feature | plugin | fragment&gt;" to="$${project.build.type}"/>
+					<replacestring from="&lt;element.id&gt;[.config.spec]" to="${project.id}"/>
+					<replacestring from="&lt;element.id&gt;" to="$${project.id}"/>
+					<replacestring from="&lt;property name=&quot;type&quot; value=&quot;feature&quot;" to="&lt;property name=&quot;type&quot; value=&quot;$${project.build.type}&quot;"/>
+					<replacestring from="&lt;property name=&quot;id&quot; value=&quot;element.id&quot;" to="&lt;property name=&quot;id&quot; value=&quot;$${project.id}&quot;"/>
+					<filetokenizer/>
+					<replacestring from="&lt;target name=&quot;assemble.element.id[.config.spec]&quot;" to="&lt;target name=&quot;assemble.${project.id}&quot;"/>
+				</tokenfilter>
+			</filterchain>
+		</copy>
+		<!-- Generate builder's build.properties file -->
+		<propertyfile file="${temp.dir.builder}/build.properties">
+			<entry key="archivePrefix" value="eclipse"/>
+			<entry key="collectingFolder" value="$${archivePrefix}"/>
+			<entry key="outputUpdateJars" value="true"/>
+			<entry key="buildingOSGi" value="true"/>
+			<entry key="baseLocation" value="$${eclipse.home}"/>
+			<entry key="skipBase" value="true"/>
+			<entry key="skipMaps" value="true"/>
+			<entry key="skipFetch" value="true"/>
+			<entry key="buildLabel" value="build"/>
+			<entry key="javacDebugInfo" value="on"/>
+			<entry key="javacFailOnError" value="true"/>
+			<entry key="javacVerbose" value="false"/>
+			<entry key="javacSource" value="1.5"/>
+			<entry key="javacTarget" value="1.5"/>
+			<entry key="temp.folder" value="${temp.dir}/temp.folder"/>
+			<entry key="runPackager" value="true"/>
+		</propertyfile>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Copy sources for all projects from [sources.dir] to working folder    -->
+	<!--                                                                       -->
+	<!-- NOTE: This build script assumes that all projects in the [sources.dir]-->
+	<!-- are plugin's projects                                                 -->
+	<!-- ===================================================================== -->
+	<target depends="-makeFolders" name="-initPluginSources">
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.idas.cp.jndi">
+            <fileset dir="${org.eclipse.higgins.idas.cp.jndi.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.dependencies.redistributable">
+            <fileset dir="${org.eclipse.higgins.dependencies.redistributable.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.configuration.api">
+            <fileset dir="${org.eclipse.higgins.configuration.api.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.configuration.common">
+            <fileset dir="${org.eclipse.higgins.configuration.common.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.audit.api">
+            <fileset dir="${org.eclipse.higgins.audit.api.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.idas.api">
+            <fileset dir="${org.eclipse.higgins.idas.api.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.messages">
+            <fileset dir="${org.eclipse.higgins.messages.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.configuration.xml">
+            <fileset dir="${org.eclipse.higgins.configuration.xml.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.jscript">
+            <fileset dir="${org.eclipse.higgins.util.jscript.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.saml">
+            <fileset dir="${org.eclipse.higgins.util.saml.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.idas.common">
+            <fileset dir="${org.eclipse.higgins.idas.common.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.idas.spi">
+            <fileset dir="${org.eclipse.higgins.idas.spi.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.idas.cp">
+            <fileset dir="${org.eclipse.higgins.util.idas.cp.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+        <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.socket">
+            <fileset dir="${org.eclipse.higgins.util.socket.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+		<copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.l10n">
+            <fileset dir="${org.eclipse.higgins.util.l10n.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
+    </target>
+	
+	<!-- ===================================================================== -->
+	<!-- Generate feature's definition for plugin's project defined by         -->
+	<!-- [project.id] property.                                                -->
+	<!--                                                                       -->
+	<!-- If plugin project to be build depends on other plugin's projects      -->
+	<!-- sources for which are available at the same location identified by    -->
+	<!-- [sources.dir] property then that projects will be included in         -->
+	<!-- generated definition.                                                 -->
+	<!-- ===================================================================== -->
+	<target depends="-createBuilder,-initPluginSources" name="-generateFeature">
+		<!-- Generate build script for plugin project -->
+		<ant antfile="build.xml" dir="${temp.dir.builder}" target="generate">
+			<property name="project.build.type" value="plugin"/>
+		</ant>
+		
+		<!-- Parse generated build script and look up for             -->
+		<!-- dependencies (other projects this project depends on)    -->
+		<loadfile property="project.feature.plugins" srcfile="${temp.dir.plugins}/${project.id}/build.xml">
+			<filterchain>
+				<tokenfilter delimoutput="\r\n\t\t">
+					<!--
+					<containsregex 
+						pattern="^.*pathelement path=\S(\.{2}/{1})(\b.*)/@dot\S.*" 
+						replace="&lt;plugin id=&quot;\2&quot; version=&quot;0.0.0&quot; unpack=&quot;false&quot;/&gt;">
+					</containsregex>
+					-->
+					<containsregex pattern="^.*pathelement path=\x22(?:\.{2}/{1})([^\.][^/]*)/[^/]*\x22/&gt;" replace="&lt;plugin id=&quot;\1&quot; version=&quot;0.0.0&quot; unpack=&quot;false&quot;/&gt;">
+					</containsregex>
+				</tokenfilter>
+			</filterchain>
+		</loadfile>
+		
+		<!-- Create folder for feature's definition                   -->
+		<mkdir dir="${temp.dir.features}/${project.id}"/>
+		
+		<!-- Generate feature's [feature.xml] file                    -->
+		<echo><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<feature id="${project.id}" version="${project.version}">
+		${project.feature.plugins}<plugin id="${project.id}" version="0.0.0" unpack="false"/>
+</feature>]]>
+		</echo>
+		<echo append="false" file="${temp.dir.features}/${project.id}/feature.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<feature id="${project.id}" version="${project.version}">
+		${project.feature.plugins}<plugin id="${project.id}" version="0.0.0" unpack="false"/>
+</feature>]]>
+		</echo>
+		
+		<!-- Generate feature's [build.properties] file               -->
+		<propertyfile file="${temp.dir.features}/${project.id}/build.properties">
+			<entry key="bin.includes" value="feature.xml"/>
+			<entry key="src.includes" value="feature.xml"/>
+		</propertyfile>
+	</target>
+	
+	<target depends="-createBuilder,-initPluginSources,-generateFeature" name="-buildPlugin">
+		<!-- Run PDE build script to compile all required plugins      -->
+		<ant antfile="build.xml" dir="${temp.dir.builder}">
+		</ant>
+		<!-- Create temporary folder -->
+		<delete dir="${temp.dir}/temp.folder"/> 
+		<mkdir dir="${temp.dir}/temp.folder"/>
+		
+		<condition property="buildPluginTarget" value="-buildPluginWithSources">
+			<istrue value="${build.src.include}"/>
+		</condition>
+		<property name="buildPluginTarget" value="-buildPluginBinOnly"/>
+		
+		<antcall target="${buildPluginTarget}">
+			<param name="plugin.temp.filder" value="${temp.dir}/temp.folder"/>
+		</antcall>
+		
+		<delete dir="${temp.dir}/temp.folder"/>
+	</target>
+	
+	<target if="plugin.temp.filder" name="-buildPluginBinOnly">
+		<!-- Run project build script generated by PDE build script to -->
+		<!-- compile plugin's sources and gather all files required in -->
+		<!-- the temporary folder                                      -->
+		<ant antfile="build.xml" dir="${temp.dir.plugins}/${project.id}"> 
+			<target name="build.jars"/> 
+			<target name="gather.bin.parts"/> 
+			<property name="destination.temp.folder" value="${plugin.temp.filder}"/> 
+		</ant>
+		<!-- Create plugin's jar                                       -->
+		<zip basedir="${plugin.temp.filder}/${project.id}_${project.version}" destfile="${build.dir.plugins}/${project.id}_${project.version}.jar" filesonly="true" update="false" whenempty="skip"/> 
+	</target>
+	
+	<target if="plugin.temp.filder" name="-buildPluginWithSources">
+		<!-- Run project build script generated by PDE build script to -->
+		<!-- compile plugin's sources and gather all files required in -->
+		<!-- the temporary folder                                      -->
+		<ant antfile="build.xml" dir="${temp.dir.plugins}/${project.id}"> 
+			<target name="build.jars"/> 
+			<target name="build.sources"/> 
+			<target name="gather.bin.parts"/> 
+			<property name="destination.temp.folder" value="${plugin.temp.filder}"/> 
+		</ant>
+		<unzip dest="${plugin.temp.filder}/${project.id}_${project.version}/src" src="${temp.dir.plugins}/${project.id}/src.zip"/>
+		<!-- Create plugin's jar                                       -->
+		<zip basedir="${plugin.temp.filder}/${project.id}_${project.version}" destfile="${build.dir.plugins}/${project.id}_${project.version}.jar" filesonly="true" update="false" whenempty="skip"/> 
+	</target>
+	
+	<target depends="-initPluginBase" name="-clean">
+		<delete dir="${temp.dir}"/>
+	</target>
+
+</project>
Index: C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml
===================================================================
--- C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml	(revision 20094)
+++ C:/supertemp/jndi-cp_head/org.eclipse.higgins.idas.cp.jndi/build.xml	(working copy)
@@ -21,6 +21,7 @@
     <property name="org.eclipse.higgins.idas.spi.location" value="../org.eclipse.higgins.idas.spi"/>
     <property name="org.eclipse.higgins.util.idas.cp.location" value="../org.eclipse.higgins.util.idas.cp"/>
     <property name="org.eclipse.higgins.util.socket.location" value="../org.eclipse.higgins.util.socket"/>
+	<property name="org.eclipse.higgins.util.l10n.location" value="../org.eclipse.higgins.util.l10n"/>
     <property name="debuglevel" value="source,lines,vars"/>
     <property name="target" value="1.2"/>
     <property name="source" value="1.3"/>
@@ -138,6 +139,7 @@
         <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axiom-impl-1.2/axiom-impl-1.2.jar"/>
         <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axis-1.4/axis-1.4.jar"/>
         <pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/axis-ant-1.4/axis-ant-1.4.jar"/>
+		<pathelement location="${org.eclipse.higgins.dependencies.redistributable.location}/eclipse.nls/nls.jar"/>
     </path>
     <path id="org.eclipse.higgins.configuration.api.classpath">
         <pathelement location="${org.eclipse.higgins.configuration.api.location}/build/bin"/>
@@ -183,6 +185,10 @@
         <pathelement location="${org.eclipse.higgins.util.socket.location}/build/bin"/>
         <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
     </path>
+	 <path id="org.eclipse.higgins.util.l10n.classpath">
+        <pathelement location="${org.eclipse.higgins.util.l10n.location}/build/bin"/>
+        <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
+    </path>
     <path id="org.eclipse.higgins.util.jscript.classpath">
         <pathelement location="${org.eclipse.higgins.util.jscript.location}/build/bin"/>
         <path refid="org.eclipse.higgins.dependencies.redistributable.classpath"/>
@@ -210,6 +216,7 @@
         <path refid="org.eclipse.higgins.idas.api.classpath"/>
         <path refid="org.eclipse.higgins.configuration.xml.classpath"/>
         <path refid="org.eclipse.higgins.util.socket.classpath"/>
+		<path refid="org.eclipse.higgins.util.l10n.classpath"/>
         <path refid="org.eclipse.higgins.util.idas.cp.classpath"/>
         <path refid="org.eclipse.higgins.util.jscript.classpath"/>
         <path refid="org.eclipse.higgins.util.saml.classpath"/>
@@ -314,6 +321,9 @@
         <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="build">
             <propertyset refid="build.properties"/>
         </ant>
+		<ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="build">
+            <propertyset refid="build.properties"/>
+        </ant>
     </target>
     <!-- Creates jar file -->
     <target depends="build" name="jar" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.jar.done">
@@ -398,6 +408,9 @@
         <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="copy.all.jars">
             <propertyset refid="copy.properties"/>
         </ant>
+		 <ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="copy.all.jars">
+            <propertyset refid="copy.properties"/>
+        </ant>
     </target>
     <!--Copies all JARs to user defined dir-->
     <target depends="copy.jar,-copy.dep.jars" if="toDir" name="copy.all.jars" unless="build.properties.org.eclipse.higgins.idas.cp.jndi.copy.all.jars.done">
@@ -419,6 +432,7 @@
         <ant antfile="${org.eclipse.higgins.idas.spi.location}/build.xml" inheritAll="false" target="clean"/>
         <ant antfile="${org.eclipse.higgins.util.idas.cp.location}/build.xml" inheritAll="false" target="clean"/>
         <ant antfile="${org.eclipse.higgins.util.socket.location}/build.xml" inheritAll="false" target="clean"/>
+		<ant antfile="${org.eclipse.higgins.util.l10n.location}/build.xml" inheritAll="false" target="clean"/>
     </target>
     <!-- ======================================== -->
     <!-- Fetch dependencies -->
@@ -500,6 +514,11 @@
             <param name="id" value="org.eclipse.higgins.util.socket"/>
             <param name="revision" value="HEAD"/>
         </antcall>
+		<antcall target="fetch.from.svn">
+            <param name="url" value="svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/plugins/org.eclipse.higgins.util.l10n"/>
+            <param name="id" value="org.eclipse.higgins.util.l10n"/>
+            <param name="revision" value="HEAD"/>
+        </antcall>
     </target>
     <!-- fetching -->
     <target name="check.project.existence">
@@ -754,6 +773,9 @@
         <copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.socket">
             <fileset dir="${org.eclipse.higgins.util.socket.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
         </copy>
+		<copy failonerror="true" todir="${temp.dir.plugins}/org.eclipse.higgins.util.l10n">
+            <fileset dir="${org.eclipse.higgins.util.l10n.location}" excludes="**/bin/,**/build/,**/temp**/,**/doc/,**/cvs/,**/.svn/"/>
+        </copy>
     </target>
 	
 	<!-- ===================================================================== -->

Back to the top