You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2006/04/21 22:52:55 UTC
svn commit: r396002 -
/directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/
Author: ersiner
Date: Fri Apr 21 13:52:53 2006
New Revision: 396002
URL: http://svn.apache.org/viewcvs?rev=396002&view=rev
Log:
Added some of my old Stored Procedure Extended Operation Handler implementations.
They need some rework.
Added:
directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/JavaStoredProcedureExtendedOperationHandler.java
directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LanguageSpecificStoredProceureExtendedOperationHandler.java
directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java
Added: directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/JavaStoredProcedureExtendedOperationHandler.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/JavaStoredProcedureExtendedOperationHandler.java?rev=396002&view=auto
==============================================================================
--- directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/JavaStoredProcedureExtendedOperationHandler.java (added)
+++ directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/JavaStoredProcedureExtendedOperationHandler.java Fri Apr 21 13:52:53 2006
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.directory.server.ldap.support.extended;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.naming.NamingException;
+
+import org.apache.directory.server.core.jndi.ServerLdapContext;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedure;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedure.StoredProcedureParameter;
+import org.apache.directory.shared.ldap.util.ClassUtils;
+import org.apache.directory.shared.ldap.util.SpringClassUtils;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+
+/**
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$ $Date$
+ */
+public class JavaStoredProcedureExtendedOperationHandler implements LanguageSpecificStoredProceureExtendedOperationHandler
+{
+ public JavaStoredProcedureExtendedOperationHandler()
+ {
+
+ }
+
+ public void handleStoredProcedureExtendedOperation( ServerLdapContext ctx, StoredProcedure pojo ) throws ClassNotFoundException, NamingException
+ {
+ List types = new ArrayList( pojo.getParameters().size() );
+ List values = new ArrayList( pojo.getParameters().size() );
+
+ Iterator it = pojo.getParameters().iterator();
+ while ( it.hasNext() )
+ {
+ StoredProcedureParameter pPojo = ( StoredProcedureParameter ) it.next();
+
+ // Get type from String even if it holds a primitive type name
+ Class type = SpringClassUtils.forName( StringTools.utf8ToString( pPojo.getType() ) );
+
+ types.add( type );
+
+ byte[] value = pPojo.getValue();
+
+ /**
+ * If the type name refers to a Java primitive then
+ * we know that the value is encoded as its String representation and
+ * we retrieve the String and initialize a wrapper of the primitive.
+ *
+ * Note that this is just how we prefer Java Specific Stored Procedures
+ * to handle parameters. Of course we do not have to it this way.
+ */
+ if ( type.isPrimitive() )
+ {
+ values.add( getInitializedPrimitiveWrapperInstance( type, value ) );
+ }
+ /**
+ * If the type is a complex Java type then
+ * just deserialize the object.
+ */
+ else
+ {
+ try
+ {
+ // TODO Irritating syntax! Just wanted to see how it looks like..
+ values.add
+ (
+ (
+ new ObjectInputStream
+ (
+ new ByteArrayInputStream( value )
+ )
+ ).readObject()
+ );
+ }
+ catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (ClassNotFoundException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ // TODO determine what to do with the exception
+ /**
+ * BIG BANG!!!
+ ctx.executeProcedure(
+ StringTools.utf8ToString( pojo.getProcedure() ),
+ ( Class[] ) types.toArray(),
+ values.toArray()
+ );
+ */
+ }
+
+ private Object getInitializedPrimitiveWrapperInstance( Class type, byte[] value )
+ {
+ Object instance = null;
+ try
+ {
+ instance = ClassUtils
+ .primitiveToWrapper( type )
+ .getConstructor( new Class[] {String.class} )
+ .newInstance( new Object[] { StringTools.utf8ToString( value ) } );
+ }
+ catch (IllegalArgumentException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (SecurityException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (InstantiationException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (IllegalAccessException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (InvocationTargetException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (NoSuchMethodException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return instance;
+ }
+}
Added: directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LanguageSpecificStoredProceureExtendedOperationHandler.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LanguageSpecificStoredProceureExtendedOperationHandler.java?rev=396002&view=auto
==============================================================================
--- directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LanguageSpecificStoredProceureExtendedOperationHandler.java (added)
+++ directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/LanguageSpecificStoredProceureExtendedOperationHandler.java Fri Apr 21 13:52:53 2006
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.directory.server.ldap.support.extended;
+
+import org.apache.directory.server.core.jndi.ServerLdapContext;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedure;
+
+
+/**
+ * An extension (hook) point that enables an implementor to provide his or her
+ * own Language Specific Stored Procedure Extended Operation handler.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$ $Date$
+ */
+public interface LanguageSpecificStoredProceureExtendedOperationHandler
+{
+ void handleStoredProcedureExtendedOperation( ServerLdapContext ctx, StoredProcedure spBean ) throws Exception;
+}
Added: directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java?rev=396002&view=auto
==============================================================================
--- directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java (added)
+++ directory/trunks/apacheds/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/extended/StoredProcedureExtendedOperationHandler.java Fri Apr 21 13:52:53 2006
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+package org.apache.directory.server.ldap.support.extended;
+
+
+import java.nio.ByteBuffer;
+import java.util.Set;
+
+import javax.naming.ldap.Control;
+
+import org.apache.directory.server.core.jndi.ServerLdapContext;
+import org.apache.directory.server.ldap.ExtendedOperationHandler;
+import org.apache.directory.server.ldap.LdapProtocolProvider;
+import org.apache.directory.server.ldap.SessionRegistry;
+import org.apache.directory.shared.asn1.ber.Asn1Decoder;
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedure;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedureContainer;
+import org.apache.directory.shared.ldap.codec.extended.operations.StoredProcedureDecoder;
+import org.apache.directory.shared.ldap.message.ExtendedRequest;
+import org.apache.mina.common.IoSession;
+
+
+/**
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$ $Date$
+ */
+public class StoredProcedureExtendedOperationHandler implements ExtendedOperationHandler
+{
+
+ public String getOid()
+ {
+ /**
+ * TODO return the correct OID.
+ */
+ return "1.2.3.4.55.666.7777";
+ }
+
+ public void handleExtendedOperation( IoSession session, SessionRegistry registry, ExtendedRequest req ) throws Exception
+ {
+ Control[] connCtls = ( Control[] ) req.getControls().values().toArray( new Control[ req.getControls().size() ] );
+ ServerLdapContext serverLdapContext = ( ServerLdapContext ) registry.getLdapContext( session, connCtls, false);
+ StoredProcedure spBean = decodeBean( req.getPayload() );
+
+ LanguageSpecificStoredProceureExtendedOperationHandler handler = null;
+
+ /**
+ * TODO This part may be replaced by a better handler determiner.
+ */
+ if ( spBean.getLanguage().equals( "Java" ) )
+ {
+ handler = new JavaStoredProcedureExtendedOperationHandler();
+ handler.handleStoredProcedureExtendedOperation( serverLdapContext, spBean );
+ }
+ }
+
+ private StoredProcedure decodeBean( byte[] payload )
+ {
+ Asn1Decoder storedProcedureDecoder = new StoredProcedureDecoder();
+ ByteBuffer stream = ByteBuffer.wrap( payload );
+ IAsn1Container storedProcedureContainer = new StoredProcedureContainer();
+
+ try
+ {
+ storedProcedureDecoder.decode( stream, storedProcedureContainer );
+ }
+ catch (DecoderException de)
+ {
+ de.printStackTrace();
+ }
+
+ StoredProcedure spBean = ( ( StoredProcedureContainer ) storedProcedureContainer ).getStoredProcedure();
+
+ return spBean;
+ }
+
+ public Set getExtensionOids() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setLdapProvider(LdapProtocolProvider provider) {
+ // TODO Auto-generated method stub
+
+ }
+
+}