Skip to content

Commit

Permalink
Start on service extension types (google#216)
Browse files Browse the repository at this point in the history
* Start on service extension types
* Add TODO; remove JacksonFactory
* related to google#71
  • Loading branch information
jimmarino committed Mar 13, 2018
1 parent a0ef8cd commit 5057ce0
Show file tree
Hide file tree
Showing 19 changed files with 79 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ public interface ExtensionContext {
/** Returns the system logger extension service can use to record events. */
Logger getLogger();

/**
* Returns the runtime type manager.
*
* @return the type manager.
*/
TypeManager getTypeManager();

/**
* Returns a system service such as a type mapper extension services may require.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dataportabilityproject.spi.cloud.types;
package org.dataportabilityproject.api.launcher;

import com.fasterxml.jackson.databind.ObjectMapper;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dataportabilityproject.cloud.types;
package org.dataportabilityproject.launcher.impl;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;

/** Jackson-based type manager that supports polymorphic type handling. */
public class TypeManagerImpl implements TypeManager {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import org.dataportabilityproject.gateway.ApiSettings;
import org.dataportabilityproject.security.SymmetricKeyGenerator;
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;

/** {@link HttpHandler} that handles starting a copy job. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.JobAuthorization;
import org.dataportabilityproject.spi.cloud.types.PortabilityJob;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthDataGenerator;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry.AuthMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import org.dataportabilityproject.gateway.ApiSettings;
import org.dataportabilityproject.security.SymmetricKeyGenerator;
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;

/** {@link HttpHandler} that handles starting a import job. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.dataportabilityproject.gateway.action.listdatatypes.ListDataTypesActionRequest;
import org.dataportabilityproject.gateway.action.listdatatypes.ListDataTypesActionResponse;
import org.dataportabilityproject.gateway.reference.ReferenceApiUtils.HttpMethods;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.types.client.transfer.ListDataTypesResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.dataportabilityproject.gateway.action.listservices.ListServicesActionRequest;
import org.dataportabilityproject.gateway.action.listservices.ListServicesActionResponse;
import org.dataportabilityproject.gateway.reference.ReferenceApiUtils.HttpMethods;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.types.client.transfer.ListServicesResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
import org.dataportabilityproject.security.SymmetricKeyGenerator;
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.PortabilityJob;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthDataGenerator;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry.AuthMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.dataportabilityproject.security.SymmetricKeyGenerator;
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.PortabilityJob;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthDataGenerator;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry.AuthMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.JobAuthorization;
import org.dataportabilityproject.spi.cloud.types.PortabilityJob;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthDataGenerator;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry.AuthMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import org.dataportabilityproject.security.SymmetricKeyGenerator;
import org.dataportabilityproject.spi.cloud.storage.JobStore;
import org.dataportabilityproject.spi.cloud.types.PortabilityJob;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.spi.gateway.auth.AuthDataGenerator;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry;
import org.dataportabilityproject.spi.gateway.auth.AuthServiceProviderRegistry.AuthMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.dataportabilityproject.gateway.action.startjob.StartJobActionRequest;
import org.dataportabilityproject.gateway.action.startjob.StartJobActionResponse;
import org.dataportabilityproject.gateway.reference.ReferenceApiUtils.HttpMethods;
import org.dataportabilityproject.spi.cloud.types.TypeManager;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.types.client.transfer.DataTransferResponse;
import org.dataportabilityproject.types.client.transfer.DataTransferResponse.Status;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/

dependencies {
compile("com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}")
compile project(':portability-spi-cloud')

compile project(':portability-api-launcher')

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright 2018 The Data Transfer Project Authors.
*
* 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
*
* https://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.
* Create a new temp file (e.g. Test.java) in Intellij.
* Inside the file, enter Alt-Insert -> Copyright
* It should prompt you to select the new Copyright profile
* Test out another new test file - the copyright should be imported automatically (note: it might be collapsed so not immediately obvious)
*/
package org.dataportabilityproject.spi.service.extension;

import org.dataportabilityproject.api.launcher.AbstractExtension;

/**
* An extension that provides core runtime services used by other extensions.
*
* <p>Service extensions are guaranteeed to be loaded prior to other extension types.
*/
public interface ServiceExtension extends AbstractExtension {}
1 change: 1 addition & 0 deletions portability-worker/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ dependencies {
// with ServiceLoading?
compile project(':extensions:cloud:portability-cloud-google')

compile project(':portability-spi-service')
compile project(':portability-spi-cloud')
compile project(':portability-spi-transfer')
compile project(':extensions:data-transfer:portability-data-transfer-microsoft')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import com.google.common.collect.ImmutableClassToInstanceMap;
import org.dataportabilityproject.api.launcher.ExtensionContext;
import org.dataportabilityproject.api.launcher.Logger;
import org.dataportabilityproject.api.launcher.TypeManager;
import org.dataportabilityproject.launcher.impl.TypeManagerImpl;

/**
* {@link ExtensionContext} used by the worker.
Expand All @@ -31,14 +33,25 @@ final class WorkerExtensionContext implements ExtensionContext {
private static final ImmutableClassToInstanceMap<Object> SERVICE_MAP =
new ImmutableClassToInstanceMap.Builder<>()
.put(HttpTransport.class, new NetHttpTransport())
.put(JsonFactory.class, new JacksonFactory())
.build();

private final TypeManager typeManager;

public WorkerExtensionContext() {
// TODO init with types
this.typeManager = new TypeManagerImpl();
}

@Override
public Logger getLogger() {
return null;
}

@Override
public TypeManager getTypeManager() {
return typeManager;
}

@Override
public <T> T getService(Class<T> type) {
// returns null if no instance
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
import org.dataportabilityproject.api.launcher.ExtensionContext;
import org.dataportabilityproject.cloud.google.GoogleCloudExtension;
import org.dataportabilityproject.spi.cloud.extension.CloudExtension;
import org.dataportabilityproject.spi.service.extension.ServiceExtension;

import java.util.ServiceLoader;

/**
* Main class to bootstrap a portability worker that will operate on a single job whose state is
Expand All @@ -34,6 +37,11 @@ public static void main(String[] args) {

ExtensionContext context = new WorkerExtensionContext();

ServiceLoader.load(ServiceExtension.class)
.iterator()
.forEachRemaining(
serviceExtension -> serviceExtension.initialize(context));

CloudExtension cloudExtension = getCloudExtension();
cloudExtension.initialize(context);

Expand All @@ -48,10 +56,11 @@ public static void main(String[] args) {
private static CloudExtension getCloudExtension() {
ImmutableList.Builder<CloudExtension> extensionsBuilder = ImmutableList.builder();
// TODO(seehamrun): Service load cloud extension and remove hardcoded GoogleCloudExtension
//ServiceLoader.load(CloudExtension.class).iterator().forEachRemaining(extensionsBuilder::add);
// ServiceLoader.load(CloudExtension.class).iterator().forEachRemaining(extensionsBuilder::add);
extensionsBuilder.add(new GoogleCloudExtension());
ImmutableList<CloudExtension> extensions = extensionsBuilder.build();
Preconditions.checkState(extensions.size() == 1,
Preconditions.checkState(
extensions.size() == 1,
"Exactly one CloudExtension is required, but found " + extensions.size());
return extensions.get(0);
}
Expand Down
4 changes: 2 additions & 2 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ include ':portability-types-client', ':portability-types-transfer'

include ':portability-api-launcher'

include ':portability-spi-gateway', ':portability-spi-cloud', ':portability-spi-transfer'
include ':portability-spi-service',':portability-spi-gateway', ':portability-spi-cloud', ':portability-spi-transfer'

include ':portability-gateway', ':portability-cloud', ':portability-transfer'
include ':portability-gateway', ':portability-transfer'

include ':extensions:cloud:portability-cloud-local', ':extensions:cloud:portability-cloud-google', ':extensions:cloud:portability-cloud-microsoft'

Expand Down

0 comments on commit 5057ce0

Please sign in to comment.