blob: 27b3d03af4b935039a583dacd651cf866b8a523d [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
*
* 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 org.onosproject.incubator.net.l2monitoring.cfm.identifier;
import org.onlab.util.Identifier;
/**
* ICC-based MEG ID Format, thirteen octet field.
*
* It consists of two subfields: the ITU Carrier Code (ICC) followed by a unique
* MEG ID code (UMC). The ITU Carrier Code consists of 1-6
* left-justified characters, alphabetic, or leading alphabetic
* with trailing numeric. The UMC code immediately follows the ICC
* and shall consist of 7-12 characters, with trailing NULLs,
* completing the 13-character MEG ID Value.
* reference
* [Y.1731] Annex A;
*/
public final class MaIdIccY1731 extends Identifier<String> implements MaIdShort {
private static final String ICC_PATTERN = "[a-z|A-Z|0-9]{1,6}";
private static final String UMC_PATTERN = "[a-z|A-Z|0-9]{7,12}";
private int iccLength = 0;
protected MaIdIccY1731(String icc, String umc) {
super(icc + umc);
iccLength = icc.length();
}
@Override
public String toString() {
return identifier.substring(0, iccLength) + ":" + identifier.substring(iccLength);
}
@Override
public String maName() {
return identifier;
}
@Override
public int getNameLength() {
return identifier.length();
}
@Override
public MaIdType nameType() {
return MaIdType.ICCY1731;
}
public static MaIdShort asMaId(String icc, String umc) {
if (icc == null || !icc.matches(ICC_PATTERN)) {
throw new IllegalArgumentException("ICC part must follow pattern "
+ ICC_PATTERN + " Rejecting: " + icc);
} else if (umc == null || !umc.matches(UMC_PATTERN)) {
throw new IllegalArgumentException("UMC part must follow pattern "
+ UMC_PATTERN + " Rejecting: " + umc);
}
return new MaIdIccY1731(icc, umc);
}
public static MaIdShort asMaId(String iccAndUmc) {
String[] nameParts = iccAndUmc.split(":");
if (nameParts.length != 2) {
throw new IllegalArgumentException("Expecting format like ICC:UMC");
}
return asMaId(nameParts[0], nameParts[1]);
}
}