blob: b30217d7dad38f45ab7a4d81eaa5dd5da88ced90 [file] [log] [blame]
// 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();
}