All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.eureka2.registry.InstanceInfoField Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014 Netflix, Inc.
 *
 * 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.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.netflix.eureka2.registry;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

/**
 * @author David Liu
 */
public class InstanceInfoField {

    public enum Name {
        // NO id or version
        AppGroup,
        App,
        Asg,
        VipAddress,
        SecureVipAddress,
        Ports,
        Status,
        HomePageUrl,
        StatusPageUrl,
        HealthCheckUrls,
        MetaData,
        DataCenterInfo;

        // Since enum values are capitalized, and field names start with lowercase letter,
        // for case of comparison we comper lowercased names.
        private static final Map nameStrVsName = new HashMap();

        static {
            updateNames();
        }

        private static void updateNames() {
            for (Name name : values()) {
                nameStrVsName.put(name.name(), name);
            }
        }

        public static Name forName(String name) {
            return nameStrVsName.get(name);
        }
    }

    // ==================================================================
    public static final InstanceInfoField APPLICATION_GROUP
            = new InstanceInfoField(Name.AppGroup, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withAppGroup(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getAppGroup();
        }
    });

    // ==================================================================
    public static final InstanceInfoField APPLICATION
            = new InstanceInfoField(Name.App, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withApp(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getApp();
        }
    });

    // ==================================================================
    public static final InstanceInfoField ASG
            = new InstanceInfoField(Name.Asg, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withAsg(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getAsg();
        }
    });

    // ==================================================================
    public static final InstanceInfoField VIP_ADDRESS
            = new InstanceInfoField(Name.VipAddress, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withVipAddress(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getVipAddress();
        }
    });

    // ==================================================================
    public static final InstanceInfoField SECURE_VIP_ADDRESS
            = new InstanceInfoField(Name.SecureVipAddress, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withSecureVipAddress(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getSecureVipAddress();
        }
    });

    // ==================================================================
    public static final InstanceInfoField> PORTS
            = new InstanceInfoField>(Name.Ports, new Accessor>() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, HashSet value) {
            return builder.withPorts(value);
        }

        @Override
        public HashSet getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getPorts();
        }
    });

    // ==================================================================
    public static final InstanceInfoField STATUS
            = new InstanceInfoField(Name.Status, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, InstanceInfo.Status value) {
            return builder.withStatus(value);
        }

        @Override
        public InstanceInfo.Status getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getStatus();
        }
    });

    // ==================================================================
    public static final InstanceInfoField HOMEPAGE_URL
            = new InstanceInfoField(Name.HomePageUrl, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withHomePageUrl(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getHomePageUrl();
        }
    });

    // ==================================================================
    public static final InstanceInfoField STATUS_PAGE_URL
            = new InstanceInfoField(Name.StatusPageUrl, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, String value) {
            return builder.withStatusPageUrl(value);
        }

        @Override
        public String getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getStatusPageUrl();
        }
    });

    // ==================================================================
    public static final InstanceInfoField> HEALTHCHECK_URLS
            = new InstanceInfoField>(Name.HealthCheckUrls, new Accessor>() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, HashSet value) {
            return builder.withHealthCheckUrls(value);
        }

        @Override
        public HashSet getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getHealthCheckUrls();
        }
    });

    // ==================================================================
    public static final InstanceInfoField> META_DATA
            = new InstanceInfoField>(Name.MetaData, new Accessor>() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, Map value) {
            return builder.withMetaData(value);
        }

        @Override
        public Map getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getMetaData();
        }
    });

    // ==================================================================
    public static final InstanceInfoField DATA_CENTER_INFO
            = new InstanceInfoField(Name.DataCenterInfo, new Accessor() {
        @Override
        public InstanceInfo.Builder update(InstanceInfo.Builder builder, DataCenterInfo value) {
            return builder.withDataCenterInfo(value);
        }

        @Override
        public DataCenterInfo getValue(InstanceInfo instanceInfo) {
            return instanceInfo.getDataCenterInfo();
        }
    });

    private final Name fieldName;
    private final Accessor accessor;
    private final Type valueType;

    private InstanceInfoField(Name fieldName, Accessor accessor) {
        this.fieldName = fieldName;
        this.accessor = accessor;

        //TODO: remove once/if we no longer need avro
        valueType = ((ParameterizedType) accessor.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0];
    }

    InstanceInfo.Builder update(InstanceInfo.Builder builder, T value) {
        accessor.update(builder, value);
        return builder;
    }

    public Name getFieldName() {
        return fieldName;
    }

    public Type getValueType() {
        return valueType;
    }

    public T getValue(InstanceInfo instanceInfo) {
        return accessor.getValue(instanceInfo);
    }

    @SuppressWarnings("unchecked")
    public static  InstanceInfoField forName(Name name) {
        switch (name) {
            case AppGroup:
                return (InstanceInfoField) APPLICATION_GROUP;
            case App:
                return (InstanceInfoField) APPLICATION;
            case Asg:
                return (InstanceInfoField) ASG;
            case VipAddress:
                return (InstanceInfoField) VIP_ADDRESS;
            case SecureVipAddress:
                return (InstanceInfoField) SECURE_VIP_ADDRESS;
            case Ports:
                return (InstanceInfoField) PORTS;
            case Status:
                return (InstanceInfoField) STATUS;
            case HomePageUrl:
                return (InstanceInfoField) HOMEPAGE_URL;
            case StatusPageUrl:
                return (InstanceInfoField) STATUS_PAGE_URL;
            case HealthCheckUrls:
                return (InstanceInfoField) HEALTHCHECK_URLS;
            case MetaData:
                return (InstanceInfoField) META_DATA;
            case DataCenterInfo:
                return (InstanceInfoField) DATA_CENTER_INFO;
        }
        throw new IllegalArgumentException("Unhandled name: " + name);
    }

    private interface Accessor {
        InstanceInfo.Builder update(InstanceInfo.Builder builder, T value);

        T getValue(InstanceInfo instanceInfo);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy