blob: 4778cdebb478b94ee316c4c8905183934050a6b5 [file] [log] [blame]
/*
* 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.box;
import java.util.Map;
import com.box.sdk.BoxAPIConnection;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.component.box.api.BoxCollaborationsManager;
import org.apache.camel.component.box.api.BoxCommentsManager;
import org.apache.camel.component.box.api.BoxEventLogsManager;
import org.apache.camel.component.box.api.BoxEventsManager;
import org.apache.camel.component.box.api.BoxFilesManager;
import org.apache.camel.component.box.api.BoxFoldersManager;
import org.apache.camel.component.box.api.BoxGroupsManager;
import org.apache.camel.component.box.api.BoxSearchManager;
import org.apache.camel.component.box.api.BoxTasksManager;
import org.apache.camel.component.box.api.BoxUsersManager;
import org.apache.camel.component.box.internal.BoxApiCollection;
import org.apache.camel.component.box.internal.BoxApiName;
import org.apache.camel.component.box.internal.BoxConnectionHelper;
import org.apache.camel.component.box.internal.BoxConstants;
import org.apache.camel.component.box.internal.BoxPropertiesHelper;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.support.component.AbstractApiEndpoint;
import org.apache.camel.support.component.ApiMethod;
import org.apache.camel.support.component.ApiMethodPropertiesHelper;
/**
* For uploading downloading and managing files folders groups collaborations etc on box DOT com.
*/
@UriEndpoint(firstVersion = "2.14.0", scheme = "box", title = "Box", syntax = "box:apiName/methodName",
consumerPrefix = "consumer", label = "api,file,cloud", lenientProperties = true)
public class BoxEndpoint extends AbstractApiEndpoint<BoxApiName, BoxConfiguration> {
@UriParam
private BoxConfiguration configuration;
// cached connection
private BoxAPIConnection boxConnection;
private Object apiProxy;
private boolean boxConnectionShared;
public BoxEndpoint(String uri, BoxComponent component, BoxApiName apiName, String methodName,
BoxConfiguration endpointConfiguration) {
super(uri, component, apiName, methodName, BoxApiCollection.getCollection().getHelper(apiName),
endpointConfiguration);
this.configuration = endpointConfiguration;
}
@Override
public BoxComponent getComponent() {
return (BoxComponent) super.getComponent();
}
/**
* The BoxAPIConnection of endpoint.
*/
public BoxAPIConnection getBoxConnection() {
return boxConnection;
}
public Producer createProducer() throws Exception {
return new BoxProducer(this);
}
public Consumer createConsumer(Processor processor) throws Exception {
// make sure inBody is not set for consumers
if (inBody != null) {
throw new IllegalArgumentException("Option inBody is not supported for consumer endpoint");
}
final BoxConsumer consumer = new BoxConsumer(this, processor);
// also set consumer.* properties
configureConsumer(consumer);
return consumer;
}
@Override
protected ApiMethodPropertiesHelper<BoxConfiguration> getPropertiesHelper() {
return BoxPropertiesHelper.getHelper();
}
protected String getThreadProfileName() {
return BoxConstants.THREAD_PROFILE_NAME;
}
@Override
protected void afterConfigureProperties() {
// create connection eagerly, a good way to validate configuration
createBoxConnection();
}
@Override
public Object getApiProxy(ApiMethod method, Map<String, Object> args) {
if (apiProxy == null) {
// create API proxy lazily
createApiProxy(args);
}
return apiProxy;
}
private void createBoxConnection() {
final BoxComponent component = getComponent();
this.boxConnectionShared = configuration.equals(getComponent().getConfiguration());
if (boxConnectionShared) {
// get shared singleton connection from Component
this.boxConnection = component.getBoxConnection();
} else {
this.boxConnection = BoxConnectionHelper.createConnection(configuration);
}
}
private void createApiProxy(Map<String, Object> args) {
switch (apiName) {
case COLLABORATIONS:
apiProxy = new BoxCollaborationsManager(getBoxConnection());
break;
case COMMENTS:
apiProxy = new BoxCommentsManager(getBoxConnection());
break;
case EVENT_LOGS:
apiProxy = new BoxEventLogsManager(getBoxConnection());
break;
case EVENTS:
apiProxy = new BoxEventsManager(getBoxConnection());
break;
case FILES:
apiProxy = new BoxFilesManager(getBoxConnection());
break;
case FOLDERS:
apiProxy = new BoxFoldersManager(getBoxConnection());
break;
case GROUPS:
apiProxy = new BoxGroupsManager(getBoxConnection());
break;
case SEARCH:
apiProxy = new BoxSearchManager(getBoxConnection());
break;
case TASKS:
apiProxy = new BoxTasksManager(getBoxConnection());
break;
case USERS:
apiProxy = new BoxUsersManager(getBoxConnection());
break;
default:
throw new IllegalArgumentException("Invalid API name " + apiName);
}
}
}