/******************************************************************************* * Copyright (c) 2011, 2014 Wind River Systems, Inc. and others. 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.runtime.stepper; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId; /** * Full qualified id implementation. */ public class FullQualifiedId implements IFullQualifiedId { // The list of id's private final List<IdData> ids = new ArrayList<IdData>(); // Inner class describing the data of an id. private class IdData { public String type = null; public String id = null; public String secondaryId = null; /** * Constructor. * * @param type The id type. * @param id The id. Must not be <code>null</code>. * @param secondaryId The secondary id. */ public IdData(String type, String id, String secondaryId) { Assert.isNotNull(id); this.type = type; this.id = id; this.secondaryId = secondaryId; } /** * Creates a string representation of the id and the given children. */ public String toString(String children) { String typeStr = type != null && type.trim().length() > 0 ? type.trim() : "ID"; //$NON-NLS-1$ StringBuilder toString = new StringBuilder(); toString.append('<'); toString.append(typeStr); toString.append(" id=\""); //$NON-NLS-1$ toString.append(id.trim()); toString.append('"'); if (secondaryId != null && secondaryId.trim().length() > 0) { toString.append(" secondaryId=\""); //$NON-NLS-1$ toString.append(secondaryId.trim()); toString.append('"'); } toString.append("/>"); //$NON-NLS-1$ if (children != null && children.trim().length() > 0) { toString.append(children); } return toString.toString(); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return toString(null); } } /** * Constructor. */ public FullQualifiedId(String type, String id, String secondaryId) { ids.add(new IdData(type, id, secondaryId)); } /* * Private constructor for child and parent creation. * To create the parent, id has to be null! */ private FullQualifiedId(IdData[] parentData, String type, String id, String secondaryId) { for (IdData parent : parentData) { ids.add(new IdData(parent.type, parent.id, parent.secondaryId)); } if (id != null) { ids.add(new IdData(type, id, secondaryId)); } } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId#createChildId(java.lang.String, java.lang.String, java.lang.String) */ @Override public IFullQualifiedId createChildId(String type, String id, String secondaryId) { return new FullQualifiedId(ids.toArray(new IdData[ids.size()]), type, id, secondaryId); } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId#getType() */ @Override public String getType() { return getIdData().type; } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId#getId() */ @Override public String getId() { return getIdData().id; } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId#getSecondaryId() */ @Override public String getSecondaryId() { return getIdData().secondaryId; } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId#getParentId() */ @Override public IFullQualifiedId getParentId() { if (ids.size() > 1) { return new FullQualifiedId(ids.subList(0, ids.size() - 1) .toArray(new IdData[ids.size() - 1]), null, null, null); } return null; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { Assert.isTrue(!ids.isEmpty()); String toString = getIdData().toString(); if (ids.size() > 1) { for (int i = ids.size() - 1; i > 0; i--) { toString = ids.get(i - 1).toString(toString); } } return toString; } private IdData getIdData() { Assert.isTrue(!ids.isEmpty()); return ids.get(ids.size() - 1); } }