blob: a6247f96d58a49924f457d3a6b466941b35b123a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ote.message;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
/**
* @author Ken J. Aguilar
*/
public class ElementPath implements Serializable {
private static final long serialVersionUID = 4928814252711879251L;
private final List<Object> elementPath;
private String elementPathAsString = null;
private final boolean isHeaderElement;
public static ElementPath decode(String encodedPath) {
List<Object> path = new LinkedList<>();
String[] components = encodedPath.split("\\+");
for (String component : components) {
try {
Integer i = Integer.parseInt(component);
path.add(i);
} catch (NumberFormatException e) {
path.add(component);
}
}
return new ElementPath(path);
}
public String getMessageClass() {
return elementPath.get(0).toString();
}
public boolean isHeaderElement() {
return isHeaderElement;
}
public String getElementName() {
return elementPath.get(elementPath.size() - 1).toString();
}
public ElementPath(List<Object> path) {
elementPath = path;
String string = (String) path.get(1);
isHeaderElement = string.startsWith("HEADER(");
}
public List<Object> getList() {
return elementPath;
}
@Override
public String toString() {
if (elementPathAsString == null) {
StringBuilder sb = new StringBuilder(64);
if (isHeaderElement) {
String string = (String) elementPath.get(1);
String headerName = string.substring(string.indexOf('(') + 1, string.indexOf(')'));
sb.append(headerName).append("-HEADER").append('.').append(elementPath.get(2).toString());
} else {
for (int i = 1; i < elementPath.size(); i++) {
Object obj = elementPath.get(i);
if (obj instanceof Integer) {
sb.delete(sb.length() - 1, sb.length());
sb.append('[');
sb.append(((Integer) obj).intValue());
sb.append(']');
} else {
sb.append(obj.toString());
}
sb.append('.');
}
sb.deleteCharAt(sb.length() - 1);
}
elementPathAsString = sb.toString();
}
return elementPathAsString;
}
public String encode() {
StringBuilder buffer = new StringBuilder(256);
for (Object component : elementPath) {
buffer.append(component.toString());
buffer.append('+');
}
buffer.deleteCharAt(buffer.length() - 1);
return buffer.toString();
}
}