package org.axdt.avm.naming; import java.io.Serializable; import java.util.List; import org.eclipse.xtext.naming.QualifiedName; /** * Serializeable version of QualifiedName * incomplete implementation * @author mb0 */ public class AvmQualifiedName extends QualifiedName implements Serializable { public static final AvmQualifiedName EMPTY = new AvmQualifiedName(""); private static final long serialVersionUID = 1L; public static AvmQualifiedName create(String... segments) { if (segments != null) { for (String segment : segments) if (segment == null) { throw new IllegalArgumentException("Segment cannot be null"); } } return segments != null ? new AvmQualifiedName(segments.clone()) : EMPTY; } public static AvmQualifiedName ensure(QualifiedName qualifiedName) { if (qualifiedName == null) return null; if (qualifiedName instanceof AvmQualifiedName) return (AvmQualifiedName) qualifiedName; List<String> list = qualifiedName.getSegments(); return new AvmQualifiedName(list.toArray(new String[list.size()])); } public AvmQualifiedName(String... segments) { super(segments); } public AvmQualifiedName append(String segment) { int count = getSegmentCount(); String[] newSegments = getSegments().toArray(new String[count + 1]); newSegments[count] = segment; return new AvmQualifiedName(newSegments); } public AvmQualifiedName skipLast(int skipCount) { int count = getSegmentCount(); if (skipCount == count) { return EMPTY; } if (skipCount > count || skipCount < 0) { throw new IllegalArgumentException("Cannot skip " + skipCount + " fragments from QualifiedName with " + count + " segments"); } List<String> list = getSegments().subList(0, count-skipCount); return new AvmQualifiedName(list.toArray(new String[list.size()])); } }