| // 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 com.cloud.network; | |
| import com.cloud.exception.CloudException; | |
| import com.cloud.utils.Pair; | |
| import org.apache.cloudstack.api.Identity; | |
| import org.apache.cloudstack.api.InternalIdentity; | |
| import org.apache.commons.lang3.StringUtils; | |
| import java.util.HashSet; | |
| import java.util.List; | |
| import java.util.Objects; | |
| import java.util.Set; | |
| /** | |
| * | |
| */ | |
| public interface PhysicalNetwork extends Identity, InternalIdentity { | |
| public enum State { | |
| Disabled, Enabled; | |
| } | |
| public class IsolationMethod { | |
| protected static final String UNKNOWN_PROVIDER = "Unknown"; | |
| static Set<IsolationMethod> registeredIsolationMethods = new HashSet<>(); | |
| String methodPrefix; | |
| String provider; | |
| public IsolationMethod(String prfx) { | |
| this(prfx, UNKNOWN_PROVIDER); | |
| } | |
| public IsolationMethod(String prfx, String prvdr) { | |
| methodPrefix = prfx; | |
| provider = StringUtils.isNotBlank(prvdr)? prvdr : UNKNOWN_PROVIDER; | |
| registeredIsolationMethods.add(this); | |
| } | |
| /** | |
| * gets a IsolationMethod object that defines this prefix and if any it returns the first one found that has a known provider. If none has a known provider | |
| * it will return the one with the unknown provider. if none is found it return null. | |
| * | |
| * @param prfx | |
| * @return | |
| */ | |
| public static IsolationMethod getIsolationMethod(String prfx) throws IsolationMethodNotRegistered { | |
| IsolationMethod rc = null; | |
| for (IsolationMethod method: registeredIsolationMethods) { | |
| if (method.methodPrefix.equals(prfx)) { | |
| rc = method; | |
| if(! rc.getProvider().equals(UNKNOWN_PROVIDER)) { | |
| break; | |
| } | |
| } | |
| } | |
| if (rc == null) { | |
| throw new IsolationMethodNotRegistered("No registration of prefix '" + prfx + "' found."); | |
| } | |
| return rc; | |
| } | |
| public static IsolationMethod getIsolationMethod(String prfx, String provider) throws IsolationMethodNotRegistered { | |
| for (IsolationMethod method: registeredIsolationMethods) { | |
| if (method.methodPrefix.equals(prfx) && method.provider.equals(provider)) { | |
| return method; | |
| } | |
| } | |
| throw new IsolationMethodNotRegistered("No registration of prefix '" + prfx + "' for provider '" + provider + "' found."); | |
| } | |
| static class IsolationMethodNotRegistered extends CloudException { | |
| IsolationMethodNotRegistered (String message) { | |
| super(message); | |
| } | |
| } | |
| public String getMethodPrefix() { | |
| return methodPrefix; | |
| } | |
| public String getProvider() { | |
| return provider; | |
| } | |
| @Override | |
| public boolean equals(Object o) { | |
| if (this == o) | |
| return true; | |
| if (o == null || getClass() != o.getClass()) | |
| return false; | |
| IsolationMethod that = (IsolationMethod)o; | |
| return Objects.equals(methodPrefix, that.methodPrefix) && Objects.equals(provider, that.provider); | |
| } | |
| @Override | |
| public int hashCode() { | |
| return Objects.hash(methodPrefix, provider); | |
| } | |
| @Override | |
| public String toString() { | |
| return methodPrefix; | |
| } | |
| public static boolean remove(String prfx, String prvdr) { | |
| prvdr = StringUtils.isNotBlank(prvdr)? prvdr : UNKNOWN_PROVIDER; | |
| try { | |
| return remove(getIsolationMethod(prfx, prvdr)); | |
| } catch (IsolationMethodNotRegistered isolationMethodNotRegistered) { | |
| return false; | |
| } | |
| } | |
| public static boolean remove(IsolationMethod method) { | |
| return registeredIsolationMethods.remove(method); | |
| } | |
| } | |
| public enum BroadcastDomainRange { | |
| POD, ZONE; | |
| } | |
| BroadcastDomainRange getBroadcastDomainRange(); | |
| // TrafficType getTrafficType(); | |
| long getDataCenterId(); | |
| State getState(); | |
| List<String> getTags(); | |
| List<String> getIsolationMethods(); | |
| Long getDomainId(); | |
| List<Pair<Integer, Integer>> getVnet(); | |
| String getVnetString(); | |
| String getSpeed(); | |
| String getName(); | |
| } |