org.jclouds.azurecompute.compute.functions.internal.OperatingSystems.java Source code

Java tutorial

Introduction

Here is the source code for org.jclouds.azurecompute.compute.functions.internal.OperatingSystems.java

Source

/*
 * 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.jclouds.azurecompute.compute.functions.internal;

import org.jclouds.azurecompute.domain.OSImage;
import org.jclouds.compute.domain.OsFamily;

import com.google.common.base.Function;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;

public class OperatingSystems {

    protected static final String CENTOS = "CentOS";

    protected static final String SUSE = "SUSE";

    protected static final String OPENSUSE = "openSUSE";

    protected static final String UBUNTU = "Ubuntu";

    protected static final String WINDOWS = "Windows";

    private static final String MICROSOFT = "Microsoft";

    public static final String WINDOWS_SERVER = "Windows Server";

    public static final String MICROSOFT_SQL_SERVER = "Microsoft SQL Server";

    public static Function<String, OsFamily> osFamily() {
        return new Function<String, OsFamily>() {
            @Override
            public OsFamily apply(final String label) {
                if (label != null) {
                    if (label.contains(CENTOS)) {
                        return OsFamily.CENTOS;
                    } else if (label.contains(SUSE)) {
                        return OsFamily.SUSE;
                    } else if (label.contains(UBUNTU)) {
                        return OsFamily.UBUNTU;
                    } else if (label.contains(WINDOWS)) {
                        return OsFamily.WINDOWS;
                    }
                }
                return OsFamily.UNRECOGNIZED;
            }
        };
    }

    public static Function<OSImage, String> version() {
        return new Function<OSImage, String>() {
            @Override
            public String apply(final OSImage osImage) {
                if (osImage.category().matches("Canonical|OpenLogic")) {
                    return Iterables.get(Splitter.on(" ").split(osImage.label()), 2);
                } else if (osImage.category().matches(SUSE)) {
                    if (osImage.label().startsWith(OPENSUSE)) {
                        return osImage.label().substring(OPENSUSE.length() + 1);
                    }
                    if (osImage.label().startsWith(SUSE)) {
                        return Iterables.get(Splitter.on("-").split(osImage.name()), 4);
                    }
                } else if (osImage.category().matches(MICROSOFT)) {
                    if (osImage.label().startsWith(WINDOWS_SERVER)) {
                        return osImage.label().substring(WINDOWS_SERVER.length() + 1);
                    }
                    if (osImage.label().startsWith(MICROSOFT_SQL_SERVER)) {
                        return osImage.label().substring(MICROSOFT_SQL_SERVER.length() + 1);
                    }
                } else if (osImage.category().matches("RightScale with Linux|Public ")) {
                    final Iterable<String> splittedLabel = Splitter.on("-").split(osImage.label());
                    if (Iterables.size(splittedLabel) > 2) {
                        return Iterables.get(splittedLabel, 2);
                    }
                }
                return null;
            }
        };
    }

}