Repository: jclouds-labs
Updated Branches:
  refs/heads/2.0.x 65f64205b -> a5a4f30b1


Inspect all known OSFamilies


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/84f31cb8
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/84f31cb8
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/84f31cb8

Branch: refs/heads/2.0.x
Commit: 84f31cb8d2ac3929ff011a8513b857d9d6157202
Parents: 65f6420
Author: Ignasi Barrera <[email protected]>
Authored: Fri Jan 27 14:20:18 2017 +0100
Committer: Ignasi Barrera <[email protected]>
Committed: Mon Jan 30 15:30:48 2017 +0100

----------------------------------------------------------------------
 .../arm/compute/functions/VMImageToImage.java   | 66 +++++++++++---------
 1 file changed, 35 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/84f31cb8/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
index 394b167..38c0769 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
@@ -17,6 +17,8 @@
 package org.jclouds.azurecompute.arm.compute.functions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.tryFind;
+import static java.util.Arrays.asList;
 
 import java.util.Map;
 import java.util.Set;
@@ -34,6 +36,8 @@ import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.predicates.LocationPredicates;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
 import com.google.common.base.Supplier;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
@@ -41,18 +45,12 @@ import com.google.inject.Inject;
 
 public class VMImageToImage implements Function<VMImage, Image> {
 
-   public static final String MARKETPLACE_TAG = "marketplace";
-
-   private static final String UBUNTU = "Ubuntu";
-   private static final String WINDOWS = "Windows";
-   private static final String OPENLOGIC = "openLogic";
-   private static final String CENTOS = "CentOS";
-   private static final String COREOS = "CoreOS";
-   private static final String OPENSUSE = "openSUSE";
-   private static final String SUSE = "SUSE";
-   private static final String SLES = "SLES";
-   private static final String ORACLE_lINUX = "Oracle-Linux";
-   private static final String RHEL = "RHEL";
+   private static final Map<String, OsFamily> OTHER_OS_MAP = 
ImmutableMap.<String, OsFamily> builder()
+         .put("openlogic", OsFamily.CENTOS)
+         .put("win", OsFamily.WINDOWS)
+         .put("sles", OsFamily.SUSE)
+         .put("oracle-linux", OsFamily.OEL)
+         .build();
 
    private final Supplier<Set<? extends org.jclouds.domain.Location>> 
locations;
 
@@ -155,25 +153,8 @@ public class VMImageToImage implements Function<VMImage, 
Image> {
       return new Function<VMImage, OperatingSystem.Builder>() {
          @Override
          public OperatingSystem.Builder apply(final VMImage image) {
-            checkNotNull(image.offer(), "offer");
-            final String label = image.offer();
-
-            OsFamily family = OsFamily.UNRECOGNIZED;
-            if (label.contains(CENTOS) || label.contains(OPENLOGIC)) {
-               family = OsFamily.CENTOS;
-            } else if (label.contains(COREOS)) {
-               family = OsFamily.COREOS;
-            } else if (label.contains(SUSE) || label.contains(SLES) || 
label.contains(OPENSUSE)) {
-               family = OsFamily.SUSE;
-            } else if (label.contains(UBUNTU)) {
-               family = OsFamily.UBUNTU;
-            } else if (label.contains(WINDOWS)) {
-               family = OsFamily.WINDOWS;
-            } else if (label.contains(ORACLE_lINUX)) {
-               family = OsFamily.OEL;
-            } else if (label.contains(RHEL)) {
-               family = OsFamily.RHEL;
-            }
+            final String label = checkNotNull(image.offer(), 
"offer").toLowerCase();
+            OsFamily family = 
findInStandardFamilies(label).or(findInOtherOSMap(label)).or(OsFamily.UNRECOGNIZED);
             
             // Fallback to generic operating system type
             if (OsFamily.UNRECOGNIZED == family && image.versionProperties() 
!= null
@@ -189,4 +170,27 @@ public class VMImageToImage implements Function<VMImage, 
Image> {
          }
       };
    }
+
+   private static Optional<OsFamily> findInStandardFamilies(final String 
label) {
+      return tryFind(asList(OsFamily.values()), new Predicate<OsFamily>() {
+         @Override
+         public boolean apply(OsFamily input) {
+            return label.contains(input.value());
+         }
+      });
+   }
+
+   private static Optional<OsFamily> findInOtherOSMap(final String label) {
+      return tryFind(OTHER_OS_MAP.keySet(), new Predicate<String>() {
+         @Override
+         public boolean apply(String input) {
+            return label.contains(input);
+         }
+      }).transform(new Function<String, OsFamily>() {
+         @Override
+         public OsFamily apply(String input) {
+            return OTHER_OS_MAP.get(input);
+         }
+      });
+   }
 }

Reply via email to