| /* |
| * Copyright (c) 2011, 2012 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(); |
| } |
| } |