You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by ab...@apache.org on 2017/07/29 08:21:02 UTC

incubator-gobblin git commit: Add com.linkedin.gobblin to alias resolver

Repository: incubator-gobblin
Updated Branches:
  refs/heads/master 85d724c64 -> 26ab1d3f6


Add com.linkedin.gobblin to alias resolver

Closes #1516 from pcadabam/topology


Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/26ab1d3f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/26ab1d3f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/26ab1d3f

Branch: refs/heads/master
Commit: 26ab1d3f6fdd947aa2f4720e1c14ffe48b1113d2
Parents: 85d724c
Author: Pradhan Cadabam <pc...@linkedin.com>
Authored: Sat Jul 29 01:20:57 2017 -0700
Committer: Abhishek Tiwari <ab...@gmail.com>
Committed: Sat Jul 29 01:20:57 2017 -0700

----------------------------------------------------------------------
 .../src/main/java/gobblin/annotation/Alias.java |  4 +++
 .../java/gobblin/util/ClassAliasResolver.java   | 10 +++++---
 .../java/com/linkedin/gobblin/TestAlias.java    | 27 ++++++++++++++++++++
 .../gobblin/util/ClassAliasResolverTest.java    | 11 ++++++++
 4 files changed, 48 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/26ab1d3f/gobblin-api/src/main/java/gobblin/annotation/Alias.java
----------------------------------------------------------------------
diff --git a/gobblin-api/src/main/java/gobblin/annotation/Alias.java b/gobblin-api/src/main/java/gobblin/annotation/Alias.java
index c73b48d..92e4d2f 100644
--- a/gobblin-api/src/main/java/gobblin/annotation/Alias.java
+++ b/gobblin-api/src/main/java/gobblin/annotation/Alias.java
@@ -22,8 +22,12 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import gobblin.util.ClassAliasResolver;
+
+
 /**
  * Denotes that a class has an alias.
+ * Using {@link ClassAliasResolver#resolve(String)}, an alias can be resolved to cannonical name of the annotated class
  */
 @Documented @Retention(value=RetentionPolicy.RUNTIME) @Target(value=ElementType.TYPE)
 public @interface Alias {

http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/26ab1d3f/gobblin-api/src/main/java/gobblin/util/ClassAliasResolver.java
----------------------------------------------------------------------
diff --git a/gobblin-api/src/main/java/gobblin/util/ClassAliasResolver.java b/gobblin-api/src/main/java/gobblin/util/ClassAliasResolver.java
index effda57..d76d32d 100644
--- a/gobblin-api/src/main/java/gobblin/util/ClassAliasResolver.java
+++ b/gobblin-api/src/main/java/gobblin/util/ClassAliasResolver.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import lombok.extern.slf4j.Slf4j;
 
 import org.reflections.Reflections;
+import org.reflections.util.ConfigurationBuilder;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -43,16 +44,17 @@ import gobblin.annotation.Alias;
  *
  * <br>
  * <b>
- *   Note: For the moment this class will only look for classes with gobblin prefix, as scanning the entire classpath is
- *   very expensive.
+ *   Note: For the moment this class will only look for classes with gobblin/com.linkedin.gobblin prefix, as scanning
+ *   the entire classpath is very expensive.
  * </b>
  */
 @Slf4j
 public class ClassAliasResolver<T> {
 
-  // Scan all packages in the classpath with prefix gobblin when class is loaded.
+  // Scan all packages in the classpath with prefix gobblin, com.linkedin.gobblin when class is loaded.
   // Since scan is expensive we do it only once when class is loaded.
-  private static final Reflections REFLECTIONS = new Reflections("gobblin");
+  private static final Reflections REFLECTIONS = new Reflections(new ConfigurationBuilder().forPackages("gobblin",
+      "com.linkedin.gobblin"));
 
   Map<String, Class<? extends T>> aliasToClassCache;
   private final List<Alias> aliasObjects;

http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/26ab1d3f/gobblin-api/src/test/java/com/linkedin/gobblin/TestAlias.java
----------------------------------------------------------------------
diff --git a/gobblin-api/src/test/java/com/linkedin/gobblin/TestAlias.java b/gobblin-api/src/test/java/com/linkedin/gobblin/TestAlias.java
new file mode 100644
index 0000000..4e54d2e
--- /dev/null
+++ b/gobblin-api/src/test/java/com/linkedin/gobblin/TestAlias.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2014-2016 LinkedIn Corp. All rights reserved.
+ *
+ * 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.
+ */
+package com.linkedin.gobblin;
+
+import gobblin.annotation.Alias;
+
+/**
+ * Dummy test class to test alias resolution for com.linkedin.gobblin package
+ */
+public class TestAlias {
+  @Alias(value = "com.alias")
+  public static class DummyAliasCom implements IDummyAliasCom {
+  }
+
+  public static interface IDummyAliasCom {
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/26ab1d3f/gobblin-api/src/test/java/gobblin/util/ClassAliasResolverTest.java
----------------------------------------------------------------------
diff --git a/gobblin-api/src/test/java/gobblin/util/ClassAliasResolverTest.java b/gobblin-api/src/test/java/gobblin/util/ClassAliasResolverTest.java
index 12328a0..d5e0c59 100644
--- a/gobblin-api/src/test/java/gobblin/util/ClassAliasResolverTest.java
+++ b/gobblin-api/src/test/java/gobblin/util/ClassAliasResolverTest.java
@@ -19,6 +19,9 @@ package gobblin.util;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.linkedin.gobblin.TestAlias.DummyAliasCom;
+import com.linkedin.gobblin.TestAlias.IDummyAliasCom;
+
 import gobblin.annotation.Alias;
 
 @Test(groups = { "gobblin.api.util"})
@@ -33,6 +36,14 @@ public class ClassAliasResolverTest {
   }
 
   @Test
+  public void testResolveComGobblinPackage() {
+    ClassAliasResolver<IDummyAliasCom> resolver = new ClassAliasResolver<>(IDummyAliasCom.class);
+    Assert.assertEquals(resolver.resolve("com.alias"), DummyAliasCom.class.getName());
+    // Resolve returns the passed string if alias mapping does not exist
+    Assert.assertEquals(resolver.resolve("abcd"), "abcd");
+  }
+
+  @Test
   public void testResolveClass() throws Exception {
     ClassAliasResolver<IDummyAliasTest> resolver = new ClassAliasResolver<>(IDummyAliasTest.class);