/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.camel.component.springldap;
import javax.naming.directory.SearchControls;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
import org.springframework.ldap.core.LdapTemplate;
/**
* The spring-ldap component allows you to perform searches in LDAP servers using filters as the message payload.
*/
@UriEndpoint(firstVersion = "2.11.0", scheme = "spring-ldap", title = "Spring LDAP", syntax = "spring-ldap:templateName", producerOnly = true, label = "spring,ldap")
public class SpringLdapEndpoint extends DefaultEndpoint {
private static final String OBJECT_SCOPE_NAME = "object";
private static final String ONELEVEL_SCOPE_NAME = "onelevel";
private static final String SUBTREE_SCOPE_NAME = "subtree";
private LdapTemplate ldapTemplate;
@UriPath @Metadata(required = "true")
private String templateName;
@UriParam @Metadata(required = "true")
private LdapOperation operation;
@UriParam(defaultValue = "subtree", enums = "object,onelevel,subtree")
private String scope = SUBTREE_SCOPE_NAME;
/**
* Initializes the SpringLdapEndpoint using the provided template
*
* @param templateName name of the LDAP template
* @param ldapTemplate LDAP template, see org.springframework.ldap.core.LdapTemplate
*/
public SpringLdapEndpoint(String templateName, LdapTemplate ldapTemplate) {
this.templateName = templateName;
this.ldapTemplate = ldapTemplate;
}
@Override
public Producer createProducer() throws Exception {
return new SpringLdapProducer(this);
}
@Override
public Consumer createConsumer(Processor processor) throws Exception {
throw new UnsupportedOperationException("spring-ldap endpoint supports producer enrpoint only.");
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public String createEndpointUri() {
return "spring-ldap://" + templateName + "?operation=" + operation.name() + "&scope=" + getScope();
}
public LdapTemplate getLdapTemplate() {
return ldapTemplate;
}
public String getTemplateName() {
return templateName;
}
/**
* Name of the Spring LDAP Template bean
*/
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public LdapOperation getOperation() {
return operation;
}
/**
* The LDAP operation to be performed.
*/
public void setOperation(LdapOperation operation) {
this.operation = operation;
}
public String getScope() {
return scope;
}
/**
* The scope of the search operation.
*/
public void setScope(String scope) {
this.scope = scope;
}
public int scopeValue() {
if (scope.equals(OBJECT_SCOPE_NAME)) {
return SearchControls.OBJECT_SCOPE;
} else if (scope.equals(ONELEVEL_SCOPE_NAME)) {
return SearchControls.ONELEVEL_SCOPE;
} else {
return SearchControls.SUBTREE_SCOPE;
}
}
}