/* * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.common.id; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EStructuralFeature; import java.io.IOException; /** * Represents a {@link CDOID} typed reference from one object to another object. * * @author Eike Stepper * @since 4.0 * @noextend This interface is not intended to be extended by clients. * @noinstantiate This class is not intended to be instantiated by clients. * @apiviz.has {@link CDOID} oneway - - source * @apiviz.has {@link CDOID} oneway - - target */ public class CDOIDReference implements CDOReference<CDOID> { private CDOID targetID; private CDOID sourceID; private EStructuralFeature sourceFeature; private int sourceIndex; public CDOIDReference(CDOID targetID, CDOID sourceID, EStructuralFeature sourceFeature, int sourceIndex) { this.targetID = targetID; this.sourceID = sourceID; this.sourceFeature = sourceFeature; this.sourceIndex = sourceIndex; } public CDOIDReference(CDODataInput in) throws IOException { targetID = in.readCDOID(); sourceID = in.readCDOID(); EClass eClass = (EClass)in.readCDOClassifierRefAndResolve(); String featureName = in.readString(); sourceFeature = eClass.getEStructuralFeature(featureName); sourceIndex = in.readInt(); } public void write(CDODataOutput out) throws IOException { out.writeCDOID(targetID); out.writeCDOID(sourceID); out.writeCDOClassifierRef(sourceFeature.getEContainingClass()); out.writeString(sourceFeature.getName()); out.writeInt(sourceIndex); } public CDOID getTargetObject() { return targetID; } public CDOID getSourceObject() { return sourceID; } public EStructuralFeature getSourceFeature() { return sourceFeature; } public int getSourceIndex() { return sourceIndex; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(sourceID); builder.append("."); builder.append(sourceFeature.getName()); if (sourceIndex != NO_INDEX) { builder.append("["); builder.append(sourceIndex); builder.append("]"); } builder.append(" --> "); builder.append(targetID); return builder.toString(); } }